This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
grok_bin_oct_hex: Add some branch predictions
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =head1 Allocation and deallocation of SVs.
134
135 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
136 sv, av, hv...) contains type and reference count information, and for
137 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
138 contains fields specific to each type.  Some types store all they need
139 in the head, so don't have a body.
140
141 In all but the most memory-paranoid configurations (ex: PURIFY), heads
142 and bodies are allocated out of arenas, which by default are
143 approximately 4K chunks of memory parcelled up into N heads or bodies.
144 Sv-bodies are allocated by their sv-type, guaranteeing size
145 consistency needed to allocate safely from arrays.
146
147 For SV-heads, the first slot in each arena is reserved, and holds a
148 link to the next arena, some flags, and a note of the number of slots.
149 Snaked through each arena chain is a linked list of free items; when
150 this becomes empty, an extra arena is allocated and divided up into N
151 items which are threaded into the free list.
152
153 SV-bodies are similar, but they use arena-sets by default, which
154 separate the link and info from the arena itself, and reclaim the 1st
155 slot in the arena.  SV-bodies are further described later.
156
157 The following global variables are associated with arenas:
158
159  PL_sv_arenaroot     pointer to list of SV arenas
160  PL_sv_root          pointer to list of free SV structures
161
162  PL_body_arenas      head of linked-list of body arenas
163  PL_body_roots[]     array of pointers to list of free bodies of svtype
164                      arrays are indexed by the svtype needed
165
166 A few special SV heads are not allocated from an arena, but are
167 instead directly created in the interpreter structure, eg PL_sv_undef.
168 The size of arenas can be changed from the default by setting
169 PERL_ARENA_SIZE appropriately at compile time.
170
171 The SV arena serves the secondary purpose of allowing still-live SVs
172 to be located and destroyed during final cleanup.
173
174 At the lowest level, the macros new_SV() and del_SV() grab and free
175 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
176 to return the SV to the free list with error checking.) new_SV() calls
177 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
178 SVs in the free list have their SvTYPE field set to all ones.
179
180 At the time of very final cleanup, sv_free_arenas() is called from
181 perl_destruct() to physically free all the arenas allocated since the
182 start of the interpreter.
183
184 The function visit() scans the SV arenas list, and calls a specified
185 function for each SV it finds which is still live - ie which has an SvTYPE
186 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
187 following functions (specified as [function that calls visit()] / [function
188 called by visit() for each SV]):
189
190     sv_report_used() / do_report_used()
191                         dump all remaining SVs (debugging aid)
192
193     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
194                       do_clean_named_io_objs(),do_curse()
195                         Attempt to free all objects pointed to by RVs,
196                         try to do the same for all objects indir-
197                         ectly referenced by typeglobs too, and
198                         then do a final sweep, cursing any
199                         objects that remain.  Called once from
200                         perl_destruct(), prior to calling sv_clean_all()
201                         below.
202
203     sv_clean_all() / do_clean_all()
204                         SvREFCNT_dec(sv) each remaining SV, possibly
205                         triggering an sv_free(). It also sets the
206                         SVf_BREAK flag on the SV to indicate that the
207                         refcnt has been artificially lowered, and thus
208                         stopping sv_free() from giving spurious warnings
209                         about SVs which unexpectedly have a refcnt
210                         of zero.  called repeatedly from perl_destruct()
211                         until there are no SVs left.
212
213 =head2 Arena allocator API Summary
214
215 Private API to rest of sv.c
216
217     new_SV(),  del_SV(),
218
219     new_XPVNV(), del_XPVGV(),
220     etc
221
222 Public API:
223
224     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
225
226 =cut
227
228  * ========================================================================= */
229
230 /*
231  * "A time to plant, and a time to uproot what was planted..."
232  */
233
234 #ifdef PERL_MEM_LOG
235 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
236             Perl_mem_log_new_sv(sv, file, line, func)
237 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
238             Perl_mem_log_del_sv(sv, file, line, func)
239 #else
240 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
241 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
242 #endif
243
244 #ifdef DEBUG_LEAKING_SCALARS
245 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
246         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
247     } STMT_END
248 #  define DEBUG_SV_SERIAL(sv)                                               \
249     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
250             PTR2UV(sv), (long)(sv)->sv_debug_serial))
251 #else
252 #  define FREE_SV_DEBUG_FILE(sv)
253 #  define DEBUG_SV_SERIAL(sv)   NOOP
254 #endif
255
256 #ifdef PERL_POISON
257 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
258 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
259 /* Whilst I'd love to do this, it seems that things like to check on
260    unreferenced scalars
261 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
262 */
263 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
264                                 PoisonNew(&SvREFCNT(sv), 1, U32)
265 #else
266 #  define SvARENA_CHAIN(sv)     SvANY(sv)
267 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
268 #  define POISON_SV_HEAD(sv)
269 #endif
270
271 /* Mark an SV head as unused, and add to free list.
272  *
273  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
274  * its refcount artificially decremented during global destruction, so
275  * there may be dangling pointers to it. The last thing we want in that
276  * case is for it to be reused. */
277
278 #define plant_SV(p) \
279     STMT_START {                                        \
280         const U32 old_flags = SvFLAGS(p);                       \
281         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
282         DEBUG_SV_SERIAL(p);                             \
283         FREE_SV_DEBUG_FILE(p);                          \
284         POISON_SV_HEAD(p);                              \
285         SvFLAGS(p) = SVTYPEMASK;                        \
286         if (!(old_flags & SVf_BREAK)) {         \
287             SvARENA_CHAIN_SET(p, PL_sv_root);   \
288             PL_sv_root = (p);                           \
289         }                                               \
290         --PL_sv_count;                                  \
291     } STMT_END
292
293 #define uproot_SV(p) \
294     STMT_START {                                        \
295         (p) = PL_sv_root;                               \
296         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
297         ++PL_sv_count;                                  \
298     } STMT_END
299
300
301 /* make some more SVs by adding another arena */
302
303 STATIC SV*
304 S_more_sv(pTHX)
305 {
306     SV* sv;
307     char *chunk;                /* must use New here to match call to */
308     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
309     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
310     uproot_SV(sv);
311     return sv;
312 }
313
314 /* new_SV(): return a new, empty SV head */
315
316 #ifdef DEBUG_LEAKING_SCALARS
317 /* provide a real function for a debugger to play with */
318 STATIC SV*
319 S_new_SV(pTHX_ const char *file, int line, const char *func)
320 {
321     SV* sv;
322
323     if (PL_sv_root)
324         uproot_SV(sv);
325     else
326         sv = S_more_sv(aTHX);
327     SvANY(sv) = 0;
328     SvREFCNT(sv) = 1;
329     SvFLAGS(sv) = 0;
330     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
331     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
332                 ? PL_parser->copline
333                 :  PL_curcop
334                     ? CopLINE(PL_curcop)
335                     : 0
336             );
337     sv->sv_debug_inpad = 0;
338     sv->sv_debug_parent = NULL;
339     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
340
341     sv->sv_debug_serial = PL_sv_serial++;
342
343     MEM_LOG_NEW_SV(sv, file, line, func);
344     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
345             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
346
347     return sv;
348 }
349 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
350
351 #else
352 #  define new_SV(p) \
353     STMT_START {                                        \
354         if (PL_sv_root)                                 \
355             uproot_SV(p);                               \
356         else                                            \
357             (p) = S_more_sv(aTHX);                      \
358         SvANY(p) = 0;                                   \
359         SvREFCNT(p) = 1;                                \
360         SvFLAGS(p) = 0;                                 \
361         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
362     } STMT_END
363 #endif
364
365
366 /* del_SV(): return an empty SV head to the free list */
367
368 #ifdef DEBUGGING
369
370 #define del_SV(p) \
371     STMT_START {                                        \
372         if (DEBUG_D_TEST)                               \
373             del_sv(p);                                  \
374         else                                            \
375             plant_SV(p);                                \
376     } STMT_END
377
378 STATIC void
379 S_del_sv(pTHX_ SV *p)
380 {
381     PERL_ARGS_ASSERT_DEL_SV;
382
383     if (DEBUG_D_TEST) {
384         SV* sva;
385         bool ok = 0;
386         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
387             const SV * const sv = sva + 1;
388             const SV * const svend = &sva[SvREFCNT(sva)];
389             if (p >= sv && p < svend) {
390                 ok = 1;
391                 break;
392             }
393         }
394         if (!ok) {
395             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
396                              "Attempt to free non-arena SV: 0x%" UVxf
397                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
398             return;
399         }
400     }
401     plant_SV(p);
402 }
403
404 #else /* ! DEBUGGING */
405
406 #define del_SV(p)   plant_SV(p)
407
408 #endif /* DEBUGGING */
409
410
411 /*
412 =head1 SV Manipulation Functions
413
414 =for apidoc sv_add_arena
415
416 Given a chunk of memory, link it to the head of the list of arenas,
417 and split it into a list of free SVs.
418
419 =cut
420 */
421
422 static void
423 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
424 {
425     SV *const sva = MUTABLE_SV(ptr);
426     SV* sv;
427     SV* svend;
428
429     PERL_ARGS_ASSERT_SV_ADD_ARENA;
430
431     /* The first SV in an arena isn't an SV. */
432     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
433     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
434     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
435
436     PL_sv_arenaroot = sva;
437     PL_sv_root = sva + 1;
438
439     svend = &sva[SvREFCNT(sva) - 1];
440     sv = sva + 1;
441     while (sv < svend) {
442         SvARENA_CHAIN_SET(sv, (sv + 1));
443 #ifdef DEBUGGING
444         SvREFCNT(sv) = 0;
445 #endif
446         /* Must always set typemask because it's always checked in on cleanup
447            when the arenas are walked looking for objects.  */
448         SvFLAGS(sv) = SVTYPEMASK;
449         sv++;
450     }
451     SvARENA_CHAIN_SET(sv, 0);
452 #ifdef DEBUGGING
453     SvREFCNT(sv) = 0;
454 #endif
455     SvFLAGS(sv) = SVTYPEMASK;
456 }
457
458 /* visit(): call the named function for each non-free SV in the arenas
459  * whose flags field matches the flags/mask args. */
460
461 STATIC I32
462 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
463 {
464     SV* sva;
465     I32 visited = 0;
466
467     PERL_ARGS_ASSERT_VISIT;
468
469     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
470         const SV * const svend = &sva[SvREFCNT(sva)];
471         SV* sv;
472         for (sv = sva + 1; sv < svend; ++sv) {
473             if (SvTYPE(sv) != (svtype)SVTYPEMASK
474                     && (sv->sv_flags & mask) == flags
475                     && SvREFCNT(sv))
476             {
477                 (*f)(aTHX_ sv);
478                 ++visited;
479             }
480         }
481     }
482     return visited;
483 }
484
485 #ifdef DEBUGGING
486
487 /* called by sv_report_used() for each live SV */
488
489 static void
490 do_report_used(pTHX_ SV *const sv)
491 {
492     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
493         PerlIO_printf(Perl_debug_log, "****\n");
494         sv_dump(sv);
495     }
496 }
497 #endif
498
499 /*
500 =for apidoc sv_report_used
501
502 Dump the contents of all SVs not yet freed (debugging aid).
503
504 =cut
505 */
506
507 void
508 Perl_sv_report_used(pTHX)
509 {
510 #ifdef DEBUGGING
511     visit(do_report_used, 0, 0);
512 #else
513     PERL_UNUSED_CONTEXT;
514 #endif
515 }
516
517 /* called by sv_clean_objs() for each live SV */
518
519 static void
520 do_clean_objs(pTHX_ SV *const ref)
521 {
522     assert (SvROK(ref));
523     {
524         SV * const target = SvRV(ref);
525         if (SvOBJECT(target)) {
526             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
527             if (SvWEAKREF(ref)) {
528                 sv_del_backref(target, ref);
529                 SvWEAKREF_off(ref);
530                 SvRV_set(ref, NULL);
531             } else {
532                 SvROK_off(ref);
533                 SvRV_set(ref, NULL);
534                 SvREFCNT_dec_NN(target);
535             }
536         }
537     }
538 }
539
540
541 /* clear any slots in a GV which hold objects - except IO;
542  * called by sv_clean_objs() for each live GV */
543
544 static void
545 do_clean_named_objs(pTHX_ SV *const sv)
546 {
547     SV *obj;
548     assert(SvTYPE(sv) == SVt_PVGV);
549     assert(isGV_with_GP(sv));
550     if (!GvGP(sv))
551         return;
552
553     /* freeing GP entries may indirectly free the current GV;
554      * hold onto it while we mess with the GP slots */
555     SvREFCNT_inc(sv);
556
557     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
558         DEBUG_D((PerlIO_printf(Perl_debug_log,
559                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
560         GvSV(sv) = NULL;
561         SvREFCNT_dec_NN(obj);
562     }
563     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
564         DEBUG_D((PerlIO_printf(Perl_debug_log,
565                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
566         GvAV(sv) = NULL;
567         SvREFCNT_dec_NN(obj);
568     }
569     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
570         DEBUG_D((PerlIO_printf(Perl_debug_log,
571                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
572         GvHV(sv) = NULL;
573         SvREFCNT_dec_NN(obj);
574     }
575     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
576         DEBUG_D((PerlIO_printf(Perl_debug_log,
577                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
578         GvCV_set(sv, NULL);
579         SvREFCNT_dec_NN(obj);
580     }
581     SvREFCNT_dec_NN(sv); /* undo the inc above */
582 }
583
584 /* clear any IO slots in a GV which hold objects (except stderr, defout);
585  * called by sv_clean_objs() for each live GV */
586
587 static void
588 do_clean_named_io_objs(pTHX_ SV *const sv)
589 {
590     SV *obj;
591     assert(SvTYPE(sv) == SVt_PVGV);
592     assert(isGV_with_GP(sv));
593     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
594         return;
595
596     SvREFCNT_inc(sv);
597     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
598         DEBUG_D((PerlIO_printf(Perl_debug_log,
599                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
600         GvIOp(sv) = NULL;
601         SvREFCNT_dec_NN(obj);
602     }
603     SvREFCNT_dec_NN(sv); /* undo the inc above */
604 }
605
606 /* Void wrapper to pass to visit() */
607 static void
608 do_curse(pTHX_ SV * const sv) {
609     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
610      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
611         return;
612     (void)curse(sv, 0);
613 }
614
615 /*
616 =for apidoc sv_clean_objs
617
618 Attempt to destroy all objects not yet freed.
619
620 =cut
621 */
622
623 void
624 Perl_sv_clean_objs(pTHX)
625 {
626     GV *olddef, *olderr;
627     PL_in_clean_objs = TRUE;
628     visit(do_clean_objs, SVf_ROK, SVf_ROK);
629     /* Some barnacles may yet remain, clinging to typeglobs.
630      * Run the non-IO destructors first: they may want to output
631      * error messages, close files etc */
632     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
634     /* And if there are some very tenacious barnacles clinging to arrays,
635        closures, or what have you.... */
636     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
637     olddef = PL_defoutgv;
638     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
639     if (olddef && isGV_with_GP(olddef))
640         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
641     olderr = PL_stderrgv;
642     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
643     if (olderr && isGV_with_GP(olderr))
644         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
645     SvREFCNT_dec(olddef);
646     PL_in_clean_objs = FALSE;
647 }
648
649 /* called by sv_clean_all() for each live SV */
650
651 static void
652 do_clean_all(pTHX_ SV *const sv)
653 {
654     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
655         /* don't clean pid table and strtab */
656         return;
657     }
658     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
659     SvFLAGS(sv) |= SVf_BREAK;
660     SvREFCNT_dec_NN(sv);
661 }
662
663 /*
664 =for apidoc sv_clean_all
665
666 Decrement the refcnt of each remaining SV, possibly triggering a
667 cleanup.  This function may have to be called multiple times to free
668 SVs which are in complex self-referential hierarchies.
669
670 =cut
671 */
672
673 I32
674 Perl_sv_clean_all(pTHX)
675 {
676     I32 cleaned;
677     PL_in_clean_all = TRUE;
678     cleaned = visit(do_clean_all, 0,0);
679     return cleaned;
680 }
681
682 /*
683   ARENASETS: a meta-arena implementation which separates arena-info
684   into struct arena_set, which contains an array of struct
685   arena_descs, each holding info for a single arena.  By separating
686   the meta-info from the arena, we recover the 1st slot, formerly
687   borrowed for list management.  The arena_set is about the size of an
688   arena, avoiding the needless malloc overhead of a naive linked-list.
689
690   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
691   memory in the last arena-set (1/2 on average).  In trade, we get
692   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
693   smaller types).  The recovery of the wasted space allows use of
694   small arenas for large, rare body types, by changing array* fields
695   in body_details_by_type[] below.
696 */
697 struct arena_desc {
698     char       *arena;          /* the raw storage, allocated aligned */
699     size_t      size;           /* its size ~4k typ */
700     svtype      utype;          /* bodytype stored in arena */
701 };
702
703 struct arena_set;
704
705 /* Get the maximum number of elements in set[] such that struct arena_set
706    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
707    therefore likely to be 1 aligned memory page.  */
708
709 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
710                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
711
712 struct arena_set {
713     struct arena_set* next;
714     unsigned int   set_size;    /* ie ARENAS_PER_SET */
715     unsigned int   curr;        /* index of next available arena-desc */
716     struct arena_desc set[ARENAS_PER_SET];
717 };
718
719 /*
720 =for apidoc sv_free_arenas
721
722 Deallocate the memory used by all arenas.  Note that all the individual SV
723 heads and bodies within the arenas must already have been freed.
724
725 =cut
726
727 */
728 void
729 Perl_sv_free_arenas(pTHX)
730 {
731     SV* sva;
732     SV* svanext;
733     unsigned int i;
734
735     /* Free arenas here, but be careful about fake ones.  (We assume
736        contiguity of the fake ones with the corresponding real ones.) */
737
738     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
739         svanext = MUTABLE_SV(SvANY(sva));
740         while (svanext && SvFAKE(svanext))
741             svanext = MUTABLE_SV(SvANY(svanext));
742
743         if (!SvFAKE(sva))
744             Safefree(sva);
745     }
746
747     {
748         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
749
750         while (aroot) {
751             struct arena_set *current = aroot;
752             i = aroot->curr;
753             while (i--) {
754                 assert(aroot->set[i].arena);
755                 Safefree(aroot->set[i].arena);
756             }
757             aroot = aroot->next;
758             Safefree(current);
759         }
760     }
761     PL_body_arenas = 0;
762
763     i = PERL_ARENA_ROOTS_SIZE;
764     while (i--)
765         PL_body_roots[i] = 0;
766
767     PL_sv_arenaroot = 0;
768     PL_sv_root = 0;
769 }
770
771 /*
772   Here are mid-level routines that manage the allocation of bodies out
773   of the various arenas.  There are 4 kinds of arenas:
774
775   1. SV-head arenas, which are discussed and handled above
776   2. regular body arenas
777   3. arenas for reduced-size bodies
778   4. Hash-Entry arenas
779
780   Arena types 2 & 3 are chained by body-type off an array of
781   arena-root pointers, which is indexed by svtype.  Some of the
782   larger/less used body types are malloced singly, since a large
783   unused block of them is wasteful.  Also, several svtypes dont have
784   bodies; the data fits into the sv-head itself.  The arena-root
785   pointer thus has a few unused root-pointers (which may be hijacked
786   later for arena type 4)
787
788   3 differs from 2 as an optimization; some body types have several
789   unused fields in the front of the structure (which are kept in-place
790   for consistency).  These bodies can be allocated in smaller chunks,
791   because the leading fields arent accessed.  Pointers to such bodies
792   are decremented to point at the unused 'ghost' memory, knowing that
793   the pointers are used with offsets to the real memory.
794
795 Allocation of SV-bodies is similar to SV-heads, differing as follows;
796 the allocation mechanism is used for many body types, so is somewhat
797 more complicated, it uses arena-sets, and has no need for still-live
798 SV detection.
799
800 At the outermost level, (new|del)_X*V macros return bodies of the
801 appropriate type.  These macros call either (new|del)_body_type or
802 (new|del)_body_allocated macro pairs, depending on specifics of the
803 type.  Most body types use the former pair, the latter pair is used to
804 allocate body types with "ghost fields".
805
806 "ghost fields" are fields that are unused in certain types, and
807 consequently don't need to actually exist.  They are declared because
808 they're part of a "base type", which allows use of functions as
809 methods.  The simplest examples are AVs and HVs, 2 aggregate types
810 which don't use the fields which support SCALAR semantics.
811
812 For these types, the arenas are carved up into appropriately sized
813 chunks, we thus avoid wasted memory for those unaccessed members.
814 When bodies are allocated, we adjust the pointer back in memory by the
815 size of the part not allocated, so it's as if we allocated the full
816 structure.  (But things will all go boom if you write to the part that
817 is "not there", because you'll be overwriting the last members of the
818 preceding structure in memory.)
819
820 We calculate the correction using the STRUCT_OFFSET macro on the first
821 member present.  If the allocated structure is smaller (no initial NV
822 actually allocated) then the net effect is to subtract the size of the NV
823 from the pointer, to return a new pointer as if an initial NV were actually
824 allocated.  (We were using structures named *_allocated for this, but
825 this turned out to be a subtle bug, because a structure without an NV
826 could have a lower alignment constraint, but the compiler is allowed to
827 optimised accesses based on the alignment constraint of the actual pointer
828 to the full structure, for example, using a single 64 bit load instruction
829 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
830
831 This is the same trick as was used for NV and IV bodies.  Ironically it
832 doesn't need to be used for NV bodies any more, because NV is now at
833 the start of the structure.  IV bodies, and also in some builds NV bodies,
834 don't need it either, because they are no longer allocated.
835
836 In turn, the new_body_* allocators call S_new_body(), which invokes
837 new_body_inline macro, which takes a lock, and takes a body off the
838 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
839 necessary to refresh an empty list.  Then the lock is released, and
840 the body is returned.
841
842 Perl_more_bodies allocates a new arena, and carves it up into an array of N
843 bodies, which it strings into a linked list.  It looks up arena-size
844 and body-size from the body_details table described below, thus
845 supporting the multiple body-types.
846
847 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
848 the (new|del)_X*V macros are mapped directly to malloc/free.
849
850 For each sv-type, struct body_details bodies_by_type[] carries
851 parameters which control these aspects of SV handling:
852
853 Arena_size determines whether arenas are used for this body type, and if
854 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
855 zero, forcing individual mallocs and frees.
856
857 Body_size determines how big a body is, and therefore how many fit into
858 each arena.  Offset carries the body-pointer adjustment needed for
859 "ghost fields", and is used in *_allocated macros.
860
861 But its main purpose is to parameterize info needed in
862 Perl_sv_upgrade().  The info here dramatically simplifies the function
863 vs the implementation in 5.8.8, making it table-driven.  All fields
864 are used for this, except for arena_size.
865
866 For the sv-types that have no bodies, arenas are not used, so those
867 PL_body_roots[sv_type] are unused, and can be overloaded.  In
868 something of a special case, SVt_NULL is borrowed for HE arenas;
869 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
870 bodies_by_type[SVt_NULL] slot is not used, as the table is not
871 available in hv.c.
872
873 */
874
875 struct body_details {
876     U8 body_size;       /* Size to allocate  */
877     U8 copy;            /* Size of structure to copy (may be shorter)  */
878     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
879     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
880     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
881     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
882     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
883     U32 arena_size;                 /* Size of arena to allocate */
884 };
885
886 #define HADNV FALSE
887 #define NONV TRUE
888
889
890 #ifdef PURIFY
891 /* With -DPURFIY we allocate everything directly, and don't use arenas.
892    This seems a rather elegant way to simplify some of the code below.  */
893 #define HASARENA FALSE
894 #else
895 #define HASARENA TRUE
896 #endif
897 #define NOARENA FALSE
898
899 /* Size the arenas to exactly fit a given number of bodies.  A count
900    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
901    simplifying the default.  If count > 0, the arena is sized to fit
902    only that many bodies, allowing arenas to be used for large, rare
903    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
904    limited by PERL_ARENA_SIZE, so we can safely oversize the
905    declarations.
906  */
907 #define FIT_ARENA0(body_size)                           \
908     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
909 #define FIT_ARENAn(count,body_size)                     \
910     ( count * body_size <= PERL_ARENA_SIZE)             \
911     ? count * body_size                                 \
912     : FIT_ARENA0 (body_size)
913 #define FIT_ARENA(count,body_size)                      \
914    (U32)(count                                          \
915     ? FIT_ARENAn (count, body_size)                     \
916     : FIT_ARENA0 (body_size))
917
918 /* Calculate the length to copy. Specifically work out the length less any
919    final padding the compiler needed to add.  See the comment in sv_upgrade
920    for why copying the padding proved to be a bug.  */
921
922 #define copy_length(type, last_member) \
923         STRUCT_OFFSET(type, last_member) \
924         + sizeof (((type*)SvANY((const SV *)0))->last_member)
925
926 static const struct body_details bodies_by_type[] = {
927     /* HEs use this offset for their arena.  */
928     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
929
930     /* IVs are in the head, so the allocation size is 0.  */
931     { 0,
932       sizeof(IV), /* This is used to copy out the IV body.  */
933       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
934       NOARENA /* IVS don't need an arena  */, 0
935     },
936
937 #if NVSIZE <= IVSIZE
938     { 0, sizeof(NV),
939       STRUCT_OFFSET(XPVNV, xnv_u),
940       SVt_NV, FALSE, HADNV, NOARENA, 0 },
941 #else
942     { sizeof(NV), sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
945 #endif
946
947     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
948       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
949       + STRUCT_OFFSET(XPV, xpv_cur),
950       SVt_PV, FALSE, NONV, HASARENA,
951       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
952
953     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
954       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
955       + STRUCT_OFFSET(XPV, xpv_cur),
956       SVt_INVLIST, TRUE, NONV, HASARENA,
957       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
958
959     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
960       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
961       + STRUCT_OFFSET(XPV, xpv_cur),
962       SVt_PVIV, FALSE, NONV, HASARENA,
963       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
964
965     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
966       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
967       + STRUCT_OFFSET(XPV, xpv_cur),
968       SVt_PVNV, FALSE, HADNV, HASARENA,
969       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
970
971     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
972       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
973
974     { sizeof(regexp),
975       sizeof(regexp),
976       0,
977       SVt_REGEXP, TRUE, NONV, HASARENA,
978       FIT_ARENA(0, sizeof(regexp))
979     },
980
981     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
982       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
983     
984     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
985       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
986
987     { sizeof(XPVAV),
988       copy_length(XPVAV, xav_alloc),
989       0,
990       SVt_PVAV, TRUE, NONV, HASARENA,
991       FIT_ARENA(0, sizeof(XPVAV)) },
992
993     { sizeof(XPVHV),
994       copy_length(XPVHV, xhv_max),
995       0,
996       SVt_PVHV, TRUE, NONV, HASARENA,
997       FIT_ARENA(0, sizeof(XPVHV)) },
998
999     { sizeof(XPVCV),
1000       sizeof(XPVCV),
1001       0,
1002       SVt_PVCV, TRUE, NONV, HASARENA,
1003       FIT_ARENA(0, sizeof(XPVCV)) },
1004
1005     { sizeof(XPVFM),
1006       sizeof(XPVFM),
1007       0,
1008       SVt_PVFM, TRUE, NONV, NOARENA,
1009       FIT_ARENA(20, sizeof(XPVFM)) },
1010
1011     { sizeof(XPVIO),
1012       sizeof(XPVIO),
1013       0,
1014       SVt_PVIO, TRUE, NONV, HASARENA,
1015       FIT_ARENA(24, sizeof(XPVIO)) },
1016 };
1017
1018 #define new_body_allocated(sv_type)             \
1019     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1020              - bodies_by_type[sv_type].offset)
1021
1022 /* return a thing to the free list */
1023
1024 #define del_body(thing, root)                           \
1025     STMT_START {                                        \
1026         void ** const thing_copy = (void **)thing;      \
1027         *thing_copy = *root;                            \
1028         *root = (void*)thing_copy;                      \
1029     } STMT_END
1030
1031 #ifdef PURIFY
1032 #if !(NVSIZE <= IVSIZE)
1033 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1034 #endif
1035 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1036 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1037
1038 #define del_XPVGV(p)    safefree(p)
1039
1040 #else /* !PURIFY */
1041
1042 #if !(NVSIZE <= IVSIZE)
1043 #  define new_XNV()     new_body_allocated(SVt_NV)
1044 #endif
1045 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1046 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1047
1048 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1049                                  &PL_body_roots[SVt_PVGV])
1050
1051 #endif /* PURIFY */
1052
1053 /* no arena for you! */
1054
1055 #define new_NOARENA(details) \
1056         safemalloc((details)->body_size + (details)->offset)
1057 #define new_NOARENAZ(details) \
1058         safecalloc((details)->body_size + (details)->offset, 1)
1059
1060 void *
1061 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1062                   const size_t arena_size)
1063 {
1064     void ** const root = &PL_body_roots[sv_type];
1065     struct arena_desc *adesc;
1066     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1067     unsigned int curr;
1068     char *start;
1069     const char *end;
1070     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1071 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1072     dVAR;
1073 #endif
1074 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT)
1075     static bool done_sanity_check;
1076
1077     /* PERL_GLOBAL_STRUCT cannot coexist with global
1078      * variables like done_sanity_check. */
1079     if (!done_sanity_check) {
1080         unsigned int i = SVt_LAST;
1081
1082         done_sanity_check = TRUE;
1083
1084         while (i--)
1085             assert (bodies_by_type[i].type == i);
1086     }
1087 #endif
1088
1089     assert(arena_size);
1090
1091     /* may need new arena-set to hold new arena */
1092     if (!aroot || aroot->curr >= aroot->set_size) {
1093         struct arena_set *newroot;
1094         Newxz(newroot, 1, struct arena_set);
1095         newroot->set_size = ARENAS_PER_SET;
1096         newroot->next = aroot;
1097         aroot = newroot;
1098         PL_body_arenas = (void *) newroot;
1099         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1100     }
1101
1102     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1103     curr = aroot->curr++;
1104     adesc = &(aroot->set[curr]);
1105     assert(!adesc->arena);
1106     
1107     Newx(adesc->arena, good_arena_size, char);
1108     adesc->size = good_arena_size;
1109     adesc->utype = sv_type;
1110     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1111                           curr, (void*)adesc->arena, (UV)good_arena_size));
1112
1113     start = (char *) adesc->arena;
1114
1115     /* Get the address of the byte after the end of the last body we can fit.
1116        Remember, this is integer division:  */
1117     end = start + good_arena_size / body_size * body_size;
1118
1119     /* computed count doesn't reflect the 1st slot reservation */
1120 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1121     DEBUG_m(PerlIO_printf(Perl_debug_log,
1122                           "arena %p end %p arena-size %d (from %d) type %d "
1123                           "size %d ct %d\n",
1124                           (void*)start, (void*)end, (int)good_arena_size,
1125                           (int)arena_size, sv_type, (int)body_size,
1126                           (int)good_arena_size / (int)body_size));
1127 #else
1128     DEBUG_m(PerlIO_printf(Perl_debug_log,
1129                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1130                           (void*)start, (void*)end,
1131                           (int)arena_size, sv_type, (int)body_size,
1132                           (int)good_arena_size / (int)body_size));
1133 #endif
1134     *root = (void *)start;
1135
1136     while (1) {
1137         /* Where the next body would start:  */
1138         char * const next = start + body_size;
1139
1140         if (next >= end) {
1141             /* This is the last body:  */
1142             assert(next == end);
1143
1144             *(void **)start = 0;
1145             return *root;
1146         }
1147
1148         *(void**) start = (void *)next;
1149         start = next;
1150     }
1151 }
1152
1153 /* grab a new thing from the free list, allocating more if necessary.
1154    The inline version is used for speed in hot routines, and the
1155    function using it serves the rest (unless PURIFY).
1156 */
1157 #define new_body_inline(xpv, sv_type) \
1158     STMT_START { \
1159         void ** const r3wt = &PL_body_roots[sv_type]; \
1160         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1161           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1162                                              bodies_by_type[sv_type].body_size,\
1163                                              bodies_by_type[sv_type].arena_size)); \
1164         *(r3wt) = *(void**)(xpv); \
1165     } STMT_END
1166
1167 #ifndef PURIFY
1168
1169 STATIC void *
1170 S_new_body(pTHX_ const svtype sv_type)
1171 {
1172     void *xpv;
1173     new_body_inline(xpv, sv_type);
1174     return xpv;
1175 }
1176
1177 #endif
1178
1179 static const struct body_details fake_rv =
1180     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1181
1182 /*
1183 =for apidoc sv_upgrade
1184
1185 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1186 SV, then copies across as much information as possible from the old body.
1187 It croaks if the SV is already in a more complex form than requested.  You
1188 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1189 before calling C<sv_upgrade>, and hence does not croak.  See also
1190 C<L</svtype>>.
1191
1192 =cut
1193 */
1194
1195 void
1196 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1197 {
1198     void*       old_body;
1199     void*       new_body;
1200     const svtype old_type = SvTYPE(sv);
1201     const struct body_details *new_type_details;
1202     const struct body_details *old_type_details
1203         = bodies_by_type + old_type;
1204     SV *referent = NULL;
1205
1206     PERL_ARGS_ASSERT_SV_UPGRADE;
1207
1208     if (old_type == new_type)
1209         return;
1210
1211     /* This clause was purposefully added ahead of the early return above to
1212        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1213        inference by Nick I-S that it would fix other troublesome cases. See
1214        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1215
1216        Given that shared hash key scalars are no longer PVIV, but PV, there is
1217        no longer need to unshare so as to free up the IVX slot for its proper
1218        purpose. So it's safe to move the early return earlier.  */
1219
1220     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1221         sv_force_normal_flags(sv, 0);
1222     }
1223
1224     old_body = SvANY(sv);
1225
1226     /* Copying structures onto other structures that have been neatly zeroed
1227        has a subtle gotcha. Consider XPVMG
1228
1229        +------+------+------+------+------+-------+-------+
1230        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1231        +------+------+------+------+------+-------+-------+
1232        0      4      8     12     16     20      24      28
1233
1234        where NVs are aligned to 8 bytes, so that sizeof that structure is
1235        actually 32 bytes long, with 4 bytes of padding at the end:
1236
1237        +------+------+------+------+------+-------+-------+------+
1238        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1239        +------+------+------+------+------+-------+-------+------+
1240        0      4      8     12     16     20      24      28     32
1241
1242        so what happens if you allocate memory for this structure:
1243
1244        +------+------+------+------+------+-------+-------+------+------+...
1245        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1246        +------+------+------+------+------+-------+-------+------+------+...
1247        0      4      8     12     16     20      24      28     32     36
1248
1249        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1250        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1251        started out as zero once, but it's quite possible that it isn't. So now,
1252        rather than a nicely zeroed GP, you have it pointing somewhere random.
1253        Bugs ensue.
1254
1255        (In fact, GP ends up pointing at a previous GP structure, because the
1256        principle cause of the padding in XPVMG getting garbage is a copy of
1257        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1258        this happens to be moot because XPVGV has been re-ordered, with GP
1259        no longer after STASH)
1260
1261        So we are careful and work out the size of used parts of all the
1262        structures.  */
1263
1264     switch (old_type) {
1265     case SVt_NULL:
1266         break;
1267     case SVt_IV:
1268         if (SvROK(sv)) {
1269             referent = SvRV(sv);
1270             old_type_details = &fake_rv;
1271             if (new_type == SVt_NV)
1272                 new_type = SVt_PVNV;
1273         } else {
1274             if (new_type < SVt_PVIV) {
1275                 new_type = (new_type == SVt_NV)
1276                     ? SVt_PVNV : SVt_PVIV;
1277             }
1278         }
1279         break;
1280     case SVt_NV:
1281         if (new_type < SVt_PVNV) {
1282             new_type = SVt_PVNV;
1283         }
1284         break;
1285     case SVt_PV:
1286         assert(new_type > SVt_PV);
1287         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1288         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1289         break;
1290     case SVt_PVIV:
1291         break;
1292     case SVt_PVNV:
1293         break;
1294     case SVt_PVMG:
1295         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1296            there's no way that it can be safely upgraded, because perl.c
1297            expects to Safefree(SvANY(PL_mess_sv))  */
1298         assert(sv != PL_mess_sv);
1299         break;
1300     default:
1301         if (UNLIKELY(old_type_details->cant_upgrade))
1302             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1303                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1304     }
1305
1306     if (UNLIKELY(old_type > new_type))
1307         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1308                 (int)old_type, (int)new_type);
1309
1310     new_type_details = bodies_by_type + new_type;
1311
1312     SvFLAGS(sv) &= ~SVTYPEMASK;
1313     SvFLAGS(sv) |= new_type;
1314
1315     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1316        the return statements above will have triggered.  */
1317     assert (new_type != SVt_NULL);
1318     switch (new_type) {
1319     case SVt_IV:
1320         assert(old_type == SVt_NULL);
1321         SET_SVANY_FOR_BODYLESS_IV(sv);
1322         SvIV_set(sv, 0);
1323         return;
1324     case SVt_NV:
1325         assert(old_type == SVt_NULL);
1326 #if NVSIZE <= IVSIZE
1327         SET_SVANY_FOR_BODYLESS_NV(sv);
1328 #else
1329         SvANY(sv) = new_XNV();
1330 #endif
1331         SvNV_set(sv, 0);
1332         return;
1333     case SVt_PVHV:
1334     case SVt_PVAV:
1335         assert(new_type_details->body_size);
1336
1337 #ifndef PURIFY  
1338         assert(new_type_details->arena);
1339         assert(new_type_details->arena_size);
1340         /* This points to the start of the allocated area.  */
1341         new_body_inline(new_body, new_type);
1342         Zero(new_body, new_type_details->body_size, char);
1343         new_body = ((char *)new_body) - new_type_details->offset;
1344 #else
1345         /* We always allocated the full length item with PURIFY. To do this
1346            we fake things so that arena is false for all 16 types..  */
1347         new_body = new_NOARENAZ(new_type_details);
1348 #endif
1349         SvANY(sv) = new_body;
1350         if (new_type == SVt_PVAV) {
1351             AvMAX(sv)   = -1;
1352             AvFILLp(sv) = -1;
1353             AvREAL_only(sv);
1354             if (old_type_details->body_size) {
1355                 AvALLOC(sv) = 0;
1356             } else {
1357                 /* It will have been zeroed when the new body was allocated.
1358                    Lets not write to it, in case it confuses a write-back
1359                    cache.  */
1360             }
1361         } else {
1362             assert(!SvOK(sv));
1363             SvOK_off(sv);
1364 #ifndef NODEFAULT_SHAREKEYS
1365             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1366 #endif
1367             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1368             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1369         }
1370
1371         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1372            The target created by newSVrv also is, and it can have magic.
1373            However, it never has SvPVX set.
1374         */
1375         if (old_type == SVt_IV) {
1376             assert(!SvROK(sv));
1377         } else if (old_type >= SVt_PV) {
1378             assert(SvPVX_const(sv) == 0);
1379         }
1380
1381         if (old_type >= SVt_PVMG) {
1382             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1383             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1384         } else {
1385             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1386         }
1387         break;
1388
1389     case SVt_PVIV:
1390         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1391            no route from NV to PVIV, NOK can never be true  */
1392         assert(!SvNOKp(sv));
1393         assert(!SvNOK(sv));
1394         /* FALLTHROUGH */
1395     case SVt_PVIO:
1396     case SVt_PVFM:
1397     case SVt_PVGV:
1398     case SVt_PVCV:
1399     case SVt_PVLV:
1400     case SVt_INVLIST:
1401     case SVt_REGEXP:
1402     case SVt_PVMG:
1403     case SVt_PVNV:
1404     case SVt_PV:
1405
1406         assert(new_type_details->body_size);
1407         /* We always allocated the full length item with PURIFY. To do this
1408            we fake things so that arena is false for all 16 types..  */
1409         if(new_type_details->arena) {
1410             /* This points to the start of the allocated area.  */
1411             new_body_inline(new_body, new_type);
1412             Zero(new_body, new_type_details->body_size, char);
1413             new_body = ((char *)new_body) - new_type_details->offset;
1414         } else {
1415             new_body = new_NOARENAZ(new_type_details);
1416         }
1417         SvANY(sv) = new_body;
1418
1419         if (old_type_details->copy) {
1420             /* There is now the potential for an upgrade from something without
1421                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1422             int offset = old_type_details->offset;
1423             int length = old_type_details->copy;
1424
1425             if (new_type_details->offset > old_type_details->offset) {
1426                 const int difference
1427                     = new_type_details->offset - old_type_details->offset;
1428                 offset += difference;
1429                 length -= difference;
1430             }
1431             assert (length >= 0);
1432                 
1433             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1434                  char);
1435         }
1436
1437 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1438         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1439          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1440          * NV slot, but the new one does, then we need to initialise the
1441          * freshly created NV slot with whatever the correct bit pattern is
1442          * for 0.0  */
1443         if (old_type_details->zero_nv && !new_type_details->zero_nv
1444             && !isGV_with_GP(sv))
1445             SvNV_set(sv, 0);
1446 #endif
1447
1448         if (UNLIKELY(new_type == SVt_PVIO)) {
1449             IO * const io = MUTABLE_IO(sv);
1450             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1451
1452             SvOBJECT_on(io);
1453             /* Clear the stashcache because a new IO could overrule a package
1454                name */
1455             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1456             hv_clear(PL_stashcache);
1457
1458             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1459             IoPAGE_LEN(sv) = 60;
1460         }
1461         if (old_type < SVt_PV) {
1462             /* referent will be NULL unless the old type was SVt_IV emulating
1463                SVt_RV */
1464             sv->sv_u.svu_rv = referent;
1465         }
1466         break;
1467     default:
1468         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1469                    (unsigned long)new_type);
1470     }
1471
1472     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1473        and sometimes SVt_NV */
1474     if (old_type_details->body_size) {
1475 #ifdef PURIFY
1476         safefree(old_body);
1477 #else
1478         /* Note that there is an assumption that all bodies of types that
1479            can be upgraded came from arenas. Only the more complex non-
1480            upgradable types are allowed to be directly malloc()ed.  */
1481         assert(old_type_details->arena);
1482         del_body((void*)((char*)old_body + old_type_details->offset),
1483                  &PL_body_roots[old_type]);
1484 #endif
1485     }
1486 }
1487
1488 /*
1489 =for apidoc sv_backoff
1490
1491 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1492 wrapper instead.
1493
1494 =cut
1495 */
1496
1497 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1498    prior to 5.23.4 this function always returned 0
1499 */
1500
1501 void
1502 Perl_sv_backoff(SV *const sv)
1503 {
1504     STRLEN delta;
1505     const char * const s = SvPVX_const(sv);
1506
1507     PERL_ARGS_ASSERT_SV_BACKOFF;
1508
1509     assert(SvOOK(sv));
1510     assert(SvTYPE(sv) != SVt_PVHV);
1511     assert(SvTYPE(sv) != SVt_PVAV);
1512
1513     SvOOK_offset(sv, delta);
1514     
1515     SvLEN_set(sv, SvLEN(sv) + delta);
1516     SvPV_set(sv, SvPVX(sv) - delta);
1517     SvFLAGS(sv) &= ~SVf_OOK;
1518     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1519     return;
1520 }
1521
1522
1523 /* forward declaration */
1524 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1525
1526
1527 /*
1528 =for apidoc sv_grow
1529
1530 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1531 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1532 Use the C<SvGROW> wrapper instead.
1533
1534 =cut
1535 */
1536
1537
1538 char *
1539 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1540 {
1541     char *s;
1542
1543     PERL_ARGS_ASSERT_SV_GROW;
1544
1545     if (SvROK(sv))
1546         sv_unref(sv);
1547     if (SvTYPE(sv) < SVt_PV) {
1548         sv_upgrade(sv, SVt_PV);
1549         s = SvPVX_mutable(sv);
1550     }
1551     else if (SvOOK(sv)) {       /* pv is offset? */
1552         sv_backoff(sv);
1553         s = SvPVX_mutable(sv);
1554         if (newlen > SvLEN(sv))
1555             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1556     }
1557     else
1558     {
1559         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1560         s = SvPVX_mutable(sv);
1561     }
1562
1563 #ifdef PERL_COPY_ON_WRITE
1564     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1565      * to store the COW count. So in general, allocate one more byte than
1566      * asked for, to make it likely this byte is always spare: and thus
1567      * make more strings COW-able.
1568      *
1569      * Only increment if the allocation isn't MEM_SIZE_MAX,
1570      * otherwise it will wrap to 0.
1571      */
1572     if ( newlen != MEM_SIZE_MAX )
1573         newlen++;
1574 #endif
1575
1576 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1577 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1578 #endif
1579
1580     if (newlen > SvLEN(sv)) {           /* need more room? */
1581         STRLEN minlen = SvCUR(sv);
1582         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1583         if (newlen < minlen)
1584             newlen = minlen;
1585 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1586
1587         /* Don't round up on the first allocation, as odds are pretty good that
1588          * the initial request is accurate as to what is really needed */
1589         if (SvLEN(sv)) {
1590             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1591             if (rounded > newlen)
1592                 newlen = rounded;
1593         }
1594 #endif
1595         if (SvLEN(sv) && s) {
1596             s = (char*)saferealloc(s, newlen);
1597         }
1598         else {
1599             s = (char*)safemalloc(newlen);
1600             if (SvPVX_const(sv) && SvCUR(sv)) {
1601                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1602             }
1603         }
1604         SvPV_set(sv, s);
1605 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1606         /* Do this here, do it once, do it right, and then we will never get
1607            called back into sv_grow() unless there really is some growing
1608            needed.  */
1609         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1610 #else
1611         SvLEN_set(sv, newlen);
1612 #endif
1613     }
1614     return s;
1615 }
1616
1617 /*
1618 =for apidoc sv_setiv
1619
1620 Copies an integer into the given SV, upgrading first if necessary.
1621 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1622
1623 =cut
1624 */
1625
1626 void
1627 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1628 {
1629     PERL_ARGS_ASSERT_SV_SETIV;
1630
1631     SV_CHECK_THINKFIRST_COW_DROP(sv);
1632     switch (SvTYPE(sv)) {
1633     case SVt_NULL:
1634     case SVt_NV:
1635         sv_upgrade(sv, SVt_IV);
1636         break;
1637     case SVt_PV:
1638         sv_upgrade(sv, SVt_PVIV);
1639         break;
1640
1641     case SVt_PVGV:
1642         if (!isGV_with_GP(sv))
1643             break;
1644         /* FALLTHROUGH */
1645     case SVt_PVAV:
1646     case SVt_PVHV:
1647     case SVt_PVCV:
1648     case SVt_PVFM:
1649     case SVt_PVIO:
1650         /* diag_listed_as: Can't coerce %s to %s in %s */
1651         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1652                    OP_DESC(PL_op));
1653         NOT_REACHED; /* NOTREACHED */
1654         break;
1655     default: NOOP;
1656     }
1657     (void)SvIOK_only(sv);                       /* validate number */
1658     SvIV_set(sv, i);
1659     SvTAINT(sv);
1660 }
1661
1662 /*
1663 =for apidoc sv_setiv_mg
1664
1665 Like C<sv_setiv>, but also handles 'set' magic.
1666
1667 =cut
1668 */
1669
1670 void
1671 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1672 {
1673     PERL_ARGS_ASSERT_SV_SETIV_MG;
1674
1675     sv_setiv(sv,i);
1676     SvSETMAGIC(sv);
1677 }
1678
1679 /*
1680 =for apidoc sv_setuv
1681
1682 Copies an unsigned integer into the given SV, upgrading first if necessary.
1683 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1684
1685 =cut
1686 */
1687
1688 void
1689 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1690 {
1691     PERL_ARGS_ASSERT_SV_SETUV;
1692
1693     /* With the if statement to ensure that integers are stored as IVs whenever
1694        possible:
1695        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1696
1697        without
1698        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1699
1700        If you wish to remove the following if statement, so that this routine
1701        (and its callers) always return UVs, please benchmark to see what the
1702        effect is. Modern CPUs may be different. Or may not :-)
1703     */
1704     if (u <= (UV)IV_MAX) {
1705        sv_setiv(sv, (IV)u);
1706        return;
1707     }
1708     sv_setiv(sv, 0);
1709     SvIsUV_on(sv);
1710     SvUV_set(sv, u);
1711 }
1712
1713 /*
1714 =for apidoc sv_setuv_mg
1715
1716 Like C<sv_setuv>, but also handles 'set' magic.
1717
1718 =cut
1719 */
1720
1721 void
1722 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1723 {
1724     PERL_ARGS_ASSERT_SV_SETUV_MG;
1725
1726     sv_setuv(sv,u);
1727     SvSETMAGIC(sv);
1728 }
1729
1730 /*
1731 =for apidoc sv_setnv
1732
1733 Copies a double into the given SV, upgrading first if necessary.
1734 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1735
1736 =cut
1737 */
1738
1739 void
1740 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1741 {
1742     PERL_ARGS_ASSERT_SV_SETNV;
1743
1744     SV_CHECK_THINKFIRST_COW_DROP(sv);
1745     switch (SvTYPE(sv)) {
1746     case SVt_NULL:
1747     case SVt_IV:
1748         sv_upgrade(sv, SVt_NV);
1749         break;
1750     case SVt_PV:
1751     case SVt_PVIV:
1752         sv_upgrade(sv, SVt_PVNV);
1753         break;
1754
1755     case SVt_PVGV:
1756         if (!isGV_with_GP(sv))
1757             break;
1758         /* FALLTHROUGH */
1759     case SVt_PVAV:
1760     case SVt_PVHV:
1761     case SVt_PVCV:
1762     case SVt_PVFM:
1763     case SVt_PVIO:
1764         /* diag_listed_as: Can't coerce %s to %s in %s */
1765         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1766                    OP_DESC(PL_op));
1767         NOT_REACHED; /* NOTREACHED */
1768         break;
1769     default: NOOP;
1770     }
1771     SvNV_set(sv, num);
1772     (void)SvNOK_only(sv);                       /* validate number */
1773     SvTAINT(sv);
1774 }
1775
1776 /*
1777 =for apidoc sv_setnv_mg
1778
1779 Like C<sv_setnv>, but also handles 'set' magic.
1780
1781 =cut
1782 */
1783
1784 void
1785 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1786 {
1787     PERL_ARGS_ASSERT_SV_SETNV_MG;
1788
1789     sv_setnv(sv,num);
1790     SvSETMAGIC(sv);
1791 }
1792
1793 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1794  * not incrementable warning display.
1795  * Originally part of S_not_a_number().
1796  * The return value may be != tmpbuf.
1797  */
1798
1799 STATIC const char *
1800 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1801     const char *pv;
1802
1803      PERL_ARGS_ASSERT_SV_DISPLAY;
1804
1805      if (DO_UTF8(sv)) {
1806           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1807           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1808      } else {
1809           char *d = tmpbuf;
1810           const char * const limit = tmpbuf + tmpbuf_size - 8;
1811           /* each *s can expand to 4 chars + "...\0",
1812              i.e. need room for 8 chars */
1813         
1814           const char *s = SvPVX_const(sv);
1815           const char * const end = s + SvCUR(sv);
1816           for ( ; s < end && d < limit; s++ ) {
1817                int ch = *s & 0xFF;
1818                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1819                     *d++ = 'M';
1820                     *d++ = '-';
1821
1822                     /* Map to ASCII "equivalent" of Latin1 */
1823                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1824                }
1825                if (ch == '\n') {
1826                     *d++ = '\\';
1827                     *d++ = 'n';
1828                }
1829                else if (ch == '\r') {
1830                     *d++ = '\\';
1831                     *d++ = 'r';
1832                }
1833                else if (ch == '\f') {
1834                     *d++ = '\\';
1835                     *d++ = 'f';
1836                }
1837                else if (ch == '\\') {
1838                     *d++ = '\\';
1839                     *d++ = '\\';
1840                }
1841                else if (ch == '\0') {
1842                     *d++ = '\\';
1843                     *d++ = '0';
1844                }
1845                else if (isPRINT_LC(ch))
1846                     *d++ = ch;
1847                else {
1848                     *d++ = '^';
1849                     *d++ = toCTRL(ch);
1850                }
1851           }
1852           if (s < end) {
1853                *d++ = '.';
1854                *d++ = '.';
1855                *d++ = '.';
1856           }
1857           *d = '\0';
1858           pv = tmpbuf;
1859     }
1860
1861     return pv;
1862 }
1863
1864 /* Print an "isn't numeric" warning, using a cleaned-up,
1865  * printable version of the offending string
1866  */
1867
1868 STATIC void
1869 S_not_a_number(pTHX_ SV *const sv)
1870 {
1871      char tmpbuf[64];
1872      const char *pv;
1873
1874      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1875
1876      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1877
1878     if (PL_op)
1879         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1880                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1881                     "Argument \"%s\" isn't numeric in %s", pv,
1882                     OP_DESC(PL_op));
1883     else
1884         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1885                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1886                     "Argument \"%s\" isn't numeric", pv);
1887 }
1888
1889 STATIC void
1890 S_not_incrementable(pTHX_ SV *const sv) {
1891      char tmpbuf[64];
1892      const char *pv;
1893
1894      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1895
1896      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1897
1898      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1899                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1900 }
1901
1902 /*
1903 =for apidoc looks_like_number
1904
1905 Test if the content of an SV looks like a number (or is a number).
1906 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1907 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1908 ignored.
1909
1910 =cut
1911 */
1912
1913 I32
1914 Perl_looks_like_number(pTHX_ SV *const sv)
1915 {
1916     const char *sbegin;
1917     STRLEN len;
1918     int numtype;
1919
1920     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1921
1922     if (SvPOK(sv) || SvPOKp(sv)) {
1923         sbegin = SvPV_nomg_const(sv, len);
1924     }
1925     else
1926         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1927     numtype = grok_number(sbegin, len, NULL);
1928     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1929 }
1930
1931 STATIC bool
1932 S_glob_2number(pTHX_ GV * const gv)
1933 {
1934     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1935
1936     /* We know that all GVs stringify to something that is not-a-number,
1937         so no need to test that.  */
1938     if (ckWARN(WARN_NUMERIC))
1939     {
1940         SV *const buffer = sv_newmortal();
1941         gv_efullname3(buffer, gv, "*");
1942         not_a_number(buffer);
1943     }
1944     /* We just want something true to return, so that S_sv_2iuv_common
1945         can tail call us and return true.  */
1946     return TRUE;
1947 }
1948
1949 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1950    until proven guilty, assume that things are not that bad... */
1951
1952 /*
1953    NV_PRESERVES_UV:
1954
1955    As 64 bit platforms often have an NV that doesn't preserve all bits of
1956    an IV (an assumption perl has been based on to date) it becomes necessary
1957    to remove the assumption that the NV always carries enough precision to
1958    recreate the IV whenever needed, and that the NV is the canonical form.
1959    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1960    precision as a side effect of conversion (which would lead to insanity
1961    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1962    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1963       where precision was lost, and IV/UV/NV slots that have a valid conversion
1964       which has lost no precision
1965    2) to ensure that if a numeric conversion to one form is requested that
1966       would lose precision, the precise conversion (or differently
1967       imprecise conversion) is also performed and cached, to prevent
1968       requests for different numeric formats on the same SV causing
1969       lossy conversion chains. (lossless conversion chains are perfectly
1970       acceptable (still))
1971
1972
1973    flags are used:
1974    SvIOKp is true if the IV slot contains a valid value
1975    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1976    SvNOKp is true if the NV slot contains a valid value
1977    SvNOK  is true only if the NV value is accurate
1978
1979    so
1980    while converting from PV to NV, check to see if converting that NV to an
1981    IV(or UV) would lose accuracy over a direct conversion from PV to
1982    IV(or UV). If it would, cache both conversions, return NV, but mark
1983    SV as IOK NOKp (ie not NOK).
1984
1985    While converting from PV to IV, check to see if converting that IV to an
1986    NV would lose accuracy over a direct conversion from PV to NV. If it
1987    would, cache both conversions, flag similarly.
1988
1989    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1990    correctly because if IV & NV were set NV *always* overruled.
1991    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1992    changes - now IV and NV together means that the two are interchangeable:
1993    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1994
1995    The benefit of this is that operations such as pp_add know that if
1996    SvIOK is true for both left and right operands, then integer addition
1997    can be used instead of floating point (for cases where the result won't
1998    overflow). Before, floating point was always used, which could lead to
1999    loss of precision compared with integer addition.
2000
2001    * making IV and NV equal status should make maths accurate on 64 bit
2002      platforms
2003    * may speed up maths somewhat if pp_add and friends start to use
2004      integers when possible instead of fp. (Hopefully the overhead in
2005      looking for SvIOK and checking for overflow will not outweigh the
2006      fp to integer speedup)
2007    * will slow down integer operations (callers of SvIV) on "inaccurate"
2008      values, as the change from SvIOK to SvIOKp will cause a call into
2009      sv_2iv each time rather than a macro access direct to the IV slot
2010    * should speed up number->string conversion on integers as IV is
2011      favoured when IV and NV are equally accurate
2012
2013    ####################################################################
2014    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2015    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2016    On the other hand, SvUOK is true iff UV.
2017    ####################################################################
2018
2019    Your mileage will vary depending your CPU's relative fp to integer
2020    performance ratio.
2021 */
2022
2023 #ifndef NV_PRESERVES_UV
2024 #  define IS_NUMBER_UNDERFLOW_IV 1
2025 #  define IS_NUMBER_UNDERFLOW_UV 2
2026 #  define IS_NUMBER_IV_AND_UV    2
2027 #  define IS_NUMBER_OVERFLOW_IV  4
2028 #  define IS_NUMBER_OVERFLOW_UV  5
2029
2030 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2031
2032 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2033 STATIC int
2034 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2035 #  ifdef DEBUGGING
2036                        , I32 numtype
2037 #  endif
2038                        )
2039 {
2040     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2041     PERL_UNUSED_CONTEXT;
2042
2043     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%" UVxf " NV=%" NVgf " inttype=%" UVXf "\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2044     if (SvNVX(sv) < (NV)IV_MIN) {
2045         (void)SvIOKp_on(sv);
2046         (void)SvNOK_on(sv);
2047         SvIV_set(sv, IV_MIN);
2048         return IS_NUMBER_UNDERFLOW_IV;
2049     }
2050     if (SvNVX(sv) > (NV)UV_MAX) {
2051         (void)SvIOKp_on(sv);
2052         (void)SvNOK_on(sv);
2053         SvIsUV_on(sv);
2054         SvUV_set(sv, UV_MAX);
2055         return IS_NUMBER_OVERFLOW_UV;
2056     }
2057     (void)SvIOKp_on(sv);
2058     (void)SvNOK_on(sv);
2059     /* Can't use strtol etc to convert this string.  (See truth table in
2060        sv_2iv  */
2061     if (SvNVX(sv) <= (UV)IV_MAX) {
2062         SvIV_set(sv, I_V(SvNVX(sv)));
2063         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2064             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2065         } else {
2066             /* Integer is imprecise. NOK, IOKp */
2067         }
2068         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2069     }
2070     SvIsUV_on(sv);
2071     SvUV_set(sv, U_V(SvNVX(sv)));
2072     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2073         if (SvUVX(sv) == UV_MAX) {
2074             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2075                possibly be preserved by NV. Hence, it must be overflow.
2076                NOK, IOKp */
2077             return IS_NUMBER_OVERFLOW_UV;
2078         }
2079         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2080     } else {
2081         /* Integer is imprecise. NOK, IOKp */
2082     }
2083     return IS_NUMBER_OVERFLOW_IV;
2084 }
2085 #endif /* !NV_PRESERVES_UV*/
2086
2087 /* If numtype is infnan, set the NV of the sv accordingly.
2088  * If numtype is anything else, try setting the NV using Atof(PV). */
2089 static void
2090 S_sv_setnv(pTHX_ SV* sv, int numtype)
2091 {
2092     bool pok = cBOOL(SvPOK(sv));
2093     bool nok = FALSE;
2094 #ifdef NV_INF
2095     if ((numtype & IS_NUMBER_INFINITY)) {
2096         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2097         nok = TRUE;
2098     } else
2099 #endif
2100 #ifdef NV_NAN
2101     if ((numtype & IS_NUMBER_NAN)) {
2102         SvNV_set(sv, NV_NAN);
2103         nok = TRUE;
2104     } else
2105 #endif
2106     if (pok) {
2107         SvNV_set(sv, Atof(SvPVX_const(sv)));
2108         /* Purposefully no true nok here, since we don't want to blow
2109          * away the possible IOK/UV of an existing sv. */
2110     }
2111     if (nok) {
2112         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2113         if (pok)
2114             SvPOK_on(sv); /* PV is okay, though. */
2115     }
2116 }
2117
2118 STATIC bool
2119 S_sv_2iuv_common(pTHX_ SV *const sv)
2120 {
2121     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2122
2123     if (SvNOKp(sv)) {
2124         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2125          * without also getting a cached IV/UV from it at the same time
2126          * (ie PV->NV conversion should detect loss of accuracy and cache
2127          * IV or UV at same time to avoid this. */
2128         /* IV-over-UV optimisation - choose to cache IV if possible */
2129
2130         if (SvTYPE(sv) == SVt_NV)
2131             sv_upgrade(sv, SVt_PVNV);
2132
2133         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2134         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2135            certainly cast into the IV range at IV_MAX, whereas the correct
2136            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2137            cases go to UV */
2138 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2139         if (Perl_isnan(SvNVX(sv))) {
2140             SvUV_set(sv, 0);
2141             SvIsUV_on(sv);
2142             return FALSE;
2143         }
2144 #endif
2145         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2146             SvIV_set(sv, I_V(SvNVX(sv)));
2147             if (SvNVX(sv) == (NV) SvIVX(sv)
2148 #ifndef NV_PRESERVES_UV
2149                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2150                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2151                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2152                 /* Don't flag it as "accurately an integer" if the number
2153                    came from a (by definition imprecise) NV operation, and
2154                    we're outside the range of NV integer precision */
2155 #endif
2156                 ) {
2157                 if (SvNOK(sv))
2158                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2159                 else {
2160                     /* scalar has trailing garbage, eg "42a" */
2161                 }
2162                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2163                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2164                                       PTR2UV(sv),
2165                                       SvNVX(sv),
2166                                       SvIVX(sv)));
2167
2168             } else {
2169                 /* IV not precise.  No need to convert from PV, as NV
2170                    conversion would already have cached IV if it detected
2171                    that PV->IV would be better than PV->NV->IV
2172                    flags already correct - don't set public IOK.  */
2173                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2174                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2175                                       PTR2UV(sv),
2176                                       SvNVX(sv),
2177                                       SvIVX(sv)));
2178             }
2179             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2180                but the cast (NV)IV_MIN rounds to a the value less (more
2181                negative) than IV_MIN which happens to be equal to SvNVX ??
2182                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2183                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2184                (NV)UVX == NVX are both true, but the values differ. :-(
2185                Hopefully for 2s complement IV_MIN is something like
2186                0x8000000000000000 which will be exact. NWC */
2187         }
2188         else {
2189             SvUV_set(sv, U_V(SvNVX(sv)));
2190             if (
2191                 (SvNVX(sv) == (NV) SvUVX(sv))
2192 #ifndef  NV_PRESERVES_UV
2193                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2194                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2195                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2196                 /* Don't flag it as "accurately an integer" if the number
2197                    came from a (by definition imprecise) NV operation, and
2198                    we're outside the range of NV integer precision */
2199 #endif
2200                 && SvNOK(sv)
2201                 )
2202                 SvIOK_on(sv);
2203             SvIsUV_on(sv);
2204             DEBUG_c(PerlIO_printf(Perl_debug_log,
2205                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2206                                   PTR2UV(sv),
2207                                   SvUVX(sv),
2208                                   SvUVX(sv)));
2209         }
2210     }
2211     else if (SvPOKp(sv)) {
2212         UV value;
2213         int numtype;
2214         const char *s = SvPVX_const(sv);
2215         const STRLEN cur = SvCUR(sv);
2216
2217         /* short-cut for a single digit string like "1" */
2218
2219         if (cur == 1) {
2220             char c = *s;
2221             if (isDIGIT(c)) {
2222                 if (SvTYPE(sv) < SVt_PVIV)
2223                     sv_upgrade(sv, SVt_PVIV);
2224                 (void)SvIOK_on(sv);
2225                 SvIV_set(sv, (IV)(c - '0'));
2226                 return FALSE;
2227             }
2228         }
2229
2230         numtype = grok_number(s, cur, &value);
2231         /* We want to avoid a possible problem when we cache an IV/ a UV which
2232            may be later translated to an NV, and the resulting NV is not
2233            the same as the direct translation of the initial string
2234            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2235            be careful to ensure that the value with the .456 is around if the
2236            NV value is requested in the future).
2237         
2238            This means that if we cache such an IV/a UV, we need to cache the
2239            NV as well.  Moreover, we trade speed for space, and do not
2240            cache the NV if we are sure it's not needed.
2241          */
2242
2243         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2244         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2245              == IS_NUMBER_IN_UV) {
2246             /* It's definitely an integer, only upgrade to PVIV */
2247             if (SvTYPE(sv) < SVt_PVIV)
2248                 sv_upgrade(sv, SVt_PVIV);
2249             (void)SvIOK_on(sv);
2250         } else if (SvTYPE(sv) < SVt_PVNV)
2251             sv_upgrade(sv, SVt_PVNV);
2252
2253         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2254             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2255                 not_a_number(sv);
2256             S_sv_setnv(aTHX_ sv, numtype);
2257             return FALSE;
2258         }
2259
2260         /* If NVs preserve UVs then we only use the UV value if we know that
2261            we aren't going to call atof() below. If NVs don't preserve UVs
2262            then the value returned may have more precision than atof() will
2263            return, even though value isn't perfectly accurate.  */
2264         if ((numtype & (IS_NUMBER_IN_UV
2265 #ifdef NV_PRESERVES_UV
2266                         | IS_NUMBER_NOT_INT
2267 #endif
2268             )) == IS_NUMBER_IN_UV) {
2269             /* This won't turn off the public IOK flag if it was set above  */
2270             (void)SvIOKp_on(sv);
2271
2272             if (!(numtype & IS_NUMBER_NEG)) {
2273                 /* positive */;
2274                 if (value <= (UV)IV_MAX) {
2275                     SvIV_set(sv, (IV)value);
2276                 } else {
2277                     /* it didn't overflow, and it was positive. */
2278                     SvUV_set(sv, value);
2279                     SvIsUV_on(sv);
2280                 }
2281             } else {
2282                 /* 2s complement assumption  */
2283                 if (value <= (UV)IV_MIN) {
2284                     SvIV_set(sv, value == (UV)IV_MIN
2285                                     ? IV_MIN : -(IV)value);
2286                 } else {
2287                     /* Too negative for an IV.  This is a double upgrade, but
2288                        I'm assuming it will be rare.  */
2289                     if (SvTYPE(sv) < SVt_PVNV)
2290                         sv_upgrade(sv, SVt_PVNV);
2291                     SvNOK_on(sv);
2292                     SvIOK_off(sv);
2293                     SvIOKp_on(sv);
2294                     SvNV_set(sv, -(NV)value);
2295                     SvIV_set(sv, IV_MIN);
2296                 }
2297             }
2298         }
2299         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2300            will be in the previous block to set the IV slot, and the next
2301            block to set the NV slot.  So no else here.  */
2302         
2303         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2304             != IS_NUMBER_IN_UV) {
2305             /* It wasn't an (integer that doesn't overflow the UV). */
2306             S_sv_setnv(aTHX_ sv, numtype);
2307
2308             if (! numtype && ckWARN(WARN_NUMERIC))
2309                 not_a_number(sv);
2310
2311             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2312                                   PTR2UV(sv), SvNVX(sv)));
2313
2314 #ifdef NV_PRESERVES_UV
2315             (void)SvIOKp_on(sv);
2316             (void)SvNOK_on(sv);
2317 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2318             if (Perl_isnan(SvNVX(sv))) {
2319                 SvUV_set(sv, 0);
2320                 SvIsUV_on(sv);
2321                 return FALSE;
2322             }
2323 #endif
2324             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2325                 SvIV_set(sv, I_V(SvNVX(sv)));
2326                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2327                     SvIOK_on(sv);
2328                 } else {
2329                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2330                 }
2331                 /* UV will not work better than IV */
2332             } else {
2333                 if (SvNVX(sv) > (NV)UV_MAX) {
2334                     SvIsUV_on(sv);
2335                     /* Integer is inaccurate. NOK, IOKp, is UV */
2336                     SvUV_set(sv, UV_MAX);
2337                 } else {
2338                     SvUV_set(sv, U_V(SvNVX(sv)));
2339                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2340                        NV preservse UV so can do correct comparison.  */
2341                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2342                         SvIOK_on(sv);
2343                     } else {
2344                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2345                     }
2346                 }
2347                 SvIsUV_on(sv);
2348             }
2349 #else /* NV_PRESERVES_UV */
2350             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2351                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2352                 /* The IV/UV slot will have been set from value returned by
2353                    grok_number above.  The NV slot has just been set using
2354                    Atof.  */
2355                 SvNOK_on(sv);
2356                 assert (SvIOKp(sv));
2357             } else {
2358                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2359                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2360                     /* Small enough to preserve all bits. */
2361                     (void)SvIOKp_on(sv);
2362                     SvNOK_on(sv);
2363                     SvIV_set(sv, I_V(SvNVX(sv)));
2364                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2365                         SvIOK_on(sv);
2366                     /* Assumption: first non-preserved integer is < IV_MAX,
2367                        this NV is in the preserved range, therefore: */
2368                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2369                           < (UV)IV_MAX)) {
2370                         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);
2371                     }
2372                 } else {
2373                     /* IN_UV NOT_INT
2374                          0      0       already failed to read UV.
2375                          0      1       already failed to read UV.
2376                          1      0       you won't get here in this case. IV/UV
2377                                         slot set, public IOK, Atof() unneeded.
2378                          1      1       already read UV.
2379                        so there's no point in sv_2iuv_non_preserve() attempting
2380                        to use atol, strtol, strtoul etc.  */
2381 #  ifdef DEBUGGING
2382                     sv_2iuv_non_preserve (sv, numtype);
2383 #  else
2384                     sv_2iuv_non_preserve (sv);
2385 #  endif
2386                 }
2387             }
2388 #endif /* NV_PRESERVES_UV */
2389         /* It might be more code efficient to go through the entire logic above
2390            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2391            gets complex and potentially buggy, so more programmer efficient
2392            to do it this way, by turning off the public flags:  */
2393         if (!numtype)
2394             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2395         }
2396     }
2397     else  {
2398         if (isGV_with_GP(sv))
2399             return glob_2number(MUTABLE_GV(sv));
2400
2401         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2402                 report_uninit(sv);
2403         if (SvTYPE(sv) < SVt_IV)
2404             /* Typically the caller expects that sv_any is not NULL now.  */
2405             sv_upgrade(sv, SVt_IV);
2406         /* Return 0 from the caller.  */
2407         return TRUE;
2408     }
2409     return FALSE;
2410 }
2411
2412 /*
2413 =for apidoc sv_2iv_flags
2414
2415 Return the integer value of an SV, doing any necessary string
2416 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2417 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2418
2419 =cut
2420 */
2421
2422 IV
2423 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2424 {
2425     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2426
2427     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2428          && SvTYPE(sv) != SVt_PVFM);
2429
2430     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2431         mg_get(sv);
2432
2433     if (SvROK(sv)) {
2434         if (SvAMAGIC(sv)) {
2435             SV * tmpstr;
2436             if (flags & SV_SKIP_OVERLOAD)
2437                 return 0;
2438             tmpstr = AMG_CALLunary(sv, numer_amg);
2439             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2440                 return SvIV(tmpstr);
2441             }
2442         }
2443         return PTR2IV(SvRV(sv));
2444     }
2445
2446     if (SvVALID(sv) || isREGEXP(sv)) {
2447         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2448            must not let them cache IVs.
2449            In practice they are extremely unlikely to actually get anywhere
2450            accessible by user Perl code - the only way that I'm aware of is when
2451            a constant subroutine which is used as the second argument to index.
2452
2453            Regexps have no SvIVX and SvNVX fields.
2454         */
2455         assert(SvPOKp(sv));
2456         {
2457             UV value;
2458             const char * const ptr =
2459                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2460             const int numtype
2461                 = grok_number(ptr, SvCUR(sv), &value);
2462
2463             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2464                 == IS_NUMBER_IN_UV) {
2465                 /* It's definitely an integer */
2466                 if (numtype & IS_NUMBER_NEG) {
2467                     if (value < (UV)IV_MIN)
2468                         return -(IV)value;
2469                 } else {
2470                     if (value < (UV)IV_MAX)
2471                         return (IV)value;
2472                 }
2473             }
2474
2475             /* Quite wrong but no good choices. */
2476             if ((numtype & IS_NUMBER_INFINITY)) {
2477                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2478             } else if ((numtype & IS_NUMBER_NAN)) {
2479                 return 0; /* So wrong. */
2480             }
2481
2482             if (!numtype) {
2483                 if (ckWARN(WARN_NUMERIC))
2484                     not_a_number(sv);
2485             }
2486             return I_V(Atof(ptr));
2487         }
2488     }
2489
2490     if (SvTHINKFIRST(sv)) {
2491         if (SvREADONLY(sv) && !SvOK(sv)) {
2492             if (ckWARN(WARN_UNINITIALIZED))
2493                 report_uninit(sv);
2494             return 0;
2495         }
2496     }
2497
2498     if (!SvIOKp(sv)) {
2499         if (S_sv_2iuv_common(aTHX_ sv))
2500             return 0;
2501     }
2502
2503     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2504         PTR2UV(sv),SvIVX(sv)));
2505     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2506 }
2507
2508 /*
2509 =for apidoc sv_2uv_flags
2510
2511 Return the unsigned integer value of an SV, doing any necessary string
2512 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2513 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2514
2515 =for apidoc Amnh||SV_GMAGIC
2516
2517 =cut
2518 */
2519
2520 UV
2521 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2522 {
2523     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2524
2525     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2526         mg_get(sv);
2527
2528     if (SvROK(sv)) {
2529         if (SvAMAGIC(sv)) {
2530             SV *tmpstr;
2531             if (flags & SV_SKIP_OVERLOAD)
2532                 return 0;
2533             tmpstr = AMG_CALLunary(sv, numer_amg);
2534             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2535                 return SvUV(tmpstr);
2536             }
2537         }
2538         return PTR2UV(SvRV(sv));
2539     }
2540
2541     if (SvVALID(sv) || isREGEXP(sv)) {
2542         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2543            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2544            Regexps have no SvIVX and SvNVX fields. */
2545         assert(SvPOKp(sv));
2546         {
2547             UV value;
2548             const char * const ptr =
2549                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2550             const int numtype
2551                 = grok_number(ptr, SvCUR(sv), &value);
2552
2553             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2554                 == IS_NUMBER_IN_UV) {
2555                 /* It's definitely an integer */
2556                 if (!(numtype & IS_NUMBER_NEG))
2557                     return value;
2558             }
2559
2560             /* Quite wrong but no good choices. */
2561             if ((numtype & IS_NUMBER_INFINITY)) {
2562                 return UV_MAX; /* So wrong. */
2563             } else if ((numtype & IS_NUMBER_NAN)) {
2564                 return 0; /* So wrong. */
2565             }
2566
2567             if (!numtype) {
2568                 if (ckWARN(WARN_NUMERIC))
2569                     not_a_number(sv);
2570             }
2571             return U_V(Atof(ptr));
2572         }
2573     }
2574
2575     if (SvTHINKFIRST(sv)) {
2576         if (SvREADONLY(sv) && !SvOK(sv)) {
2577             if (ckWARN(WARN_UNINITIALIZED))
2578                 report_uninit(sv);
2579             return 0;
2580         }
2581     }
2582
2583     if (!SvIOKp(sv)) {
2584         if (S_sv_2iuv_common(aTHX_ sv))
2585             return 0;
2586     }
2587
2588     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2589                           PTR2UV(sv),SvUVX(sv)));
2590     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2591 }
2592
2593 /*
2594 =for apidoc sv_2nv_flags
2595
2596 Return the num value of an SV, doing any necessary string or integer
2597 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2598 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2599
2600 =cut
2601 */
2602
2603 NV
2604 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2605 {
2606     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2607
2608     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2609          && SvTYPE(sv) != SVt_PVFM);
2610     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2611         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2612            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2613            Regexps have no SvIVX and SvNVX fields.  */
2614         const char *ptr;
2615         if (flags & SV_GMAGIC)
2616             mg_get(sv);
2617         if (SvNOKp(sv))
2618             return SvNVX(sv);
2619         if (SvPOKp(sv) && !SvIOKp(sv)) {
2620             ptr = SvPVX_const(sv);
2621             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2622                 !grok_number(ptr, SvCUR(sv), NULL))
2623                 not_a_number(sv);
2624             return Atof(ptr);
2625         }
2626         if (SvIOKp(sv)) {
2627             if (SvIsUV(sv))
2628                 return (NV)SvUVX(sv);
2629             else
2630                 return (NV)SvIVX(sv);
2631         }
2632         if (SvROK(sv)) {
2633             goto return_rok;
2634         }
2635         assert(SvTYPE(sv) >= SVt_PVMG);
2636         /* This falls through to the report_uninit near the end of the
2637            function. */
2638     } else if (SvTHINKFIRST(sv)) {
2639         if (SvROK(sv)) {
2640         return_rok:
2641             if (SvAMAGIC(sv)) {
2642                 SV *tmpstr;
2643                 if (flags & SV_SKIP_OVERLOAD)
2644                     return 0;
2645                 tmpstr = AMG_CALLunary(sv, numer_amg);
2646                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2647                     return SvNV(tmpstr);
2648                 }
2649             }
2650             return PTR2NV(SvRV(sv));
2651         }
2652         if (SvREADONLY(sv) && !SvOK(sv)) {
2653             if (ckWARN(WARN_UNINITIALIZED))
2654                 report_uninit(sv);
2655             return 0.0;
2656         }
2657     }
2658     if (SvTYPE(sv) < SVt_NV) {
2659         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2660         sv_upgrade(sv, SVt_NV);
2661         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2662         DEBUG_c({
2663             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2664             STORE_LC_NUMERIC_SET_STANDARD();
2665             PerlIO_printf(Perl_debug_log,
2666                           "0x%" UVxf " num(%" NVgf ")\n",
2667                           PTR2UV(sv), SvNVX(sv));
2668             RESTORE_LC_NUMERIC();
2669         });
2670         CLANG_DIAG_RESTORE_STMT;
2671
2672     }
2673     else if (SvTYPE(sv) < SVt_PVNV)
2674         sv_upgrade(sv, SVt_PVNV);
2675     if (SvNOKp(sv)) {
2676         return SvNVX(sv);
2677     }
2678     if (SvIOKp(sv)) {
2679         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2680 #ifdef NV_PRESERVES_UV
2681         if (SvIOK(sv))
2682             SvNOK_on(sv);
2683         else
2684             SvNOKp_on(sv);
2685 #else
2686         /* Only set the public NV OK flag if this NV preserves the IV  */
2687         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2688         if (SvIOK(sv) &&
2689             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2690                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2691             SvNOK_on(sv);
2692         else
2693             SvNOKp_on(sv);
2694 #endif
2695     }
2696     else if (SvPOKp(sv)) {
2697         UV value;
2698         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2699         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2700             not_a_number(sv);
2701 #ifdef NV_PRESERVES_UV
2702         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2703             == IS_NUMBER_IN_UV) {
2704             /* It's definitely an integer */
2705             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2706         } else {
2707             S_sv_setnv(aTHX_ sv, numtype);
2708         }
2709         if (numtype)
2710             SvNOK_on(sv);
2711         else
2712             SvNOKp_on(sv);
2713 #else
2714         SvNV_set(sv, Atof(SvPVX_const(sv)));
2715         /* Only set the public NV OK flag if this NV preserves the value in
2716            the PV at least as well as an IV/UV would.
2717            Not sure how to do this 100% reliably. */
2718         /* if that shift count is out of range then Configure's test is
2719            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2720            UV_BITS */
2721         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2722             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2723             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2724         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2725             /* Can't use strtol etc to convert this string, so don't try.
2726                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2727             SvNOK_on(sv);
2728         } else {
2729             /* value has been set.  It may not be precise.  */
2730             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2731                 /* 2s complement assumption for (UV)IV_MIN  */
2732                 SvNOK_on(sv); /* Integer is too negative.  */
2733             } else {
2734                 SvNOKp_on(sv);
2735                 SvIOKp_on(sv);
2736
2737                 if (numtype & IS_NUMBER_NEG) {
2738                     /* -IV_MIN is undefined, but we should never reach
2739                      * this point with both IS_NUMBER_NEG and value ==
2740                      * (UV)IV_MIN */
2741                     assert(value != (UV)IV_MIN);
2742                     SvIV_set(sv, -(IV)value);
2743                 } else if (value <= (UV)IV_MAX) {
2744                     SvIV_set(sv, (IV)value);
2745                 } else {
2746                     SvUV_set(sv, value);
2747                     SvIsUV_on(sv);
2748                 }
2749
2750                 if (numtype & IS_NUMBER_NOT_INT) {
2751                     /* I believe that even if the original PV had decimals,
2752                        they are lost beyond the limit of the FP precision.
2753                        However, neither is canonical, so both only get p
2754                        flags.  NWC, 2000/11/25 */
2755                     /* Both already have p flags, so do nothing */
2756                 } else {
2757                     const NV nv = SvNVX(sv);
2758                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2759                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2760                         if (SvIVX(sv) == I_V(nv)) {
2761                             SvNOK_on(sv);
2762                         } else {
2763                             /* It had no "." so it must be integer.  */
2764                         }
2765                         SvIOK_on(sv);
2766                     } else {
2767                         /* between IV_MAX and NV(UV_MAX).
2768                            Could be slightly > UV_MAX */
2769
2770                         if (numtype & IS_NUMBER_NOT_INT) {
2771                             /* UV and NV both imprecise.  */
2772                         } else {
2773                             const UV nv_as_uv = U_V(nv);
2774
2775                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2776                                 SvNOK_on(sv);
2777                             }
2778                             SvIOK_on(sv);
2779                         }
2780                     }
2781                 }
2782             }
2783         }
2784         /* It might be more code efficient to go through the entire logic above
2785            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2786            gets complex and potentially buggy, so more programmer efficient
2787            to do it this way, by turning off the public flags:  */
2788         if (!numtype)
2789             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2790 #endif /* NV_PRESERVES_UV */
2791     }
2792     else  {
2793         if (isGV_with_GP(sv)) {
2794             glob_2number(MUTABLE_GV(sv));
2795             return 0.0;
2796         }
2797
2798         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2799             report_uninit(sv);
2800         assert (SvTYPE(sv) >= SVt_NV);
2801         /* Typically the caller expects that sv_any is not NULL now.  */
2802         /* XXX Ilya implies that this is a bug in callers that assume this
2803            and ideally should be fixed.  */
2804         return 0.0;
2805     }
2806     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2807     DEBUG_c({
2808         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2809         STORE_LC_NUMERIC_SET_STANDARD();
2810         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2811                       PTR2UV(sv), SvNVX(sv));
2812         RESTORE_LC_NUMERIC();
2813     });
2814     CLANG_DIAG_RESTORE_STMT;
2815     return SvNVX(sv);
2816 }
2817
2818 /*
2819 =for apidoc sv_2num
2820
2821 Return an SV with the numeric value of the source SV, doing any necessary
2822 reference or overload conversion.  The caller is expected to have handled
2823 get-magic already.
2824
2825 =cut
2826 */
2827
2828 SV *
2829 Perl_sv_2num(pTHX_ SV *const sv)
2830 {
2831     PERL_ARGS_ASSERT_SV_2NUM;
2832
2833     if (!SvROK(sv))
2834         return sv;
2835     if (SvAMAGIC(sv)) {
2836         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2837         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2838         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2839             return sv_2num(tmpsv);
2840     }
2841     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2842 }
2843
2844 /* int2str_table: lookup table containing string representations of all
2845  * two digit numbers. For example, int2str_table.arr[0] is "00" and
2846  * int2str_table.arr[12*2] is "12".
2847  *
2848  * We are going to read two bytes at a time, so we have to ensure that
2849  * the array is aligned to a 2 byte boundary. That's why it was made a
2850  * union with a dummy U16 member. */
2851 static const union {
2852     char arr[200];
2853     U16 dummy;
2854 } int2str_table = {{
2855     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6',
2856     '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3',
2857     '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0',
2858     '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7',
2859     '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
2860     '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1',
2861     '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8',
2862     '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5',
2863     '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2',
2864     '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
2865     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6',
2866     '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3',
2867     '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0',
2868     '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7',
2869     '9', '8', '9', '9'
2870 }};
2871
2872 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2873  * UV as a string towards the end of buf, and return pointers to start and
2874  * end of it.
2875  *
2876  * We assume that buf is at least TYPE_CHARS(UV) long.
2877  */
2878
2879 PERL_STATIC_INLINE char *
2880 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2881 {
2882     char *ptr = buf + TYPE_CHARS(UV);
2883     char * const ebuf = ptr;
2884     int sign;
2885     U16 *word_ptr, *word_table;
2886
2887     PERL_ARGS_ASSERT_UIV_2BUF;
2888
2889     /* ptr has to be properly aligned, because we will cast it to U16* */
2890     assert(PTR2nat(ptr) % 2 == 0);
2891     /* we are going to read/write two bytes at a time */
2892     word_ptr = (U16*)ptr;
2893     word_table = (U16*)int2str_table.arr;
2894
2895     if (UNLIKELY(is_uv))
2896         sign = 0;
2897     else if (iv >= 0) {
2898         uv = iv;
2899         sign = 0;
2900     } else {
2901         /* Using 0- here to silence bogus warning from MS VC */
2902         uv = (UV) (0 - (UV) iv);
2903         sign = 1;
2904     }
2905
2906     while (uv > 99) {
2907         *--word_ptr = word_table[uv % 100];
2908         uv /= 100;
2909     }
2910     ptr = (char*)word_ptr;
2911
2912     if (uv < 10)
2913         *--ptr = (char)uv + '0';
2914     else {
2915         *--word_ptr = word_table[uv];
2916         ptr = (char*)word_ptr;
2917     }
2918
2919     if (sign)
2920         *--ptr = '-';
2921
2922     *peob = ebuf;
2923     return ptr;
2924 }
2925
2926 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2927  * infinity or a not-a-number, writes the appropriate strings to the
2928  * buffer, including a zero byte.  On success returns the written length,
2929  * excluding the zero byte, on failure (not an infinity, not a nan)
2930  * returns zero, assert-fails on maxlen being too short.
2931  *
2932  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2933  * shared string constants we point to, instead of generating a new
2934  * string for each instance. */
2935 STATIC size_t
2936 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2937     char* s = buffer;
2938     assert(maxlen >= 4);
2939     if (Perl_isinf(nv)) {
2940         if (nv < 0) {
2941             if (maxlen < 5) /* "-Inf\0"  */
2942                 return 0;
2943             *s++ = '-';
2944         } else if (plus) {
2945             *s++ = '+';
2946         }
2947         *s++ = 'I';
2948         *s++ = 'n';
2949         *s++ = 'f';
2950     }
2951     else if (Perl_isnan(nv)) {
2952         *s++ = 'N';
2953         *s++ = 'a';
2954         *s++ = 'N';
2955         /* XXX optionally output the payload mantissa bits as
2956          * "(unsigned)" (to match the nan("...") C99 function,
2957          * or maybe as "(0xhhh...)"  would make more sense...
2958          * provide a format string so that the user can decide?
2959          * NOTE: would affect the maxlen and assert() logic.*/
2960     }
2961     else {
2962       return 0;
2963     }
2964     assert((s == buffer + 3) || (s == buffer + 4));
2965     *s = 0;
2966     return s - buffer;
2967 }
2968
2969 /*
2970 =for apidoc sv_2pv_flags
2971
2972 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2973 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2974 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2975 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2976
2977 =cut
2978 */
2979
2980 char *
2981 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2982 {
2983     char *s;
2984
2985     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2986
2987     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2988          && SvTYPE(sv) != SVt_PVFM);
2989     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2990         mg_get(sv);
2991     if (SvROK(sv)) {
2992         if (SvAMAGIC(sv)) {
2993             SV *tmpstr;
2994             if (flags & SV_SKIP_OVERLOAD)
2995                 return NULL;
2996             tmpstr = AMG_CALLunary(sv, string_amg);
2997             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2998             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2999                 /* Unwrap this:  */
3000                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3001                  */
3002
3003                 char *pv;
3004                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3005                     if (flags & SV_CONST_RETURN) {
3006                         pv = (char *) SvPVX_const(tmpstr);
3007                     } else {
3008                         pv = (flags & SV_MUTABLE_RETURN)
3009                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3010                     }
3011                     if (lp)
3012                         *lp = SvCUR(tmpstr);
3013                 } else {
3014                     pv = sv_2pv_flags(tmpstr, lp, flags);
3015                 }
3016                 if (SvUTF8(tmpstr))
3017                     SvUTF8_on(sv);
3018                 else
3019                     SvUTF8_off(sv);
3020                 return pv;
3021             }
3022         }
3023         {
3024             STRLEN len;
3025             char *retval;
3026             char *buffer;
3027             SV *const referent = SvRV(sv);
3028
3029             if (!referent) {
3030                 len = 7;
3031                 retval = buffer = savepvn("NULLREF", len);
3032             } else if (SvTYPE(referent) == SVt_REGEXP &&
3033                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3034                         amagic_is_enabled(string_amg))) {
3035                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3036
3037                 assert(re);
3038                         
3039                 /* If the regex is UTF-8 we want the containing scalar to
3040                    have an UTF-8 flag too */
3041                 if (RX_UTF8(re))
3042                     SvUTF8_on(sv);
3043                 else
3044                     SvUTF8_off(sv);     
3045
3046                 if (lp)
3047                     *lp = RX_WRAPLEN(re);
3048  
3049                 return RX_WRAPPED(re);
3050             } else {
3051                 const char *const typestr = sv_reftype(referent, 0);
3052                 const STRLEN typelen = strlen(typestr);
3053                 UV addr = PTR2UV(referent);
3054                 const char *stashname = NULL;
3055                 STRLEN stashnamelen = 0; /* hush, gcc */
3056                 const char *buffer_end;
3057
3058                 if (SvOBJECT(referent)) {
3059                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3060
3061                     if (name) {
3062                         stashname = HEK_KEY(name);
3063                         stashnamelen = HEK_LEN(name);
3064
3065                         if (HEK_UTF8(name)) {
3066                             SvUTF8_on(sv);
3067                         } else {
3068                             SvUTF8_off(sv);
3069                         }
3070                     } else {
3071                         stashname = "__ANON__";
3072                         stashnamelen = 8;
3073                     }
3074                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3075                         + 2 * sizeof(UV) + 2 /* )\0 */;
3076                 } else {
3077                     len = typelen + 3 /* (0x */
3078                         + 2 * sizeof(UV) + 2 /* )\0 */;
3079                 }
3080
3081                 Newx(buffer, len, char);
3082                 buffer_end = retval = buffer + len;
3083
3084                 /* Working backwards  */
3085                 *--retval = '\0';
3086                 *--retval = ')';
3087                 do {
3088                     *--retval = PL_hexdigit[addr & 15];
3089                 } while (addr >>= 4);
3090                 *--retval = 'x';
3091                 *--retval = '0';
3092                 *--retval = '(';
3093
3094                 retval -= typelen;
3095                 memcpy(retval, typestr, typelen);
3096
3097                 if (stashname) {
3098                     *--retval = '=';
3099                     retval -= stashnamelen;
3100                     memcpy(retval, stashname, stashnamelen);
3101                 }
3102                 /* retval may not necessarily have reached the start of the
3103                    buffer here.  */
3104                 assert (retval >= buffer);
3105
3106                 len = buffer_end - retval - 1; /* -1 for that \0  */
3107             }
3108             if (lp)
3109                 *lp = len;
3110             SAVEFREEPV(buffer);
3111             return retval;
3112         }
3113     }
3114
3115     if (SvPOKp(sv)) {
3116         if (lp)
3117             *lp = SvCUR(sv);
3118         if (flags & SV_MUTABLE_RETURN)
3119             return SvPVX_mutable(sv);
3120         if (flags & SV_CONST_RETURN)
3121             return (char *)SvPVX_const(sv);
3122         return SvPVX(sv);
3123     }
3124
3125     if (SvIOK(sv)) {
3126         /* I'm assuming that if both IV and NV are equally valid then
3127            converting the IV is going to be more efficient */
3128         const U32 isUIOK = SvIsUV(sv);
3129         /* The purpose of this union is to ensure that arr is aligned on
3130            a 2 byte boundary, because that is what uiv_2buf() requires */
3131         union {
3132             char arr[TYPE_CHARS(UV)];
3133             U16 dummy;
3134         } buf;
3135         char *ebuf, *ptr;
3136         STRLEN len;
3137
3138         if (SvTYPE(sv) < SVt_PVIV)
3139             sv_upgrade(sv, SVt_PVIV);
3140         ptr = uiv_2buf(buf.arr, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3141         len = ebuf - ptr;
3142         /* inlined from sv_setpvn */
3143         s = SvGROW_mutable(sv, len + 1);
3144         Move(ptr, s, len, char);
3145         s += len;
3146         *s = '\0';
3147         SvPOK_on(sv);
3148     }
3149     else if (SvNOK(sv)) {
3150         if (SvTYPE(sv) < SVt_PVNV)
3151             sv_upgrade(sv, SVt_PVNV);
3152         if (SvNVX(sv) == 0.0
3153 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3154             && !Perl_isnan(SvNVX(sv))
3155 #endif
3156         ) {
3157             s = SvGROW_mutable(sv, 2);
3158             *s++ = '0';
3159             *s = '\0';
3160         } else {
3161             STRLEN len;
3162             STRLEN size = 5; /* "-Inf\0" */
3163
3164             s = SvGROW_mutable(sv, size);
3165             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3166             if (len > 0) {
3167                 s += len;
3168                 SvPOK_on(sv);
3169             }
3170             else {
3171                 /* some Xenix systems wipe out errno here */
3172                 dSAVE_ERRNO;
3173
3174                 size =
3175                     1 + /* sign */
3176                     1 + /* "." */
3177                     NV_DIG +
3178                     1 + /* "e" */
3179                     1 + /* sign */
3180                     5 + /* exponent digits */
3181                     1 + /* \0 */
3182                     2; /* paranoia */
3183
3184                 s = SvGROW_mutable(sv, size);
3185 #ifndef USE_LOCALE_NUMERIC
3186                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3187
3188                 SvPOK_on(sv);
3189 #else
3190                 {
3191                     bool local_radix;
3192                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3193                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3194
3195                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3196                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3197                         size += SvCUR(PL_numeric_radix_sv) - 1;
3198                         s = SvGROW_mutable(sv, size);
3199                     }
3200
3201                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3202
3203                     /* If the radix character is UTF-8, and actually is in the
3204                      * output, turn on the UTF-8 flag for the scalar */
3205                     if (   local_radix
3206                         && SvUTF8(PL_numeric_radix_sv)
3207                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3208                     {
3209                         SvUTF8_on(sv);
3210                     }
3211
3212                     RESTORE_LC_NUMERIC();
3213                 }
3214
3215                 /* We don't call SvPOK_on(), because it may come to
3216                  * pass that the locale changes so that the
3217                  * stringification we just did is no longer correct.  We
3218                  * will have to re-stringify every time it is needed */
3219 #endif
3220                 RESTORE_ERRNO;
3221             }
3222             while (*s) s++;
3223         }
3224     }
3225     else if (isGV_with_GP(sv)) {
3226         GV *const gv = MUTABLE_GV(sv);
3227         SV *const buffer = sv_newmortal();
3228
3229         gv_efullname3(buffer, gv, "*");
3230
3231         assert(SvPOK(buffer));
3232         if (SvUTF8(buffer))
3233             SvUTF8_on(sv);
3234         else
3235             SvUTF8_off(sv);
3236         if (lp)
3237             *lp = SvCUR(buffer);
3238         return SvPVX(buffer);
3239     }
3240     else {
3241         if (lp)
3242             *lp = 0;
3243         if (flags & SV_UNDEF_RETURNS_NULL)
3244             return NULL;
3245         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3246             report_uninit(sv);
3247         /* Typically the caller expects that sv_any is not NULL now.  */
3248         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3249             sv_upgrade(sv, SVt_PV);
3250         return (char *)"";
3251     }
3252
3253     {
3254         const STRLEN len = s - SvPVX_const(sv);
3255         if (lp) 
3256             *lp = len;
3257         SvCUR_set(sv, len);
3258     }
3259     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3260                           PTR2UV(sv),SvPVX_const(sv)));
3261     if (flags & SV_CONST_RETURN)
3262         return (char *)SvPVX_const(sv);
3263     if (flags & SV_MUTABLE_RETURN)
3264         return SvPVX_mutable(sv);
3265     return SvPVX(sv);
3266 }
3267
3268 /*
3269 =for apidoc sv_copypv
3270
3271 Copies a stringified representation of the source SV into the
3272 destination SV.  Automatically performs any necessary C<mg_get> and
3273 coercion of numeric values into strings.  Guaranteed to preserve
3274 C<UTF8> flag even from overloaded objects.  Similar in nature to
3275 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3276 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3277 would lose the UTF-8'ness of the PV.
3278
3279 =for apidoc sv_copypv_nomg
3280
3281 Like C<sv_copypv>, but doesn't invoke get magic first.
3282
3283 =for apidoc sv_copypv_flags
3284
3285 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3286 has the C<SV_GMAGIC> bit set.
3287
3288 =cut
3289 */
3290
3291 void
3292 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3293 {
3294     STRLEN len;
3295     const char *s;
3296
3297     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3298
3299     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3300     sv_setpvn(dsv,s,len);
3301     if (SvUTF8(ssv))
3302         SvUTF8_on(dsv);
3303     else
3304         SvUTF8_off(dsv);
3305 }
3306
3307 /*
3308 =for apidoc sv_2pvbyte
3309
3310 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3311 to its length.  If the SV is marked as being encoded as UTF-8, it will
3312 downgrade it to a byte string as a side-effect, if possible.  If the SV cannot
3313 be downgraded, this croaks.
3314
3315 Usually accessed via the C<SvPVbyte> macro.
3316
3317 =cut
3318 */
3319
3320 char *
3321 Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3322 {
3323     PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
3324
3325     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3326         mg_get(sv);
3327     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3328      || isGV_with_GP(sv) || SvROK(sv)) {
3329         SV *sv2 = sv_newmortal();
3330         sv_copypv_nomg(sv2,sv);
3331         sv = sv2;
3332     }
3333     sv_utf8_downgrade_nomg(sv,0);
3334     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3335 }
3336
3337 /*
3338 =for apidoc sv_2pvutf8
3339
3340 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3341 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3342
3343 Usually accessed via the C<SvPVutf8> macro.
3344
3345 =cut
3346 */
3347
3348 char *
3349 Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3350 {
3351     PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
3352
3353     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3354         mg_get(sv);
3355     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3356      || isGV_with_GP(sv) || SvROK(sv)) {
3357         SV *sv2 = sv_newmortal();
3358         sv_copypv_nomg(sv2,sv);
3359         sv = sv2;
3360     }
3361     sv_utf8_upgrade_nomg(sv);
3362     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3363 }
3364
3365
3366 /*
3367 =for apidoc sv_2bool
3368
3369 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3370 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3371 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3372
3373 =for apidoc sv_2bool_flags
3374
3375 This function is only used by C<sv_true()> and friends,  and only if
3376 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3377 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3378
3379
3380 =cut
3381 */
3382
3383 bool
3384 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3385 {
3386     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3387
3388     restart:
3389     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3390
3391     if (!SvOK(sv))
3392         return 0;
3393     if (SvROK(sv)) {
3394         if (SvAMAGIC(sv)) {
3395             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3396             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3397                 bool svb;
3398                 sv = tmpsv;
3399                 if(SvGMAGICAL(sv)) {
3400                     flags = SV_GMAGIC;
3401                     goto restart; /* call sv_2bool */
3402                 }
3403                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3404                 else if(!SvOK(sv)) {
3405                     svb = 0;
3406                 }
3407                 else if(SvPOK(sv)) {
3408                     svb = SvPVXtrue(sv);
3409                 }
3410                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3411                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3412                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3413                 }
3414                 else {
3415                     flags = 0;
3416                     goto restart; /* call sv_2bool_nomg */
3417                 }
3418                 return cBOOL(svb);
3419             }
3420         }
3421         assert(SvRV(sv));
3422         return TRUE;
3423     }
3424     if (isREGEXP(sv))
3425         return
3426           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3427
3428     if (SvNOK(sv) && !SvPOK(sv))
3429         return SvNVX(sv) != 0.0;
3430
3431     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3432 }
3433
3434 /*
3435 =for apidoc sv_utf8_upgrade
3436
3437 Converts the PV of an SV to its UTF-8-encoded form.
3438 Forces the SV to string form if it is not already.
3439 Will C<mg_get> on C<sv> if appropriate.
3440 Always sets the C<SvUTF8> flag to avoid future validity checks even
3441 if the whole string is the same in UTF-8 as not.
3442 Returns the number of bytes in the converted string
3443
3444 This is not a general purpose byte encoding to Unicode interface:
3445 use the Encode extension for that.
3446
3447 =for apidoc sv_utf8_upgrade_nomg
3448
3449 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3450
3451 =for apidoc sv_utf8_upgrade_flags
3452
3453 Converts the PV of an SV to its UTF-8-encoded form.
3454 Forces the SV to string form if it is not already.
3455 Always sets the SvUTF8 flag to avoid future validity checks even
3456 if all the bytes are invariant in UTF-8.
3457 If C<flags> has C<SV_GMAGIC> bit set,
3458 will C<mg_get> on C<sv> if appropriate, else not.
3459
3460 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3461
3462 Returns the number of bytes in the converted string.
3463
3464 This is not a general purpose byte encoding to Unicode interface:
3465 use the Encode extension for that.
3466
3467 =for apidoc sv_utf8_upgrade_flags_grow
3468
3469 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3470 the number of unused bytes the string of C<sv> is guaranteed to have free after
3471 it upon return.  This allows the caller to reserve extra space that it intends
3472 to fill, to avoid extra grows.
3473
3474 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3475 are implemented in terms of this function.
3476
3477 Returns the number of bytes in the converted string (not including the spares).
3478
3479 =cut
3480
3481 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3482 C<NUL> isn't guaranteed due to having other routines do the work in some input
3483 cases, or if the input is already flagged as being in utf8.
3484
3485 */
3486
3487 STRLEN
3488 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3489 {
3490     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3491
3492     if (sv == &PL_sv_undef)
3493         return 0;
3494     if (!SvPOK_nog(sv)) {
3495         STRLEN len = 0;
3496         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3497             (void) sv_2pv_flags(sv,&len, flags);
3498             if (SvUTF8(sv)) {
3499                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3500                 return len;
3501             }
3502         } else {
3503             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3504         }
3505     }
3506
3507     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3508      * compiled and individual nodes will remain non-utf8 even if the
3509      * stringified version of the pattern gets upgraded. Whether the
3510      * PVX of a REGEXP should be grown or we should just croak, I don't
3511      * know - DAPM */
3512     if (SvUTF8(sv) || isREGEXP(sv)) {
3513         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3514         return SvCUR(sv);
3515     }
3516
3517     if (SvIsCOW(sv)) {
3518         S_sv_uncow(aTHX_ sv, 0);
3519     }
3520
3521     if (SvCUR(sv) == 0) {
3522         if (extra) SvGROW(sv, extra + 1); /* Make sure is room for a trailing
3523                                              byte */
3524     } else { /* Assume Latin-1/EBCDIC */
3525         /* This function could be much more efficient if we
3526          * had a FLAG in SVs to signal if there are any variant
3527          * chars in the PV.  Given that there isn't such a flag
3528          * make the loop as fast as possible. */
3529         U8 * s = (U8 *) SvPVX_const(sv);
3530         U8 *t = s;
3531         
3532         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3533
3534             /* utf8 conversion not needed because all are invariants.  Mark
3535              * as UTF-8 even if no variant - saves scanning loop */
3536             SvUTF8_on(sv);
3537             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3538             return SvCUR(sv);
3539         }
3540
3541         /* Here, there is at least one variant (t points to the first one), so
3542          * the string should be converted to utf8.  Everything from 's' to
3543          * 't - 1' will occupy only 1 byte each on output.
3544          *
3545          * Note that the incoming SV may not have a trailing '\0', as certain
3546          * code in pp_formline can send us partially built SVs.
3547          *
3548          * There are two main ways to convert.  One is to create a new string
3549          * and go through the input starting from the beginning, appending each
3550          * converted value onto the new string as we go along.  Going this
3551          * route, it's probably best to initially allocate enough space in the
3552          * string rather than possibly running out of space and having to
3553          * reallocate and then copy what we've done so far.  Since everything
3554          * from 's' to 't - 1' is invariant, the destination can be initialized
3555          * with these using a fast memory copy.  To be sure to allocate enough
3556          * space, one could use the worst case scenario, where every remaining
3557          * byte expands to two under UTF-8, or one could parse it and count
3558          * exactly how many do expand.
3559          *
3560          * The other way is to unconditionally parse the remainder of the
3561          * string to figure out exactly how big the expanded string will be,
3562          * growing if needed.  Then start at the end of the string and place
3563          * the character there at the end of the unfilled space in the expanded
3564          * one, working backwards until reaching 't'.
3565          *
3566          * The problem with assuming the worst case scenario is that for very
3567          * long strings, we could allocate much more memory than actually
3568          * needed, which can create performance problems.  If we have to parse
3569          * anyway, the second method is the winner as it may avoid an extra
3570          * copy.  The code used to use the first method under some
3571          * circumstances, but now that there is faster variant counting on
3572          * ASCII platforms, the second method is used exclusively, eliminating
3573          * some code that no longer has to be maintained. */
3574
3575         {
3576             /* Count the total number of variants there are.  We can start
3577              * just beyond the first one, which is known to be at 't' */
3578             const Size_t invariant_length = t - s;
3579             U8 * e = (U8 *) SvEND(sv);
3580
3581             /* The length of the left overs, plus 1. */
3582             const Size_t remaining_length_p1 = e - t;
3583
3584             /* We expand by 1 for the variant at 't' and one for each remaining
3585              * variant (we start looking at 't+1') */
3586             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3587
3588             /* +1 = trailing NUL */
3589             Size_t need = SvCUR(sv) + expansion + extra + 1;
3590             U8 * d;
3591
3592             /* Grow if needed */
3593             if (SvLEN(sv) < need) {
3594                 t = invariant_length + (U8*) SvGROW(sv, need);
3595                 e = t + remaining_length_p1;
3596             }
3597             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3598
3599             /* Set the NUL at the end */
3600             d = (U8 *) SvEND(sv);
3601             *d-- = '\0';
3602
3603             /* Having decremented d, it points to the position to put the
3604              * very last byte of the expanded string.  Go backwards through
3605              * the string, copying and expanding as we go, stopping when we
3606              * get to the part that is invariant the rest of the way down */
3607
3608             e--;
3609             while (e >= t) {
3610                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3611                     *d-- = *e;
3612                 } else {
3613                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3614                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3615                 }
3616                 e--;
3617             }
3618
3619             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3620                 /* Update pos. We do it at the end rather than during
3621                  * the upgrade, to avoid slowing down the common case
3622                  * (upgrade without pos).
3623                  * pos can be stored as either bytes or characters.  Since
3624                  * this was previously a byte string we can just turn off
3625                  * the bytes flag. */
3626                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3627                 if (mg) {
3628                     mg->mg_flags &= ~MGf_BYTES;
3629                 }
3630                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3631                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3632             }
3633         }
3634     }
3635
3636     SvUTF8_on(sv);
3637     return SvCUR(sv);
3638 }
3639
3640 /*
3641 =for apidoc sv_utf8_downgrade
3642
3643 Attempts to convert the PV of an SV from characters to bytes.
3644 If the PV contains a character that cannot fit
3645 in a byte, this conversion will fail;
3646 in this case, either returns false or, if C<fail_ok> is not
3647 true, croaks.
3648
3649 This is not a general purpose Unicode to byte encoding interface:
3650 use the C<Encode> extension for that.
3651
3652 This function process get magic on C<sv>.
3653
3654 =for apidoc sv_utf8_downgrade_nomg
3655
3656 Like C<sv_utf8_downgrade>, but does not process get magic on C<sv>.
3657
3658 =for apidoc sv_utf8_downgrade_flags
3659
3660 Like C<sv_utf8_downgrade>, but with additional C<flags>.
3661 If C<flags> has C<SV_GMAGIC> bit set, processes get magic on C<sv>.
3662
3663 =cut
3664 */
3665
3666 bool
3667 Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
3668 {
3669     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
3670
3671     if (SvPOKp(sv) && SvUTF8(sv)) {
3672         if (SvCUR(sv)) {
3673             U8 *s;
3674             STRLEN len;
3675             U32 mg_flags = flags & SV_GMAGIC;
3676
3677             if (SvIsCOW(sv)) {
3678                 S_sv_uncow(aTHX_ sv, 0);
3679             }
3680             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3681                 /* update pos */
3682                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3683                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3684                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3685                                                 mg_flags|SV_CONST_RETURN);
3686                         mg_flags = 0; /* sv_pos_b2u does get magic */
3687                 }
3688                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3689                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3690
3691             }
3692             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3693
3694             if (!utf8_to_bytes(s, &len)) {
3695                 if (fail_ok)
3696                     return FALSE;
3697                 else {
3698                     if (PL_op)
3699                         Perl_croak(aTHX_ "Wide character in %s",
3700                                    OP_DESC(PL_op));
3701                     else
3702                         Perl_croak(aTHX_ "Wide character");
3703                 }
3704             }
3705             SvCUR_set(sv, len);
3706         }
3707     }
3708     SvUTF8_off(sv);
3709     return TRUE;
3710 }
3711
3712 /*
3713 =for apidoc sv_utf8_encode
3714
3715 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3716 flag off so that it looks like octets again.
3717
3718 =cut
3719 */
3720
3721 void
3722 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3723 {
3724     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3725
3726     if (SvREADONLY(sv)) {
3727         sv_force_normal_flags(sv, 0);
3728     }
3729     (void) sv_utf8_upgrade(sv);
3730     SvUTF8_off(sv);
3731 }
3732
3733 /*
3734 =for apidoc sv_utf8_decode
3735
3736 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3737 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3738 so that it looks like a character.  If the PV contains only single-byte
3739 characters, the C<SvUTF8> flag stays off.
3740 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3741
3742 =cut
3743 */
3744
3745 bool
3746 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3747 {
3748     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3749
3750     if (SvPOKp(sv)) {
3751         const U8 *start, *c, *first_variant;
3752
3753         /* The octets may have got themselves encoded - get them back as
3754          * bytes
3755          */
3756         if (!sv_utf8_downgrade(sv, TRUE))
3757             return FALSE;
3758
3759         /* it is actually just a matter of turning the utf8 flag on, but
3760          * we want to make sure everything inside is valid utf8 first.
3761          */
3762         c = start = (const U8 *) SvPVX_const(sv);
3763         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3764             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3765                 return FALSE;
3766             SvUTF8_on(sv);
3767         }
3768         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3769             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3770                    after this, clearing pos.  Does anything on CPAN
3771                    need this? */
3772             /* adjust pos to the start of a UTF8 char sequence */
3773             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3774             if (mg) {
3775                 I32 pos = mg->mg_len;
3776                 if (pos > 0) {
3777                     for (c = start + pos; c > start; c--) {
3778                         if (UTF8_IS_START(*c))
3779                             break;
3780                     }
3781                     mg->mg_len  = c - start;
3782                 }
3783             }
3784             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3785                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3786         }
3787     }
3788     return TRUE;
3789 }
3790
3791 /*
3792 =for apidoc sv_setsv
3793
3794 Copies the contents of the source SV C<ssv> into the destination SV
3795 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3796 function if the source SV needs to be reused.  Does not handle 'set' magic on
3797 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3798 performs a copy-by-value, obliterating any previous content of the
3799 destination.
3800
3801 You probably want to use one of the assortment of wrappers, such as
3802 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3803 C<SvSetMagicSV_nosteal>.
3804
3805 =for apidoc sv_setsv_flags
3806
3807 Copies the contents of the source SV C<ssv> into the destination SV
3808 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3809 function if the source SV needs to be reused.  Does not handle 'set' magic.
3810 Loosely speaking, it performs a copy-by-value, obliterating any previous
3811 content of the destination.
3812 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3813 C<ssv> if appropriate, else not.  If the C<flags>
3814 parameter has the C<SV_NOSTEAL> bit set then the
3815 buffers of temps will not be stolen.  C<sv_setsv>
3816 and C<sv_setsv_nomg> are implemented in terms of this function.
3817
3818 You probably want to use one of the assortment of wrappers, such as
3819 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3820 C<SvSetMagicSV_nosteal>.
3821
3822 This is the primary function for copying scalars, and most other
3823 copy-ish functions and macros use this underneath.
3824
3825 =for apidoc Amnh||SV_NOSTEAL
3826
3827 =cut
3828 */
3829
3830 static void
3831 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3832 {
3833     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3834     HV *old_stash = NULL;
3835
3836     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3837
3838     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3839         const char * const name = GvNAME(sstr);
3840         const STRLEN len = GvNAMELEN(sstr);
3841         {
3842             if (dtype >= SVt_PV) {
3843                 SvPV_free(dstr);
3844                 SvPV_set(dstr, 0);
3845                 SvLEN_set(dstr, 0);
3846                 SvCUR_set(dstr, 0);
3847             }
3848             SvUPGRADE(dstr, SVt_PVGV);
3849             (void)SvOK_off(dstr);
3850             isGV_with_GP_on(dstr);
3851         }
3852         GvSTASH(dstr) = GvSTASH(sstr);
3853         if (GvSTASH(dstr))
3854             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3855         gv_name_set(MUTABLE_GV(dstr), name, len,
3856                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3857         SvFAKE_on(dstr);        /* can coerce to non-glob */
3858     }
3859
3860     if(GvGP(MUTABLE_GV(sstr))) {
3861         /* If source has method cache entry, clear it */
3862         if(GvCVGEN(sstr)) {
3863             SvREFCNT_dec(GvCV(sstr));
3864             GvCV_set(sstr, NULL);
3865             GvCVGEN(sstr) = 0;
3866         }
3867         /* If source has a real method, then a method is
3868            going to change */
3869         else if(
3870          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3871         ) {
3872             mro_changes = 1;
3873         }
3874     }
3875
3876     /* If dest already had a real method, that's a change as well */
3877     if(
3878         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3879      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3880     ) {
3881         mro_changes = 1;
3882     }
3883
3884     /* We don't need to check the name of the destination if it was not a
3885        glob to begin with. */
3886     if(dtype == SVt_PVGV) {
3887         const char * const name = GvNAME((const GV *)dstr);
3888         const STRLEN len = GvNAMELEN(dstr);
3889         if(memEQs(name, len, "ISA")
3890          /* The stash may have been detached from the symbol table, so
3891             check its name. */
3892          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3893         )
3894             mro_changes = 2;
3895         else {
3896             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3897              || (len == 1 && name[0] == ':')) {
3898                 mro_changes = 3;
3899
3900                 /* Set aside the old stash, so we can reset isa caches on
3901                    its subclasses. */
3902                 if((old_stash = GvHV(dstr)))
3903                     /* Make sure we do not lose it early. */
3904                     SvREFCNT_inc_simple_void_NN(
3905                      sv_2mortal((SV *)old_stash)
3906                     );
3907             }
3908         }
3909
3910         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3911     }
3912
3913     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3914      * so temporarily protect it */
3915     ENTER;
3916     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3917     gp_free(MUTABLE_GV(dstr));
3918     GvINTRO_off(dstr);          /* one-shot flag */
3919     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3920     LEAVE;
3921
3922     if (SvTAINTED(sstr))
3923         SvTAINT(dstr);
3924     if (GvIMPORTED(dstr) != GVf_IMPORTED
3925         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3926         {
3927             GvIMPORTED_on(dstr);
3928         }
3929     GvMULTI_on(dstr);
3930     if(mro_changes == 2) {
3931       if (GvAV((const GV *)sstr)) {
3932         MAGIC *mg;
3933         SV * const sref = (SV *)GvAV((const GV *)dstr);
3934         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3935             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3936                 AV * const ary = newAV();
3937                 av_push(ary, mg->mg_obj); /* takes the refcount */
3938                 mg->mg_obj = (SV *)ary;
3939             }
3940             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3941         }
3942         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3943       }
3944       mro_isa_changed_in(GvSTASH(dstr));
3945     }
3946     else if(mro_changes == 3) {
3947         HV * const stash = GvHV(dstr);
3948         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3949             mro_package_moved(
3950                 stash, old_stash,
3951                 (GV *)dstr, 0
3952             );
3953     }
3954     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3955     if (GvIO(dstr) && dtype == SVt_PVGV) {
3956         DEBUG_o(Perl_deb(aTHX_
3957                         "glob_assign_glob clearing PL_stashcache\n"));
3958         /* It's a cache. It will rebuild itself quite happily.
3959            It's a lot of effort to work out exactly which key (or keys)
3960            might be invalidated by the creation of the this file handle.
3961          */
3962         hv_clear(PL_stashcache);
3963     }
3964     return;
3965 }
3966
3967 void
3968 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3969 {
3970     SV * const sref = SvRV(sstr);
3971     SV *dref;
3972     const int intro = GvINTRO(dstr);
3973     SV **location;
3974     U8 import_flag = 0;
3975     const U32 stype = SvTYPE(sref);
3976
3977     PERL_ARGS_ASSERT_GV_SETREF;
3978
3979     if (intro) {
3980         GvINTRO_off(dstr);      /* one-shot flag */
3981         GvLINE(dstr) = CopLINE(PL_curcop);
3982         GvEGV(dstr) = MUTABLE_GV(dstr);
3983     }
3984     GvMULTI_on(dstr);
3985     switch (stype) {
3986     case SVt_PVCV:
3987         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3988         import_flag = GVf_IMPORTED_CV;
3989         goto common;
3990     case SVt_PVHV:
3991         location = (SV **) &GvHV(dstr);
3992         import_flag = GVf_IMPORTED_HV;
3993         goto common;
3994     case SVt_PVAV:
3995         location = (SV **) &GvAV(dstr);
3996         import_flag = GVf_IMPORTED_AV;
3997         goto common;
3998     case SVt_PVIO:
3999         location = (SV **) &GvIOp(dstr);
4000         goto common;
4001     case SVt_PVFM:
4002         location = (SV **) &GvFORM(dstr);
4003         goto common;
4004     default:
4005         location = &GvSV(dstr);
4006         import_flag = GVf_IMPORTED_SV;
4007     common:
4008         if (intro) {
4009             if (stype == SVt_PVCV) {
4010                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4011                 if (GvCVGEN(dstr)) {
4012                     SvREFCNT_dec(GvCV(dstr));
4013                     GvCV_set(dstr, NULL);
4014                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4015                 }
4016             }
4017             /* SAVEt_GVSLOT takes more room on the savestack and has more
4018                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4019                leave_scope needs access to the GV so it can reset method
4020                caches.  We must use SAVEt_GVSLOT whenever the type is
4021                SVt_PVCV, even if the stash is anonymous, as the stash may
4022                gain a name somehow before leave_scope. */
4023             if (stype == SVt_PVCV) {
4024                 /* There is no save_pushptrptrptr.  Creating it for this
4025                    one call site would be overkill.  So inline the ss add
4026                    routines here. */
4027                 dSS_ADD;
4028                 SS_ADD_PTR(dstr);
4029                 SS_ADD_PTR(location);
4030                 SS_ADD_PTR(SvREFCNT_inc(*location));
4031                 SS_ADD_UV(SAVEt_GVSLOT);
4032                 SS_ADD_END(4);
4033             }
4034             else SAVEGENERICSV(*location);
4035         }
4036         dref = *location;
4037         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4038             CV* const cv = MUTABLE_CV(*location);
4039             if (cv) {
4040                 if (!GvCVGEN((const GV *)dstr) &&
4041                     (CvROOT(cv) || CvXSUB(cv)) &&
4042                     /* redundant check that avoids creating the extra SV
4043                        most of the time: */
4044                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4045                     {
4046                         SV * const new_const_sv =
4047                             CvCONST((const CV *)sref)
4048                                  ? cv_const_sv((const CV *)sref)
4049                                  : NULL;
4050                         HV * const stash = GvSTASH((const GV *)dstr);
4051                         report_redefined_cv(
4052                            sv_2mortal(
4053                              stash
4054                                ? Perl_newSVpvf(aTHX_
4055                                     "%" HEKf "::%" HEKf,
4056                                     HEKfARG(HvNAME_HEK(stash)),
4057                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4058                                : Perl_newSVpvf(aTHX_
4059                                     "%" HEKf,
4060                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4061                            ),
4062                            cv,
4063                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4064                         );
4065                     }
4066                 if (!intro)
4067                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4068                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4069                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4070                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4071             }
4072             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4073             GvASSUMECV_on(dstr);
4074             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4075                 if (intro && GvREFCNT(dstr) > 1) {
4076                     /* temporary remove extra savestack's ref */
4077                     --GvREFCNT(dstr);
4078                     gv_method_changed(dstr);
4079                     ++GvREFCNT(dstr);
4080                 }
4081                 else gv_method_changed(dstr);
4082             }
4083         }
4084         *location = SvREFCNT_inc_simple_NN(sref);
4085         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4086             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4087             GvFLAGS(dstr) |= import_flag;
4088         }
4089
4090         if (stype == SVt_PVHV) {
4091             const char * const name = GvNAME((GV*)dstr);
4092             const STRLEN len = GvNAMELEN(dstr);
4093             if (
4094                 (
4095                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4096                 || (len == 1 && name[0] == ':')
4097                 )
4098              && (!dref || HvENAME_get(dref))
4099             ) {
4100                 mro_package_moved(
4101                     (HV *)sref, (HV *)dref,
4102                     (GV *)dstr, 0
4103                 );
4104             }
4105         }
4106         else if (
4107             stype == SVt_PVAV && sref != dref
4108          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4109          /* The stash may have been detached from the symbol table, so
4110             check its name before doing anything. */
4111          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4112         ) {
4113             MAGIC *mg;
4114             MAGIC * const omg = dref && SvSMAGICAL(dref)
4115                                  ? mg_find(dref, PERL_MAGIC_isa)
4116                                  : NULL;
4117             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4118                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4119                     AV * const ary = newAV();
4120                     av_push(ary, mg->mg_obj); /* takes the refcount */
4121                     mg->mg_obj = (SV *)ary;
4122                 }
4123                 if (omg) {
4124                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4125                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4126                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4127                         while (items--)
4128                             av_push(
4129                              (AV *)mg->mg_obj,
4130                              SvREFCNT_inc_simple_NN(*svp++)
4131                             );
4132                     }
4133                     else
4134                         av_push(
4135                          (AV *)mg->mg_obj,
4136                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4137                         );
4138                 }
4139                 else
4140                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4141             }
4142             else
4143             {
4144                 SSize_t i;
4145                 sv_magic(
4146                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4147                 );
4148                 for (i = 0; i <= AvFILL(sref); ++i) {
4149                     SV **elem = av_fetch ((AV*)sref, i, 0);
4150                     if (elem) {
4151                         sv_magic(
4152                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4153                         );
4154                     }
4155                 }
4156                 mg = mg_find(sref, PERL_MAGIC_isa);
4157             }
4158             /* Since the *ISA assignment could have affected more than
4159                one stash, don't call mro_isa_changed_in directly, but let
4160                magic_clearisa do it for us, as it already has the logic for
4161                dealing with globs vs arrays of globs. */
4162             assert(mg);
4163             Perl_magic_clearisa(aTHX_ NULL, mg);
4164         }
4165         else if (stype == SVt_PVIO) {
4166             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4167             /* It's a cache. It will rebuild itself quite happily.
4168                It's a lot of effort to work out exactly which key (or keys)
4169                might be invalidated by the creation of the this file handle.
4170             */
4171             hv_clear(PL_stashcache);
4172         }
4173         break;
4174     }
4175     if (!intro) SvREFCNT_dec(dref);
4176     if (SvTAINTED(sstr))
4177         SvTAINT(dstr);
4178     return;
4179 }
4180
4181
4182
4183
4184 #ifdef PERL_DEBUG_READONLY_COW
4185 # include <sys/mman.h>
4186
4187 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4188 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4189 # endif
4190
4191 void
4192 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4193 {
4194     struct perl_memory_debug_header * const header =
4195         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4196     const MEM_SIZE len = header->size;
4197     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4198 # ifdef PERL_TRACK_MEMPOOL
4199     if (!header->readonly) header->readonly = 1;
4200 # endif
4201     if (mprotect(header, len, PROT_READ))
4202         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4203                          header, len, errno);
4204 }
4205
4206 static void
4207 S_sv_buf_to_rw(pTHX_ SV *sv)
4208 {
4209     struct perl_memory_debug_header * const header =
4210         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4211     const MEM_SIZE len = header->size;
4212     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4213     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4214         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4215                          header, len, errno);
4216 # ifdef PERL_TRACK_MEMPOOL
4217     header->readonly = 0;
4218 # endif
4219 }
4220
4221 #else
4222 # define sv_buf_to_ro(sv)       NOOP
4223 # define sv_buf_to_rw(sv)       NOOP
4224 #endif
4225
4226 void
4227 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4228 {
4229     U32 sflags;
4230     int dtype;
4231     svtype stype;
4232     unsigned int both_type;
4233
4234     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4235
4236     if (UNLIKELY( sstr == dstr ))
4237         return;
4238
4239     if (UNLIKELY( !sstr ))
4240         sstr = &PL_sv_undef;
4241
4242     stype = SvTYPE(sstr);
4243     dtype = SvTYPE(dstr);
4244     both_type = (stype | dtype);
4245
4246     /* with these values, we can check that both SVs are NULL/IV (and not
4247      * freed) just by testing the or'ed types */
4248     STATIC_ASSERT_STMT(SVt_NULL == 0);
4249     STATIC_ASSERT_STMT(SVt_IV   == 1);
4250     if (both_type <= 1) {
4251         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4252          * special-casing */
4253         U32 sflags;
4254         U32 new_dflags;
4255         SV *old_rv = NULL;
4256
4257         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4258         if (SvREADONLY(dstr))
4259             Perl_croak_no_modify();
4260         if (SvROK(dstr)) {
4261             if (SvWEAKREF(dstr))
4262                 sv_unref_flags(dstr, 0);
4263             else
4264                 old_rv = SvRV(dstr);
4265         }
4266
4267         assert(!SvGMAGICAL(sstr));
4268         assert(!SvGMAGICAL(dstr));
4269
4270         sflags = SvFLAGS(sstr);
4271         if (sflags & (SVf_IOK|SVf_ROK)) {
4272             SET_SVANY_FOR_BODYLESS_IV(dstr);
4273             new_dflags = SVt_IV;
4274
4275             if (sflags & SVf_ROK) {
4276                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4277                 new_dflags |= SVf_ROK;
4278             }
4279             else {
4280                 /* both src and dst are <= SVt_IV, so sv_any points to the
4281                  * head; so access the head directly
4282                  */
4283                 assert(    &(sstr->sv_u.svu_iv)
4284                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4285                 assert(    &(dstr->sv_u.svu_iv)
4286                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4287                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4288                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4289             }
4290         }
4291         else {
4292             new_dflags = dtype; /* turn off everything except the type */
4293         }
4294         SvFLAGS(dstr) = new_dflags;
4295         SvREFCNT_dec(old_rv);
4296
4297         return;
4298     }
4299
4300     if (UNLIKELY(both_type == SVTYPEMASK)) {
4301         if (SvIS_FREED(dstr)) {
4302             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4303                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4304         }
4305         if (SvIS_FREED(sstr)) {
4306             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4307                        (void*)sstr, (void*)dstr);
4308         }
4309     }
4310
4311
4312
4313     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4314     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4315
4316     /* There's a lot of redundancy below but we're going for speed here */
4317
4318     switch (stype) {
4319     case SVt_NULL:
4320       undef_sstr:
4321         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4322             (void)SvOK_off(dstr);
4323             return;
4324         }
4325         break;
4326     case SVt_IV:
4327         if (SvIOK(sstr)) {
4328             switch (dtype) {
4329             case SVt_NULL:
4330                 /* For performance, we inline promoting to type SVt_IV. */
4331                 /* We're starting from SVt_NULL, so provided that define is
4332                  * actual 0, we don't have to unset any SV type flags
4333                  * to promote to SVt_IV. */
4334                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4335                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4336                 SvFLAGS(dstr) |= SVt_IV;
4337                 break;
4338             case SVt_NV:
4339             case SVt_PV:
4340                 sv_upgrade(dstr, SVt_PVIV);
4341                 break;
4342             case SVt_PVGV:
4343             case SVt_PVLV:
4344                 goto end_of_first_switch;
4345             }
4346             (void)SvIOK_only(dstr);
4347             SvIV_set(dstr,  SvIVX(sstr));
4348             if (SvIsUV(sstr))
4349                 SvIsUV_on(dstr);
4350             /* SvTAINTED can only be true if the SV has taint magic, which in
4351                turn means that the SV type is PVMG (or greater). This is the
4352                case statement for SVt_IV, so this cannot be true (whatever gcov
4353                may say).  */
4354             assert(!SvTAINTED(sstr));
4355             return;
4356         }
4357         if (!SvROK(sstr))
4358             goto undef_sstr;
4359         if (dtype < SVt_PV && dtype != SVt_IV)
4360             sv_upgrade(dstr, SVt_IV);
4361         break;
4362
4363     case SVt_NV:
4364         if (LIKELY( SvNOK(sstr) )) {
4365             switch (dtype) {
4366             case SVt_NULL:
4367             case SVt_IV:
4368                 sv_upgrade(dstr, SVt_NV);
4369                 break;
4370             case SVt_PV:
4371             case SVt_PVIV:
4372                 sv_upgrade(dstr, SVt_PVNV);
4373                 break;
4374             case SVt_PVGV:
4375             case SVt_PVLV:
4376                 goto end_of_first_switch;
4377             }
4378             SvNV_set(dstr, SvNVX(sstr));
4379             (void)SvNOK_only(dstr);
4380             /* SvTAINTED can only be true if the SV has taint magic, which in
4381                turn means that the SV type is PVMG (or greater). This is the
4382                case statement for SVt_NV, so this cannot be true (whatever gcov
4383                may say).  */
4384             assert(!SvTAINTED(sstr));
4385             return;
4386         }
4387         goto undef_sstr;
4388
4389     case SVt_PV:
4390         if (dtype < SVt_PV)
4391             sv_upgrade(dstr, SVt_PV);
4392         break;
4393     case SVt_PVIV:
4394         if (dtype < SVt_PVIV)
4395             sv_upgrade(dstr, SVt_PVIV);
4396         break;
4397     case SVt_PVNV:
4398         if (dtype < SVt_PVNV)
4399             sv_upgrade(dstr, SVt_PVNV);
4400         break;
4401
4402     case SVt_INVLIST:
4403         invlist_clone(sstr, dstr);
4404         break;
4405     default:
4406         {
4407         const char * const type = sv_reftype(sstr,0);
4408         if (PL_op)
4409             /* diag_listed_as: Bizarre copy of %s */
4410             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4411         else
4412             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4413         }
4414         NOT_REACHED; /* NOTREACHED */
4415
4416     case SVt_REGEXP:
4417       upgregexp:
4418         if (dtype < SVt_REGEXP)
4419             sv_upgrade(dstr, SVt_REGEXP);
4420         break;
4421
4422     case SVt_PVLV:
4423     case SVt_PVGV:
4424     case SVt_PVMG:
4425         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4426             mg_get(sstr);
4427             if (SvTYPE(sstr) != stype)
4428                 stype = SvTYPE(sstr);
4429         }
4430         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4431                     glob_assign_glob(dstr, sstr, dtype);
4432                     return;
4433         }
4434         if (stype == SVt_PVLV)
4435         {
4436             if (isREGEXP(sstr)) goto upgregexp;
4437             SvUPGRADE(dstr, SVt_PVNV);
4438         }
4439         else
4440             SvUPGRADE(dstr, (svtype)stype);
4441     }
4442  end_of_first_switch:
4443
4444     /* dstr may have been upgraded.  */
4445     dtype = SvTYPE(dstr);
4446     sflags = SvFLAGS(sstr);
4447
4448     if (UNLIKELY( dtype == SVt_PVCV )) {
4449         /* Assigning to a subroutine sets the prototype.  */
4450         if (SvOK(sstr)) {
4451             STRLEN len;
4452             const char *const ptr = SvPV_const(sstr, len);
4453
4454             SvGROW(dstr, len + 1);
4455             Copy(ptr, SvPVX(dstr), len + 1, char);
4456             SvCUR_set(dstr, len);
4457             SvPOK_only(dstr);
4458             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4459             CvAUTOLOAD_off(dstr);
4460         } else {
4461             SvOK_off(dstr);
4462         }
4463     }
4464     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4465              || dtype == SVt_PVFM))
4466     {
4467         const char * const type = sv_reftype(dstr,0);
4468         if (PL_op)
4469             /* diag_listed_as: Cannot copy to %s */
4470             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4471         else
4472             Perl_croak(aTHX_ "Cannot copy to %s", type);
4473     } else if (sflags & SVf_ROK) {
4474         if (isGV_with_GP(dstr)
4475             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4476             sstr = SvRV(sstr);
4477             if (sstr == dstr) {
4478                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4479                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4480                 {
4481                     GvIMPORTED_on(dstr);
4482                 }
4483                 GvMULTI_on(dstr);
4484                 return;
4485             }
4486             glob_assign_glob(dstr, sstr, dtype);
4487             return;
4488         }
4489
4490         if (dtype >= SVt_PV) {
4491             if (isGV_with_GP(dstr)) {
4492                 gv_setref(dstr, sstr);
4493                 return;
4494             }
4495             if (SvPVX_const(dstr)) {
4496                 SvPV_free(dstr);
4497                 SvLEN_set(dstr, 0);
4498                 SvCUR_set(dstr, 0);
4499             }
4500         }
4501         (void)SvOK_off(dstr);
4502         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4503         SvFLAGS(dstr) |= sflags & SVf_ROK;
4504         assert(!(sflags & SVp_NOK));
4505         assert(!(sflags & SVp_IOK));
4506         assert(!(sflags & SVf_NOK));
4507         assert(!(sflags & SVf_IOK));
4508     }
4509     else if (isGV_with_GP(dstr)) {
4510         if (!(sflags & SVf_OK)) {
4511             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4512                            "Undefined value assigned to typeglob");
4513         }
4514         else {
4515             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4516             if (dstr != (const SV *)gv) {
4517                 const char * const name = GvNAME((const GV *)dstr);
4518                 const STRLEN len = GvNAMELEN(dstr);
4519                 HV *old_stash = NULL;
4520                 bool reset_isa = FALSE;
4521                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4522                  || (len == 1 && name[0] == ':')) {
4523                     /* Set aside the old stash, so we can reset isa caches
4524                        on its subclasses. */
4525                     if((old_stash = GvHV(dstr))) {
4526                         /* Make sure we do not lose it early. */
4527                         SvREFCNT_inc_simple_void_NN(
4528                          sv_2mortal((SV *)old_stash)
4529                         );
4530                     }
4531                     reset_isa = TRUE;
4532                 }
4533
4534                 if (GvGP(dstr)) {
4535                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4536                     gp_free(MUTABLE_GV(dstr));
4537                 }
4538                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4539
4540                 if (reset_isa) {
4541                     HV * const stash = GvHV(dstr);
4542                     if(
4543                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4544                     )
4545                         mro_package_moved(
4546                          stash, old_stash,
4547                          (GV *)dstr, 0
4548                         );
4549                 }
4550             }
4551         }
4552     }
4553     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4554           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4555         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4556     }
4557     else if (sflags & SVp_POK) {
4558         const STRLEN cur = SvCUR(sstr);
4559         const STRLEN len = SvLEN(sstr);
4560
4561         /*
4562          * We have three basic ways to copy the string:
4563          *
4564          *  1. Swipe
4565          *  2. Copy-on-write
4566          *  3. Actual copy
4567          * 
4568          * Which we choose is based on various factors.  The following
4569          * things are listed in order of speed, fastest to slowest:
4570          *  - Swipe
4571          *  - Copying a short string
4572          *  - Copy-on-write bookkeeping
4573          *  - malloc
4574          *  - Copying a long string
4575          * 
4576          * We swipe the string (steal the string buffer) if the SV on the
4577          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4578          * big win on long strings.  It should be a win on short strings if
4579          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4580          * slow things down, as SvPVX_const(sstr) would have been freed
4581          * soon anyway.
4582          * 
4583          * We also steal the buffer from a PADTMP (operator target) if it
4584          * is â€˜long enough’.  For short strings, a swipe does not help
4585          * here, as it causes more malloc calls the next time the target
4586          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4587          * be allocated it is still not worth swiping PADTMPs for short
4588          * strings, as the savings here are small.
4589          * 
4590          * If swiping is not an option, then we see whether it is
4591          * worth using copy-on-write.  If the lhs already has a buf-
4592          * fer big enough and the string is short, we skip it and fall back
4593          * to method 3, since memcpy is faster for short strings than the
4594          * later bookkeeping overhead that copy-on-write entails.
4595
4596          * If the rhs is not a copy-on-write string yet, then we also
4597          * consider whether the buffer is too large relative to the string
4598          * it holds.  Some operations such as readline allocate a large
4599          * buffer in the expectation of reusing it.  But turning such into
4600          * a COW buffer is counter-productive because it increases memory
4601          * usage by making readline allocate a new large buffer the sec-
4602          * ond time round.  So, if the buffer is too large, again, we use
4603          * method 3 (copy).
4604          * 
4605          * Finally, if there is no buffer on the left, or the buffer is too 
4606          * small, then we use copy-on-write and make both SVs share the
4607          * string buffer.
4608          *
4609          */
4610
4611         /* Whichever path we take through the next code, we want this true,
4612            and doing it now facilitates the COW check.  */
4613         (void)SvPOK_only(dstr);
4614
4615         if (
4616                  (              /* Either ... */
4617                                 /* slated for free anyway (and not COW)? */
4618                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4619                                 /* or a swipable TARG */
4620                  || ((sflags &
4621                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4622                        == SVs_PADTMP
4623                                 /* whose buffer is worth stealing */
4624                      && CHECK_COWBUF_THRESHOLD(cur,len)
4625                     )
4626                  ) &&
4627                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4628                  (!(flags & SV_NOSTEAL)) &&
4629                                         /* and we're allowed to steal temps */
4630                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4631                  len)             /* and really is a string */
4632         {       /* Passes the swipe test.  */
4633             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4634                 SvPV_free(dstr);
4635             SvPV_set(dstr, SvPVX_mutable(sstr));
4636             SvLEN_set(dstr, SvLEN(sstr));
4637             SvCUR_set(dstr, SvCUR(sstr));
4638
4639             SvTEMP_off(dstr);
4640             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4641             SvPV_set(sstr, NULL);
4642             SvLEN_set(sstr, 0);
4643             SvCUR_set(sstr, 0);
4644             SvTEMP_off(sstr);
4645         }
4646         else if (flags & SV_COW_SHARED_HASH_KEYS
4647               &&
4648 #ifdef PERL_COPY_ON_WRITE
4649                  (sflags & SVf_IsCOW
4650                    ? (!len ||
4651                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4652                           /* If this is a regular (non-hek) COW, only so
4653                              many COW "copies" are possible. */
4654                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4655                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4656                      && !(SvFLAGS(dstr) & SVf_BREAK)
4657                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4658                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4659                     ))
4660 #else
4661                  sflags & SVf_IsCOW
4662               && !(SvFLAGS(dstr) & SVf_BREAK)
4663 #endif
4664             ) {
4665             /* Either it's a shared hash key, or it's suitable for
4666                copy-on-write.  */
4667 #ifdef DEBUGGING
4668             if (DEBUG_C_TEST) {
4669                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4670                 sv_dump(sstr);
4671                 sv_dump(dstr);
4672             }
4673 #endif
4674 #ifdef PERL_ANY_COW
4675             if (!(sflags & SVf_IsCOW)) {
4676                     SvIsCOW_on(sstr);
4677                     CowREFCNT(sstr) = 0;
4678             }
4679 #endif
4680             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4681                 SvPV_free(dstr);
4682             }
4683
4684 #ifdef PERL_ANY_COW
4685             if (len) {
4686                     if (sflags & SVf_IsCOW) {
4687                         sv_buf_to_rw(sstr);
4688                     }
4689                     CowREFCNT(sstr)++;
4690                     SvPV_set(dstr, SvPVX_mutable(sstr));
4691                     sv_buf_to_ro(sstr);
4692             } else
4693 #endif
4694             {
4695                     /* SvIsCOW_shared_hash */
4696                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4697                                           "Copy on write: Sharing hash\n"));
4698
4699                     assert (SvTYPE(dstr) >= SVt_PV);
4700                     SvPV_set(dstr,
4701                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4702             }
4703             SvLEN_set(dstr, len);
4704             SvCUR_set(dstr, cur);
4705             SvIsCOW_on(dstr);
4706         } else {
4707             /* Failed the swipe test, and we cannot do copy-on-write either.
4708                Have to copy the string.  */
4709             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4710             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4711             SvCUR_set(dstr, cur);
4712             *SvEND(dstr) = '\0';
4713         }
4714         if (sflags & SVp_NOK) {
4715             SvNV_set(dstr, SvNVX(sstr));
4716         }
4717         if (sflags & SVp_IOK) {
4718             SvIV_set(dstr, SvIVX(sstr));
4719             if (sflags & SVf_IVisUV)
4720                 SvIsUV_on(dstr);
4721         }
4722         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4723         {
4724             const MAGIC * const smg = SvVSTRING_mg(sstr);
4725             if (smg) {
4726                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4727                          smg->mg_ptr, smg->mg_len);
4728                 SvRMAGICAL_on(dstr);
4729             }
4730         }
4731     }
4732     else if (sflags & (SVp_IOK|SVp_NOK)) {
4733         (void)SvOK_off(dstr);
4734         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4735         if (sflags & SVp_IOK) {
4736             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4737             SvIV_set(dstr, SvIVX(sstr));
4738         }
4739         if (sflags & SVp_NOK) {
4740             SvNV_set(dstr, SvNVX(sstr));
4741         }
4742     }
4743     else {
4744         if (isGV_with_GP(sstr)) {
4745             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4746         }
4747         else
4748             (void)SvOK_off(dstr);
4749     }
4750     if (SvTAINTED(sstr))
4751         SvTAINT(dstr);
4752 }
4753
4754
4755 /*
4756 =for apidoc sv_set_undef
4757
4758 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4759 Doesn't handle set magic.
4760
4761 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4762 buffer, unlike C<undef $sv>.
4763
4764 Introduced in perl 5.25.12.
4765
4766 =cut
4767 */
4768
4769 void
4770 Perl_sv_set_undef(pTHX_ SV *sv)
4771 {
4772     U32 type = SvTYPE(sv);
4773
4774     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4775
4776     /* shortcut, NULL, IV, RV */
4777
4778     if (type <= SVt_IV) {
4779         assert(!SvGMAGICAL(sv));
4780         if (SvREADONLY(sv)) {
4781             /* does undeffing PL_sv_undef count as modifying a read-only
4782              * variable? Some XS code does this */
4783             if (sv == &PL_sv_undef)
4784                 return;
4785             Perl_croak_no_modify();
4786         }
4787
4788         if (SvROK(sv)) {
4789             if (SvWEAKREF(sv))
4790                 sv_unref_flags(sv, 0);
4791             else {
4792                 SV *rv = SvRV(sv);
4793                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4794                 SvREFCNT_dec_NN(rv);
4795                 return;
4796             }
4797         }
4798         SvFLAGS(sv) = type; /* quickly turn off all flags */
4799         return;
4800     }
4801
4802     if (SvIS_FREED(sv))
4803         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4804             (void *)sv);
4805
4806     SV_CHECK_THINKFIRST_COW_DROP(sv);
4807
4808     if (isGV_with_GP(sv))
4809         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4810                        "Undefined value assigned to typeglob");
4811     else
4812         SvOK_off(sv);
4813 }
4814
4815
4816
4817 /*
4818 =for apidoc sv_setsv_mg
4819
4820 Like C<sv_setsv>, but also handles 'set' magic.
4821
4822 =cut
4823 */
4824
4825 void
4826 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4827 {
4828     PERL_ARGS_ASSERT_SV_SETSV_MG;
4829
4830     sv_setsv(dstr,sstr);
4831     SvSETMAGIC(dstr);
4832 }
4833
4834 #ifdef PERL_ANY_COW
4835 #  define SVt_COW SVt_PV
4836 SV *
4837 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4838 {
4839     STRLEN cur = SvCUR(sstr);
4840     STRLEN len = SvLEN(sstr);
4841     char *new_pv;
4842 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4843     const bool already = cBOOL(SvIsCOW(sstr));
4844 #endif
4845
4846     PERL_ARGS_ASSERT_SV_SETSV_COW;
4847 #ifdef DEBUGGING
4848     if (DEBUG_C_TEST) {
4849         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4850                       (void*)sstr, (void*)dstr);
4851         sv_dump(sstr);
4852         if (dstr)
4853                     sv_dump(dstr);
4854     }
4855 #endif
4856     if (dstr) {
4857         if (SvTHINKFIRST(dstr))
4858             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4859         else if (SvPVX_const(dstr))
4860             Safefree(SvPVX_mutable(dstr));
4861     }
4862     else
4863         new_SV(dstr);
4864     SvUPGRADE(dstr, SVt_COW);
4865
4866     assert (SvPOK(sstr));
4867     assert (SvPOKp(sstr));
4868
4869     if (SvIsCOW(sstr)) {
4870
4871         if (SvLEN(sstr) == 0) {
4872             /* source is a COW shared hash key.  */
4873             DEBUG_C(PerlIO_printf(Perl_debug_log,
4874                                   "Fast copy on write: Sharing hash\n"));
4875             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4876             goto common_exit;
4877         }
4878         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4879         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4880     } else {
4881         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4882         SvUPGRADE(sstr, SVt_COW);
4883         SvIsCOW_on(sstr);
4884         DEBUG_C(PerlIO_printf(Perl_debug_log,
4885                               "Fast copy on write: Converting sstr to COW\n"));
4886         CowREFCNT(sstr) = 0;    
4887     }
4888 #  ifdef PERL_DEBUG_READONLY_COW
4889     if (already) sv_buf_to_rw(sstr);
4890 #  endif
4891     CowREFCNT(sstr)++;  
4892     new_pv = SvPVX_mutable(sstr);
4893     sv_buf_to_ro(sstr);
4894
4895   common_exit:
4896     SvPV_set(dstr, new_pv);
4897     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4898     if (SvUTF8(sstr))
4899         SvUTF8_on(dstr);
4900     SvLEN_set(dstr, len);
4901     SvCUR_set(dstr, cur);
4902 #ifdef DEBUGGING
4903     if (DEBUG_C_TEST)
4904                 sv_dump(dstr);
4905 #endif
4906     return dstr;
4907 }
4908 #endif
4909
4910 /*
4911 =for apidoc sv_setpv_bufsize
4912
4913 Sets the SV to be a string of cur bytes length, with at least
4914 len bytes available. Ensures that there is a null byte at SvEND.
4915 Returns a char * pointer to the SvPV buffer.
4916
4917 =cut
4918 */
4919
4920 char *
4921 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4922 {
4923     char *pv;
4924
4925     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4926
4927     SV_CHECK_THINKFIRST_COW_DROP(sv);
4928     SvUPGRADE(sv, SVt_PV);
4929     pv = SvGROW(sv, len + 1);
4930     SvCUR_set(sv, cur);
4931     *(SvEND(sv))= '\0';
4932     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4933
4934     SvTAINT(sv);
4935     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4936     return pv;
4937 }
4938
4939 /*
4940 =for apidoc sv_setpvn
4941
4942 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4943 The C<len> parameter indicates the number of
4944 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4945 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4946
4947 The UTF-8 flag is not changed by this function.  A terminating NUL byte is
4948 guaranteed.
4949
4950 =cut
4951 */
4952
4953 void
4954 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4955 {
4956     char *dptr;
4957
4958     PERL_ARGS_ASSERT_SV_SETPVN;
4959
4960     SV_CHECK_THINKFIRST_COW_DROP(sv);
4961     if (isGV_with_GP(sv))
4962         Perl_croak_no_modify();
4963     if (!ptr) {
4964         (void)SvOK_off(sv);
4965         return;
4966     }
4967     else {
4968         /* len is STRLEN which is unsigned, need to copy to signed */
4969         const IV iv = len;
4970         if (iv < 0)
4971             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4972                        IVdf, iv);
4973     }
4974     SvUPGRADE(sv, SVt_PV);
4975
4976     dptr = SvGROW(sv, len + 1);
4977     Move(ptr,dptr,len,char);
4978     dptr[len] = '\0';
4979     SvCUR_set(sv, len);
4980     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4981     SvTAINT(sv);
4982     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4983 }
4984
4985 /*
4986 =for apidoc sv_setpvn_mg
4987
4988 Like C<sv_setpvn>, but also handles 'set' magic.
4989
4990 =cut
4991 */
4992
4993 void
4994 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4995 {
4996     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4997
4998     sv_setpvn(sv,ptr,len);
4999     SvSETMAGIC(sv);
5000 }
5001
5002 /*
5003 =for apidoc sv_setpv
5004
5005 Copies a string into an SV.  The string must be terminated with a C<NUL>
5006 character, and not contain embeded C<NUL>'s.
5007 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5008
5009 =cut
5010 */
5011
5012 void
5013 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5014 {
5015     STRLEN len;
5016
5017     PERL_ARGS_ASSERT_SV_SETPV;
5018
5019     SV_CHECK_THINKFIRST_COW_DROP(sv);
5020     if (!ptr) {
5021         (void)SvOK_off(sv);
5022         return;
5023     }
5024     len = strlen(ptr);
5025     SvUPGRADE(sv, SVt_PV);
5026
5027     SvGROW(sv, len + 1);
5028     Move(ptr,SvPVX(sv),len+1,char);
5029     SvCUR_set(sv, len);
5030     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5031     SvTAINT(sv);
5032     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5033 }
5034
5035 /*
5036 =for apidoc sv_setpv_mg
5037
5038 Like C<sv_setpv>, but also handles 'set' magic.
5039
5040 =cut
5041 */
5042
5043 void
5044 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5045 {
5046     PERL_ARGS_ASSERT_SV_SETPV_MG;
5047
5048     sv_setpv(sv,ptr);
5049     SvSETMAGIC(sv);
5050 }
5051
5052 void
5053 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5054 {
5055     PERL_ARGS_ASSERT_SV_SETHEK;
5056
5057     if (!hek) {
5058         return;
5059     }
5060
5061     if (HEK_LEN(hek) == HEf_SVKEY) {
5062         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5063         return;
5064     } else {
5065         const int flags = HEK_FLAGS(hek);
5066         if (flags & HVhek_WASUTF8) {
5067             STRLEN utf8_len = HEK_LEN(hek);
5068             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5069             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5070             SvUTF8_on(sv);
5071             return;
5072         } else if (flags & HVhek_UNSHARED) {
5073             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5074             if (HEK_UTF8(hek))
5075                 SvUTF8_on(sv);
5076             else SvUTF8_off(sv);
5077             return;
5078         }
5079         {
5080             SV_CHECK_THINKFIRST_COW_DROP(sv);
5081             SvUPGRADE(sv, SVt_PV);
5082             SvPV_free(sv);
5083             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5084             SvCUR_set(sv, HEK_LEN(hek));
5085             SvLEN_set(sv, 0);
5086             SvIsCOW_on(sv);
5087             SvPOK_on(sv);
5088             if (HEK_UTF8(hek))
5089                 SvUTF8_on(sv);
5090             else SvUTF8_off(sv);
5091             return;
5092         }
5093     }
5094 }
5095
5096
5097 /*
5098 =for apidoc sv_usepvn_flags
5099
5100 Tells an SV to use C<ptr> to find its string value.  Normally the
5101 string is stored inside the SV, but sv_usepvn allows the SV to use an
5102 outside string.  C<ptr> should point to memory that was allocated
5103 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5104 the start of a C<Newx>-ed block of memory, and not a pointer to the
5105 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5106 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5107 string length, C<len>, must be supplied.  By default this function
5108 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5109 so that pointer should not be freed or used by the programmer after
5110 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5111 that pointer (e.g. ptr + 1) be used.
5112
5113 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5114 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5115 and the realloc
5116 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5117 C<len>, and already meets the requirements for storing in C<SvPVX>).
5118
5119 =for apidoc Amnh||SV_SMAGIC
5120 =for apidoc Amnh||SV_HAS_TRAILING_NUL
5121
5122 =cut
5123 */
5124
5125 void
5126 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5127 {
5128     STRLEN allocate;
5129
5130     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5131
5132     SV_CHECK_THINKFIRST_COW_DROP(sv);
5133     SvUPGRADE(sv, SVt_PV);
5134     if (!ptr) {
5135         (void)SvOK_off(sv);
5136         if (flags & SV_SMAGIC)
5137             SvSETMAGIC(sv);
5138         return;
5139     }
5140     if (SvPVX_const(sv))
5141         SvPV_free(sv);
5142
5143 #ifdef DEBUGGING
5144     if (flags & SV_HAS_TRAILING_NUL)
5145         assert(ptr[len] == '\0');
5146 #endif
5147
5148     allocate = (flags & SV_HAS_TRAILING_NUL)
5149         ? len + 1 :
5150 #ifdef Perl_safesysmalloc_size
5151         len + 1;
5152 #else 
5153         PERL_STRLEN_ROUNDUP(len + 1);
5154 #endif
5155     if (flags & SV_HAS_TRAILING_NUL) {
5156         /* It's long enough - do nothing.
5157            Specifically Perl_newCONSTSUB is relying on this.  */
5158     } else {
5159 #ifdef DEBUGGING
5160         /* Force a move to shake out bugs in callers.  */
5161         char *new_ptr = (char*)safemalloc(allocate);
5162         Copy(ptr, new_ptr, len, char);
5163         PoisonFree(ptr,len,char);
5164         Safefree(ptr);
5165         ptr = new_ptr;
5166 #else
5167         ptr = (char*) saferealloc (ptr, allocate);
5168 #endif
5169     }
5170 #ifdef Perl_safesysmalloc_size
5171     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5172 #else
5173     SvLEN_set(sv, allocate);
5174 #endif
5175     SvCUR_set(sv, len);
5176     SvPV_set(sv, ptr);
5177     if (!(flags & SV_HAS_TRAILING_NUL)) {
5178         ptr[len] = '\0';
5179     }
5180     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5181     SvTAINT(sv);
5182     if (flags & SV_SMAGIC)
5183         SvSETMAGIC(sv);
5184 }
5185
5186
5187 static void
5188 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5189 {
5190     assert(SvIsCOW(sv));
5191     {
5192 #ifdef PERL_ANY_COW
5193         const char * const pvx = SvPVX_const(sv);
5194         const STRLEN len = SvLEN(sv);
5195         const STRLEN cur = SvCUR(sv);
5196
5197 #ifdef DEBUGGING
5198         if (DEBUG_C_TEST) {
5199                 PerlIO_printf(Perl_debug_log,
5200                               "Copy on write: Force normal %ld\n",
5201                               (long) flags);
5202                 sv_dump(sv);
5203         }
5204 #endif
5205         SvIsCOW_off(sv);
5206 # ifdef PERL_COPY_ON_WRITE
5207         if (len) {
5208             /* Must do this first, since the CowREFCNT uses SvPVX and
5209             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5210             the only owner left of the buffer. */
5211             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5212             {
5213                 U8 cowrefcnt = CowREFCNT(sv);
5214                 if(cowrefcnt != 0) {
5215                     cowrefcnt--;
5216                     CowREFCNT(sv) = cowrefcnt;
5217                     sv_buf_to_ro(sv);
5218                     goto copy_over;
5219                 }
5220             }
5221             /* Else we are the only owner of the buffer. */
5222         }
5223         else
5224 # endif
5225         {
5226             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5227             copy_over:
5228             SvPV_set(sv, NULL);
5229             SvCUR_set(sv, 0);
5230             SvLEN_set(sv, 0);
5231             if (flags & SV_COW_DROP_PV) {
5232                 /* OK, so we don't need to copy our buffer.  */
5233                 SvPOK_off(sv);
5234             } else {
5235                 SvGROW(sv, cur + 1);
5236                 Move(pvx,SvPVX(sv),cur,char);
5237                 SvCUR_set(sv, cur);
5238                 *SvEND(sv) = '\0';
5239             }
5240             if (! len) {
5241                         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5242             }
5243 #ifdef DEBUGGING
5244             if (DEBUG_C_TEST)
5245                 sv_dump(sv);
5246 #endif
5247         }
5248 #else
5249             const char * const pvx = SvPVX_const(sv);
5250             const STRLEN len = SvCUR(sv);
5251             SvIsCOW_off(sv);
5252             SvPV_set(sv, NULL);
5253             SvLEN_set(sv, 0);
5254             if (flags & SV_COW_DROP_PV) {
5255                 /* OK, so we don't need to copy our buffer.  */
5256                 SvPOK_off(sv);
5257             } else {
5258                 SvGROW(sv, len + 1);
5259                 Move(pvx,SvPVX(sv),len,char);
5260                 *SvEND(sv) = '\0';
5261             }
5262             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5263 #endif
5264     }
5265 }
5266
5267
5268 /*
5269 =for apidoc sv_force_normal_flags
5270
5271 Undo various types of fakery on an SV, where fakery means
5272 "more than" a string: if the PV is a shared string, make
5273 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5274 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5275 we do the copy, and is also used locally; if this is a
5276 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5277 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5278 C<SvPOK_off> rather than making a copy.  (Used where this
5279 scalar is about to be set to some other value.)  In addition,
5280 the C<flags> parameter gets passed to C<sv_unref_flags()>
5281 when unreffing.  C<sv_force_normal> calls this function
5282 with flags set to 0.
5283
5284 This function is expected to be used to signal to perl that this SV is
5285 about to be written to, and any extra book-keeping needs to be taken care
5286 of.  Hence, it croaks on read-only values.
5287
5288 =for apidoc Amnh||SV_COW_DROP_PV
5289
5290 =cut
5291 */
5292
5293 void
5294 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5295 {
5296     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5297
5298     if (SvREADONLY(sv))
5299         Perl_croak_no_modify();
5300     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5301         S_sv_uncow(aTHX_ sv, flags);
5302     if (SvROK(sv))
5303         sv_unref_flags(sv, flags);
5304     else if (SvFAKE(sv) && isGV_with_GP(sv))
5305         sv_unglob(sv, flags);
5306     else if (SvFAKE(sv) && isREGEXP(sv)) {
5307         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5308            to sv_unglob. We only need it here, so inline it.  */
5309         const bool islv = SvTYPE(sv) == SVt_PVLV;
5310         const svtype new_type =
5311           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5312         SV *const temp = newSV_type(new_type);
5313         regexp *old_rx_body;
5314
5315         if (new_type == SVt_PVMG) {
5316             SvMAGIC_set(temp, SvMAGIC(sv));
5317             SvMAGIC_set(sv, NULL);
5318             SvSTASH_set(temp, SvSTASH(sv));
5319             SvSTASH_set(sv, NULL);
5320         }
5321         if (!islv)
5322             SvCUR_set(temp, SvCUR(sv));
5323         /* Remember that SvPVX is in the head, not the body. */
5324         assert(ReANY((REGEXP *)sv)->mother_re);
5325
5326         if (islv) {
5327             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5328              * whose xpvlenu_rx field points to the regex body */
5329             XPV *xpv = (XPV*)(SvANY(sv));
5330             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5331             xpv->xpv_len_u.xpvlenu_rx = NULL;
5332         }
5333         else
5334             old_rx_body = ReANY((REGEXP *)sv);
5335
5336         /* Their buffer is already owned by someone else. */
5337         if (flags & SV_COW_DROP_PV) {
5338             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5339                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5340                a union with xpvlenu_rx) */
5341             assert(!SvLEN(islv ? sv : temp));
5342             sv->sv_u.svu_pv = 0;
5343         }
5344         else {
5345             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5346             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5347             SvPOK_on(sv);
5348         }
5349
5350         /* Now swap the rest of the bodies. */
5351
5352         SvFAKE_off(sv);
5353         if (!islv) {
5354             SvFLAGS(sv) &= ~SVTYPEMASK;
5355             SvFLAGS(sv) |= new_type;
5356             SvANY(sv) = SvANY(temp);
5357         }
5358
5359         SvFLAGS(temp) &= ~(SVTYPEMASK);
5360         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5361         SvANY(temp) = old_rx_body;
5362
5363         SvREFCNT_dec_NN(temp);
5364     }
5365     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5366 }
5367
5368 /*
5369 =for apidoc sv_chop
5370
5371 Efficient removal of characters from the beginning of the string buffer.
5372 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5373 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5374 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5375 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5376
5377 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5378 refer to the same chunk of data.
5379
5380 The unfortunate similarity of this function's name to that of Perl's C<chop>
5381 operator is strictly coincidental.  This function works from the left;
5382 C<chop> works from the right.
5383
5384 =cut
5385 */
5386
5387 void
5388 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5389 {
5390     STRLEN delta;
5391     STRLEN old_delta;
5392     U8 *p;
5393 #ifdef DEBUGGING
5394     const U8 *evacp;
5395     STRLEN evacn;
5396 #endif
5397     STRLEN max_delta;
5398
5399     PERL_ARGS_ASSERT_SV_CHOP;
5400
5401     if (!ptr || !SvPOKp(sv))
5402         return;
5403     delta = ptr - SvPVX_const(sv);
5404     if (!delta) {
5405         /* Nothing to do.  */
5406         return;
5407     }
5408     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5409     if (delta > max_delta)
5410         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5411                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5412     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5413     SV_CHECK_THINKFIRST(sv);
5414     SvPOK_only_UTF8(sv);
5415
5416     if (!SvOOK(sv)) {
5417         if (!SvLEN(sv)) { /* make copy of shared string */
5418             const char *pvx = SvPVX_const(sv);
5419             const STRLEN len = SvCUR(sv);
5420             SvGROW(sv, len + 1);
5421             Move(pvx,SvPVX(sv),len,char);
5422             *SvEND(sv) = '\0';
5423         }
5424         SvOOK_on(sv);
5425         old_delta = 0;
5426     } else {
5427         SvOOK_offset(sv, old_delta);
5428     }
5429     SvLEN_set(sv, SvLEN(sv) - delta);
5430     SvCUR_set(sv, SvCUR(sv) - delta);
5431     SvPV_set(sv, SvPVX(sv) + delta);
5432
5433     p = (U8 *)SvPVX_const(sv);
5434
5435 #ifdef DEBUGGING
5436     /* how many bytes were evacuated?  we will fill them with sentinel
5437        bytes, except for the part holding the new offset of course. */
5438     evacn = delta;
5439     if (old_delta)
5440         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5441     assert(evacn);
5442     assert(evacn <= delta + old_delta);
5443     evacp = p - evacn;
5444 #endif
5445
5446     /* This sets 'delta' to the accumulated value of all deltas so far */
5447     delta += old_delta;
5448     assert(delta);
5449
5450     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5451      * the string; otherwise store a 0 byte there and store 'delta' just prior
5452      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5453      * portion of the chopped part of the string */
5454     if (delta < 0x100) {
5455         *--p = (U8) delta;
5456     } else {
5457         *--p = 0;
5458         p -= sizeof(STRLEN);
5459         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5460     }
5461
5462 #ifdef DEBUGGING
5463     /* Fill the preceding buffer with sentinals to verify that no-one is
5464        using it.  */
5465     while (p > evacp) {
5466         --p;
5467         *p = (U8)PTR2UV(p);
5468     }
5469 #endif
5470 }
5471
5472 /*
5473 =for apidoc sv_catpvn
5474
5475 Concatenates the string onto the end of the string which is in the SV.
5476 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5477 status set, then the bytes appended should be valid UTF-8.
5478 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5479
5480 =for apidoc sv_catpvn_flags
5481
5482 Concatenates the string onto the end of the string which is in the SV.  The
5483 C<len> indicates number of bytes to copy.
5484
5485 By default, the string appended is assumed to be valid UTF-8 if the SV has
5486 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5487 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5488 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5489 string appended will be upgraded to UTF-8 if necessary.
5490
5491 If C<flags> has the C<SV_SMAGIC> bit set, will
5492 C<mg_set> on C<dsv> afterwards if appropriate.
5493 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5494 in terms of this function.
5495
5496 =for apidoc Amnh||SV_CATUTF8
5497 =for apidoc Amnh||SV_CATBYTES
5498 =for apidoc Amnh||SV_SMAGIC
5499
5500 =cut
5501 */
5502
5503 void
5504 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5505 {
5506     STRLEN dlen;
5507     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5508
5509     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5510     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5511
5512     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5513       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5514          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5515          dlen = SvCUR(dsv);
5516       }
5517       else SvGROW(dsv, dlen + slen + 3);
5518       if (sstr == dstr)
5519         sstr = SvPVX_const(dsv);
5520       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5521       SvCUR_set(dsv, SvCUR(dsv) + slen);
5522     }
5523     else {
5524         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5525         const char * const send = sstr + slen;
5526         U8 *d;
5527
5528         /* Something this code does not account for, which I think is
5529            impossible; it would require the same pv to be treated as
5530            bytes *and* utf8, which would indicate a bug elsewhere. */
5531         assert(sstr != dstr);
5532
5533         SvGROW(dsv, dlen + slen * 2 + 3);
5534         d = (U8 *)SvPVX(dsv) + dlen;
5535
5536         while (sstr < send) {
5537             append_utf8_from_native_byte(*sstr, &d);
5538             sstr++;
5539         }
5540         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5541     }
5542     *SvEND(dsv) = '\0';
5543     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5544     SvTAINT(dsv);
5545     if (flags & SV_SMAGIC)
5546         SvSETMAGIC(dsv);
5547 }
5548
5549 /*
5550 =for apidoc sv_catsv
5551
5552 Concatenates the string from SV C<ssv> onto the end of the string in SV
5553 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5554 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5555 and C<L</sv_catsv_nomg>>.
5556
5557 =for apidoc sv_catsv_flags
5558
5559 Concatenates the string from SV C<ssv> onto the end of the string in SV
5560 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5561 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5562 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5563 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5564 and C<sv_catsv_mg> are implemented in terms of this function.
5565
5566 =cut */
5567
5568 void
5569 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5570 {
5571     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5572
5573     if (ssv) {
5574         STRLEN slen;
5575         const char *spv = SvPV_flags_const(ssv, slen, flags);
5576         if (flags & SV_GMAGIC)
5577                 SvGETMAGIC(dsv);
5578         sv_catpvn_flags(dsv, spv, slen,
5579                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5580         if (flags & SV_SMAGIC)
5581                 SvSETMAGIC(dsv);
5582     }
5583 }
5584
5585 /*
5586 =for apidoc sv_catpv
5587
5588 Concatenates the C<NUL>-terminated string onto the end of the string which is
5589 in the SV.
5590 If the SV has the UTF-8 status set, then the bytes appended should be
5591 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5592 C<L</sv_catpv_mg>>.
5593
5594 =cut */
5595
5596 void
5597 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5598 {
5599     STRLEN len;
5600     STRLEN tlen;
5601     char *junk;
5602
5603     PERL_ARGS_ASSERT_SV_CATPV;
5604
5605     if (!ptr)
5606         return;
5607     junk = SvPV_force(sv, tlen);
5608     len = strlen(ptr);
5609     SvGROW(sv, tlen + len + 1);
5610     if (ptr == junk)
5611         ptr = SvPVX_const(sv);
5612     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5613     SvCUR_set(sv, SvCUR(sv) + len);
5614     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5615     SvTAINT(sv);
5616 }
5617
5618 /*
5619 =for apidoc sv_catpv_flags
5620
5621 Concatenates the C<NUL>-terminated string onto the end of the string which is
5622 in the SV.
5623 If the SV has the UTF-8 status set, then the bytes appended should
5624 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5625 on the modified SV if appropriate.
5626
5627 =cut
5628 */
5629
5630 void
5631 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5632 {
5633     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5634     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5635 }
5636
5637 /*
5638 =for apidoc sv_catpv_mg
5639
5640 Like C<sv_catpv>, but also handles 'set' magic.
5641
5642 =cut
5643 */
5644
5645 void
5646 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5647 {
5648     PERL_ARGS_ASSERT_SV_CATPV_MG;
5649
5650     sv_catpv(sv,ptr);
5651     SvSETMAGIC(sv);
5652 }
5653
5654 /*
5655 =for apidoc newSV
5656
5657 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5658 bytes of preallocated string space the SV should have.  An extra byte for a
5659 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5660 space is allocated.)  The reference count for the new SV is set to 1.
5661
5662 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5663 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5664 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5665 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5666 modules supporting older perls.
5667
5668 =cut
5669 */
5670
5671 SV *
5672 Perl_newSV(pTHX_ const STRLEN len)
5673 {
5674     SV *sv;
5675
5676     new_SV(sv);
5677     if (len) {
5678         sv_grow(sv, len + 1);
5679     }
5680     return sv;
5681 }
5682 /*
5683 =for apidoc sv_magicext
5684
5685 Adds magic to an SV, upgrading it if necessary.  Applies the
5686 supplied C<vtable> and returns a pointer to the magic added.
5687
5688 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5689 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5690 one instance of the same C<how>.
5691
5692 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5693 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5694 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5695 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5696
5697 (This is now used as a subroutine by C<sv_magic>.)
5698
5699 =cut
5700 */
5701 MAGIC * 
5702 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5703                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5704 {
5705     MAGIC* mg;
5706
5707     PERL_ARGS_ASSERT_SV_MAGICEXT;
5708
5709     SvUPGRADE(sv, SVt_PVMG);
5710     Newxz(mg, 1, MAGIC);
5711     mg->mg_moremagic = SvMAGIC(sv);
5712     SvMAGIC_set(sv, mg);
5713
5714     /* Sometimes a magic contains a reference loop, where the sv and
5715        object refer to each other.  To prevent a reference loop that
5716        would prevent such objects being freed, we look for such loops
5717        and if we find one we avoid incrementing the object refcount.
5718
5719        Note we cannot do this to avoid self-tie loops as intervening RV must
5720        have its REFCNT incremented to keep it in existence.
5721
5722     */
5723     if (!obj || obj == sv ||
5724         how == PERL_MAGIC_arylen ||
5725         how == PERL_MAGIC_regdata ||
5726         how == PERL_MAGIC_regdatum ||
5727         how == PERL_MAGIC_symtab ||
5728         (SvTYPE(obj) == SVt_PVGV &&
5729             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5730              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5731              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5732     {
5733         mg->mg_obj = obj;
5734     }
5735     else {
5736         mg->mg_obj = SvREFCNT_inc_simple(obj);
5737         mg->mg_flags |= MGf_REFCOUNTED;
5738     }
5739
5740     /* Normal self-ties simply pass a null object, and instead of
5741        using mg_obj directly, use the SvTIED_obj macro to produce a
5742        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5743        with an RV obj pointing to the glob containing the PVIO.  In
5744        this case, to avoid a reference loop, we need to weaken the
5745        reference.
5746     */
5747
5748     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5749         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5750     {
5751       sv_rvweaken(obj);
5752     }
5753
5754     mg->mg_type = how;
5755     mg->mg_len = namlen;
5756     if (name) {
5757         if (namlen > 0)
5758             mg->mg_ptr = savepvn(name, namlen);
5759         else if (namlen == HEf_SVKEY) {
5760             /* Yes, this is casting away const. This is only for the case of
5761                HEf_SVKEY. I think we need to document this aberation of the
5762                constness of the API, rather than making name non-const, as
5763                that change propagating outwards a long way.  */
5764             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5765         } else
5766             mg->mg_ptr = (char *) name;
5767     }
5768     mg->mg_virtual = (MGVTBL *) vtable;
5769
5770     mg_magical(sv);
5771     return mg;
5772 }
5773
5774 MAGIC *
5775 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5776 {
5777     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5778     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5779         /* This sv is only a delegate.  //g magic must be attached to
5780            its target. */
5781         vivify_defelem(sv);
5782         sv = LvTARG(sv);
5783     }
5784     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5785                        &PL_vtbl_mglob, 0, 0);
5786 }
5787
5788 /*
5789 =for apidoc sv_magic
5790
5791 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5792 necessary, then adds a new magic item of type C<how> to the head of the
5793 magic list.
5794
5795 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5796 handling of the C<name> and C<namlen> arguments.
5797
5798 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5799 to add more than one instance of the same C<how>.
5800
5801 =cut
5802 */
5803
5804 void
5805 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5806              const char *const name, const I32 namlen)
5807 {
5808     const MGVTBL *vtable;
5809     MAGIC* mg;
5810     unsigned int flags;
5811     unsigned int vtable_index;
5812
5813     PERL_ARGS_ASSERT_SV_MAGIC;
5814
5815     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5816         || ((flags = PL_magic_data[how]),
5817             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5818             > magic_vtable_max))
5819         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5820
5821     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5822        Useful for attaching extension internal data to perl vars.
5823        Note that multiple extensions may clash if magical scalars
5824        etc holding private data from one are passed to another. */
5825
5826     vtable = (vtable_index == magic_vtable_max)
5827         ? NULL : PL_magic_vtables + vtable_index;
5828
5829     if (SvREADONLY(sv)) {
5830         if (
5831             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5832            )
5833         {
5834             Perl_croak_no_modify();
5835         }
5836     }
5837     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5838         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5839             /* sv_magic() refuses to add a magic of the same 'how' as an
5840                existing one
5841              */
5842             if (how == PERL_MAGIC_taint)
5843                 mg->mg_len |= 1;
5844             return;
5845         }
5846     }
5847
5848     /* Force pos to be stored as characters, not bytes. */
5849     if (SvMAGICAL(sv) && DO_UTF8(sv)
5850       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5851       && mg->mg_len != -1
5852       && mg->mg_flags & MGf_BYTES) {
5853         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5854                                                SV_CONST_RETURN);
5855         mg->mg_flags &= ~MGf_BYTES;
5856     }
5857
5858     /* Rest of work is done else where */
5859     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5860
5861     switch (how) {
5862     case PERL_MAGIC_taint:
5863         mg->mg_len = 1;
5864         break;
5865     case PERL_MAGIC_ext:
5866     case PERL_MAGIC_dbfile:
5867         SvRMAGICAL_on(sv);
5868         break;
5869     }
5870 }
5871
5872 static int
5873 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5874 {
5875     MAGIC* mg;
5876     MAGIC** mgp;
5877
5878     assert(flags <= 1);
5879
5880     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5881         return 0;
5882     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5883     for (mg = *mgp; mg; mg = *mgp) {
5884         const MGVTBL* const virt = mg->mg_virtual;
5885         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5886             *mgp = mg->mg_moremagic;
5887             if (virt && virt->svt_free)
5888                 virt->svt_free(aTHX_ sv, mg);
5889             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5890                 if (mg->mg_len > 0)
5891                     Safefree(mg->mg_ptr);
5892                 else if (mg->mg_len == HEf_SVKEY)
5893                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5894                 else if (mg->mg_type == PERL_MAGIC_utf8)
5895                     Safefree(mg->mg_ptr);
5896             }
5897             if (mg->mg_flags & MGf_REFCOUNTED)
5898                 SvREFCNT_dec(mg->mg_obj);
5899             Safefree(mg);
5900         }
5901         else
5902             mgp = &mg->mg_moremagic;
5903     }
5904     if (SvMAGIC(sv)) {
5905         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5906             mg_magical(sv);     /*    else fix the flags now */
5907     }
5908     else
5909         SvMAGICAL_off(sv);
5910
5911     return 0;
5912 }
5913
5914 /*
5915 =for apidoc sv_unmagic
5916
5917 Removes all magic of type C<type> from an SV.
5918
5919 =cut
5920 */
5921
5922 int
5923 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5924 {
5925     PERL_ARGS_ASSERT_SV_UNMAGIC;
5926     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5927 }
5928
5929 /*
5930 =for apidoc sv_unmagicext
5931
5932 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5933
5934 =cut
5935 */
5936
5937 int
5938 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5939 {
5940     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5941     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5942 }
5943
5944 /*
5945 =for apidoc sv_rvweaken
5946
5947 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5948 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5949 push a back-reference to this RV onto the array of backreferences
5950 associated with that magic.  If the RV is magical, set magic will be
5951 called after the RV is cleared.  Silently ignores C<undef> and warns
5952 on already-weak references.
5953
5954 =cut
5955 */
5956
5957 SV *
5958 Perl_sv_rvweaken(pTHX_ SV *const sv)
5959 {
5960     SV *tsv;
5961
5962     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5963
5964     if (!SvOK(sv))  /* let undefs pass */
5965         return sv;
5966     if (!SvROK(sv))
5967         Perl_croak(aTHX_ "Can't weaken a nonreference");
5968     else if (SvWEAKREF(sv)) {
5969         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5970         return sv;
5971     }
5972     else if (SvREADONLY(sv)) croak_no_modify();
5973     tsv = SvRV(sv);
5974     Perl_sv_add_backref(aTHX_ tsv, sv);
5975     SvWEAKREF_on(sv);
5976     SvREFCNT_dec_NN(tsv);
5977     return sv;
5978 }
5979
5980 /*
5981 =for apidoc sv_rvunweaken
5982
5983 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5984 the backreference to this RV from the array of backreferences
5985 associated with the target SV, increment the refcount of the target.
5986 Silently ignores C<undef> and warns on non-weak references.
5987
5988 =cut
5989 */
5990
5991 SV *
5992 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5993 {
5994     SV *tsv;
5995
5996     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5997
5998     if (!SvOK(sv)) /* let undefs pass */
5999         return sv;
6000     if (!SvROK(sv))
6001         Perl_croak(aTHX_ "Can't unweaken a nonreference");
6002     else if (!SvWEAKREF(sv)) {
6003         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
6004         return sv;
6005     }
6006     else if (SvREADONLY(sv)) croak_no_modify();
6007
6008     tsv = SvRV(sv);
6009     SvWEAKREF_off(sv);
6010     SvROK_on(sv);
6011     SvREFCNT_inc_NN(tsv);
6012     Perl_sv_del_backref(aTHX_ tsv, sv);
6013     return sv;
6014 }
6015
6016 /*
6017 =for apidoc sv_get_backrefs
6018
6019 If C<sv> is the target of a weak reference then it returns the back
6020 references structure associated with the sv; otherwise return C<NULL>.
6021
6022 When returning a non-null result the type of the return is relevant. If it
6023 is an AV then the elements of the AV are the weak reference RVs which
6024 point at this item. If it is any other type then the item itself is the
6025 weak reference.
6026
6027 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6028 C<Perl_sv_kill_backrefs()>
6029
6030 =cut
6031 */
6032
6033 SV *
6034 Perl_sv_get_backrefs(SV *const sv)
6035 {
6036     SV *backrefs= NULL;
6037
6038     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6039
6040     /* find slot to store array or singleton backref */
6041
6042     if (SvTYPE(sv) == SVt_PVHV) {
6043         if (SvOOK(sv)) {
6044             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6045             backrefs = (SV *)iter->xhv_backreferences;
6046         }
6047     } else if (SvMAGICAL(sv)) {
6048         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6049         if (mg)
6050             backrefs = mg->mg_obj;
6051     }
6052     return backrefs;
6053 }
6054
6055 /* Give tsv backref magic if it hasn't already got it, then push a
6056  * back-reference to sv onto the array associated with the backref magic.
6057  *
6058  * As an optimisation, if there's only one backref and it's not an AV,
6059  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6060  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6061  * active.)
6062  */
6063
6064 /* A discussion about the backreferences array and its refcount:
6065  *
6066  * The AV holding the backreferences is pointed to either as the mg_obj of
6067  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6068  * xhv_backreferences field. The array is created with a refcount
6069  * of 2. This means that if during global destruction the array gets
6070  * picked on before its parent to have its refcount decremented by the
6071  * random zapper, it won't actually be freed, meaning it's still there for
6072  * when its parent gets freed.
6073  *
6074  * When the parent SV is freed, the extra ref is killed by
6075  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6076  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6077  *
6078  * When a single backref SV is stored directly, it is not reference
6079  * counted.
6080  */
6081
6082 void
6083 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6084 {
6085     SV **svp;
6086     AV *av = NULL;
6087     MAGIC *mg = NULL;
6088
6089     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6090
6091     /* find slot to store array or singleton backref */
6092
6093     if (SvTYPE(tsv) == SVt_PVHV) {
6094         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6095     } else {
6096         if (SvMAGICAL(tsv))
6097             mg = mg_find(tsv, PERL_MAGIC_backref);
6098         if (!mg)
6099             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6100         svp = &(mg->mg_obj);
6101     }
6102
6103     /* create or retrieve the array */
6104
6105     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6106         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6107     ) {
6108         /* create array */
6109         if (mg)
6110             mg->mg_flags |= MGf_REFCOUNTED;
6111         av = newAV();
6112         AvREAL_off(av);
6113         SvREFCNT_inc_simple_void_NN(av);
6114         /* av now has a refcnt of 2; see discussion above */
6115         av_extend(av, *svp ? 2 : 1);
6116         if (*svp) {
6117             /* move single existing backref to the array */
6118             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6119         }
6120         *svp = (SV*)av;
6121     }
6122     else {
6123         av = MUTABLE_AV(*svp);
6124         if (!av) {
6125             /* optimisation: store single backref directly in HvAUX or mg_obj */
6126             *svp = sv;
6127             return;
6128         }
6129         assert(SvTYPE(av) == SVt_PVAV);
6130         if (AvFILLp(av) >= AvMAX(av)) {
6131             av_extend(av, AvFILLp(av)+1);
6132         }
6133     }
6134     /* push new backref */
6135     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6136 }
6137
6138 /* delete a back-reference to ourselves from the backref magic associated
6139  * with the SV we point to.
6140  */
6141
6142 void
6143 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6144 {
6145     SV **svp = NULL;
6146
6147     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6148
6149     if (SvTYPE(tsv) == SVt_PVHV) {
6150         if (SvOOK(tsv))
6151             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6152     }
6153     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6154         /* It's possible for the the last (strong) reference to tsv to have
6155            become freed *before* the last thing holding a weak reference.
6156            If both survive longer than the backreferences array, then when
6157            the referent's reference count drops to 0 and it is freed, it's
6158            not able to chase the backreferences, so they aren't NULLed.
6159
6160            For example, a CV holds a weak reference to its stash. If both the
6161            CV and the stash survive longer than the backreferences array,
6162            and the CV gets picked for the SvBREAK() treatment first,
6163            *and* it turns out that the stash is only being kept alive because
6164            of an our variable in the pad of the CV, then midway during CV
6165            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6166            It ends up pointing to the freed HV. Hence it's chased in here, and
6167            if this block wasn't here, it would hit the !svp panic just below.
6168
6169            I don't believe that "better" destruction ordering is going to help
6170            here - during global destruction there's always going to be the
6171            chance that something goes out of order. We've tried to make it
6172            foolproof before, and it only resulted in evolutionary pressure on
6173            fools. Which made us look foolish for our hubris. :-(
6174         */
6175         return;
6176     }
6177     else {
6178         MAGIC *const mg
6179             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6180         svp =  mg ? &(mg->mg_obj) : NULL;
6181     }
6182
6183     if (!svp)
6184         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6185     if (!*svp) {
6186         /* It's possible that sv is being freed recursively part way through the
6187            freeing of tsv. If this happens, the backreferences array of tsv has
6188            already been freed, and so svp will be NULL. If this is the case,
6189            we should not panic. Instead, nothing needs doing, so return.  */
6190         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6191             return;
6192         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6193                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6194     }
6195
6196     if (SvTYPE(*svp) == SVt_PVAV) {
6197 #ifdef DEBUGGING
6198         int count = 1;
6199 #endif
6200         AV * const av = (AV*)*svp;
6201         SSize_t fill;
6202         assert(!SvIS_FREED(av));
6203         fill = AvFILLp(av);
6204         assert(fill > -1);
6205         svp = AvARRAY(av);
6206         /* for an SV with N weak references to it, if all those
6207          * weak refs are deleted, then sv_del_backref will be called
6208          * N times and O(N^2) compares will be done within the backref
6209          * array. To ameliorate this potential slowness, we:
6210          * 1) make sure this code is as tight as possible;
6211          * 2) when looking for SV, look for it at both the head and tail of the
6212          *    array first before searching the rest, since some create/destroy
6213          *    patterns will cause the backrefs to be freed in order.
6214          */
6215         if (*svp == sv) {
6216             AvARRAY(av)++;
6217             AvMAX(av)--;
6218         }
6219         else {
6220             SV **p = &svp[fill];
6221             SV *const topsv = *p;
6222             if (topsv != sv) {
6223 #ifdef DEBUGGING
6224                 count = 0;
6225 #endif
6226                 while (--p > svp) {
6227                     if (*p == sv) {
6228                         /* We weren't the last entry.
6229                            An unordered list has this property that you
6230                            can take the last element off the end to fill
6231                            the hole, and it's still an unordered list :-)
6232                         */
6233                         *p = topsv;
6234 #ifdef DEBUGGING
6235                         count++;
6236 #else
6237                         break; /* should only be one */
6238 #endif
6239                     }
6240                 }
6241             }
6242         }
6243         assert(count ==1);
6244         AvFILLp(av) = fill-1;
6245     }
6246     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6247         /* freed AV; skip */
6248     }
6249     else {
6250         /* optimisation: only a single backref, stored directly */
6251         if (*svp != sv)
6252             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6253                        (void*)*svp, (void*)sv);
6254         *svp = NULL;
6255     }
6256
6257 }
6258
6259 void
6260 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6261 {
6262     SV **svp;
6263     SV **last;
6264     bool is_array;
6265
6266     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6267
6268     if (!av)
6269         return;
6270
6271     /* after multiple passes through Perl_sv_clean_all() for a thingy
6272      * that has badly leaked, the backref array may have gotten freed,
6273      * since we only protect it against 1 round of cleanup */
6274     if (SvIS_FREED(av)) {
6275         if (PL_in_clean_all) /* All is fair */
6276             return;
6277         Perl_croak(aTHX_
6278                    "panic: magic_killbackrefs (freed backref AV/SV)");
6279     }
6280
6281
6282     is_array = (SvTYPE(av) == SVt_PVAV);
6283     if (is_array) {
6284         assert(!SvIS_FREED(av));
6285         svp = AvARRAY(av);
6286         if (svp)
6287             last = svp + AvFILLp(av);
6288     }
6289     else {
6290         /* optimisation: only a single backref, stored directly */
6291         svp = (SV**)&av;
6292         last = svp;
6293     }
6294
6295     if (svp) {
6296         while (svp <= last) {
6297             if (*svp) {
6298                 SV *const referrer = *svp;
6299                 if (SvWEAKREF(referrer)) {
6300                     /* XXX Should we check that it hasn't changed? */
6301                     assert(SvROK(referrer));
6302                     SvRV_set(referrer, 0);
6303                     SvOK_off(referrer);
6304                     SvWEAKREF_off(referrer);
6305                     SvSETMAGIC(referrer);
6306                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6307                            SvTYPE(referrer) == SVt_PVLV) {
6308                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6309                     /* You lookin' at me?  */
6310                     assert(GvSTASH(referrer));
6311                     assert(GvSTASH(referrer) == (const HV *)sv);
6312                     GvSTASH(referrer) = 0;
6313                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6314                            SvTYPE(referrer) == SVt_PVFM) {
6315                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6316                         /* You lookin' at me?  */
6317                         assert(CvSTASH(referrer));
6318                         assert(CvSTASH(referrer) == (const HV *)sv);
6319                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6320                     }
6321                     else {
6322                         assert(SvTYPE(sv) == SVt_PVGV);
6323                         /* You lookin' at me?  */
6324                         assert(CvGV(referrer));
6325                         assert(CvGV(referrer) == (const GV *)sv);
6326                         anonymise_cv_maybe(MUTABLE_GV(sv),
6327                                                 MUTABLE_CV(referrer));
6328                     }
6329
6330                 } else {
6331                     Perl_croak(aTHX_
6332                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6333                                (UV)SvFLAGS(referrer));
6334                 }
6335
6336                 if (is_array)
6337                     *svp = NULL;
6338             }
6339             svp++;
6340         }
6341     }
6342     if (is_array) {
6343         AvFILLp(av) = -1;
6344         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6345     }
6346     return;
6347 }
6348
6349 /*
6350 =for apidoc sv_insert
6351
6352 Inserts and/or replaces a string at the specified offset/length within the SV.
6353 Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
6354 C<little> replacing C<len> bytes of the string in C<bigstr> starting at
6355 C<offset>.  Handles get magic.
6356
6357 =for apidoc sv_insert_flags
6358
6359 Same as C<sv_insert>, but the extra C<flags> are passed to the
6360 C<SvPV_force_flags> that applies to C<bigstr>.
6361
6362 =cut
6363 */
6364
6365 void
6366 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6367 {
6368     char *big;
6369     char *mid;
6370     char *midend;
6371     char *bigend;
6372     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6373     STRLEN curlen;
6374
6375     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6376
6377     SvPV_force_flags(bigstr, curlen, flags);
6378     (void)SvPOK_only_UTF8(bigstr);
6379
6380     if (little >= SvPVX(bigstr) &&
6381         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6382         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6383            or little...little+littlelen might overlap offset...offset+len we make a copy
6384         */
6385         little = savepvn(little, littlelen);
6386         SAVEFREEPV(little);
6387     }
6388
6389     if (offset + len > curlen) {
6390         SvGROW(bigstr, offset+len+1);
6391         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6392         SvCUR_set(bigstr, offset+len);
6393     }
6394
6395     SvTAINT(bigstr);
6396     i = littlelen - len;
6397     if (i > 0) {                        /* string might grow */
6398         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6399         mid = big + offset + len;
6400         midend = bigend = big + SvCUR(bigstr);
6401         bigend += i;
6402         *bigend = '\0';
6403         while (midend > mid)            /* shove everything down */
6404             *--bigend = *--midend;
6405         Move(little,big+offset,littlelen,char);
6406         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6407         SvSETMAGIC(bigstr);
6408         return;
6409     }
6410     else if (i == 0) {
6411         Move(little,SvPVX(bigstr)+offset,len,char);
6412         SvSETMAGIC(bigstr);
6413         return;
6414     }
6415
6416     big = SvPVX(bigstr);
6417     mid = big + offset;
6418     midend = mid + len;
6419     bigend = big + SvCUR(bigstr);
6420
6421     if (midend > bigend)
6422         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6423                    midend, bigend);
6424
6425     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6426         if (littlelen) {
6427             Move(little, mid, littlelen,char);
6428             mid += littlelen;
6429         }
6430         i = bigend - midend;
6431         if (i > 0) {
6432             Move(midend, mid, i,char);
6433             mid += i;
6434         }
6435         *mid = '\0';
6436         SvCUR_set(bigstr, mid - big);
6437     }
6438     else if ((i = mid - big)) { /* faster from front */
6439         midend -= littlelen;
6440         mid = midend;
6441         Move(big, midend - i, i, char);
6442         sv_chop(bigstr,midend-i);
6443         if (littlelen)
6444             Move(little, mid, littlelen,char);
6445     }
6446     else if (littlelen) {
6447         midend -= littlelen;
6448         sv_chop(bigstr,midend);
6449         Move(little,midend,littlelen,char);
6450     }
6451     else {
6452         sv_chop(bigstr,midend);
6453     }
6454     SvSETMAGIC(bigstr);
6455 }
6456
6457 /*
6458 =for apidoc sv_replace
6459
6460 Make the first argument a copy of the second, then delete the original.
6461 The target SV physically takes over ownership of the body of the source SV
6462 and inherits its flags; however, the target keeps any magic it owns,
6463 and any magic in the source is discarded.
6464 Note that this is a rather specialist SV copying operation; most of the
6465 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6466
6467 =cut
6468 */
6469
6470 void
6471 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6472 {
6473     const U32 refcnt = SvREFCNT(sv);
6474
6475     PERL_ARGS_ASSERT_SV_REPLACE;
6476
6477     SV_CHECK_THINKFIRST_COW_DROP(sv);
6478     if (SvREFCNT(nsv) != 1) {
6479         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6480                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6481     }
6482     if (SvMAGICAL(sv)) {
6483         if (SvMAGICAL(nsv))
6484             mg_free(nsv);
6485         else
6486             sv_upgrade(nsv, SVt_PVMG);
6487         SvMAGIC_set(nsv, SvMAGIC(sv));
6488         SvFLAGS(nsv) |= SvMAGICAL(sv);
6489         SvMAGICAL_off(sv);
6490         SvMAGIC_set(sv, NULL);
6491     }
6492     SvREFCNT(sv) = 0;
6493     sv_clear(sv);
6494     assert(!SvREFCNT(sv));
6495 #ifdef DEBUG_LEAKING_SCALARS
6496     sv->sv_flags  = nsv->sv_flags;
6497     sv->sv_any    = nsv->sv_any;
6498     sv->sv_refcnt = nsv->sv_refcnt;
6499     sv->sv_u      = nsv->sv_u;
6500 #else
6501     StructCopy(nsv,sv,SV);
6502 #endif
6503     if(SvTYPE(sv) == SVt_IV) {
6504         SET_SVANY_FOR_BODYLESS_IV(sv);
6505     }
6506         
6507
6508     SvREFCNT(sv) = refcnt;
6509     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6510     SvREFCNT(nsv) = 0;
6511     del_SV(nsv);
6512 }
6513
6514 /* We're about to free a GV which has a CV that refers back to us.
6515  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6516  * field) */
6517
6518 STATIC void
6519 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6520 {
6521     SV *gvname;
6522     GV *anongv;
6523
6524     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6525
6526     /* be assertive! */
6527     assert(SvREFCNT(gv) == 0);
6528     assert(isGV(gv) && isGV_with_GP(gv));
6529     assert(GvGP(gv));
6530     assert(!CvANON(cv));
6531     assert(CvGV(cv) == gv);
6532     assert(!CvNAMED(cv));
6533
6534     /* will the CV shortly be freed by gp_free() ? */
6535     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6536         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6537         return;
6538     }
6539
6540     /* if not, anonymise: */
6541     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6542                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6543                     : newSVpvn_flags( "__ANON__", 8, 0 );
6544     sv_catpvs(gvname, "::__ANON__");
6545     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6546     SvREFCNT_dec_NN(gvname);
6547
6548     CvANON_on(cv);
6549     CvCVGV_RC_on(cv);
6550     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6551 }
6552
6553
6554 /*
6555 =for apidoc sv_clear
6556
6557 Clear an SV: call any destructors, free up any memory used by the body,
6558 and free the body itself.  The SV's head is I<not> freed, although
6559 its type is set to all 1's so that it won't inadvertently be assumed
6560 to be live during global destruction etc.
6561 This function should only be called when C<REFCNT> is zero.  Most of the time
6562 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6563 instead.
6564
6565 =cut
6566 */
6567
6568 void
6569 Perl_sv_clear(pTHX_ SV *const orig_sv)
6570 {
6571     dVAR;
6572     HV *stash;
6573     U32 type;
6574     const struct body_details *sv_type_details;
6575     SV* iter_sv = NULL;
6576     SV* next_sv = NULL;
6577     SV *sv = orig_sv;
6578     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6579                               Not strictly necessary */
6580
6581     PERL_ARGS_ASSERT_SV_CLEAR;
6582
6583     /* within this loop, sv is the SV currently being freed, and
6584      * iter_sv is the most recent AV or whatever that's being iterated
6585      * over to provide more SVs */
6586
6587     while (sv) {
6588
6589         type = SvTYPE(sv);
6590
6591         assert(SvREFCNT(sv) == 0);
6592         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6593
6594         if (type <= SVt_IV) {
6595             /* See the comment in sv.h about the collusion between this
6596              * early return and the overloading of the NULL slots in the
6597              * size table.  */
6598             if (SvROK(sv))
6599                 goto free_rv;
6600             SvFLAGS(sv) &= SVf_BREAK;
6601             SvFLAGS(sv) |= SVTYPEMASK;
6602             goto free_head;
6603         }
6604
6605         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6606            for another purpose  */
6607         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6608
6609         if (type >= SVt_PVMG) {
6610             if (SvOBJECT(sv)) {
6611                 if (!curse(sv, 1)) goto get_next_sv;
6612                 type = SvTYPE(sv); /* destructor may have changed it */
6613             }
6614             /* Free back-references before magic, in case the magic calls
6615              * Perl code that has weak references to sv. */
6616             if (type == SVt_PVHV) {
6617                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6618                 if (SvMAGIC(sv))
6619                     mg_free(sv);
6620             }
6621             else if (SvMAGIC(sv)) {
6622                 /* Free back-references before other types of magic. */
6623                 sv_unmagic(sv, PERL_MAGIC_backref);
6624                 mg_free(sv);
6625             }
6626             SvMAGICAL_off(sv);
6627         }
6628         switch (type) {
6629             /* case SVt_INVLIST: */
6630         case SVt_PVIO:
6631             if (IoIFP(sv) &&
6632                 IoIFP(sv) != PerlIO_stdin() &&
6633                 IoIFP(sv) != PerlIO_stdout() &&
6634                 IoIFP(sv) != PerlIO_stderr() &&
6635                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6636             {
6637                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6638                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6639                           IoTYPE(sv) == IoTYPE_RDWR   ||
6640                           IoTYPE(sv) == IoTYPE_APPEND));
6641             }
6642             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6643                 PerlDir_close(IoDIRP(sv));
6644             IoDIRP(sv) = (DIR*)NULL;
6645             Safefree(IoTOP_NAME(sv));
6646             Safefree(IoFMT_NAME(sv));
6647             Safefree(IoBOTTOM_NAME(sv));
6648             if ((const GV *)sv == PL_statgv)
6649                 PL_statgv = NULL;
6650             goto freescalar;
6651         case SVt_REGEXP:
6652             /* FIXME for plugins */
6653             pregfree2((REGEXP*) sv);
6654             goto freescalar;
6655         case SVt_PVCV:
6656         case SVt_PVFM:
6657             cv_undef(MUTABLE_CV(sv));
6658             /* If we're in a stash, we don't own a reference to it.
6659              * However it does have a back reference to us, which needs to
6660              * be cleared.  */
6661             if ((stash = CvSTASH(sv)))
6662                 sv_del_backref(MUTABLE_SV(stash), sv);
6663             goto freescalar;
6664         case SVt_PVHV:
6665             if (HvTOTALKEYS((HV*)sv) > 0) {
6666                 const HEK *hek;
6667                 /* this statement should match the one at the beginning of
6668                  * hv_undef_flags() */
6669                 if (   PL_phase != PERL_PHASE_DESTRUCT
6670                     && (hek = HvNAME_HEK((HV*)sv)))
6671                 {
6672                     if (PL_stashcache) {
6673                         DEBUG_o(Perl_deb(aTHX_
6674                             "sv_clear clearing PL_stashcache for '%" HEKf
6675                             "'\n",
6676                              HEKfARG(hek)));
6677                         (void)hv_deletehek(PL_stashcache,
6678                                            hek, G_DISCARD);
6679                     }
6680                     hv_name_set((HV*)sv, NULL, 0, 0);
6681                 }
6682
6683                 /* save old iter_sv in unused SvSTASH field */
6684                 assert(!SvOBJECT(sv));
6685                 SvSTASH(sv) = (HV*)iter_sv;
6686                 iter_sv = sv;
6687
6688                 /* save old hash_index in unused SvMAGIC field */
6689                 assert(!SvMAGICAL(sv));
6690                 assert(!SvMAGIC(sv));
6691                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6692                 hash_index = 0;
6693
6694                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6695                 goto get_next_sv; /* process this new sv */
6696             }
6697             /* free empty hash */
6698             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6699             assert(!HvARRAY((HV*)sv));
6700             break;
6701         case SVt_PVAV:
6702             {
6703                 AV* av = MUTABLE_AV(sv);
6704                 if (PL_comppad == av) {
6705                     PL_comppad = NULL;
6706                     PL_curpad = NULL;
6707                 }
6708                 if (AvREAL(av) && AvFILLp(av) > -1) {
6709                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6710                     /* save old iter_sv in top-most slot of AV,
6711                      * and pray that it doesn't get wiped in the meantime */
6712                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6713                     iter_sv = sv;
6714                     goto get_next_sv; /* process this new sv */
6715                 }
6716                 Safefree(AvALLOC(av));
6717             }
6718
6719             break;
6720         case SVt_PVLV:
6721             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6722                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6723                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6724                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6725             }
6726             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6727                 SvREFCNT_dec(LvTARG(sv));
6728             if (isREGEXP(sv)) {
6729                 /* SvLEN points to a regex body. Free the body, then
6730                  * set SvLEN to whatever value was in the now-freed
6731                  * regex body. The PVX buffer is shared by multiple re's
6732                  * and only freed once, by the re whose len in non-null */
6733                 STRLEN len = ReANY(sv)->xpv_len;
6734                 pregfree2((REGEXP*) sv);
6735                 SvLEN_set((sv), len);
6736                 goto freescalar;
6737             }
6738             /* FALLTHROUGH */
6739         case SVt_PVGV:
6740             if (isGV_with_GP(sv)) {
6741                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6742                    && HvENAME_get(stash))
6743                     mro_method_changed_in(stash);
6744                 gp_free(MUTABLE_GV(sv));
6745                 if (GvNAME_HEK(sv))
6746                     unshare_hek(GvNAME_HEK(sv));
6747                 /* If we're in a stash, we don't own a reference to it.
6748                  * However it does have a back reference to us, which
6749                  * needs to be cleared.  */
6750                 if ((stash = GvSTASH(sv)))
6751                         sv_del_backref(MUTABLE_SV(stash), sv);
6752             }
6753             /* FIXME. There are probably more unreferenced pointers to SVs
6754              * in the interpreter struct that we should check and tidy in
6755              * a similar fashion to this:  */
6756             /* See also S_sv_unglob, which does the same thing. */
6757             if ((const GV *)sv == PL_last_in_gv)
6758                 PL_last_in_gv = NULL;
6759             else if ((const GV *)sv == PL_statgv)
6760                 PL_statgv = NULL;
6761             else if ((const GV *)sv == PL_stderrgv)
6762                 PL_stderrgv = NULL;
6763             /* FALLTHROUGH */
6764         case SVt_PVMG:
6765         case SVt_PVNV:
6766         case SVt_PVIV:
6767         case SVt_INVLIST:
6768         case SVt_PV:
6769           freescalar:
6770             /* Don't bother with SvOOK_off(sv); as we're only going to
6771              * free it.  */
6772             if (SvOOK(sv)) {
6773                 STRLEN offset;
6774                 SvOOK_offset(sv, offset);
6775                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6776                 /* Don't even bother with turning off the OOK flag.  */
6777             }
6778             if (SvROK(sv)) {
6779             free_rv:
6780                 {
6781                     SV * const target = SvRV(sv);
6782                     if (SvWEAKREF(sv))
6783                         sv_del_backref(target, sv);
6784                     else
6785                         next_sv = target;
6786                 }
6787             }
6788 #ifdef PERL_ANY_COW
6789             else if (SvPVX_const(sv)
6790                      && !(SvTYPE(sv) == SVt_PVIO
6791                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6792             {
6793                 if (SvIsCOW(sv)) {
6794 #ifdef DEBUGGING
6795                     if (DEBUG_C_TEST) {
6796                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6797                         sv_dump(sv);
6798                     }
6799 #endif
6800                     if (SvLEN(sv)) {
6801                         if (CowREFCNT(sv)) {
6802                             sv_buf_to_rw(sv);
6803                             CowREFCNT(sv)--;
6804                             sv_buf_to_ro(sv);
6805                             SvLEN_set(sv, 0);
6806                         }
6807                     } else {
6808                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6809                     }
6810
6811                 }
6812                 if (SvLEN(sv)) {
6813                     Safefree(SvPVX_mutable(sv));
6814                 }
6815             }
6816 #else
6817             else if (SvPVX_const(sv) && SvLEN(sv)
6818                      && !(SvTYPE(sv) == SVt_PVIO
6819                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6820                 Safefree(SvPVX_mutable(sv));
6821             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6822                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6823             }
6824 #endif
6825             break;
6826         case SVt_NV:
6827             break;
6828         }
6829
6830       free_body:
6831
6832         SvFLAGS(sv) &= SVf_BREAK;
6833         SvFLAGS(sv) |= SVTYPEMASK;
6834
6835         sv_type_details = bodies_by_type + type;
6836         if (sv_type_details->arena) {
6837             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6838                      &PL_body_roots[type]);
6839         }
6840         else if (sv_type_details->body_size) {
6841             safefree(SvANY(sv));
6842         }
6843
6844       free_head:
6845         /* caller is responsible for freeing the head of the original sv */
6846         if (sv != orig_sv && !SvREFCNT(sv))
6847             del_SV(sv);
6848
6849         /* grab and free next sv, if any */
6850       get_next_sv:
6851         while (1) {
6852             sv = NULL;
6853             if (next_sv) {
6854                 sv = next_sv;
6855                 next_sv = NULL;
6856             }
6857             else if (!iter_sv) {
6858                 break;
6859             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6860                 AV *const av = (AV*)iter_sv;
6861                 if (AvFILLp(av) > -1) {
6862                     sv = AvARRAY(av)[AvFILLp(av)--];
6863                 }
6864                 else { /* no more elements of current AV to free */
6865                     sv = iter_sv;
6866                     type = SvTYPE(sv);
6867                     /* restore previous value, squirrelled away */
6868                     iter_sv = AvARRAY(av)[AvMAX(av)];
6869                     Safefree(AvALLOC(av));
6870                     goto free_body;
6871                 }
6872             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6873                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6874                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6875                     /* no more elements of current HV to free */
6876                     sv = iter_sv;
6877                     type = SvTYPE(sv);
6878                     /* Restore previous values of iter_sv and hash_index,
6879                      * squirrelled away */
6880                     assert(!SvOBJECT(sv));
6881                     iter_sv = (SV*)SvSTASH(sv);
6882                     assert(!SvMAGICAL(sv));
6883                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6884 #ifdef DEBUGGING
6885                     /* perl -DA does not like rubbish in SvMAGIC. */
6886                     SvMAGIC_set(sv, 0);
6887 #endif
6888
6889                     /* free any remaining detritus from the hash struct */
6890                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6891                     assert(!HvARRAY((HV*)sv));
6892                     goto free_body;
6893                 }
6894             }
6895
6896             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6897
6898             if (!sv)
6899                 continue;
6900             if (!SvREFCNT(sv)) {
6901                 sv_free(sv);
6902                 continue;
6903             }
6904             if (--(SvREFCNT(sv)))
6905                 continue;
6906 #ifdef DEBUGGING
6907             if (SvTEMP(sv)) {
6908                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6909                          "Attempt to free temp prematurely: SV 0x%" UVxf
6910                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6911                 continue;
6912             }
6913 #endif
6914             if (SvIMMORTAL(sv)) {
6915                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6916                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6917                 continue;
6918             }
6919             break;
6920         } /* while 1 */
6921
6922     } /* while sv */
6923 }
6924
6925 /* This routine curses the sv itself, not the object referenced by sv. So
6926    sv does not have to be ROK. */
6927
6928 static bool
6929 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6930     PERL_ARGS_ASSERT_CURSE;
6931     assert(SvOBJECT(sv));
6932
6933     if (PL_defstash &&  /* Still have a symbol table? */
6934         SvDESTROYABLE(sv))
6935     {
6936         dSP;
6937         HV* stash;
6938         do {
6939           stash = SvSTASH(sv);
6940           assert(SvTYPE(stash) == SVt_PVHV);
6941           if (HvNAME(stash)) {
6942             CV* destructor = NULL;
6943             struct mro_meta *meta;
6944
6945             assert (SvOOK(stash));
6946
6947             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6948                          HvNAME(stash)) );
6949
6950             /* don't make this an initialization above the assert, since it needs
6951                an AUX structure */
6952             meta = HvMROMETA(stash);
6953             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6954                 destructor = meta->destroy;
6955                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6956                              (void *)destructor, HvNAME(stash)) );
6957             }
6958             else {
6959                 bool autoload = FALSE;
6960                 GV *gv =
6961                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6962                 if (gv)
6963                     destructor = GvCV(gv);
6964                 if (!destructor) {
6965                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6966                                          GV_AUTOLOAD_ISMETHOD);
6967                     if (gv)
6968                         destructor = GvCV(gv);
6969                     if (destructor)
6970                         autoload = TRUE;
6971                 }
6972                 /* we don't cache AUTOLOAD for DESTROY, since this code
6973                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6974                    equivalent for XS AUTOLOADs */
6975                 if (!autoload) {
6976                     meta->destroy_gen = PL_sub_generation;
6977                     meta->destroy = destructor;
6978
6979                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6980                                       (void *)destructor, HvNAME(stash)) );
6981                 }
6982                 else {
6983                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6984                                       HvNAME(stash)) );
6985                 }
6986             }
6987             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6988             if (destructor
6989                 /* A constant subroutine can have no side effects, so
6990                    don't bother calling it.  */
6991                 && !CvCONST(destructor)
6992                 /* Don't bother calling an empty destructor or one that
6993                    returns immediately. */
6994                 && (CvISXSUB(destructor)
6995                 || (CvSTART(destructor)
6996                     && (CvSTART(destructor)->op_next->op_type
6997                                         != OP_LEAVESUB)
6998                     && (CvSTART(destructor)->op_next->op_type
6999                                         != OP_PUSHMARK
7000                         || CvSTART(destructor)->op_next->op_next->op_type
7001                                         != OP_RETURN
7002                        )
7003                    ))
7004                )
7005             {
7006                 SV* const tmpref = newRV(sv);
7007                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
7008                 ENTER;
7009                 PUSHSTACKi(PERLSI_DESTROY);
7010                 EXTEND(SP, 2);
7011                 PUSHMARK(SP);
7012                 PUSHs(tmpref);
7013                 PUTBACK;
7014                 call_sv(MUTABLE_SV(destructor),
7015                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7016                 POPSTACK;
7017                 SPAGAIN;
7018                 LEAVE;
7019                 if(SvREFCNT(tmpref) < 2) {
7020                     /* tmpref is not kept alive! */
7021                     SvREFCNT(sv)--;
7022                     SvRV_set(tmpref, NULL);
7023                     SvROK_off(tmpref);
7024                 }
7025                 SvREFCNT_dec_NN(tmpref);
7026             }
7027           }
7028         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7029
7030
7031         if (check_refcnt && SvREFCNT(sv)) {
7032             if (PL_in_clean_objs)
7033                 Perl_croak(aTHX_
7034                   "DESTROY created new reference to dead object '%" HEKf "'",
7035                    HEKfARG(HvNAME_HEK(stash)));
7036             /* DESTROY gave object new lease on life */
7037             return FALSE;
7038         }
7039     }
7040
7041     if (SvOBJECT(sv)) {
7042         HV * const stash = SvSTASH(sv);
7043         /* Curse before freeing the stash, as freeing the stash could cause
7044            a recursive call into S_curse. */
7045         SvOBJECT_off(sv);       /* Curse the object. */
7046         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7047         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7048     }
7049     return TRUE;
7050 }
7051
7052 /*
7053 =for apidoc sv_newref
7054
7055 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7056 instead.
7057
7058 =cut
7059 */
7060
7061 SV *
7062 Perl_sv_newref(pTHX_ SV *const sv)
7063 {
7064     PERL_UNUSED_CONTEXT;
7065     if (sv)
7066         (SvREFCNT(sv))++;
7067     return sv;
7068 }
7069
7070 /*
7071 =for apidoc sv_free
7072
7073 Decrement an SV's reference count, and if it drops to zero, call
7074 C<sv_clear> to invoke destructors and free up any memory used by
7075 the body; finally, deallocating the SV's head itself.
7076 Normally called via a wrapper macro C<SvREFCNT_dec>.
7077
7078 =cut
7079 */
7080
7081 void
7082 Perl_sv_free(pTHX_ SV *const sv)
7083 {
7084     SvREFCNT_dec(sv);
7085 }
7086
7087
7088 /* Private helper function for SvREFCNT_dec().
7089  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7090
7091 void
7092 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7093 {
7094     dVAR;
7095
7096     PERL_ARGS_ASSERT_SV_FREE2;
7097
7098     if (LIKELY( rc == 1 )) {
7099         /* normal case */
7100         SvREFCNT(sv) = 0;
7101
7102 #ifdef DEBUGGING
7103         if (SvTEMP(sv)) {
7104             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7105                              "Attempt to free temp prematurely: SV 0x%" UVxf
7106                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7107             return;
7108         }
7109 #endif
7110         if (SvIMMORTAL(sv)) {
7111             /* make sure SvREFCNT(sv)==0 happens very seldom */
7112             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7113             return;
7114         }
7115         sv_clear(sv);
7116         if (! SvREFCNT(sv)) /* may have have been resurrected */
7117             del_SV(sv);
7118         return;
7119     }
7120
7121     /* handle exceptional cases */
7122
7123     assert(rc == 0);
7124
7125     if (SvFLAGS(sv) & SVf_BREAK)
7126         /* this SV's refcnt has been artificially decremented to
7127          * trigger cleanup */
7128         return;
7129     if (PL_in_clean_all) /* All is fair */
7130         return;
7131     if (SvIMMORTAL(sv)) {
7132         /* make sure SvREFCNT(sv)==0 happens very seldom */
7133         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7134         return;
7135     }
7136     if (ckWARN_d(WARN_INTERNAL)) {
7137 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7138         Perl_dump_sv_child(aTHX_ sv);
7139 #else
7140     #ifdef DEBUG_LEAKING_SCALARS
7141         sv_dump(sv);
7142     #endif
7143 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7144         if (PL_warnhook == PERL_WARNHOOK_FATAL
7145             || ckDEAD(packWARN(WARN_INTERNAL))) {
7146             /* Don't let Perl_warner cause us to escape our fate:  */
7147             abort();
7148         }
7149 #endif
7150         /* This may not return:  */
7151         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7152                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7153                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7154 #endif
7155     }
7156 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7157     abort();
7158 #endif
7159
7160 }
7161
7162
7163 /*
7164 =for apidoc sv_len
7165
7166 Returns the length of the string in the SV.  Handles magic and type
7167 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7168 gives raw access to the C<xpv_cur> slot.
7169
7170 =cut
7171 */
7172
7173 STRLEN
7174 Perl_sv_len(pTHX_ SV *const sv)
7175 {
7176     STRLEN len;
7177
7178     if (!sv)
7179         return 0;
7180
7181     (void)SvPV_const(sv, len);
7182     return len;
7183 }
7184
7185 /*
7186 =for apidoc sv_len_utf8
7187
7188 Returns the number of characters in the string in an SV, counting wide
7189 UTF-8 bytes as a single character.  Handles magic and type coercion.
7190
7191 =cut
7192 */
7193
7194 /*
7195  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7196  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7197  * (Note that the mg_len is not the length of the mg_ptr field.
7198  * This allows the cache to store the character length of the string without
7199  * needing to malloc() extra storage to attach to the mg_ptr.)
7200  *
7201  */
7202
7203 STRLEN
7204 Perl_sv_len_utf8(pTHX_ SV *const sv)
7205 {
7206     if (!sv)
7207         return 0;
7208
7209     SvGETMAGIC(sv);
7210     return sv_len_utf8_nomg(sv);
7211 }
7212
7213 STRLEN
7214 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7215 {
7216     STRLEN len;
7217     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7218
7219     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7220
7221     if (PL_utf8cache && SvUTF8(sv)) {
7222             STRLEN ulen;
7223             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7224
7225             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7226                 if (mg->mg_len != -1)
7227                     ulen = mg->mg_len;
7228                 else {
7229                     /* We can use the offset cache for a headstart.
7230                        The longer value is stored in the first pair.  */
7231                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7232
7233                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7234                                                        s + len);
7235                 }
7236                 
7237                 if (PL_utf8cache < 0) {
7238                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7239                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7240                 }
7241             }
7242             else {
7243                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7244                 utf8_mg_len_cache_update(sv, &mg, ulen);
7245             }
7246             return ulen;
7247     }
7248     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7249 }
7250
7251 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7252    offset.  */
7253 static STRLEN
7254 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7255                       STRLEN *const uoffset_p, bool *const at_end)
7256 {
7257     const U8 *s = start;
7258     STRLEN uoffset = *uoffset_p;
7259
7260     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7261
7262     while (s < send && uoffset) {
7263         --uoffset;
7264         s += UTF8SKIP(s);
7265     }
7266     if (s == send) {
7267         *at_end = TRUE;
7268     }
7269     else if (s > send) {
7270         *at_end = TRUE;
7271         /* This is the existing behaviour. Possibly it should be a croak, as
7272            it's actually a bounds error  */
7273         s = send;
7274     }
7275     *uoffset_p -= uoffset;
7276     return s - start;
7277 }
7278
7279 /* Given the length of the string in both bytes and UTF-8 characters, decide
7280    whether to walk forwards or backwards to find the byte corresponding to
7281    the passed in UTF-8 offset.  */
7282 static STRLEN
7283 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7284                     STRLEN uoffset, const STRLEN uend)
7285 {
7286     STRLEN backw = uend - uoffset;
7287
7288     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7289
7290     if (uoffset < 2 * backw) {
7291         /* The assumption is that going forwards is twice the speed of going
7292            forward (that's where the 2 * backw comes from).
7293            (The real figure of course depends on the UTF-8 data.)  */
7294         const U8 *s = start;
7295
7296         while (s < send && uoffset--)
7297             s += UTF8SKIP(s);
7298         assert (s <= send);
7299         if (s > send)
7300             s = send;
7301         return s - start;
7302     }
7303
7304     while (backw--) {
7305         send--;
7306         while (UTF8_IS_CONTINUATION(*send))
7307             send--;
7308     }
7309     return send - start;
7310 }
7311
7312 /* For the string representation of the given scalar, find the byte
7313    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7314    give another position in the string, *before* the sought offset, which
7315    (which is always true, as 0, 0 is a valid pair of positions), which should
7316    help reduce the amount of linear searching.
7317    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7318    will be used to reduce the amount of linear searching. The cache will be
7319    created if necessary, and the found value offered to it for update.  */
7320 static STRLEN
7321 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7322                     const U8 *const send, STRLEN uoffset,
7323                     STRLEN uoffset0, STRLEN boffset0)
7324 {
7325     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7326     bool found = FALSE;
7327     bool at_end = FALSE;
7328
7329     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7330
7331     assert (uoffset >= uoffset0);
7332
7333     if (!uoffset)
7334         return 0;
7335
7336     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7337         && PL_utf8cache
7338         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7339                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7340         if ((*mgp)->mg_ptr) {
7341             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7342             if (cache[0] == uoffset) {
7343                 /* An exact match. */
7344                 return cache[1];
7345             }
7346             if (cache[2] == uoffset) {
7347                 /* An exact match. */
7348                 return cache[3];
7349             }
7350
7351             if (cache[0] < uoffset) {
7352                 /* The cache already knows part of the way.   */
7353                 if (cache[0] > uoffset0) {
7354                     /* The cache knows more than the passed in pair  */
7355                     uoffset0 = cache[0];
7356                     boffset0 = cache[1];
7357                 }
7358                 if ((*mgp)->mg_len != -1) {
7359                     /* And we know the end too.  */
7360                     boffset = boffset0
7361                         + sv_pos_u2b_midway(start + boffset0, send,
7362                                               uoffset - uoffset0,
7363                                               (*mgp)->mg_len - uoffset0);
7364                 } else {
7365                     uoffset -= uoffset0;
7366                     boffset = boffset0
7367                         + sv_pos_u2b_forwards(start + boffset0,
7368                                               send, &uoffset, &at_end);
7369                     uoffset += uoffset0;
7370                 }
7371             }
7372             else if (cache[2] < uoffset) {
7373                 /* We're between the two cache entries.  */
7374                 if (cache[2] > uoffset0) {
7375                     /* and the cache knows more than the passed in pair  */
7376                     uoffset0 = cache[2];
7377                     boffset0 = cache[3];
7378                 }
7379
7380                 boffset = boffset0
7381                     + sv_pos_u2b_midway(start + boffset0,
7382                                           start + cache[1],
7383                                           uoffset - uoffset0,
7384                                           cache[0] - uoffset0);
7385             } else {
7386                 boffset = boffset0
7387                     + sv_pos_u2b_midway(start + boffset0,
7388                                           start + cache[3],
7389                                           uoffset - uoffset0,
7390                                           cache[2] - uoffset0);
7391             }
7392             found = TRUE;
7393         }
7394         else if ((*mgp)->mg_len != -1) {
7395             /* If we can take advantage of a passed in offset, do so.  */
7396             /* In fact, offset0 is either 0, or less than offset, so don't
7397                need to worry about the other possibility.  */
7398             boffset = boffset0
7399                 + sv_pos_u2b_midway(start + boffset0, send,
7400                                       uoffset - uoffset0,
7401                                       (*mgp)->mg_len - uoffset0);
7402             found = TRUE;
7403         }
7404     }
7405
7406     if (!found || PL_utf8cache < 0) {
7407         STRLEN real_boffset;
7408         uoffset -= uoffset0;
7409         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7410                                                       send, &uoffset, &at_end);
7411         uoffset += uoffset0;
7412
7413         if (found && PL_utf8cache < 0)
7414             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7415                                        real_boffset, sv);
7416         boffset = real_boffset;
7417     }
7418
7419     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7420         if (at_end)
7421             utf8_mg_len_cache_update(sv, mgp, uoffset);
7422         else
7423             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7424     }
7425     return boffset;
7426 }
7427
7428
7429 /*
7430 =for apidoc sv_pos_u2b_flags
7431
7432 Converts the offset from a count of UTF-8 chars from
7433 the start of the string, to a count of the equivalent number of bytes; if
7434 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7435 C<offset>, rather than from the start
7436 of the string.  Handles type coercion.
7437 C<flags> is passed to C<SvPV_flags>, and usually should be
7438 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7439
7440 =cut
7441 */
7442
7443 /*
7444  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7445  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7446  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7447  *
7448  */
7449
7450 STRLEN
7451 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7452                       U32 flags)
7453 {
7454     const U8 *start;
7455     STRLEN len;
7456     STRLEN boffset;
7457
7458     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7459
7460     start = (U8*)SvPV_flags(sv, len, flags);
7461     if (len) {
7462         const U8 * const send = start + len;
7463         MAGIC *mg = NULL;
7464         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7465
7466         if (lenp
7467             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7468                         is 0, and *lenp is already set to that.  */) {
7469             /* Convert the relative offset to absolute.  */
7470             const STRLEN uoffset2 = uoffset + *lenp;
7471             const STRLEN boffset2
7472                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7473                                       uoffset, boffset) - boffset;
7474
7475             *lenp = boffset2;
7476         }
7477     } else {
7478         if (lenp)
7479             *lenp = 0;
7480         boffset = 0;
7481     }
7482
7483     return boffset;
7484 }
7485
7486 /*
7487 =for apidoc sv_pos_u2b
7488
7489 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7490 the start of the string, to a count of the equivalent number of bytes; if
7491 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7492 the offset, rather than from the start of the string.  Handles magic and
7493 type coercion.
7494
7495 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7496 than 2Gb.
7497
7498 =cut
7499 */
7500
7501 /*
7502  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7503  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7504  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7505  *
7506  */
7507
7508 /* This function is subject to size and sign problems */
7509
7510 void
7511 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7512 {
7513     PERL_ARGS_ASSERT_SV_POS_U2B;
7514
7515     if (lenp) {
7516         STRLEN ulen = (STRLEN)*lenp;
7517         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7518                                          SV_GMAGIC|SV_CONST_RETURN);
7519         *lenp = (I32)ulen;
7520     } else {
7521         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7522                                          SV_GMAGIC|SV_CONST_RETURN);
7523     }
7524 }
7525
7526 static void
7527 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7528                            const STRLEN ulen)
7529 {
7530     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7531     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7532         return;
7533
7534     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7535                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7536         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7537     }
7538     assert(*mgp);
7539
7540     (*mgp)->mg_len = ulen;
7541 }
7542
7543 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7544    byte length pairing. The (byte) length of the total SV is passed in too,
7545    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7546    may not have updated SvCUR, so we can't rely on reading it directly.
7547
7548    The proffered utf8/byte length pairing isn't used if the cache already has
7549    two pairs, and swapping either for the proffered pair would increase the
7550    RMS of the intervals between known byte offsets.
7551
7552    The cache itself consists of 4 STRLEN values
7553    0: larger UTF-8 offset
7554    1: corresponding byte offset
7555    2: smaller UTF-8 offset
7556    3: corresponding byte offset
7557
7558    Unused cache pairs have the value 0, 0.
7559    Keeping the cache "backwards" means that the invariant of
7560    cache[0] >= cache[2] is maintained even with empty slots, which means that
7561    the code that uses it doesn't need to worry if only 1 entry has actually
7562    been set to non-zero.  It also makes the "position beyond the end of the
7563    cache" logic much simpler, as the first slot is always the one to start
7564    from.   
7565 */
7566 static void
7567 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7568                            const STRLEN utf8, const STRLEN blen)
7569 {
7570     STRLEN *cache;
7571
7572     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7573
7574     if (SvREADONLY(sv))
7575         return;
7576
7577     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7578                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7579         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7580                            0);
7581         (*mgp)->mg_len = -1;
7582     }
7583     assert(*mgp);
7584
7585     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7586         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7587         (*mgp)->mg_ptr = (char *) cache;
7588     }
7589     assert(cache);
7590
7591     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7592         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7593            a pointer.  Note that we no longer cache utf8 offsets on refer-
7594            ences, but this check is still a good idea, for robustness.  */
7595         const U8 *start = (const U8 *) SvPVX_const(sv);
7596         const STRLEN realutf8 = utf8_length(start, start + byte);
7597
7598         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7599                                    sv);
7600     }
7601
7602     /* Cache is held with the later position first, to simplify the code
7603        that deals with unbounded ends.  */
7604        
7605     ASSERT_UTF8_CACHE(cache);
7606     if (cache[1] == 0) {
7607         /* Cache is totally empty  */
7608         cache[0] = utf8;
7609         cache[1] = byte;
7610     } else if (cache[3] == 0) {
7611         if (byte > cache[1]) {
7612             /* New one is larger, so goes first.  */
7613             cache[2] = cache[0];
7614             cache[3] = cache[1];
7615             cache[0] = utf8;
7616             cache[1] = byte;
7617         } else {
7618             cache[2] = utf8;
7619             cache[3] = byte;
7620         }
7621     } else {
7622 /* float casts necessary? XXX */
7623 #define THREEWAY_SQUARE(a,b,c,d) \
7624             ((float)((d) - (c))) * ((float)((d) - (c))) \
7625             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7626                + ((float)((b) - (a))) * ((float)((b) - (a)))
7627
7628         /* Cache has 2 slots in use, and we know three potential pairs.
7629            Keep the two that give the lowest RMS distance. Do the
7630            calculation in bytes simply because we always know the byte
7631            length.  squareroot has the same ordering as the positive value,
7632            so don't bother with the actual square root.  */
7633         if (byte > cache[1]) {
7634             /* New position is after the existing pair of pairs.  */
7635             const float keep_earlier
7636                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7637             const float keep_later
7638                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7639
7640             if (keep_later < keep_earlier) {
7641                 cache[2] = cache[0];
7642                 cache[3] = cache[1];
7643             }
7644             cache[0] = utf8;
7645             cache[1] = byte;
7646         }
7647         else {
7648             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7649             float b, c, keep_earlier;
7650             if (byte > cache[3]) {
7651                 /* New position is between the existing pair of pairs.  */
7652                 b = (float)cache[3];
7653                 c = (float)byte;
7654             } else {
7655                 /* New position is before the existing pair of pairs.  */
7656                 b = (float)byte;
7657                 c = (float)cache[3];
7658             }
7659             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7660             if (byte > cache[3]) {
7661                 if (keep_later < keep_earlier) {
7662                     cache[2] = utf8;
7663                     cache[3] = byte;
7664                 }
7665                 else {
7666                     cache[0] = utf8;
7667                     cache[1] = byte;
7668                 }
7669             }
7670             else {
7671                 if (! (keep_later < keep_earlier)) {
7672                     cache[0] = cache[2];
7673                     cache[1] = cache[3];
7674                 }
7675                 cache[2] = utf8;
7676                 cache[3] = byte;
7677             }
7678         }
7679     }
7680     ASSERT_UTF8_CACHE(cache);
7681 }
7682
7683 /* We already know all of the way, now we may be able to walk back.  The same
7684    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7685    backward is half the speed of walking forward. */
7686 static STRLEN
7687 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7688                     const U8 *end, STRLEN endu)
7689 {
7690     const STRLEN forw = target - s;
7691     STRLEN backw = end - target;
7692
7693     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7694
7695     if (forw < 2 * backw) {
7696         return utf8_length(s, target);
7697     }
7698
7699     while (end > target) {
7700         end--;
7701         while (UTF8_IS_CONTINUATION(*end)) {
7702             end--;
7703         }
7704         endu--;
7705     }
7706     return endu;
7707 }
7708
7709 /*
7710 =for apidoc sv_pos_b2u_flags
7711
7712 Converts C<offset> from a count of bytes from the start of the string, to
7713 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7714 C<flags> is passed to C<SvPV_flags>, and usually should be
7715 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7716
7717 =cut
7718 */
7719
7720 /*
7721  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7722  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7723  * and byte offsets.
7724  *
7725  */
7726 STRLEN
7727 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7728 {
7729     const U8* s;
7730     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7731     STRLEN blen;
7732     MAGIC* mg = NULL;
7733     const U8* send;
7734     bool found = FALSE;
7735
7736     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7737
7738     s = (const U8*)SvPV_flags(sv, blen, flags);
7739
7740     if (blen < offset)
7741         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7742                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7743
7744     send = s + offset;
7745
7746     if (!SvREADONLY(sv)
7747         && PL_utf8cache
7748         && SvTYPE(sv) >= SVt_PVMG
7749         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7750     {
7751         if (mg->mg_ptr) {
7752             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7753             if (cache[1] == offset) {
7754                 /* An exact match. */
7755                 return cache[0];
7756             }
7757             if (cache[3] == offset) {
7758                 /* An exact match. */
7759                 return cache[2];
7760             }
7761
7762             if (cache[1] < offset) {
7763                 /* We already know part of the way. */
7764                 if (mg->mg_len != -1) {
7765                     /* Actually, we know the end too.  */
7766                     len = cache[0]
7767                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7768                                               s + blen, mg->mg_len - cache[0]);
7769                 } else {
7770                     len = cache[0] + utf8_length(s + cache[1], send);
7771                 }
7772             }
7773             else if (cache[3] < offset) {
7774                 /* We're between the two cached pairs, so we do the calculation
7775                    offset by the byte/utf-8 positions for the earlier pair,
7776                    then add the utf-8 characters from the string start to
7777                    there.  */
7778                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7779                                           s + cache[1], cache[0] - cache[2])
7780                     + cache[2];
7781
7782             }
7783             else { /* cache[3] > offset */
7784                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7785                                           cache[2]);
7786
7787             }
7788             ASSERT_UTF8_CACHE(cache);
7789             found = TRUE;
7790         } else if (mg->mg_len != -1) {
7791             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7792             found = TRUE;
7793         }
7794     }
7795     if (!found || PL_utf8cache < 0) {
7796         const STRLEN real_len = utf8_length(s, send);
7797
7798         if (found && PL_utf8cache < 0)
7799             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7800         len = real_len;
7801     }
7802
7803     if (PL_utf8cache) {
7804         if (blen == offset)
7805             utf8_mg_len_cache_update(sv, &mg, len);
7806         else
7807             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7808     }
7809
7810     return len;
7811 }
7812
7813 /*
7814 =for apidoc sv_pos_b2u
7815
7816 Converts the value pointed to by C<offsetp> from a count of bytes from the
7817 start of the string, to a count of the equivalent number of UTF-8 chars.
7818 Handles magic and type coercion.
7819
7820 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7821 longer than 2Gb.
7822
7823 =cut
7824 */
7825
7826 /*
7827  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7828  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7829  * byte offsets.
7830  *
7831  */
7832 void
7833 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7834 {
7835     PERL_ARGS_ASSERT_SV_POS_B2U;
7836
7837     if (!sv)
7838         return;
7839
7840     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7841                                      SV_GMAGIC|SV_CONST_RETURN);
7842 }
7843
7844 static void
7845 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7846                              STRLEN real, SV *const sv)
7847 {
7848     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7849
7850     /* As this is debugging only code, save space by keeping this test here,
7851        rather than inlining it in all the callers.  */
7852     if (from_cache == real)
7853         return;
7854
7855     /* Need to turn the assertions off otherwise we may recurse infinitely
7856        while printing error messages.  */
7857     SAVEI8(PL_utf8cache);
7858     PL_utf8cache = 0;
7859     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7860                func, (UV) from_cache, (UV) real, SVfARG(sv));
7861 }
7862
7863 /*
7864 =for apidoc sv_eq
7865
7866 Returns a boolean indicating whether the strings in the two SVs are
7867 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7868 coerce its args to strings if necessary.
7869
7870 =for apidoc sv_eq_flags
7871
7872 Returns a boolean indicating whether the strings in the two SVs are
7873 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7874 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7875
7876 =cut
7877 */
7878
7879 I32
7880 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7881 {
7882     const char *pv1;
7883     STRLEN cur1;
7884     const char *pv2;
7885     STRLEN cur2;
7886
7887     if (!sv1) {
7888         pv1 = "";
7889         cur1 = 0;
7890     }
7891     else {
7892         /* if pv1 and pv2 are the same, second SvPV_const call may
7893          * invalidate pv1 (if we are handling magic), so we may need to
7894          * make a copy */
7895         if (sv1 == sv2 && flags & SV_GMAGIC
7896          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7897             pv1 = SvPV_const(sv1, cur1);
7898             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7899         }
7900         pv1 = SvPV_flags_const(sv1, cur1, flags);
7901     }
7902
7903     if (!sv2){
7904         pv2 = "";
7905         cur2 = 0;
7906     }
7907     else
7908         pv2 = SvPV_flags_const(sv2, cur2, flags);
7909
7910     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7911         /* Differing utf8ness.  */
7912         if (SvUTF8(sv1)) {
7913                   /* sv1 is the UTF-8 one  */
7914                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7915                                         (const U8*)pv1, cur1) == 0;
7916         }
7917         else {
7918                   /* sv2 is the UTF-8 one  */
7919                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7920                                         (const U8*)pv2, cur2) == 0;
7921         }
7922     }
7923
7924     if (cur1 == cur2)
7925         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7926     else
7927         return 0;
7928 }
7929
7930 /*
7931 =for apidoc sv_cmp
7932
7933 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7934 string in C<sv1> is less than, equal to, or greater than the string in
7935 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7936 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7937
7938 =for apidoc sv_cmp_flags
7939
7940 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7941 string in C<sv1> is less than, equal to, or greater than the string in
7942 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7943 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7944 also C<L</sv_cmp_locale_flags>>.
7945
7946 =cut
7947 */
7948
7949 I32
7950 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7951 {
7952     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7953 }
7954
7955 I32
7956 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7957                   const U32 flags)
7958 {
7959     STRLEN cur1, cur2;
7960     const char *pv1, *pv2;
7961     I32  cmp;
7962     SV *svrecode = NULL;
7963
7964     if (!sv1) {
7965         pv1 = "";
7966         cur1 = 0;
7967     }
7968     else
7969         pv1 = SvPV_flags_const(sv1, cur1, flags);
7970
7971     if (!sv2) {
7972         pv2 = "";
7973         cur2 = 0;
7974     }
7975     else
7976         pv2 = SvPV_flags_const(sv2, cur2, flags);
7977
7978     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7979         /* Differing utf8ness.  */
7980         if (SvUTF8(sv1)) {
7981                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7982                                                    (const U8*)pv1, cur1);
7983                 return retval ? retval < 0 ? -1 : +1 : 0;
7984         }
7985         else {
7986                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7987                                                   (const U8*)pv2, cur2);
7988                 return retval ? retval < 0 ? -1 : +1 : 0;
7989         }
7990     }
7991
7992     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7993
7994     if (!cur1) {
7995         cmp = cur2 ? -1 : 0;
7996     } else if (!cur2) {
7997         cmp = 1;
7998     } else {
7999         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
8000
8001 #ifdef EBCDIC
8002         if (! DO_UTF8(sv1)) {
8003 #endif
8004             const I32 retval = memcmp((const void*)pv1,
8005                                       (const void*)pv2,
8006                                       shortest_len);
8007             if (retval) {
8008                 cmp = retval < 0 ? -1 : 1;
8009             } else if (cur1 == cur2) {
8010                 cmp = 0;
8011             } else {
8012                 cmp = cur1 < cur2 ? -1 : 1;
8013             }
8014 #ifdef EBCDIC
8015         }
8016         else {  /* Both are to be treated as UTF-EBCDIC */
8017
8018             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
8019              * which remaps code points 0-255.  We therefore generally have to
8020              * unmap back to the original values to get an accurate comparison.
8021              * But we don't have to do that for UTF-8 invariants, as by
8022              * definition, they aren't remapped, nor do we have to do it for
8023              * above-latin1 code points, as they also aren't remapped.  (This
8024              * code also works on ASCII platforms, but the memcmp() above is
8025              * much faster). */
8026
8027             const char *e = pv1 + shortest_len;
8028
8029             /* Find the first bytes that differ between the two strings */
8030             while (pv1 < e && *pv1 == *pv2) {
8031                 pv1++;
8032                 pv2++;
8033             }
8034
8035
8036             if (pv1 == e) { /* Are the same all the way to the end */
8037                 if (cur1 == cur2) {
8038                     cmp = 0;
8039                 } else {
8040                     cmp = cur1 < cur2 ? -1 : 1;
8041                 }
8042             }
8043             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8044                     * in the strings were.  The current bytes may or may not be
8045                     * at the beginning of a character.  But neither or both are
8046                     * (or else earlier bytes would have been different).  And
8047                     * if we are in the middle of a character, the two
8048                     * characters are comprised of the same number of bytes
8049                     * (because in this case the start bytes are the same, and
8050                     * the start bytes encode the character's length). */
8051                  if (UTF8_IS_INVARIANT(*pv1))
8052             {
8053                 /* If both are invariants; can just compare directly */
8054                 if (UTF8_IS_INVARIANT(*pv2)) {
8055                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8056                 }
8057                 else   /* Since *pv1 is invariant, it is the whole character,
8058                           which means it is at the beginning of a character.
8059                           That means pv2 is also at the beginning of a
8060                           character (see earlier comment).  Since it isn't
8061                           invariant, it must be a start byte.  If it starts a
8062                           character whose code point is above 255, that
8063                           character is greater than any single-byte char, which
8064                           *pv1 is */
8065                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8066                 {
8067                     cmp = -1;
8068                 }
8069                 else {
8070                     /* Here, pv2 points to a character composed of 2 bytes
8071                      * whose code point is < 256.  Get its code point and
8072                      * compare with *pv1 */
8073                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8074                            ?  -1
8075                            : 1;
8076                 }
8077             }
8078             else   /* The code point starting at pv1 isn't a single byte */
8079                  if (UTF8_IS_INVARIANT(*pv2))
8080             {
8081                 /* But here, the code point starting at *pv2 is a single byte,
8082                  * and so *pv1 must begin a character, hence is a start byte.
8083                  * If that character is above 255, it is larger than any
8084                  * single-byte char, which *pv2 is */
8085                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8086                     cmp = 1;
8087                 }
8088                 else {
8089                     /* Here, pv1 points to a character composed of 2 bytes
8090                      * whose code point is < 256.  Get its code point and
8091                      * compare with the single byte character *pv2 */
8092                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8093                           ?  -1
8094                           : 1;
8095                 }
8096             }
8097             else   /* Here, we've ruled out either *pv1 and *pv2 being
8098                       invariant.  That means both are part of variants, but not
8099                       necessarily at the start of a character */
8100                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8101                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8102             {
8103                 /* Here, at least one is the start of a character, which means
8104                  * the other is also a start byte.  And the code point of at
8105                  * least one of the characters is above 255.  It is a
8106                  * characteristic of UTF-EBCDIC that all start bytes for
8107                  * above-latin1 code points are well behaved as far as code
8108                  * point comparisons go, and all are larger than all other
8109                  * start bytes, so the comparison with those is also well
8110                  * behaved */
8111                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8112             }
8113             else {
8114                 /* Here both *pv1 and *pv2 are part of variant characters.
8115                  * They could be both continuations, or both start characters.
8116                  * (One or both could even be an illegal start character (for
8117                  * an overlong) which for the purposes of sorting we treat as
8118                  * legal. */
8119                 if (UTF8_IS_CONTINUATION(*pv1)) {
8120
8121                     /* If they are continuations for code points above 255,
8122                      * then comparing the current byte is sufficient, as there
8123                      * is no remapping of these and so the comparison is
8124                      * well-behaved.   We determine if they are such
8125                      * continuations by looking at the preceding byte.  It
8126                      * could be a start byte, from which we can tell if it is
8127                      * for an above 255 code point.  Or it could be a
8128                      * continuation, which means the character occupies at
8129                      * least 3 bytes, so must be above 255.  */
8130                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8131                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8132                     {
8133                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8134                         goto cmp_done;
8135                     }
8136
8137                     /* Here, the continuations are for code points below 256;
8138                      * back up one to get to the start byte */
8139                     pv1--;
8140                     pv2--;
8141                 }
8142
8143                 /* We need to get the actual native code point of each of these
8144                  * variants in order to compare them */
8145                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8146                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8147                         ? -1
8148                         : 1;
8149             }
8150         }
8151       cmp_done: ;
8152 #endif
8153     }
8154
8155     SvREFCNT_dec(svrecode);
8156
8157     return cmp;
8158 }
8159
8160 /*
8161 =for apidoc sv_cmp_locale
8162
8163 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8164 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8165 if necessary.  See also C<L</sv_cmp>>.
8166
8167 =for apidoc sv_cmp_locale_flags
8168
8169 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8170 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8171 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8172 C<L</sv_cmp_flags>>.
8173
8174 =cut
8175 */
8176
8177 I32
8178 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8179 {
8180     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8181 }
8182
8183 I32
8184 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8185                          const U32 flags)
8186 {
8187 #ifdef USE_LOCALE_COLLATE
8188
8189     char *pv1, *pv2;
8190     STRLEN len1, len2;
8191     I32 retval;
8192
8193     if (PL_collation_standard)
8194         goto raw_compare;
8195
8196     len1 = len2 = 0;
8197
8198     /* Revert to using raw compare if both operands exist, but either one
8199      * doesn't transform properly for collation */
8200     if (sv1 && sv2) {
8201         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8202         if (! pv1) {
8203             goto raw_compare;
8204         }
8205         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8206         if (! pv2) {
8207             goto raw_compare;
8208         }
8209     }
8210     else {
8211         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8212         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8213     }
8214
8215     if (!pv1 || !len1) {
8216         if (pv2 && len2)
8217             return -1;
8218         else
8219             goto raw_compare;
8220     }
8221     else {
8222         if (!pv2 || !len2)
8223             return 1;
8224     }
8225
8226     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8227
8228     if (retval)
8229         return retval < 0 ? -1 : 1;
8230
8231     /*
8232      * When the result of collation is equality, that doesn't mean
8233      * that there are no differences -- some locales exclude some
8234      * characters from consideration.  So to avoid false equalities,
8235      * we use the raw string as a tiebreaker.
8236      */
8237
8238   raw_compare:
8239     /* FALLTHROUGH */
8240
8241 #else
8242     PERL_UNUSED_ARG(flags);
8243 #endif /* USE_LOCALE_COLLATE */
8244
8245     return sv_cmp(sv1, sv2);
8246 }
8247
8248
8249 #ifdef USE_LOCALE_COLLATE
8250
8251 /*
8252 =for apidoc sv_collxfrm
8253
8254 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8255 C<L</sv_collxfrm_flags>>.
8256
8257 =for apidoc sv_collxfrm_flags
8258
8259 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8260 flags contain C<SV_GMAGIC>, it handles get-magic.
8261
8262 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8263 scalar data of the variable, but transformed to such a format that a normal
8264 memory comparison can be used to compare the data according to the locale
8265 settings.
8266
8267 =cut
8268 */
8269
8270 char *
8271 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8272 {
8273     MAGIC *mg;
8274
8275     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8276
8277     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8278
8279     /* If we don't have collation magic on 'sv', or the locale has changed
8280      * since the last time we calculated it, get it and save it now */
8281     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8282         const char *s;
8283         char *xf;
8284         STRLEN len, xlen;
8285
8286         /* Free the old space */
8287         if (mg)
8288             Safefree(mg->mg_ptr);
8289
8290         s = SvPV_flags_const(sv, len, flags);
8291         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8292             if (! mg) {
8293                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8294                                  0, 0);
8295                 assert(mg);
8296             }
8297             mg->mg_ptr = xf;
8298             mg->mg_len = xlen;
8299         }
8300         else {
8301             if (mg) {
8302                 mg->mg_ptr = NULL;
8303                 mg->mg_len = -1;
8304             }
8305         }
8306     }
8307
8308     if (mg && mg->mg_ptr) {
8309         *nxp = mg->mg_len;
8310         return mg->mg_ptr + sizeof(PL_collation_ix);
8311     }
8312     else {
8313         *nxp = 0;
8314         return NULL;
8315     }
8316 }
8317
8318 #endif /* USE_LOCALE_COLLATE */
8319
8320 static char *
8321 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8322 {
8323     SV * const tsv = newSV(0);
8324     ENTER;
8325     SAVEFREESV(tsv);
8326     sv_gets(tsv, fp, 0);
8327     sv_utf8_upgrade_nomg(tsv);
8328     SvCUR_set(sv,append);
8329     sv_catsv(sv,tsv);
8330     LEAVE;
8331     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8332 }
8333
8334 static char *
8335 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8336 {
8337     SSize_t bytesread;
8338     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8339       /* Grab the size of the record we're getting */
8340     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8341     
8342     /* Go yank in */
8343 #ifdef __VMS
8344     int fd;
8345     Stat_t st;
8346
8347     /* With a true, record-oriented file on VMS, we need to use read directly
8348      * to ensure that we respect RMS record boundaries.  The user is responsible
8349      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8350      * record size) field.  N.B. This is likely to produce invalid results on
8351      * varying-width character data when a record ends mid-character.
8352      */
8353     fd = PerlIO_fileno(fp);
8354     if (fd != -1
8355         && PerlLIO_fstat(fd, &st) == 0
8356         && (st.st_fab_rfm == FAB$C_VAR
8357             || st.st_fab_rfm == FAB$C_VFC
8358             || st.st_fab_rfm == FAB$C_FIX)) {
8359
8360         bytesread = PerlLIO_read(fd, buffer, recsize);
8361     }
8362     else /* in-memory file from PerlIO::Scalar
8363           * or not a record-oriented file
8364           */
8365 #endif
8366     {
8367         bytesread = PerlIO_read(fp, buffer, recsize);
8368
8369         /* At this point, the logic in sv_get() means that sv will
8370            be treated as utf-8 if the handle is utf8.
8371         */
8372         if (PerlIO_isutf8(fp) && bytesread > 0) {
8373             char *bend = buffer + bytesread;
8374             char *bufp = buffer;
8375             size_t charcount = 0;
8376             bool charstart = TRUE;
8377             STRLEN skip = 0;
8378
8379             while (charcount < recsize) {
8380                 /* count accumulated characters */
8381                 while (bufp < bend) {
8382                     if (charstart) {
8383                         skip = UTF8SKIP(bufp);
8384                     }
8385                     if (bufp + skip > bend) {
8386                         /* partial at the end */
8387                         charstart = FALSE;
8388                         break;
8389                     }
8390                     else {
8391                         ++charcount;
8392                         bufp += skip;
8393                         charstart = TRUE;
8394                     }
8395                 }
8396
8397                 if (charcount < recsize) {
8398                     STRLEN readsize;
8399                     STRLEN bufp_offset = bufp - buffer;
8400                     SSize_t morebytesread;
8401
8402                     /* originally I read enough to fill any incomplete
8403                        character and the first byte of the next
8404                        character if needed, but if there's many
8405                        multi-byte encoded characters we're going to be
8406                        making a read call for every character beyond
8407                        the original read size.
8408
8409                        So instead, read the rest of the character if
8410                        any, and enough bytes to match at least the
8411                        start bytes for each character we're going to
8412                        read.
8413                     */
8414                     if (charstart)
8415                         readsize = recsize - charcount;
8416                     else 
8417                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8418                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8419                     bend = buffer + bytesread;
8420                     morebytesread = PerlIO_read(fp, bend, readsize);
8421                     if (morebytesread <= 0) {
8422                         /* we're done, if we still have incomplete
8423                            characters the check code in sv_gets() will
8424                            warn about them.
8425
8426                            I'd originally considered doing
8427                            PerlIO_ungetc() on all but the lead
8428                            character of the incomplete character, but
8429                            read() doesn't do that, so I don't.
8430                         */
8431                         break;
8432                     }
8433
8434                     /* prepare to scan some more */
8435                     bytesread += morebytesread;
8436                     bend = buffer + bytesread;
8437                     bufp = buffer + bufp_offset;
8438                 }
8439             }
8440         }
8441     }
8442
8443     if (bytesread < 0)
8444         bytesread = 0;
8445     SvCUR_set(sv, bytesread + append);
8446     buffer[bytesread] = '\0';
8447     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8448 }
8449
8450 /*
8451 =for apidoc sv_gets
8452
8453 Get a line from the filehandle and store it into the SV, optionally
8454 appending to the currently-stored string.  If C<append> is not 0, the
8455 line is appended to the SV instead of overwriting it.  C<append> should
8456 be set to the byte offset that the appended string should start at
8457 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8458
8459 =cut
8460 */
8461
8462 char *
8463 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8464 {
8465     const char *rsptr;
8466     STRLEN rslen;
8467     STDCHAR rslast;
8468     STDCHAR *bp;
8469     SSize_t cnt;
8470     int i = 0;
8471     int rspara = 0;
8472
8473     PERL_ARGS_ASSERT_SV_GETS;
8474
8475     if (SvTHINKFIRST(sv))
8476         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8477     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8478        from <>.
8479        However, perlbench says it's slower, because the existing swipe code
8480        is faster than copy on write.
8481        Swings and roundabouts.  */
8482     SvUPGRADE(sv, SVt_PV);
8483
8484     if (append) {
8485         /* line is going to be appended to the existing buffer in the sv */
8486         if (PerlIO_isutf8(fp)) {
8487             if (!SvUTF8(sv)) {
8488                 sv_utf8_upgrade_nomg(sv);
8489                 sv_pos_u2b(sv,&append,0);
8490             }
8491         } else if (SvUTF8(sv)) {
8492             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8493         }
8494     }
8495
8496     SvPOK_only(sv);
8497     if (!append) {
8498         /* not appending - "clear" the string by setting SvCUR to 0,
8499          * the pv is still avaiable. */
8500         SvCUR_set(sv,0);
8501     }
8502     if (PerlIO_isutf8(fp))
8503         SvUTF8_on(sv);
8504
8505     if (IN_PERL_COMPILETIME) {
8506         /* we always read code in line mode */
8507         rsptr = "\n";
8508         rslen = 1;
8509     }
8510     else if (RsSNARF(PL_rs)) {
8511         /* If it is a regular disk file use size from stat() as estimate
8512            of amount we are going to read -- may result in mallocing
8513            more memory than we really need if the layers below reduce
8514            the size we read (e.g. CRLF or a gzip layer).
8515          */
8516         Stat_t st;
8517         int fd = PerlIO_fileno(fp);
8518         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8519             const Off_t offset = PerlIO_tell(fp);
8520             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8521 #ifdef PERL_COPY_ON_WRITE
8522                 /* Add an extra byte for the sake of copy-on-write's
8523                  * buffer reference count. */
8524                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8525 #else
8526                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8527 #endif
8528             }
8529         }
8530         rsptr = NULL;
8531         rslen = 0;
8532     }
8533     else if (RsRECORD(PL_rs)) {
8534         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8535     }
8536     else if (RsPARA(PL_rs)) {
8537         rsptr = "\n\n";
8538         rslen = 2;
8539         rspara = 1;
8540     }
8541     else {
8542         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8543         if (PerlIO_isutf8(fp)) {
8544             rsptr = SvPVutf8(PL_rs, rslen);
8545         }
8546         else {
8547             if (SvUTF8(PL_rs)) {
8548                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8549                     Perl_croak(aTHX_ "Wide character in $/");
8550                 }
8551             }
8552             /* extract the raw pointer to the record separator */
8553             rsptr = SvPV_const(PL_rs, rslen);
8554         }
8555     }
8556
8557     /* rslast is the last character in the record separator
8558      * note we don't use rslast except when rslen is true, so the
8559      * null assign is a placeholder. */
8560     rslast = rslen ? rsptr[rslen - 1] : '\0';
8561
8562     if (rspara) {        /* have to do this both before and after */
8563                          /* to make sure file boundaries work right */
8564         while (1) {
8565             if (PerlIO_eof(fp))
8566                 return 0;
8567             i = PerlIO_getc(fp);
8568             if (i != '\n') {
8569                 if (i == -1)
8570                     return 0;
8571                 PerlIO_ungetc(fp,i);
8572                 break;
8573             }
8574         }
8575     }
8576
8577     /* See if we know enough about I/O mechanism to cheat it ! */
8578
8579     /* This used to be #ifdef test - it is made run-time test for ease
8580        of abstracting out stdio interface. One call should be cheap
8581        enough here - and may even be a macro allowing compile
8582        time optimization.
8583      */
8584
8585     if (PerlIO_fast_gets(fp)) {
8586     /*
8587      * We can do buffer based IO operations on this filehandle.
8588      *
8589      * This means we can bypass a lot of subcalls and process
8590      * the buffer directly, it also means we know the upper bound
8591      * on the amount of data we might read of the current buffer
8592      * into our sv. Knowing this allows us to preallocate the pv
8593      * to be able to hold that maximum, which allows us to simplify
8594      * a lot of logic. */
8595
8596     /*
8597      * We're going to steal some values from the stdio struct
8598      * and put EVERYTHING in the innermost loop into registers.
8599      */
8600     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8601     STRLEN bpx;         /* length of the data in the target sv
8602                            used to fix pointers after a SvGROW */
8603     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8604                            of data left in the read-ahead buffer.
8605                            If 0 then the pv buffer can hold the full
8606                            amount left, otherwise this is the amount it
8607                            can hold. */
8608
8609     /* Here is some breathtakingly efficient cheating */
8610
8611     /* When you read the following logic resist the urge to think
8612      * of record separators that are 1 byte long. They are an
8613      * uninteresting special (simple) case.
8614      *
8615      * Instead think of record separators which are at least 2 bytes
8616      * long, and keep in mind that we need to deal with such
8617      * separators when they cross a read-ahead buffer boundary.
8618      *
8619      * Also consider that we need to gracefully deal with separators
8620      * that may be longer than a single read ahead buffer.
8621      *
8622      * Lastly do not forget we want to copy the delimiter as well. We
8623      * are copying all data in the file _up_to_and_including_ the separator
8624      * itself.
8625      *
8626      * Now that you have all that in mind here is what is happening below:
8627      *
8628      * 1. When we first enter the loop we do some memory book keeping to see
8629      * how much free space there is in the target SV. (This sub assumes that
8630      * it is operating on the same SV most of the time via $_ and that it is
8631      * going to be able to reuse the same pv buffer each call.) If there is
8632      * "enough" room then we set "shortbuffered" to how much space there is
8633      * and start reading forward.
8634      *
8635      * 2. When we scan forward we copy from the read-ahead buffer to the target
8636      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8637      * and the end of the of pv, as well as for the "rslast", which is the last
8638      * char of the separator.
8639      *
8640      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8641      * (which has a "complete" record up to the point we saw rslast) and check
8642      * it to see if it matches the separator. If it does we are done. If it doesn't
8643      * we continue on with the scan/copy.
8644      *
8645      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8646      * the IO system to read the next buffer. We do this by doing a getc(), which
8647      * returns a single char read (or EOF), and prefills the buffer, and also
8648      * allows us to find out how full the buffer is.  We use this information to
8649      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8650      * the returned single char into the target sv, and then go back into scan
8651      * forward mode.
8652      *
8653      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8654      * remaining space in the read-buffer.
8655      *
8656      * Note that this code despite its twisty-turny nature is pretty darn slick.
8657      * It manages single byte separators, multi-byte cross boundary separators,
8658      * and cross-read-buffer separators cleanly and efficiently at the cost
8659      * of potentially greatly overallocating the target SV.
8660      *
8661      * Yves
8662      */
8663
8664
8665     /* get the number of bytes remaining in the read-ahead buffer
8666      * on first call on a given fp this will return 0.*/
8667     cnt = PerlIO_get_cnt(fp);
8668
8669     /* make sure we have the room */
8670     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8671         /* Not room for all of it
8672            if we are looking for a separator and room for some
8673          */
8674         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8675             /* just process what we have room for */
8676             shortbuffered = cnt - SvLEN(sv) + append + 1;
8677             cnt -= shortbuffered;
8678         }
8679         else {
8680             /* ensure that the target sv has enough room to hold
8681              * the rest of the read-ahead buffer */
8682             shortbuffered = 0;
8683             /* remember that cnt can be negative */
8684             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8685         }
8686     }
8687     else {
8688         /* we have enough room to hold the full buffer, lets scream */
8689         shortbuffered = 0;
8690     }
8691
8692     /* extract the pointer to sv's string buffer, offset by append as necessary */
8693     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8694     /* extract the point to the read-ahead buffer */
8695     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8696
8697     /* some trace debug output */
8698     DEBUG_P(PerlIO_printf(Perl_debug_log,
8699         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8700     DEBUG_P(PerlIO_printf(Perl_debug_log,
8701         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8702          UVuf "\n",
8703                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8704                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8705
8706     for (;;) {
8707       screamer:
8708         /* if there is stuff left in the read-ahead buffer */
8709         if (cnt > 0) {
8710             /* if there is a separator */
8711             if (rslen) {
8712                 /* find next rslast */
8713                 STDCHAR *p;
8714
8715                 /* shortcut common case of blank line */
8716                 cnt--;
8717                 if ((*bp++ = *ptr++) == rslast)
8718                     goto thats_all_folks;
8719
8720                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8721                 if (p) {
8722                     SSize_t got = p - ptr + 1;
8723                     Copy(ptr, bp, got, STDCHAR);
8724                     ptr += got;
8725                     bp  += got;
8726                     cnt -= got;
8727                     goto thats_all_folks;
8728                 }
8729                 Copy(ptr, bp, cnt, STDCHAR);
8730                 ptr += cnt;
8731                 bp  += cnt;
8732                 cnt = 0;
8733             }
8734             else {
8735                 /* no separator, slurp the full buffer */
8736                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8737                 bp += cnt;                           /* screams  |  dust */
8738                 ptr += cnt;                          /* louder   |  sed :-) */
8739                 cnt = 0;
8740                 assert (!shortbuffered);
8741                 goto cannot_be_shortbuffered;
8742             }
8743         }
8744         
8745         if (shortbuffered) {            /* oh well, must extend */
8746             /* we didnt have enough room to fit the line into the target buffer
8747              * so we must extend the target buffer and keep going */
8748             cnt = shortbuffered;
8749             shortbuffered = 0;
8750             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8751             SvCUR_set(sv, bpx);
8752             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8753             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8754             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8755             continue;
8756         }
8757
8758     cannot_be_shortbuffered:
8759         /* we need to refill the read-ahead buffer if possible */
8760
8761         DEBUG_P(PerlIO_printf(Perl_debug_log,
8762                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8763                               PTR2UV(ptr),(IV)cnt));
8764         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8765
8766         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8767            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8768             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8769             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8770
8771         /*
8772             call PerlIO_getc() to let it prefill the lookahead buffer
8773
8774             This used to call 'filbuf' in stdio form, but as that behaves like
8775             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8776             another abstraction.
8777
8778             Note we have to deal with the char in 'i' if we are not at EOF
8779         */
8780         bpx = bp - (STDCHAR*)SvPVX_const(sv);
8781         /* signals might be called here, possibly modifying sv */
8782         i   = PerlIO_getc(fp);          /* get more characters */
8783         bp = (STDCHAR*)SvPVX_const(sv) + bpx;
8784
8785         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8786            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8787             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8788             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8789
8790         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8791         cnt = PerlIO_get_cnt(fp);
8792         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8793         DEBUG_P(PerlIO_printf(Perl_debug_log,
8794             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8795             PTR2UV(ptr),(IV)cnt));
8796
8797         if (i == EOF)                   /* all done for ever? */
8798             goto thats_really_all_folks;
8799
8800         /* make sure we have enough space in the target sv */
8801         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8802         SvCUR_set(sv, bpx);
8803         SvGROW(sv, bpx + cnt + 2);
8804         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8805
8806         /* copy of the char we got from getc() */
8807         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8808
8809         /* make sure we deal with the i being the last character of a separator */
8810         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8811             goto thats_all_folks;
8812     }
8813
8814   thats_all_folks:
8815     /* check if we have actually found the separator - only really applies
8816      * when rslen > 1 */
8817     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8818           memNE((char*)bp - rslen, rsptr, rslen))
8819         goto screamer;                          /* go back to the fray */
8820   thats_really_all_folks:
8821     if (shortbuffered)
8822         cnt += shortbuffered;
8823         DEBUG_P(PerlIO_printf(Perl_debug_log,
8824              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8825     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8826     DEBUG_P(PerlIO_printf(Perl_debug_log,
8827         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8828         "\n",
8829         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8830         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8831     *bp = '\0';
8832     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8833     DEBUG_P(PerlIO_printf(Perl_debug_log,
8834         "Screamer: done, len=%ld, string=|%.*s|\n",
8835         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8836     }
8837    else
8838     {
8839        /*The big, slow, and stupid way. */
8840 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8841         STDCHAR *buf = NULL;
8842         Newx(buf, 8192, STDCHAR);
8843         assert(buf);
8844 #else
8845         STDCHAR buf[8192];
8846 #endif
8847
8848       screamer2:
8849         if (rslen) {
8850             const STDCHAR * const bpe = buf + sizeof(buf);
8851             bp = buf;
8852             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8853                 ; /* keep reading */
8854             cnt = bp - buf;
8855         }
8856         else {
8857             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8858             /* Accommodate broken VAXC compiler, which applies U8 cast to
8859              * both args of ?: operator, causing EOF to change into 255
8860              */
8861             if (cnt > 0)
8862                  i = (U8)buf[cnt - 1];
8863             else
8864                  i = EOF;
8865         }
8866
8867         if (cnt < 0)
8868             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8869         if (append)
8870             sv_catpvn_nomg(sv, (char *) buf, cnt);
8871         else
8872             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8873
8874         if (i != EOF &&                 /* joy */
8875             (!rslen ||
8876              SvCUR(sv) < rslen ||
8877              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8878         {
8879             append = -1;
8880             /*
8881              * If we're reading from a TTY and we get a short read,
8882              * indicating that the user hit his EOF character, we need
8883              * to notice it now, because if we try to read from the TTY
8884              * again, the EOF condition will disappear.
8885              *
8886              * The comparison of cnt to sizeof(buf) is an optimization
8887              * that prevents unnecessary calls to feof().
8888              *
8889              * - jik 9/25/96
8890              */
8891             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8892                 goto screamer2;
8893         }
8894
8895 #ifdef USE_HEAP_INSTEAD_OF_STACK
8896         Safefree(buf);
8897 #endif
8898     }
8899
8900     if (rspara) {               /* have to do this both before and after */
8901         while (i != EOF) {      /* to make sure file boundaries work right */
8902             i = PerlIO_getc(fp);
8903             if (i != '\n') {
8904                 PerlIO_ungetc(fp,i);
8905                 break;
8906             }
8907         }
8908     }
8909
8910     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8911 }
8912
8913 /*
8914 =for apidoc sv_inc
8915
8916 Auto-increment of the value in the SV, doing string to numeric conversion
8917 if necessary.  Handles 'get' magic and operator overloading.
8918
8919 =cut
8920 */
8921
8922 void
8923 Perl_sv_inc(pTHX_ SV *const sv)
8924 {
8925     if (!sv)
8926         return;
8927     SvGETMAGIC(sv);
8928     sv_inc_nomg(sv);
8929 }
8930
8931 /*
8932 =for apidoc sv_inc_nomg
8933
8934 Auto-increment of the value in the SV, doing string to numeric conversion
8935 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8936
8937 =cut
8938 */
8939
8940 void
8941 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8942 {
8943     char *d;
8944     int flags;
8945
8946     if (!sv)
8947         return;
8948     if (SvTHINKFIRST(sv)) {
8949         if (SvREADONLY(sv)) {
8950                 Perl_croak_no_modify();
8951         }
8952         if (SvROK(sv)) {
8953             IV i;
8954             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8955                 return;
8956             i = PTR2IV(SvRV(sv));
8957             sv_unref(sv);
8958             sv_setiv(sv, i);
8959         }
8960         else sv_force_normal_flags(sv, 0);
8961     }
8962     flags = SvFLAGS(sv);
8963     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8964         /* It's (privately or publicly) a float, but not tested as an
8965            integer, so test it to see. */
8966         (void) SvIV(sv);
8967         flags = SvFLAGS(sv);
8968     }
8969     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8970         /* It's publicly an integer, or privately an integer-not-float */
8971 #ifdef PERL_PRESERVE_IVUV
8972       oops_its_int:
8973 #endif
8974         if (SvIsUV(sv)) {
8975             if (SvUVX(sv) == UV_MAX)
8976                 sv_setnv(sv, UV_MAX_P1);
8977             else
8978                 (void)SvIOK_only_UV(sv);
8979                 SvUV_set(sv, SvUVX(sv) + 1);
8980         } else {
8981             if (SvIVX(sv) == IV_MAX)
8982                 sv_setuv(sv, (UV)IV_MAX + 1);
8983             else {
8984                 (void)SvIOK_only(sv);
8985                 SvIV_set(sv, SvIVX(sv) + 1);
8986             }   
8987         }
8988         return;
8989     }
8990     if (flags & SVp_NOK) {
8991         const NV was = SvNVX(sv);
8992         if (LIKELY(!Perl_isinfnan(was)) &&
8993             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8994             was >= NV_OVERFLOWS_INTEGERS_AT) {
8995             /* diag_listed_as: Lost precision when %s %f by 1 */
8996             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8997                            "Lost precision when incrementing %" NVff " by 1",
8998                            was);
8999         }
9000         (void)SvNOK_only(sv);
9001         SvNV_set(sv, was + 1.0);
9002         return;
9003     }
9004
9005     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9006     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9007         Perl_croak_no_modify();
9008
9009     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
9010         if ((flags & SVTYPEMASK) < SVt_PVIV)
9011             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
9012         (void)SvIOK_only(sv);
9013         SvIV_set(sv, 1);
9014         return;
9015     }
9016     d = SvPVX(sv);
9017     while (isALPHA(*d)) d++;
9018     while (isDIGIT(*d)) d++;
9019     if (d < SvEND(sv)) {
9020         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
9021 #ifdef PERL_PRESERVE_IVUV
9022         /* Got to punt this as an integer if needs be, but we don't issue
9023            warnings. Probably ought to make the sv_iv_please() that does
9024            the conversion if possible, and silently.  */
9025         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9026             /* Need to try really hard to see if it's an integer.
9027                9.22337203685478e+18 is an integer.
9028                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9029                so $a="9.22337203685478e+18"; $a+0; $a++
9030                needs to be the same as $a="9.22337203685478e+18"; $a++
9031                or we go insane. */
9032         
9033             (void) sv_2iv(sv);
9034             if (SvIOK(sv))
9035                 goto oops_its_int;
9036
9037             /* sv_2iv *should* have made this an NV */
9038             if (flags & SVp_NOK) {
9039                 (void)SvNOK_only(sv);
9040                 SvNV_set(sv, SvNVX(sv) + 1.0);
9041                 return;
9042             }
9043             /* I don't think we can get here. Maybe I should assert this
9044                And if we do get here I suspect that sv_setnv will croak. NWC
9045                Fall through. */
9046             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9047                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9048         }
9049 #endif /* PERL_PRESERVE_IVUV */
9050         if (!numtype && ckWARN(WARN_NUMERIC))
9051             not_incrementable(sv);
9052         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9053         return;
9054     }
9055     d--;
9056     while (d >= SvPVX_const(sv)) {
9057         if (isDIGIT(*d)) {
9058             if (++*d <= '9')
9059                 return;
9060             *(d--) = '0';
9061         }
9062         else {
9063 #ifdef EBCDIC
9064             /* MKS: The original code here died if letters weren't consecutive.
9065              * at least it didn't have to worry about non-C locales.  The
9066              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9067              * arranged in order (although not consecutively) and that only
9068              * [A-Za-z] are accepted by isALPHA in the C locale.
9069              */
9070             if (isALPHA_FOLD_NE(*d, 'z')) {
9071                 do { ++*d; } while (!isALPHA(*d));
9072                 return;
9073             }
9074             *(d--) -= 'z' - 'a';
9075 #else
9076             ++*d;
9077             if (isALPHA(*d))
9078                 return;
9079             *(d--) -= 'z' - 'a' + 1;
9080 #endif
9081         }
9082     }
9083     /* oh,oh, the number grew */
9084     SvGROW(sv, SvCUR(sv) + 2);
9085     SvCUR_set(sv, SvCUR(sv) + 1);
9086     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9087         *d = d[-1];
9088     if (isDIGIT(d[1]))
9089         *d = '1';
9090     else
9091         *d = d[1];
9092 }
9093
9094 /*
9095 =for apidoc sv_dec
9096
9097 Auto-decrement of the value in the SV, doing string to numeric conversion
9098 if necessary.  Handles 'get' magic and operator overloading.
9099
9100 =cut
9101 */
9102
9103 void
9104 Perl_sv_dec(pTHX_ SV *const sv)
9105 {
9106     if (!sv)
9107         return;
9108     SvGETMAGIC(sv);
9109     sv_dec_nomg(sv);
9110 }
9111
9112 /*
9113 =for apidoc sv_dec_nomg
9114
9115 Auto-decrement of the value in the SV, doing string to numeric conversion
9116 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9117
9118 =cut
9119 */
9120
9121 void
9122 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9123 {
9124     int flags;
9125
9126     if (!sv)
9127         return;
9128     if (SvTHINKFIRST(sv)) {
9129         if (SvREADONLY(sv)) {
9130                 Perl_croak_no_modify();
9131         }
9132         if (SvROK(sv)) {
9133             IV i;
9134             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9135                 return;
9136             i = PTR2IV(SvRV(sv));
9137             sv_unref(sv);
9138             sv_setiv(sv, i);
9139         }
9140         else sv_force_normal_flags(sv, 0);
9141     }
9142     /* Unlike sv_inc we don't have to worry about string-never-numbers
9143        and keeping them magic. But we mustn't warn on punting */
9144     flags = SvFLAGS(sv);
9145     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9146         /* It's publicly an integer, or privately an integer-not-float */
9147 #ifdef PERL_PRESERVE_IVUV
9148       oops_its_int:
9149 #endif
9150         if (SvIsUV(sv)) {
9151             if (SvUVX(sv) == 0) {
9152                 (void)SvIOK_only(sv);
9153                 SvIV_set(sv, -1);
9154             }
9155             else {
9156                 (void)SvIOK_only_UV(sv);
9157                 SvUV_set(sv, SvUVX(sv) - 1);
9158             }   
9159         } else {
9160             if (SvIVX(sv) == IV_MIN) {
9161                 sv_setnv(sv, (NV)IV_MIN);
9162                 goto oops_its_num;
9163             }
9164             else {
9165                 (void)SvIOK_only(sv);
9166                 SvIV_set(sv, SvIVX(sv) - 1);
9167             }   
9168         }
9169         return;
9170     }
9171     if (flags & SVp_NOK) {
9172     oops_its_num:
9173         {
9174             const NV was = SvNVX(sv);
9175             if (LIKELY(!Perl_isinfnan(was)) &&
9176                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9177                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9178                 /* diag_listed_as: Lost precision when %s %f by 1 */
9179                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9180                                "Lost precision when decrementing %" NVff " by 1",
9181                                was);
9182             }
9183             (void)SvNOK_only(sv);
9184             SvNV_set(sv, was - 1.0);
9185             return;
9186         }
9187     }
9188
9189     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9190     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9191         Perl_croak_no_modify();
9192
9193     if (!(flags & SVp_POK)) {
9194         if ((flags & SVTYPEMASK) < SVt_PVIV)
9195             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9196         SvIV_set(sv, -1);
9197         (void)SvIOK_only(sv);
9198         return;
9199     }
9200 #ifdef PERL_PRESERVE_IVUV
9201     {
9202         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9203         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9204             /* Need to try really hard to see if it's an integer.
9205                9.22337203685478e+18 is an integer.
9206                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9207                so $a="9.22337203685478e+18"; $a+0; $a--
9208                needs to be the same as $a="9.22337203685478e+18"; $a--
9209                or we go insane. */
9210         
9211             (void) sv_2iv(sv);
9212             if (SvIOK(sv))
9213                 goto oops_its_int;
9214
9215             /* sv_2iv *should* have made this an NV */
9216             if (flags & SVp_NOK) {
9217                 (void)SvNOK_only(sv);
9218                 SvNV_set(sv, SvNVX(sv) - 1.0);
9219                 return;
9220             }
9221             /* I don't think we can get here. Maybe I should assert this
9222                And if we do get here I suspect that sv_setnv will croak. NWC
9223                Fall through. */
9224             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9225                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9226         }
9227     }
9228 #endif /* PERL_PRESERVE_IVUV */
9229     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9230 }
9231
9232 /* this define is used to eliminate a chunk of duplicated but shared logic
9233  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9234  * used anywhere but here - yves
9235  */
9236 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9237     STMT_START {      \
9238         SSize_t ix = ++PL_tmps_ix;              \
9239         if (UNLIKELY(ix >= PL_tmps_max))        \
9240             ix = tmps_grow_p(ix);                       \
9241         PL_tmps_stack[ix] = (AnSv); \
9242     } STMT_END
9243
9244 /*
9245 =for apidoc sv_mortalcopy
9246
9247 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9248 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9249 explicit call to C<FREETMPS>, or by an implicit call at places such as
9250 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9251
9252 =for apidoc sv_mortalcopy_flags
9253
9254 Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
9255 C<sv_setsv_flags>.
9256
9257 =cut
9258 */
9259
9260 /* Make a string that will exist for the duration of the expression
9261  * evaluation.  Actually, it may have to last longer than that, but
9262  * hopefully we won't free it until it has been assigned to a
9263  * permanent location. */
9264
9265 SV *
9266 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9267 {
9268     SV *sv;
9269
9270     if (flags & SV_GMAGIC)
9271         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9272     new_SV(sv);
9273     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9274     PUSH_EXTEND_MORTAL__SV_C(sv);
9275     SvTEMP_on(sv);
9276     return sv;
9277 }
9278
9279 /*
9280 =for apidoc sv_newmortal
9281
9282 Creates a new null SV which is mortal.  The reference count of the SV is
9283 set to 1.  It will be destroyed "soon", either by an explicit call to
9284 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9285 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9286
9287 =cut
9288 */
9289
9290 SV *
9291 Perl_sv_newmortal(pTHX)
9292 {
9293     SV *sv;
9294
9295     new_SV(sv);
9296     SvFLAGS(sv) = SVs_TEMP;
9297     PUSH_EXTEND_MORTAL__SV_C(sv);
9298     return sv;
9299 }
9300
9301
9302 /*
9303 =for apidoc newSVpvn_flags
9304
9305 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9306 characters) into it.  The reference count for the
9307 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9308 string.  You are responsible for ensuring that the source string is at least
9309 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9310 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9311 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9312 returning.  If C<SVf_UTF8> is set, C<s>
9313 is considered to be in UTF-8 and the
9314 C<SVf_UTF8> flag will be set on the new SV.
9315 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9316
9317     #define newSVpvn_utf8(s, len, u)                    \
9318         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9319
9320 =for apidoc Amnh||SVf_UTF8
9321 =for apidoc Amnh||SVs_TEMP
9322
9323 =cut
9324 */
9325
9326 SV *
9327 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9328 {
9329     SV *sv;
9330
9331     /* All the flags we don't support must be zero.
9332        And we're new code so I'm going to assert this from the start.  */
9333     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9334     new_SV(sv);
9335     sv_setpvn(sv,s,len);
9336
9337     /* This code used to do a sv_2mortal(), however we now unroll the call to
9338      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9339      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9340      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9341      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9342      * means that we eliminate quite a few steps than it looks - Yves
9343      * (explaining patch by gfx) */
9344
9345     SvFLAGS(sv) |= flags;
9346
9347     if(flags & SVs_TEMP){
9348         PUSH_EXTEND_MORTAL__SV_C(sv);
9349     }
9350
9351     return sv;
9352 }
9353
9354 /*
9355 =for apidoc sv_2mortal
9356
9357 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9358 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9359 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9360 string buffer can be "stolen" if this SV is copied.  See also
9361 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9362
9363 =cut
9364 */
9365
9366 SV *
9367 Perl_sv_2mortal(pTHX_ SV *const sv)
9368 {
9369     dVAR;
9370     if (!sv)
9371         return sv;
9372     if (SvIMMORTAL(sv))
9373         return sv;
9374     PUSH_EXTEND_MORTAL__SV_C(sv);
9375     SvTEMP_on(sv);
9376     return sv;
9377 }
9378
9379 /*
9380 =for apidoc newSVpv
9381
9382 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9383 characters) into it.  The reference count for the
9384 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9385 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9386 C<NUL> characters and has to have a terminating C<NUL> byte).
9387
9388 This function can cause reliability issues if you are likely to pass in
9389 empty strings that are not null terminated, because it will run
9390 strlen on the string and potentially run past valid memory.
9391
9392 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9393 For string literals use L</newSVpvs> instead.  This function will work fine for
9394 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9395 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9396
9397 =cut
9398 */
9399
9400 SV *
9401 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9402 {
9403     SV *sv;
9404
9405     new_SV(sv);
9406     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9407     return sv;
9408 }
9409
9410 /*
9411 =for apidoc newSVpvn
9412
9413 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9414 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9415 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9416 are responsible for ensuring that the source buffer is at least
9417 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9418 undefined.
9419
9420 =cut
9421 */
9422
9423 SV *
9424 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9425 {
9426     SV *sv;
9427     new_SV(sv);
9428     sv_setpvn(sv,buffer,len);
9429     return sv;
9430 }
9431
9432 /*
9433 =for apidoc newSVhek
9434
9435 Creates a new SV from the hash key structure.  It will generate scalars that
9436 point to the shared string table where possible.  Returns a new (undefined)
9437 SV if C<hek> is NULL.
9438
9439 =cut
9440 */
9441
9442 SV *
9443 Perl_newSVhek(pTHX_ const HEK *const hek)
9444 {
9445     if (!hek) {
9446         SV *sv;
9447
9448         new_SV(sv);
9449         return sv;
9450     }
9451
9452     if (HEK_LEN(hek) == HEf_SVKEY) {
9453         return newSVsv(*(SV**)HEK_KEY(hek));
9454     } else {
9455         const int flags = HEK_FLAGS(hek);
9456         if (flags & HVhek_WASUTF8) {
9457             /* Trouble :-)
9458                Andreas would like keys he put in as utf8 to come back as utf8
9459             */
9460             STRLEN utf8_len = HEK_LEN(hek);
9461             SV * const sv = newSV_type(SVt_PV);
9462             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9463             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9464             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9465             SvUTF8_on (sv);
9466             return sv;
9467         } else if (flags & HVhek_UNSHARED) {
9468             /* A hash that isn't using shared hash keys has to have
9469                the flag in every key so that we know not to try to call
9470                share_hek_hek on it.  */
9471
9472             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9473             if (HEK_UTF8(hek))
9474                 SvUTF8_on (sv);
9475             return sv;
9476         }
9477         /* This will be overwhelminly the most common case.  */
9478         {
9479             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9480                more efficient than sharepvn().  */
9481             SV *sv;
9482
9483             new_SV(sv);
9484             sv_upgrade(sv, SVt_PV);
9485             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9486             SvCUR_set(sv, HEK_LEN(hek));
9487             SvLEN_set(sv, 0);
9488             SvIsCOW_on(sv);
9489             SvPOK_on(sv);
9490             if (HEK_UTF8(hek))
9491                 SvUTF8_on(sv);
9492             return sv;
9493         }
9494     }
9495 }
9496
9497 /*
9498 =for apidoc newSVpvn_share
9499
9500 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9501 table.  If the string does not already exist in the table, it is
9502 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9503 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9504 is non-zero, that value is used; otherwise the hash is computed.
9505 The string's hash can later be retrieved from the SV
9506 with the C<SvSHARED_HASH()> macro.  The idea here is
9507 that as the string table is used for shared hash keys these strings will have
9508 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9509
9510 =cut
9511 */
9512
9513 SV *
9514 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9515 {
9516     dVAR;
9517     SV *sv;
9518     bool is_utf8 = FALSE;
9519     const char *const orig_src = src;
9520
9521     if (len < 0) {
9522         STRLEN tmplen = -len;
9523         is_utf8 = TRUE;
9524         /* See the note in hv.c:hv_fetch() --jhi */
9525         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9526         len = tmplen;
9527     }
9528     if (!hash)
9529         PERL_HASH(hash, src, len);
9530     new_SV(sv);
9531     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9532        changes here, update it there too.  */
9533     sv_upgrade(sv, SVt_PV);
9534     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9535     SvCUR_set(sv, len);
9536     SvLEN_set(sv, 0);
9537     SvIsCOW_on(sv);
9538     SvPOK_on(sv);
9539     if (is_utf8)
9540         SvUTF8_on(sv);
9541     if (src != orig_src)
9542         Safefree(src);
9543     return sv;
9544 }
9545
9546 /*
9547 =for apidoc newSVpv_share
9548
9549 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9550 string/length pair.
9551
9552 =cut
9553 */
9554
9555 SV *
9556 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9557 {
9558     return newSVpvn_share(src, strlen(src), hash);
9559 }
9560
9561 #if defined(PERL_IMPLICIT_CONTEXT)
9562
9563 /* pTHX_ magic can't cope with varargs, so this is a no-context
9564  * version of the main function, (which may itself be aliased to us).
9565  * Don't access this version directly.
9566  */
9567
9568 SV *
9569 Perl_newSVpvf_nocontext(const char *const pat, ...)
9570 {
9571     dTHX;
9572     SV *sv;
9573     va_list args;
9574
9575     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9576
9577     va_start(args, pat);
9578     sv = vnewSVpvf(pat, &args);
9579     va_end(args);
9580     return sv;
9581 }
9582 #endif
9583
9584 /*
9585 =for apidoc newSVpvf
9586
9587 Creates a new SV and initializes it with the string formatted like
9588 C<sv_catpvf>.
9589
9590 =cut
9591 */
9592
9593 SV *
9594 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9595 {
9596     SV *sv;
9597     va_list args;
9598
9599     PERL_ARGS_ASSERT_NEWSVPVF;
9600
9601     va_start(args, pat);
9602     sv = vnewSVpvf(pat, &args);
9603     va_end(args);
9604     return sv;
9605 }
9606
9607 /* backend for newSVpvf() and newSVpvf_nocontext() */
9608
9609 SV *
9610 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9611 {
9612     SV *sv;
9613
9614     PERL_ARGS_ASSERT_VNEWSVPVF;
9615
9616     new_SV(sv);
9617     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9618     return sv;
9619 }
9620
9621 /*
9622 =for apidoc newSVnv
9623
9624 Creates a new SV and copies a floating point value into it.
9625 The reference count for the SV is set to 1.
9626
9627 =cut
9628 */
9629
9630 SV *
9631 Perl_newSVnv(pTHX_ const NV n)
9632 {
9633     SV *sv;
9634
9635     new_SV(sv);
9636     sv_setnv(sv,n);
9637     return sv;
9638 }
9639
9640 /*
9641 =for apidoc newSViv
9642
9643 Creates a new SV and copies an integer into it.  The reference count for the
9644 SV is set to 1.
9645
9646 =cut
9647 */
9648
9649 SV *
9650 Perl_newSViv(pTHX_ const IV i)
9651 {
9652     SV *sv;
9653
9654     new_SV(sv);
9655
9656     /* Inlining ONLY the small relevant subset of sv_setiv here
9657      * for performance. Makes a significant difference. */
9658
9659     /* We're starting from SVt_FIRST, so provided that's
9660      * actual 0, we don't have to unset any SV type flags
9661      * to promote to SVt_IV. */
9662     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9663
9664     SET_SVANY_FOR_BODYLESS_IV(sv);
9665     SvFLAGS(sv) |= SVt_IV;
9666     (void)SvIOK_on(sv);
9667
9668     SvIV_set(sv, i);
9669     SvTAINT(sv);
9670
9671     return sv;
9672 }
9673
9674 /*
9675 =for apidoc newSVuv
9676
9677 Creates a new SV and copies an unsigned integer into it.
9678 The reference count for the SV is set to 1.
9679
9680 =cut
9681 */
9682
9683 SV *
9684 Perl_newSVuv(pTHX_ const UV u)
9685 {
9686     SV *sv;
9687
9688     /* Inlining ONLY the small relevant subset of sv_setuv here
9689      * for performance. Makes a significant difference. */
9690
9691     /* Using ivs is more efficient than using uvs - see sv_setuv */
9692     if (u <= (UV)IV_MAX) {
9693         return newSViv((IV)u);
9694     }
9695
9696     new_SV(sv);
9697
9698     /* We're starting from SVt_FIRST, so provided that's
9699      * actual 0, we don't have to unset any SV type flags
9700      * to promote to SVt_IV. */
9701     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9702
9703     SET_SVANY_FOR_BODYLESS_IV(sv);
9704     SvFLAGS(sv) |= SVt_IV;
9705     (void)SvIOK_on(sv);
9706     (void)SvIsUV_on(sv);
9707
9708     SvUV_set(sv, u);
9709     SvTAINT(sv);
9710
9711     return sv;
9712 }
9713
9714 /*
9715 =for apidoc newSV_type
9716
9717 Creates a new SV, of the type specified.  The reference count for the new SV
9718 is set to 1.
9719
9720 =cut
9721 */
9722
9723 SV *
9724 Perl_newSV_type(pTHX_ const svtype type)
9725 {
9726     SV *sv;
9727
9728     new_SV(sv);
9729     ASSUME(SvTYPE(sv) == SVt_FIRST);
9730     if(type != SVt_FIRST)
9731         sv_upgrade(sv, type);
9732     return sv;
9733 }
9734
9735 /*
9736 =for apidoc newRV_noinc
9737
9738 Creates an RV wrapper for an SV.  The reference count for the original
9739 SV is B<not> incremented.
9740
9741 =cut
9742 */
9743
9744 SV *
9745 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9746 {
9747     SV *sv;
9748
9749     PERL_ARGS_ASSERT_NEWRV_NOINC;
9750
9751     new_SV(sv);
9752
9753     /* We're starting from SVt_FIRST, so provided that's
9754      * actual 0, we don't have to unset any SV type flags
9755      * to promote to SVt_IV. */
9756     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9757
9758     SET_SVANY_FOR_BODYLESS_IV(sv);
9759     SvFLAGS(sv) |= SVt_IV;
9760     SvROK_on(sv);
9761     SvIV_set(sv, 0);
9762
9763     SvTEMP_off(tmpRef);
9764     SvRV_set(sv, tmpRef);
9765
9766     return sv;
9767 }
9768
9769 /* newRV_inc is the official function name to use now.
9770  * newRV_inc is in fact #defined to newRV in sv.h
9771  */
9772
9773 SV *
9774 Perl_newRV(pTHX_ SV *const sv)
9775 {
9776     PERL_ARGS_ASSERT_NEWRV;
9777
9778     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9779 }
9780
9781 /*
9782 =for apidoc newSVsv
9783
9784 Creates a new SV which is an exact duplicate of the original SV.
9785 (Uses C<sv_setsv>.)
9786
9787 =for apidoc newSVsv_nomg
9788
9789 Like C<newSVsv> but does not process get magic.
9790
9791 =cut
9792 */
9793
9794 SV *
9795 Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
9796 {
9797     SV *sv;
9798
9799     if (!old)
9800         return NULL;
9801     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9802         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9803         return NULL;
9804     }
9805     /* Do this here, otherwise we leak the new SV if this croaks. */
9806     if (flags & SV_GMAGIC)
9807         SvGETMAGIC(old);
9808     new_SV(sv);
9809     sv_setsv_flags(sv, old, flags & ~SV_GMAGIC);
9810     return sv;
9811 }
9812
9813 /*
9814 =for apidoc sv_reset
9815
9816 Underlying implementation for the C<reset> Perl function.
9817 Note that the perl-level function is vaguely deprecated.
9818
9819 =cut
9820 */
9821
9822 void
9823 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9824 {
9825     PERL_ARGS_ASSERT_SV_RESET;
9826
9827     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9828 }
9829
9830 void
9831 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9832 {
9833     char todo[PERL_UCHAR_MAX+1];
9834     const char *send;
9835
9836     if (!stash || SvTYPE(stash) != SVt_PVHV)
9837         return;
9838
9839     if (!s) {           /* reset ?? searches */
9840         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9841         if (mg) {
9842             const U32 count = mg->mg_len / sizeof(PMOP**);
9843             PMOP **pmp = (PMOP**) mg->mg_ptr;
9844             PMOP *const *const end = pmp + count;
9845
9846             while (pmp < end) {
9847 #ifdef USE_ITHREADS
9848                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9849 #else
9850                 (*pmp)->op_pmflags &= ~PMf_USED;
9851 #endif
9852                 ++pmp;
9853             }
9854         }
9855         return;
9856     }
9857
9858     /* reset variables */
9859
9860     if (!HvARRAY(stash))
9861         return;
9862
9863     Zero(todo, 256, char);
9864     send = s + len;
9865     while (s < send) {
9866         I32 max;
9867         I32 i = (unsigned char)*s;
9868         if (s[1] == '-') {
9869             s += 2;
9870         }
9871         max = (unsigned char)*s++;
9872         for ( ; i <= max; i++) {
9873             todo[i] = 1;
9874         }
9875         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9876             HE *entry;
9877             for (entry = HvARRAY(stash)[i];
9878                  entry;
9879                  entry = HeNEXT(entry))
9880             {
9881                 GV *gv;
9882                 SV *sv;
9883
9884                 if (!todo[(U8)*HeKEY(entry)])
9885                     continue;
9886                 gv = MUTABLE_GV(HeVAL(entry));
9887                 if (!isGV(gv))
9888                     continue;
9889                 sv = GvSV(gv);
9890                 if (sv && !SvREADONLY(sv)) {
9891                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9892                     if (!isGV(sv)) SvOK_off(sv);
9893                 }
9894                 if (GvAV(gv)) {
9895                     av_clear(GvAV(gv));
9896                 }
9897                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9898                     hv_clear(GvHV(gv));
9899                 }
9900             }
9901         }
9902     }
9903 }
9904
9905 /*
9906 =for apidoc sv_2io
9907
9908 Using various gambits, try to get an IO from an SV: the IO slot if its a
9909 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9910 named after the PV if we're a string.
9911
9912 'Get' magic is ignored on the C<sv> passed in, but will be called on
9913 C<SvRV(sv)> if C<sv> is an RV.
9914
9915 =cut
9916 */
9917
9918 IO*
9919 Perl_sv_2io(pTHX_ SV *const sv)
9920 {
9921     IO* io;
9922     GV* gv;
9923
9924     PERL_ARGS_ASSERT_SV_2IO;
9925
9926     switch (SvTYPE(sv)) {
9927     case SVt_PVIO:
9928         io = MUTABLE_IO(sv);
9929         break;
9930     case SVt_PVGV:
9931     case SVt_PVLV:
9932         if (isGV_with_GP(sv)) {
9933             gv = MUTABLE_GV(sv);
9934             io = GvIO(gv);
9935             if (!io)
9936                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9937                                     HEKfARG(GvNAME_HEK(gv)));
9938             break;
9939         }
9940         /* FALLTHROUGH */
9941     default:
9942         if (!SvOK(sv))
9943             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9944         if (SvROK(sv)) {
9945             SvGETMAGIC(SvRV(sv));
9946             return sv_2io(SvRV(sv));
9947         }
9948         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9949         if (gv)
9950             io = GvIO(gv);
9951         else
9952             io = 0;
9953         if (!io) {
9954             SV *newsv = sv;
9955             if (SvGMAGICAL(sv)) {
9956                 newsv = sv_newmortal();
9957                 sv_setsv_nomg(newsv, sv);
9958             }
9959             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9960         }
9961         break;
9962     }
9963     return io;
9964 }
9965
9966 /*
9967 =for apidoc sv_2cv
9968
9969 Using various gambits, try to get a CV from an SV; in addition, try if
9970 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9971 The flags in C<lref> are passed to C<gv_fetchsv>.
9972
9973 =cut
9974 */
9975
9976 CV *
9977 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9978 {
9979     GV *gv = NULL;
9980     CV *cv = NULL;
9981
9982     PERL_ARGS_ASSERT_SV_2CV;
9983
9984     if (!sv) {
9985         *st = NULL;
9986         *gvp = NULL;
9987         return NULL;
9988     }
9989     switch (SvTYPE(sv)) {
9990     case SVt_PVCV:
9991         *st = CvSTASH(sv);
9992         *gvp = NULL;
9993         return MUTABLE_CV(sv);
9994     case SVt_PVHV:
9995     case SVt_PVAV:
9996         *st = NULL;
9997         *gvp = NULL;
9998         return NULL;
9999     default:
10000         SvGETMAGIC(sv);
10001         if (SvROK(sv)) {
10002             if (SvAMAGIC(sv))
10003                 sv = amagic_deref_call(sv, to_cv_amg);
10004
10005             sv = SvRV(sv);
10006             if (SvTYPE(sv) == SVt_PVCV) {
10007                 cv = MUTABLE_CV(sv);
10008                 *gvp = NULL;
10009                 *st = CvSTASH(cv);
10010                 return cv;
10011             }
10012             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
10013                 gv = MUTABLE_GV(sv);
10014             else
10015                 Perl_croak(aTHX_ "Not a subroutine reference");
10016         }
10017         else if (isGV_with_GP(sv)) {
10018             gv = MUTABLE_GV(sv);
10019         }
10020         else {
10021             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
10022         }
10023         *gvp = gv;
10024         if (!gv) {
10025             *st = NULL;
10026             return NULL;
10027         }
10028         /* Some flags to gv_fetchsv mean don't really create the GV  */
10029         if (!isGV_with_GP(gv)) {
10030             *st = NULL;
10031             return NULL;
10032         }
10033         *st = GvESTASH(gv);
10034         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10035             /* XXX this is probably not what they think they're getting.
10036              * It has the same effect as "sub name;", i.e. just a forward
10037              * declaration! */
10038             newSTUB(gv,0);
10039         }
10040         return GvCVu(gv);
10041     }
10042 }
10043
10044 /*
10045 =for apidoc sv_true
10046
10047 Returns true if the SV has a true value by Perl's rules.
10048 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10049 instead use an in-line version.
10050
10051 =cut
10052 */
10053
10054 I32
10055 Perl_sv_true(pTHX_ SV *const sv)
10056 {
10057     if (!sv)
10058         return 0;
10059     if (SvPOK(sv)) {
10060         const XPV* const tXpv = (XPV*)SvANY(sv);
10061         if (tXpv &&
10062                 (tXpv->xpv_cur > 1 ||
10063                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10064             return 1;
10065         else
10066             return 0;
10067     }
10068     else {
10069         if (SvIOK(sv))
10070             return SvIVX(sv) != 0;
10071         else {
10072             if (SvNOK(sv))
10073                 return SvNVX(sv) != 0.0;
10074             else
10075                 return sv_2bool(sv);
10076         }
10077     }
10078 }
10079
10080 /*
10081 =for apidoc sv_pvn_force
10082
10083 Get a sensible string out of the SV somehow.
10084 A private implementation of the C<SvPV_force> macro for compilers which
10085 can't cope with complex macro expressions.  Always use the macro instead.
10086
10087 =for apidoc sv_pvn_force_flags
10088
10089 Get a sensible string out of the SV somehow.
10090 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10091 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10092 implemented in terms of this function.
10093 You normally want to use the various wrapper macros instead: see
10094 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10095
10096 =cut
10097 */
10098
10099 char *
10100 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10101 {
10102     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10103
10104     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10105     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10106         sv_force_normal_flags(sv, 0);
10107
10108     if (SvPOK(sv)) {
10109         if (lp)
10110             *lp = SvCUR(sv);
10111     }
10112     else {
10113         char *s;
10114         STRLEN len;
10115  
10116         if (SvTYPE(sv) > SVt_PVLV
10117             || isGV_with_GP(sv))
10118             /* diag_listed_as: Can't coerce %s to %s in %s */
10119             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10120                 OP_DESC(PL_op));
10121         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10122         if (!s) {
10123           s = (char *)"";
10124         }
10125         if (lp)
10126             *lp = len;
10127
10128         if (SvTYPE(sv) < SVt_PV ||
10129             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10130             if (SvROK(sv))
10131                 sv_unref(sv);
10132             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10133             SvGROW(sv, len + 1);
10134             Move(s,SvPVX(sv),len,char);
10135             SvCUR_set(sv, len);
10136             SvPVX(sv)[len] = '\0';
10137         }
10138         if (!SvPOK(sv)) {
10139             SvPOK_on(sv);               /* validate pointer */
10140             SvTAINT(sv);
10141             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10142                                   PTR2UV(sv),SvPVX_const(sv)));
10143         }
10144     }
10145     (void)SvPOK_only_UTF8(sv);
10146     return SvPVX_mutable(sv);
10147 }
10148
10149 /*
10150 =for apidoc sv_pvbyten_force
10151
10152 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10153 instead.  If the SV cannot be downgraded from UTF-8, this croaks.
10154
10155 =cut
10156 */
10157
10158 char *
10159 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10160 {
10161     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10162
10163     sv_pvn_force(sv,lp);
10164     sv_utf8_downgrade(sv,0);
10165     *lp = SvCUR(sv);
10166     return SvPVX(sv);
10167 }
10168
10169 /*
10170 =for apidoc sv_pvutf8n_force
10171
10172 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10173 instead.
10174
10175 =cut
10176 */
10177
10178 char *
10179 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10180 {
10181     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10182
10183     sv_pvn_force(sv,0);
10184     sv_utf8_upgrade_nomg(sv);
10185     *lp = SvCUR(sv);
10186     return SvPVX(sv);
10187 }
10188
10189 /*
10190 =for apidoc sv_reftype
10191
10192 Returns a string describing what the SV is a reference to.
10193
10194 If ob is true and the SV is blessed, the string is the class name,
10195 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10196
10197 =cut
10198 */
10199
10200 const char *
10201 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10202 {
10203     PERL_ARGS_ASSERT_SV_REFTYPE;
10204     if (ob && SvOBJECT(sv)) {
10205         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10206     }
10207     else {
10208         /* WARNING - There is code, for instance in mg.c, that assumes that
10209          * the only reason that sv_reftype(sv,0) would return a string starting
10210          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10211          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10212          * this routine inside other subs, and it saves time.
10213          * Do not change this assumption without searching for "dodgy type check" in
10214          * the code.
10215          * - Yves */
10216         switch (SvTYPE(sv)) {
10217         case SVt_NULL:
10218         case SVt_IV:
10219         case SVt_NV:
10220         case SVt_PV:
10221         case SVt_PVIV:
10222         case SVt_PVNV:
10223         case SVt_PVMG:
10224                                 if (SvVOK(sv))
10225                                     return "VSTRING";
10226                                 if (SvROK(sv))
10227                                     return "REF";
10228                                 else
10229                                     return "SCALAR";
10230
10231         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10232                                 /* tied lvalues should appear to be
10233                                  * scalars for backwards compatibility */
10234                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10235                                     ? "SCALAR" : "LVALUE");
10236         case SVt_PVAV:          return "ARRAY";
10237         case SVt_PVHV:          return "HASH";
10238         case SVt_PVCV:          return "CODE";
10239         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10240                                     ? "GLOB" : "SCALAR");
10241         case SVt_PVFM:          return "FORMAT";
10242         case SVt_PVIO:          return "IO";
10243         case SVt_INVLIST:       return "INVLIST";
10244         case SVt_REGEXP:        return "REGEXP";
10245         default:                return "UNKNOWN";
10246         }
10247     }
10248 }
10249
10250 /*
10251 =for apidoc sv_ref
10252
10253 Returns a SV describing what the SV passed in is a reference to.
10254
10255 dst can be a SV to be set to the description or NULL, in which case a
10256 mortal SV is returned.
10257
10258 If ob is true and the SV is blessed, the description is the class
10259 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10260
10261 =cut
10262 */
10263
10264 SV *
10265 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10266 {
10267     PERL_ARGS_ASSERT_SV_REF;
10268
10269     if (!dst)
10270         dst = sv_newmortal();
10271
10272     if (ob && SvOBJECT(sv)) {
10273         HvNAME_get(SvSTASH(sv))
10274                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10275                     : sv_setpvs(dst, "__ANON__");
10276     }
10277     else {
10278         const char * reftype = sv_reftype(sv, 0);
10279         sv_setpv(dst, reftype);
10280     }
10281     return dst;
10282 }
10283
10284 /*
10285 =for apidoc sv_isobject
10286
10287 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10288 object.  If the SV is not an RV, or if the object is not blessed, then this
10289 will return false.
10290
10291 =cut
10292 */
10293
10294 int
10295 Perl_sv_isobject(pTHX_ SV *sv)
10296 {
10297     if (!sv)
10298         return 0;
10299     SvGETMAGIC(sv);
10300     if (!SvROK(sv))
10301         return 0;
10302     sv = SvRV(sv);
10303     if (!SvOBJECT(sv))
10304         return 0;
10305     return 1;
10306 }
10307
10308 /*
10309 =for apidoc sv_isa
10310
10311 Returns a boolean indicating whether the SV is blessed into the specified
10312 class.
10313
10314 This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
10315 verify an inheritance relationship in the same way as the C<isa> operator by
10316 respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
10317 directly on the actual object type.
10318
10319 =cut
10320 */
10321
10322 int
10323 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10324 {
10325     const char *hvname;
10326
10327     PERL_ARGS_ASSERT_SV_ISA;
10328
10329     if (!sv)
10330         return 0;
10331     SvGETMAGIC(sv);
10332     if (!SvROK(sv))
10333         return 0;
10334     sv = SvRV(sv);
10335     if (!SvOBJECT(sv))
10336         return 0;
10337     hvname = HvNAME_get(SvSTASH(sv));
10338     if (!hvname)
10339         return 0;
10340
10341     return strEQ(hvname, name);
10342 }
10343
10344 /*
10345 =for apidoc newSVrv
10346
10347 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10348 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10349 SV will be blessed in the specified package.  The new SV is returned and its
10350 reference count is 1.  The reference count 1 is owned by C<rv>. See also
10351 newRV_inc() and newRV_noinc() for creating a new RV properly.
10352
10353 =cut
10354 */
10355
10356 SV*
10357 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10358 {
10359     SV *sv;
10360
10361     PERL_ARGS_ASSERT_NEWSVRV;
10362
10363     new_SV(sv);
10364
10365     SV_CHECK_THINKFIRST_COW_DROP(rv);
10366
10367     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10368         const U32 refcnt = SvREFCNT(rv);
10369         SvREFCNT(rv) = 0;
10370         sv_clear(rv);
10371         SvFLAGS(rv) = 0;
10372         SvREFCNT(rv) = refcnt;
10373
10374         sv_upgrade(rv, SVt_IV);
10375     } else if (SvROK(rv)) {
10376         SvREFCNT_dec(SvRV(rv));
10377     } else {
10378         prepare_SV_for_RV(rv);
10379     }
10380
10381     SvOK_off(rv);
10382     SvRV_set(rv, sv);
10383     SvROK_on(rv);
10384
10385     if (classname) {
10386         HV* const stash = gv_stashpv(classname, GV_ADD);
10387         (void)sv_bless(rv, stash);
10388     }
10389     return sv;
10390 }
10391
10392 SV *
10393 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10394 {
10395     SV * const lv = newSV_type(SVt_PVLV);
10396     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10397     LvTYPE(lv) = 'y';
10398     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10399     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10400     LvSTARGOFF(lv) = ix;
10401     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10402     return lv;
10403 }
10404
10405 /*
10406 =for apidoc sv_setref_pv
10407
10408 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10409 argument will be upgraded to an RV.  That RV will be modified to point to
10410 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10411 into the SV.  The C<classname> argument indicates the package for the
10412 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10413 will have a reference count of 1, and the RV will be returned.
10414
10415 Do not use with other Perl types such as HV, AV, SV, CV, because those
10416 objects will become corrupted by the pointer copy process.
10417
10418 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10419
10420 =cut
10421 */
10422
10423 SV*
10424 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10425 {
10426     PERL_ARGS_ASSERT_SV_SETREF_PV;
10427
10428     if (!pv) {
10429         sv_set_undef(rv);
10430         SvSETMAGIC(rv);
10431     }
10432     else
10433         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10434     return rv;
10435 }
10436
10437 /*
10438 =for apidoc sv_setref_iv
10439
10440 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10441 argument will be upgraded to an RV.  That RV will be modified to point to
10442 the new SV.  The C<classname> argument indicates the package for the
10443 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10444 will have a reference count of 1, and the RV will be returned.
10445
10446 =cut
10447 */
10448
10449 SV*
10450 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10451 {
10452     PERL_ARGS_ASSERT_SV_SETREF_IV;
10453
10454     sv_setiv(newSVrv(rv,classname), iv);
10455     return rv;
10456 }
10457
10458 /*
10459 =for apidoc sv_setref_uv
10460
10461 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10462 argument will be upgraded to an RV.  That RV will be modified to point to
10463 the new SV.  The C<classname> argument indicates the package for the
10464 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10465 will have a reference count of 1, and the RV will be returned.
10466
10467 =cut
10468 */
10469
10470 SV*
10471 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10472 {
10473     PERL_ARGS_ASSERT_SV_SETREF_UV;
10474
10475     sv_setuv(newSVrv(rv,classname), uv);
10476     return rv;
10477 }
10478
10479 /*
10480 =for apidoc sv_setref_nv
10481
10482 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10483 argument will be upgraded to an RV.  That RV will be modified to point to
10484 the new SV.  The C<classname> argument indicates the package for the
10485 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10486 will have a reference count of 1, and the RV will be returned.
10487
10488 =cut
10489 */
10490
10491 SV*
10492 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10493 {
10494     PERL_ARGS_ASSERT_SV_SETREF_NV;
10495
10496     sv_setnv(newSVrv(rv,classname), nv);
10497     return rv;
10498 }
10499
10500 /*
10501 =for apidoc sv_setref_pvn
10502
10503 Copies a string into a new SV, optionally blessing the SV.  The length of the
10504 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10505 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10506 argument indicates the package for the blessing.  Set C<classname> to
10507 C<NULL> to avoid the blessing.  The new SV will have a reference count
10508 of 1, and the RV will be returned.
10509
10510 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10511
10512 =cut
10513 */
10514
10515 SV*
10516 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10517                    const char *const pv, const STRLEN n)
10518 {
10519     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10520
10521     sv_setpvn(newSVrv(rv,classname), pv, n);
10522     return rv;
10523 }
10524
10525 /*
10526 =for apidoc sv_bless
10527
10528 Blesses an SV into a specified package.  The SV must be an RV.  The package
10529 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10530 of the SV is unaffected.
10531
10532 =cut
10533 */
10534
10535 SV*
10536 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10537 {
10538     SV *tmpRef;
10539     HV *oldstash = NULL;
10540
10541     PERL_ARGS_ASSERT_SV_BLESS;
10542
10543     SvGETMAGIC(sv);
10544     if (!SvROK(sv))
10545         Perl_croak(aTHX_ "Can't bless non-reference value");
10546     tmpRef = SvRV(sv);
10547     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10548         if (SvREADONLY(tmpRef))
10549             Perl_croak_no_modify();
10550         if (SvOBJECT(tmpRef)) {
10551             oldstash = SvSTASH(tmpRef);
10552         }
10553     }
10554     SvOBJECT_on(tmpRef);
10555     SvUPGRADE(tmpRef, SVt_PVMG);
10556     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10557     SvREFCNT_dec(oldstash);
10558
10559     if(SvSMAGICAL(tmpRef))
10560         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10561             mg_set(tmpRef);
10562
10563
10564
10565     return sv;
10566 }
10567
10568 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10569  * as it is after unglobbing it.
10570  */
10571
10572 PERL_STATIC_INLINE void
10573 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10574 {
10575     void *xpvmg;
10576     HV *stash;
10577     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10578
10579     PERL_ARGS_ASSERT_SV_UNGLOB;
10580
10581     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10582     SvFAKE_off(sv);
10583     if (!(flags & SV_COW_DROP_PV))
10584         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10585
10586     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10587     if (GvGP(sv)) {
10588         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10589            && HvNAME_get(stash))
10590             mro_method_changed_in(stash);
10591         gp_free(MUTABLE_GV(sv));
10592     }
10593     if (GvSTASH(sv)) {
10594         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10595         GvSTASH(sv) = NULL;
10596     }
10597     GvMULTI_off(sv);
10598     if (GvNAME_HEK(sv)) {
10599         unshare_hek(GvNAME_HEK(sv));
10600     }
10601     isGV_with_GP_off(sv);
10602
10603     if(SvTYPE(sv) == SVt_PVGV) {
10604         /* need to keep SvANY(sv) in the right arena */
10605         xpvmg = new_XPVMG();
10606         StructCopy(SvANY(sv), xpvmg, XPVMG);
10607         del_XPVGV(SvANY(sv));
10608         SvANY(sv) = xpvmg;
10609
10610         SvFLAGS(sv) &= ~SVTYPEMASK;
10611         SvFLAGS(sv) |= SVt_PVMG;
10612     }
10613
10614     /* Intentionally not calling any local SET magic, as this isn't so much a
10615        set operation as merely an internal storage change.  */
10616     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10617     else sv_setsv_flags(sv, temp, 0);
10618
10619     if ((const GV *)sv == PL_last_in_gv)
10620         PL_last_in_gv = NULL;
10621     else if ((const GV *)sv == PL_statgv)
10622         PL_statgv = NULL;
10623 }
10624
10625 /*
10626 =for apidoc sv_unref_flags
10627
10628 Unsets the RV status of the SV, and decrements the reference count of
10629 whatever was being referenced by the RV.  This can almost be thought of
10630 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10631 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10632 (otherwise the decrementing is conditional on the reference count being
10633 different from one or the reference being a readonly SV).
10634 See C<L</SvROK_off>>.
10635
10636 =for apidoc Amnh||SV_IMMEDIATE_UNREF
10637
10638 =cut
10639 */
10640
10641 void
10642 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10643 {
10644     SV* const target = SvRV(ref);
10645
10646     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10647
10648     if (SvWEAKREF(ref)) {
10649         sv_del_backref(target, ref);
10650         SvWEAKREF_off(ref);
10651         SvRV_set(ref, NULL);
10652         return;
10653     }
10654     SvRV_set(ref, NULL);
10655     SvROK_off(ref);
10656     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10657        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10658     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10659         SvREFCNT_dec_NN(target);
10660     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10661         sv_2mortal(target);     /* Schedule for freeing later */
10662 }
10663
10664 /*
10665 =for apidoc sv_untaint
10666
10667 Untaint an SV.  Use C<SvTAINTED_off> instead.
10668
10669 =cut
10670 */
10671
10672 void
10673 Perl_sv_untaint(pTHX_ SV *const sv)
10674 {
10675     PERL_ARGS_ASSERT_SV_UNTAINT;
10676     PERL_UNUSED_CONTEXT;
10677
10678     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10679         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10680         if (mg)
10681             mg->mg_len &= ~1;
10682     }
10683 }
10684
10685 /*
10686 =for apidoc sv_tainted
10687
10688 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10689
10690 =cut
10691 */
10692
10693 bool
10694 Perl_sv_tainted(pTHX_ SV *const sv)
10695 {
10696     PERL_ARGS_ASSERT_SV_TAINTED;
10697     PERL_UNUSED_CONTEXT;
10698
10699     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10700         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10701         if (mg && (mg->mg_len & 1) )
10702             return TRUE;
10703     }
10704     return FALSE;
10705 }
10706
10707 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10708                        private to this file */
10709
10710 /*
10711 =for apidoc sv_setpviv
10712
10713 Copies an integer into the given SV, also updating its string value.
10714 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10715
10716 =cut
10717 */
10718
10719 void
10720 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10721 {
10722     /* The purpose of this union is to ensure that arr is aligned on
10723        a 2 byte boundary, because that is what uiv_2buf() requires */
10724     union {
10725         char arr[TYPE_CHARS(UV)];
10726         U16 dummy;
10727     } buf;
10728     char *ebuf;
10729     char * const ptr = uiv_2buf(buf.arr, iv, 0, 0, &ebuf);
10730
10731     PERL_ARGS_ASSERT_SV_SETPVIV;
10732
10733     sv_setpvn(sv, ptr, ebuf - ptr);
10734 }
10735
10736 /*
10737 =for apidoc sv_setpviv_mg
10738
10739 Like C<sv_setpviv>, but also handles 'set' magic.
10740
10741 =cut
10742 */
10743
10744 void
10745 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10746 {
10747     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10748
10749     GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
10750
10751     sv_setpviv(sv, iv);
10752
10753     GCC_DIAG_RESTORE_STMT;
10754
10755     SvSETMAGIC(sv);
10756 }
10757
10758 #endif  /* NO_MATHOMS */
10759
10760 #if defined(PERL_IMPLICIT_CONTEXT)
10761
10762 /* pTHX_ magic can't cope with varargs, so this is a no-context
10763  * version of the main function, (which may itself be aliased to us).
10764  * Don't access this version directly.
10765  */
10766
10767 void
10768 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10769 {
10770     dTHX;
10771     va_list args;
10772
10773     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10774
10775     va_start(args, pat);
10776     sv_vsetpvf(sv, pat, &args);
10777     va_end(args);
10778 }
10779
10780 /* pTHX_ magic can't cope with varargs, so this is a no-context
10781  * version of the main function, (which may itself be aliased to us).
10782  * Don't access this version directly.
10783  */
10784
10785 void
10786 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10787 {
10788     dTHX;
10789     va_list args;
10790
10791     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10792
10793     va_start(args, pat);
10794     sv_vsetpvf_mg(sv, pat, &args);
10795     va_end(args);
10796 }
10797 #endif
10798
10799 /*
10800 =for apidoc sv_setpvf
10801
10802 Works like C<sv_catpvf> but copies the text into the SV instead of
10803 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10804
10805 =cut
10806 */
10807
10808 void
10809 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10810 {
10811     va_list args;
10812
10813     PERL_ARGS_ASSERT_SV_SETPVF;
10814
10815     va_start(args, pat);
10816     sv_vsetpvf(sv, pat, &args);
10817     va_end(args);
10818 }
10819
10820 /*
10821 =for apidoc sv_vsetpvf
10822
10823 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10824 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10825
10826 Usually used via its frontend C<sv_setpvf>.
10827
10828 =cut
10829 */
10830
10831 void
10832 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10833 {
10834     PERL_ARGS_ASSERT_SV_VSETPVF;
10835
10836     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10837 }
10838
10839 /*
10840 =for apidoc sv_setpvf_mg
10841
10842 Like C<sv_setpvf>, but also handles 'set' magic.
10843
10844 =cut
10845 */
10846
10847 void
10848 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10849 {
10850     va_list args;
10851
10852     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10853
10854     va_start(args, pat);
10855     sv_vsetpvf_mg(sv, pat, &args);
10856     va_end(args);
10857 }
10858
10859 /*
10860 =for apidoc sv_vsetpvf_mg
10861
10862 Like C<sv_vsetpvf>, but also handles 'set' magic.
10863
10864 Usually used via its frontend C<sv_setpvf_mg>.
10865
10866 =cut
10867 */
10868
10869 void
10870 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10871 {
10872     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10873
10874     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10875     SvSETMAGIC(sv);
10876 }
10877
10878 #if defined(PERL_IMPLICIT_CONTEXT)
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_nocontext(SV *const sv, const char *const pat, ...)
10887 {
10888     dTHX;
10889     va_list args;
10890
10891     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10892
10893     va_start(args, pat);
10894     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10895     va_end(args);
10896 }
10897
10898 /* pTHX_ magic can't cope with varargs, so this is a no-context
10899  * version of the main function, (which may itself be aliased to us).
10900  * Don't access this version directly.
10901  */
10902
10903 void
10904 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10905 {
10906     dTHX;
10907     va_list args;
10908
10909     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10910
10911     va_start(args, pat);
10912     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10913     SvSETMAGIC(sv);
10914     va_end(args);
10915 }
10916 #endif
10917
10918 /*
10919 =for apidoc sv_catpvf
10920
10921 Processes its arguments like C<sprintf>, and appends the formatted
10922 output to an SV.  As with C<sv_vcatpvfn> called with a non-null C-style
10923 variable argument list, argument reordering is not supported.
10924 If the appended data contains "wide" characters
10925 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10926 and characters >255 formatted with C<%c>), the original SV might get
10927 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10928 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10929 valid UTF-8; if the original SV was bytes, the pattern should be too.
10930
10931 =cut */
10932
10933 void
10934 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10935 {
10936     va_list args;
10937
10938     PERL_ARGS_ASSERT_SV_CATPVF;
10939
10940     va_start(args, pat);
10941     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10942     va_end(args);
10943 }
10944
10945 /*
10946 =for apidoc sv_vcatpvf
10947
10948 Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
10949 variable argument list, and appends the formatted output
10950 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10951
10952 Usually used via its frontend C<sv_catpvf>.
10953
10954 =cut
10955 */
10956
10957 void
10958 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10959 {
10960     PERL_ARGS_ASSERT_SV_VCATPVF;
10961
10962     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10963 }
10964
10965 /*
10966 =for apidoc sv_catpvf_mg
10967
10968 Like C<sv_catpvf>, but also handles 'set' magic.
10969
10970 =cut
10971 */
10972
10973 void
10974 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10975 {
10976     va_list args;
10977
10978     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10979
10980     va_start(args, pat);
10981     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10982     SvSETMAGIC(sv);
10983     va_end(args);
10984 }
10985
10986 /*
10987 =for apidoc sv_vcatpvf_mg
10988
10989 Like C<sv_vcatpvf>, but also handles 'set' magic.
10990
10991 Usually used via its frontend C<sv_catpvf_mg>.
10992
10993 =cut
10994 */
10995
10996 void
10997 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10998 {
10999     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
11000
11001     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11002     SvSETMAGIC(sv);
11003 }
11004
11005 /*
11006 =for apidoc sv_vsetpvfn
11007
11008 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11009 appending it.
11010
11011 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11012
11013 =cut
11014 */
11015
11016 void
11017 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11018                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11019 {
11020     PERL_ARGS_ASSERT_SV_VSETPVFN;
11021
11022     SvPVCLEAR(sv);
11023     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
11024 }
11025
11026
11027 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
11028
11029 PERL_STATIC_INLINE void
11030 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
11031 {
11032     STRLEN const need = len + SvCUR(sv) + 1;
11033     char *end;
11034
11035     /* can't wrap as both len and SvCUR() are allocated in
11036      * memory and together can't consume all the address space
11037      */
11038     assert(need > len);
11039
11040     assert(SvPOK(sv));
11041     SvGROW(sv, need);
11042     end = SvEND(sv);
11043     Copy(buf, end, len, char);
11044     end += len;
11045     *end = '\0';
11046     SvCUR_set(sv, need - 1);
11047 }
11048
11049
11050 /*
11051  * Warn of missing argument to sprintf. The value used in place of such
11052  * arguments should be &PL_sv_no; an undefined value would yield
11053  * inappropriate "use of uninit" warnings [perl #71000].
11054  */
11055 STATIC void
11056 S_warn_vcatpvfn_missing_argument(pTHX) {
11057     if (ckWARN(WARN_MISSING)) {
11058         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11059                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11060     }
11061 }
11062
11063
11064 static void
11065 S_croak_overflow()
11066 {
11067     dTHX;
11068     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11069                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11070 }
11071
11072
11073 /* Given an int i from the next arg (if args is true) or an sv from an arg
11074  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11075  * with overflow checking.
11076  * Sets *neg to true if the value was negative (untouched otherwise.
11077  * Returns the absolute value.
11078  * As an extra margin of safety, it croaks if the returned value would
11079  * exceed the maximum value of a STRLEN / 4.
11080  */
11081
11082 static STRLEN
11083 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11084 {
11085     IV iv;
11086
11087     if (args) {
11088         iv = i;
11089         goto do_iv;
11090     }
11091
11092     if (!sv)
11093         return 0;
11094
11095     SvGETMAGIC(sv);
11096
11097     if (UNLIKELY(SvIsUV(sv))) {
11098         UV uv = SvUV_nomg(sv);
11099         if (uv > IV_MAX)
11100             S_croak_overflow();
11101         iv = uv;
11102     }
11103     else {
11104         iv = SvIV_nomg(sv);
11105       do_iv:
11106         if (iv < 0) {
11107             if (iv < -IV_MAX)
11108                 S_croak_overflow();
11109             iv = -iv;
11110             *neg = TRUE;
11111         }
11112     }
11113
11114     if (iv > (IV)(((STRLEN)~0) / 4))
11115         S_croak_overflow();
11116
11117     return (STRLEN)iv;
11118 }
11119
11120 /* Read in and return a number. Updates *pattern to point to the char
11121  * following the number. Expects the first char to 1..9.
11122  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11123  * This is a belt-and-braces safety measure to complement any
11124  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11125  * It means that e.g. on a 32-bit system the width/precision can't be more
11126  * than 1G, which seems reasonable.
11127  */
11128
11129 STATIC STRLEN
11130 S_expect_number(pTHX_ const char **const pattern)
11131 {
11132     STRLEN var;
11133
11134     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11135
11136     assert(inRANGE(**pattern, '1', '9'));
11137
11138     var = *(*pattern)++ - '0';
11139     while (isDIGIT(**pattern)) {
11140         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11141         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11142             S_croak_overflow();
11143         var = var * 10 + (*(*pattern)++ - '0');
11144     }
11145     return var;
11146 }
11147
11148 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11149  * ensures it's big enough), back fill it with the rounded integer part of
11150  * nv. Returns ptr to start of string, and sets *len to its length.
11151  * Returns NULL if not convertible.
11152  */
11153
11154 STATIC char *
11155 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11156 {
11157     const int neg = nv < 0;
11158     UV uv;
11159
11160     PERL_ARGS_ASSERT_F0CONVERT;
11161
11162     assert(!Perl_isinfnan(nv));
11163     if (neg)
11164         nv = -nv;
11165     if (nv != 0.0 && nv < UV_MAX) {
11166         char *p = endbuf;
11167         uv = (UV)nv;
11168         if (uv != nv) {
11169             nv += 0.5;
11170             uv = (UV)nv;
11171             if (uv & 1 && uv == nv)
11172                 uv--;                   /* Round to even */
11173         }
11174         do {
11175             const unsigned dig = uv % 10;
11176             *--p = '0' + dig;
11177         } while (uv /= 10);
11178         if (neg)
11179             *--p = '-';
11180         *len = endbuf - p;
11181         return p;
11182     }
11183     return NULL;
11184 }
11185
11186
11187 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11188
11189 void
11190 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11191                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11192 {
11193     PERL_ARGS_ASSERT_SV_VCATPVFN;
11194
11195     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11196 }
11197
11198
11199 /* For the vcatpvfn code, we need a long double target in case
11200  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11201  * with long double formats, even without NV being long double.  But we
11202  * call the target 'fv' instead of 'nv', since most of the time it is not
11203  * (most compilers these days recognize "long double", even if only as a
11204  * synonym for "double").
11205 */
11206 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11207         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11208 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11209 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11210        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11211 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11212             STMT_START {                                \
11213                 double _dv = nv;                        \
11214                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11215             } STMT_END
11216 #  else
11217 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11218 #  endif
11219    typedef long double vcatpvfn_long_double_t;
11220 #else
11221 #  define VCATPVFN_FV_GF NVgf
11222 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11223    typedef NV vcatpvfn_long_double_t;
11224 #endif
11225
11226 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11227 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11228  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11229  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11230  * after the first 1023 zero bits.
11231  *
11232  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11233  * of dynamically growing buffer might be better, start at just 16 bytes
11234  * (for example) and grow only when necessary.  Or maybe just by looking
11235  * at the exponents of the two doubles? */
11236 #  define DOUBLEDOUBLE_MAXBITS 2098
11237 #endif
11238
11239 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11240  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11241  * per xdigit.  For the double-double case, this can be rather many.
11242  * The non-double-double-long-double overshoots since all bits of NV
11243  * are not mantissa bits, there are also exponent bits. */
11244 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11245 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11246 #else
11247 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11248 #endif
11249
11250 /* If we do not have a known long double format, (including not using
11251  * long doubles, or long doubles being equal to doubles) then we will
11252  * fall back to the ldexp/frexp route, with which we can retrieve at
11253  * most as many bits as our widest unsigned integer type is.  We try
11254  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11255  *
11256  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11257  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11258  */
11259 #if defined(HAS_QUAD) && defined(Uquad_t)
11260 #  define MANTISSATYPE Uquad_t
11261 #  define MANTISSASIZE 8
11262 #else
11263 #  define MANTISSATYPE UV
11264 #  define MANTISSASIZE UVSIZE
11265 #endif
11266
11267 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11268 #  define HEXTRACT_LITTLE_ENDIAN
11269 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11270 #  define HEXTRACT_BIG_ENDIAN
11271 #else
11272 #  define HEXTRACT_MIX_ENDIAN
11273 #endif
11274
11275 /* S_hextract() is a helper for S_format_hexfp, for extracting
11276  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11277  * are being extracted from (either directly from the long double in-memory
11278  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11279  * is used to update the exponent.  The subnormal is set to true
11280  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11281  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11282  *
11283  * The tricky part is that S_hextract() needs to be called twice:
11284  * the first time with vend as NULL, and the second time with vend as
11285  * the pointer returned by the first call.  What happens is that on
11286  * the first round the output size is computed, and the intended
11287  * extraction sanity checked.  On the second round the actual output
11288  * (the extraction of the hexadecimal values) takes place.
11289  * Sanity failures cause fatal failures during both rounds. */
11290 STATIC U8*
11291 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11292            U8* vhex, U8* vend)
11293 {
11294     U8* v = vhex;
11295     int ix;
11296     int ixmin = 0, ixmax = 0;
11297
11298     /* XXX Inf/NaN are not handled here, since it is
11299      * assumed they are to be output as "Inf" and "NaN". */
11300
11301     /* These macros are just to reduce typos, they have multiple
11302      * repetitions below, but usually only one (or sometimes two)
11303      * of them is really being used. */
11304     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11305 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11306 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11307 #define HEXTRACT_OUTPUT(ix) \
11308     STMT_START { \
11309       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11310    } STMT_END
11311 #define HEXTRACT_COUNT(ix, c) \
11312     STMT_START { \
11313       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11314    } STMT_END
11315 #define HEXTRACT_BYTE(ix) \
11316     STMT_START { \
11317       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11318    } STMT_END
11319 #define HEXTRACT_LO_NYBBLE(ix) \
11320     STMT_START { \
11321       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11322    } STMT_END
11323     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11324      * to make it look less odd when the top bits of a NV
11325      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11326      * order bits can be in the "low nybble" of a byte. */
11327 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11328 #define HEXTRACT_BYTES_LE(a, b) \
11329     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11330 #define HEXTRACT_BYTES_BE(a, b) \
11331     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11332 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11333 #define HEXTRACT_IMPLICIT_BIT(nv) \
11334     STMT_START { \
11335         if (!*subnormal) { \
11336             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11337         } \
11338    } STMT_END
11339
11340 /* Most formats do.  Those which don't should undef this.
11341  *
11342  * But also note that IEEE 754 subnormals do not have it, or,
11343  * expressed alternatively, their implicit bit is zero. */
11344 #define HEXTRACT_HAS_IMPLICIT_BIT
11345
11346 /* Many formats do.  Those which don't should undef this. */
11347 #define HEXTRACT_HAS_TOP_NYBBLE
11348
11349     /* HEXTRACTSIZE is the maximum number of xdigits. */
11350 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11351 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11352 #else
11353 #  define HEXTRACTSIZE 2 * NVSIZE
11354 #endif
11355
11356     const U8* vmaxend = vhex + HEXTRACTSIZE;
11357
11358     assert(HEXTRACTSIZE <= VHEX_SIZE);
11359
11360     PERL_UNUSED_VAR(ix); /* might happen */
11361     (void)Perl_frexp(PERL_ABS(nv), exponent);
11362     *subnormal = FALSE;
11363     if (vend && (vend <= vhex || vend > vmaxend)) {
11364         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11365         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11366     }
11367     {
11368         /* First check if using long doubles. */
11369 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11370 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11371         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11372          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11373         /* The bytes 13..0 are the mantissa/fraction,
11374          * the 15,14 are the sign+exponent. */
11375         const U8* nvp = (const U8*)(&nv);
11376         HEXTRACT_GET_SUBNORMAL(nv);
11377         HEXTRACT_IMPLICIT_BIT(nv);
11378 #    undef HEXTRACT_HAS_TOP_NYBBLE
11379         HEXTRACT_BYTES_LE(13, 0);
11380 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11381         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11382          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11383         /* The bytes 2..15 are the mantissa/fraction,
11384          * the 0,1 are the sign+exponent. */
11385         const U8* nvp = (const U8*)(&nv);
11386         HEXTRACT_GET_SUBNORMAL(nv);
11387         HEXTRACT_IMPLICIT_BIT(nv);
11388 #    undef HEXTRACT_HAS_TOP_NYBBLE
11389         HEXTRACT_BYTES_BE(2, 15);
11390 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11391         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11392          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11393          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11394          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11395         /* The bytes 0..1 are the sign+exponent,
11396          * the bytes 2..9 are the mantissa/fraction. */
11397         const U8* nvp = (const U8*)(&nv);
11398 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11399 #    undef HEXTRACT_HAS_TOP_NYBBLE
11400         HEXTRACT_GET_SUBNORMAL(nv);
11401         HEXTRACT_BYTES_LE(7, 0);
11402 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11403         /* Does this format ever happen? (Wikipedia says the Motorola
11404          * 6888x math coprocessors used format _like_ this but padded
11405          * to 96 bits with 16 unused bits between the exponent and the
11406          * mantissa.) */
11407         const U8* nvp = (const U8*)(&nv);
11408 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11409 #    undef HEXTRACT_HAS_TOP_NYBBLE
11410         HEXTRACT_GET_SUBNORMAL(nv);
11411         HEXTRACT_BYTES_BE(0, 7);
11412 #  else
11413 #    define HEXTRACT_FALLBACK
11414         /* Double-double format: two doubles next to each other.
11415          * The first double is the high-order one, exactly like
11416          * it would be for a "lone" double.  The second double
11417          * is shifted down using the exponent so that that there
11418          * are no common bits.  The tricky part is that the value
11419          * of the double-double is the SUM of the two doubles and
11420          * the second one can be also NEGATIVE.
11421          *
11422          * Because of this tricky construction the bytewise extraction we
11423          * use for the other long double formats doesn't work, we must
11424          * extract the values bit by bit.
11425          *
11426          * The little-endian double-double is used .. somewhere?
11427          *
11428          * The big endian double-double is used in e.g. PPC/Power (AIX)
11429          * and MIPS (SGI).
11430          *
11431          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11432          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11433          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11434          */
11435 #  endif
11436 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11437         /* Using normal doubles, not long doubles.
11438          *
11439          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11440          * bytes, since we might need to handle printf precision, and
11441          * also need to insert the radix. */
11442 #  if NVSIZE == 8
11443 #    ifdef HEXTRACT_LITTLE_ENDIAN
11444         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11445         const U8* nvp = (const U8*)(&nv);
11446         HEXTRACT_GET_SUBNORMAL(nv);
11447         HEXTRACT_IMPLICIT_BIT(nv);
11448         HEXTRACT_TOP_NYBBLE(6);
11449         HEXTRACT_BYTES_LE(5, 0);
11450 #    elif defined(HEXTRACT_BIG_ENDIAN)
11451         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11452         const U8* nvp = (const U8*)(&nv);
11453         HEXTRACT_GET_SUBNORMAL(nv);
11454         HEXTRACT_IMPLICIT_BIT(nv);
11455         HEXTRACT_TOP_NYBBLE(1);
11456         HEXTRACT_BYTES_BE(2, 7);
11457 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11458         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11459         const U8* nvp = (const U8*)(&nv);
11460         HEXTRACT_GET_SUBNORMAL(nv);
11461         HEXTRACT_IMPLICIT_BIT(nv);
11462         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11463         HEXTRACT_BYTE(1); /* 5 */
11464         HEXTRACT_BYTE(0); /* 4 */
11465         HEXTRACT_BYTE(7); /* 3 */
11466         HEXTRACT_BYTE(6); /* 2 */
11467         HEXTRACT_BYTE(5); /* 1 */
11468         HEXTRACT_BYTE(4); /* 0 */
11469 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11470         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11471         const U8* nvp = (const U8*)(&nv);
11472         HEXTRACT_GET_SUBNORMAL(nv);
11473         HEXTRACT_IMPLICIT_BIT(nv);
11474         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11475         HEXTRACT_BYTE(6); /* 5 */
11476         HEXTRACT_BYTE(7); /* 4 */
11477         HEXTRACT_BYTE(0); /* 3 */
11478         HEXTRACT_BYTE(1); /* 2 */
11479         HEXTRACT_BYTE(2); /* 1 */
11480         HEXTRACT_BYTE(3); /* 0 */
11481 #    else
11482 #      define HEXTRACT_FALLBACK
11483 #    endif
11484 #  else
11485 #    define HEXTRACT_FALLBACK
11486 #  endif
11487 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11488
11489 #ifdef HEXTRACT_FALLBACK
11490         HEXTRACT_GET_SUBNORMAL(nv);
11491 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11492         /* The fallback is used for the double-double format, and
11493          * for unknown long double formats, and for unknown double
11494          * formats, or in general unknown NV formats. */
11495         if (nv == (NV)0.0) {
11496             if (vend)
11497                 *v++ = 0;
11498             else
11499                 v++;
11500             *exponent = 0;
11501         }
11502         else {
11503             NV d = nv < 0 ? -nv : nv;
11504             NV e = (NV)1.0;
11505             U8 ha = 0x0; /* hexvalue accumulator */
11506             U8 hd = 0x8; /* hexvalue digit */
11507
11508             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11509              * this is essentially manual frexp(). Multiplying by 0.5 and
11510              * doubling should be lossless in binary floating point. */
11511
11512             *exponent = 1;
11513
11514             while (e > d) {
11515                 e *= (NV)0.5;
11516                 (*exponent)--;
11517             }
11518             /* Now d >= e */
11519
11520             while (d >= e + e) {
11521                 e += e;
11522                 (*exponent)++;
11523             }
11524             /* Now e <= d < 2*e */
11525
11526             /* First extract the leading hexdigit (the implicit bit). */
11527             if (d >= e) {
11528                 d -= e;
11529                 if (vend)
11530                     *v++ = 1;
11531                 else
11532                     v++;
11533             }
11534             else {
11535                 if (vend)
11536                     *v++ = 0;
11537                 else
11538                     v++;
11539             }
11540             e *= (NV)0.5;
11541
11542             /* Then extract the remaining hexdigits. */
11543             while (d > (NV)0.0) {
11544                 if (d >= e) {
11545                     ha |= hd;
11546                     d -= e;
11547                 }
11548                 if (hd == 1) {
11549                     /* Output or count in groups of four bits,
11550                      * that is, when the hexdigit is down to one. */
11551                     if (vend)
11552                         *v++ = ha;
11553                     else
11554                         v++;
11555                     /* Reset the hexvalue. */
11556                     ha = 0x0;
11557                     hd = 0x8;
11558                 }
11559                 else
11560                     hd >>= 1;
11561                 e *= (NV)0.5;
11562             }
11563
11564             /* Flush possible pending hexvalue. */
11565             if (ha) {
11566                 if (vend)
11567                     *v++ = ha;
11568                 else
11569                     v++;
11570             }
11571         }
11572 #endif
11573     }
11574     /* Croak for various reasons: if the output pointer escaped the
11575      * output buffer, if the extraction index escaped the extraction
11576      * buffer, or if the ending output pointer didn't match the
11577      * previously computed value. */
11578     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11579         /* For double-double the ixmin and ixmax stay at zero,
11580          * which is convenient since the HEXTRACTSIZE is tricky
11581          * for double-double. */
11582         ixmin < 0 || ixmax >= NVSIZE ||
11583         (vend && v != vend)) {
11584         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11585         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11586     }
11587     return v;
11588 }
11589
11590
11591 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11592  *
11593  * Processes the %a/%A hexadecimal floating-point format, since the
11594  * built-in snprintf()s which are used for most of the f/p formats, don't
11595  * universally handle %a/%A.
11596  * Populates buf of length bufsize, and returns the length of the created
11597  * string.
11598  * The rest of the args have the same meaning as the local vars of the
11599  * same name within Perl_sv_vcatpvfn_flags().
11600  *
11601  * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
11602  * is used to ensure we do the right thing when we need to access the locale's
11603  * numeric radix.
11604  *
11605  * It requires the caller to make buf large enough.
11606  */
11607
11608 static STRLEN
11609 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11610                     const NV nv, const vcatpvfn_long_double_t fv,
11611                     bool has_precis, STRLEN precis, STRLEN width,
11612                     bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
11613 {
11614     /* Hexadecimal floating point. */
11615     char* p = buf;
11616     U8 vhex[VHEX_SIZE];
11617     U8* v = vhex; /* working pointer to vhex */
11618     U8* vend; /* pointer to one beyond last digit of vhex */
11619     U8* vfnz = NULL; /* first non-zero */
11620     U8* vlnz = NULL; /* last non-zero */
11621     U8* v0 = NULL; /* first output */
11622     const bool lower = (c == 'a');
11623     /* At output the values of vhex (up to vend) will
11624      * be mapped through the xdig to get the actual
11625      * human-readable xdigits. */
11626     const char* xdig = PL_hexdigit;
11627     STRLEN zerotail = 0; /* how many extra zeros to append */
11628     int exponent = 0; /* exponent of the floating point input */
11629     bool hexradix = FALSE; /* should we output the radix */
11630     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11631     bool negative = FALSE;
11632     STRLEN elen;
11633
11634     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11635      *
11636      * For example with denormals, (assuming the vanilla
11637      * 64-bit double): the exponent is zero. 1xp-1074 is
11638      * the smallest denormal and the smallest double, it
11639      * could be output also as 0x0.0000000000001p-1022 to
11640      * match its internal structure. */
11641
11642     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11643     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11644
11645 #if NVSIZE > DOUBLESIZE
11646 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11647     /* In this case there is an implicit bit,
11648      * and therefore the exponent is shifted by one. */
11649     exponent--;
11650 #  elif defined(NV_X86_80_BIT)
11651     if (subnormal) {
11652         /* The subnormals of the x86-80 have a base exponent of -16382,
11653          * (while the physical exponent bits are zero) but the frexp()
11654          * returned the scientific-style floating exponent.  We want
11655          * to map the last one as:
11656          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11657          * -16835..-16388 -> -16384
11658          * since we want to keep the first hexdigit
11659          * as one of the [8421]. */
11660         exponent = -4 * ( (exponent + 1) / -4) - 2;
11661     } else {
11662         exponent -= 4;
11663     }
11664     /* TBD: other non-implicit-bit platforms than the x86-80. */
11665 #  endif
11666 #endif
11667
11668     negative = fv < 0 || Perl_signbit(nv);
11669     if (negative)
11670         *p++ = '-';
11671     else if (plus)
11672         *p++ = plus;
11673     *p++ = '0';
11674     if (lower) {
11675         *p++ = 'x';
11676     }
11677     else {
11678         *p++ = 'X';
11679         xdig += 16; /* Use uppercase hex. */
11680     }
11681
11682     /* Find the first non-zero xdigit. */
11683     for (v = vhex; v < vend; v++) {
11684         if (*v) {
11685             vfnz = v;
11686             break;
11687         }
11688     }
11689
11690     if (vfnz) {
11691         /* Find the last non-zero xdigit. */
11692         for (v = vend - 1; v >= vhex; v--) {
11693             if (*v) {
11694                 vlnz = v;
11695                 break;
11696             }
11697         }
11698
11699 #if NVSIZE == DOUBLESIZE
11700         if (fv != 0.0)
11701             exponent--;
11702 #endif
11703
11704         if (subnormal) {
11705 #ifndef NV_X86_80_BIT
11706           if (vfnz[0] > 1) {
11707             /* IEEE 754 subnormals (but not the x86 80-bit):
11708              * we want "normalize" the subnormal,
11709              * so we need to right shift the hex nybbles
11710              * so that the output of the subnormal starts
11711              * from the first true bit.  (Another, equally
11712              * valid, policy would be to dump the subnormal
11713              * nybbles as-is, to display the "physical" layout.) */
11714             int i, n;
11715             U8 *vshr;
11716             /* Find the ceil(log2(v[0])) of
11717              * the top non-zero nybble. */
11718             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11719             assert(n < 4);
11720             assert(vlnz);
11721             vlnz[1] = 0;
11722             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11723               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11724               vshr[0] >>= n;
11725             }
11726             if (vlnz[1]) {
11727               vlnz++;
11728             }
11729           }
11730 #endif
11731           v0 = vfnz;
11732         } else {
11733           v0 = vhex;
11734         }
11735
11736         if (has_precis) {
11737             U8* ve = (subnormal ? vlnz + 1 : vend);
11738             SSize_t vn = ve - v0;
11739             assert(vn >= 1);
11740             if (precis < (Size_t)(vn - 1)) {
11741                 bool overflow = FALSE;
11742                 if (v0[precis + 1] < 0x8) {
11743                     /* Round down, nothing to do. */
11744                 } else if (v0[precis + 1] > 0x8) {
11745                     /* Round up. */
11746                     v0[precis]++;
11747                     overflow = v0[precis] > 0xF;
11748                     v0[precis] &= 0xF;
11749                 } else { /* v0[precis] == 0x8 */
11750                     /* Half-point: round towards the one
11751                      * with the even least-significant digit:
11752                      * 08 -> 0  88 -> 8
11753                      * 18 -> 2  98 -> a
11754                      * 28 -> 2  a8 -> a
11755                      * 38 -> 4  b8 -> c
11756                      * 48 -> 4  c8 -> c
11757                      * 58 -> 6  d8 -> e
11758                      * 68 -> 6  e8 -> e
11759                      * 78 -> 8  f8 -> 10 */
11760                     if ((v0[precis] & 0x1)) {
11761                         v0[precis]++;
11762                     }
11763                     overflow = v0[precis] > 0xF;
11764                     v0[precis] &= 0xF;
11765                 }
11766
11767                 if (overflow) {
11768                     for (v = v0 + precis - 1; v >= v0; v--) {
11769                         (*v)++;
11770                         overflow = *v > 0xF;
11771                         (*v) &= 0xF;
11772                         if (!overflow) {
11773                             break;
11774                         }
11775                     }
11776                     if (v == v0 - 1 && overflow) {
11777                         /* If the overflow goes all the
11778                          * way to the front, we need to
11779                          * insert 0x1 in front, and adjust
11780                          * the exponent. */
11781                         Move(v0, v0 + 1, vn - 1, char);
11782                         *v0 = 0x1;
11783                         exponent += 4;
11784                     }
11785                 }
11786
11787                 /* The new effective "last non zero". */
11788                 vlnz = v0 + precis;
11789             }
11790             else {
11791                 zerotail =
11792                   subnormal ? precis - vn + 1 :
11793                   precis - (vlnz - vhex);
11794             }
11795         }
11796
11797         v = v0;
11798         *p++ = xdig[*v++];
11799
11800         /* If there are non-zero xdigits, the radix
11801          * is output after the first one. */
11802         if (vfnz < vlnz) {
11803           hexradix = TRUE;
11804         }
11805     }
11806     else {
11807         *p++ = '0';
11808         exponent = 0;
11809         zerotail = has_precis ? precis : 0;
11810     }
11811
11812     /* The radix is always output if precis, or if alt. */
11813     if ((has_precis && precis > 0) || alt) {
11814       hexradix = TRUE;
11815     }
11816
11817     if (hexradix) {
11818 #ifndef USE_LOCALE_NUMERIC
11819         *p++ = '.';
11820 #else
11821         if (in_lc_numeric) {
11822             STRLEN n;
11823             WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
11824                 const char* r = SvPV(PL_numeric_radix_sv, n);
11825                 Copy(r, p, n, char);
11826             });
11827             p += n;
11828         }
11829         else {
11830             *p++ = '.';
11831         }
11832 #endif
11833     }
11834
11835     if (vlnz) {
11836         while (v <= vlnz)
11837             *p++ = xdig[*v++];
11838     }
11839
11840     if (zerotail > 0) {
11841       while (zerotail--) {
11842         *p++ = '0';
11843       }
11844     }
11845
11846     elen = p - buf;
11847
11848     /* sanity checks */
11849     if (elen >= bufsize || width >= bufsize)
11850         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11851         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11852
11853     elen += my_snprintf(p, bufsize - elen,
11854                         "%c%+d", lower ? 'p' : 'P',
11855                         exponent);
11856
11857     if (elen < width) {
11858         STRLEN gap = (STRLEN)(width - elen);
11859         if (left) {
11860             /* Pad the back with spaces. */
11861             memset(buf + elen, ' ', gap);
11862         }
11863         else if (fill) {
11864             /* Insert the zeros after the "0x" and the
11865              * the potential sign, but before the digits,
11866              * otherwise we end up with "0000xH.HHH...",
11867              * when we want "0x000H.HHH..."  */
11868             STRLEN nzero = gap;
11869             char* zerox = buf + 2;
11870             STRLEN nmove = elen - 2;
11871             if (negative || plus) {
11872                 zerox++;
11873                 nmove--;
11874             }
11875             Move(zerox, zerox + nzero, nmove, char);
11876             memset(zerox, fill ? '0' : ' ', nzero);
11877         }
11878         else {
11879             /* Move it to the right. */
11880             Move(buf, buf + gap,
11881                  elen, char);
11882             /* Pad the front with spaces. */
11883             memset(buf, ' ', gap);
11884         }
11885         elen = width;
11886     }
11887     return elen;
11888 }
11889
11890
11891 /*
11892 =for apidoc sv_vcatpvfn
11893
11894 =for apidoc sv_vcatpvfn_flags
11895
11896 Processes its arguments like C<vsprintf> and appends the formatted output
11897 to an SV.  Uses an array of SVs if the C-style variable argument list is
11898 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11899 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11900 C<va_list> argument list with a format string that uses argument reordering
11901 will yield an exception.
11902
11903 When running with taint checks enabled, indicates via
11904 C<maybe_tainted> if results are untrustworthy (often due to the use of
11905 locales).
11906
11907 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11908
11909 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11910 responsibility to ensure that this is so.
11911
11912 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11913
11914 =cut
11915 */
11916
11917
11918 void
11919 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11920                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11921                        const U32 flags)
11922 {
11923     const char *fmtstart; /* character following the current '%' */
11924     const char *q;        /* current position within format */
11925     const char *patend;
11926     STRLEN origlen;
11927     Size_t svix = 0;
11928     static const char nullstr[] = "(null)";
11929     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11930     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11931     /* Times 4: a decimal digit takes more than 3 binary digits.
11932      * NV_DIG: mantissa takes that many decimal digits.
11933      * Plus 32: Playing safe. */
11934     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11935     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11936 #ifdef USE_LOCALE_NUMERIC
11937     bool have_in_lc_numeric = FALSE;
11938 #endif
11939     /* we never change this unless USE_LOCALE_NUMERIC */
11940     bool in_lc_numeric = FALSE;
11941
11942     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11943     PERL_UNUSED_ARG(maybe_tainted);
11944
11945     if (flags & SV_GMAGIC)
11946         SvGETMAGIC(sv);
11947
11948     /* no matter what, this is a string now */
11949     (void)SvPV_force_nomg(sv, origlen);
11950
11951     /* the code that scans for flags etc following a % relies on
11952      * a '\0' being present to avoid falling off the end. Ideally that
11953      * should be fixed */
11954     assert(pat[patlen] == '\0');
11955
11956
11957     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11958      * In each case, if there isn't the correct number of args, instead
11959      * fall through to the main code to handle the issuing of any
11960      * warnings etc.
11961      */
11962
11963     if (patlen == 0 && (args || sv_count == 0))
11964         return;
11965
11966     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11967
11968         /* "%s" */
11969         if (patlen == 2 && pat[1] == 's') {
11970             if (args) {
11971                 const char * const s = va_arg(*args, char*);
11972                 sv_catpv_nomg(sv, s ? s : nullstr);
11973             }
11974             else {
11975                 /* we want get magic on the source but not the target.
11976                  * sv_catsv can't do that, though */
11977                 SvGETMAGIC(*svargs);
11978                 sv_catsv_nomg(sv, *svargs);
11979             }
11980             return;
11981         }
11982
11983         /* "%-p" */
11984         if (args) {
11985             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11986                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11987                 sv_catsv_nomg(sv, asv);
11988                 return;
11989             }
11990         }
11991 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11992         /* special-case "%.0f" */
11993         else if (   patlen == 4
11994                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11995         {
11996             const NV nv = SvNV(*svargs);
11997             if (LIKELY(!Perl_isinfnan(nv))) {
11998                 STRLEN l;
11999                 char *p;
12000
12001                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
12002                     sv_catpvn_nomg(sv, p, l);
12003                     return;
12004                 }
12005             }
12006         }
12007 #endif /* !USE_LONG_DOUBLE */
12008     }
12009
12010
12011     patend = (char*)pat + patlen;
12012     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
12013         char intsize     = 0;         /* size qualifier in "%hi..." etc */
12014         bool alt         = FALSE;     /* has      "%#..."    */
12015         bool left        = FALSE;     /* has      "%-..."    */
12016         bool fill        = FALSE;     /* has      "%0..."    */
12017         char plus        = 0;         /* has      "%+..."    */
12018         STRLEN width     = 0;         /* value of "%NNN..."  */
12019         bool has_precis  = FALSE;     /* has      "%.NNN..." */
12020         STRLEN precis    = 0;         /* value of "%.NNN..." */
12021         int base         = 0;         /* base to print in, e.g. 8 for %o */
12022         UV uv            = 0;         /* the value to print of int-ish args */
12023
12024         bool vectorize   = FALSE;     /* has      "%v..."    */
12025         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
12026         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
12027         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
12028         const char *dotstr = NULL;    /* separator string for %v */
12029         STRLEN dotstrlen;             /* length of separator string for %v */
12030
12031         Size_t efix      = 0;         /* explicit format parameter index */
12032         const Size_t osvix  = svix;   /* original index in case of bad fmt */
12033
12034         SV *argsv        = NULL;
12035         bool is_utf8     = FALSE;     /* is this item utf8?   */
12036         bool arg_missing = FALSE;     /* give "Missing argument" warning */
12037         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
12038         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
12039         STRLEN zeros     = 0;         /* how many '0' to prepend */
12040
12041         const char *eptr = NULL;      /* the address of the element string */
12042         STRLEN elen      = 0;         /* the length  of the element string */
12043
12044         char c;                       /* the actual format ('d', s' etc) */
12045
12046
12047         /* echo everything up to the next format specification */
12048         for (q = fmtstart; q < patend && *q != '%'; ++q)
12049             {};
12050
12051         if (q > fmtstart) {
12052             if (has_utf8 && !pat_utf8) {
12053                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12054                  * the fly */
12055                 const char *p;
12056                 char *dst;
12057                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12058
12059                 for (p = fmtstart; p < q; p++)
12060                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12061                         need++;
12062                 SvGROW(sv, need);
12063
12064                 dst = SvEND(sv);
12065                 for (p = fmtstart; p < q; p++)
12066                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12067                 *dst = '\0';
12068                 SvCUR_set(sv, need - 1);
12069             }
12070             else
12071                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12072         }
12073         if (q++ >= patend)
12074             break;
12075
12076         fmtstart = q; /* fmtstart is char following the '%' */
12077
12078 /*
12079     We allow format specification elements in this order:
12080         \d+\$              explicit format parameter index
12081         [-+ 0#]+           flags
12082         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12083         0                  flag (as above): repeated to allow "v02"     
12084         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12085         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12086         [hlqLV]            size
12087     [%bcdefginopsuxDFOUX] format (mandatory)
12088 */
12089
12090         if (inRANGE(*q, '1', '9')) {
12091             width = expect_number(&q);
12092             if (*q == '$') {
12093                 if (args)
12094                     Perl_croak_nocontext(
12095                         "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12096                 ++q;
12097                 efix = (Size_t)width;
12098                 width = 0;
12099                 no_redundant_warning = TRUE;
12100             } else {
12101                 goto gotwidth;
12102             }
12103         }
12104
12105         /* FLAGS */
12106
12107         while (*q) {
12108             switch (*q) {
12109             case ' ':
12110             case '+':
12111                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12112                     q++;
12113                 else
12114                     plus = *q++;
12115                 continue;
12116
12117             case '-':
12118                 left = TRUE;
12119                 q++;
12120                 continue;
12121
12122             case '0':
12123                 fill = TRUE;
12124                 q++;
12125                 continue;
12126
12127             case '#':
12128                 alt = TRUE;
12129                 q++;
12130                 continue;
12131
12132             default:
12133                 break;
12134             }
12135             break;
12136         }
12137
12138       /* at this point we can expect one of:
12139        *
12140        *  123  an explicit width
12141        *  *    width taken from next arg
12142        *  *12$ width taken from 12th arg
12143        *       or no width
12144        *
12145        * But any width specification may be preceded by a v, in one of its
12146        * forms:
12147        *        v
12148        *        *v
12149        *        *12$v
12150        * So an asterisk may be either a width specifier or a vector
12151        * separator arg specifier, and we don't know which initially
12152        */
12153
12154       tryasterisk:
12155         if (*q == '*') {
12156             STRLEN ix; /* explicit width/vector separator index */
12157             q++;
12158             if (inRANGE(*q, '1', '9')) {
12159                 ix = expect_number(&q);
12160                 if (*q++ == '$') {
12161                     if (args)
12162                         Perl_croak_nocontext(
12163                             "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12164                     no_redundant_warning = TRUE;
12165                 } else
12166                     goto unknown;
12167             }
12168             else
12169                 ix = 0;
12170
12171             if (*q == 'v') {
12172                 SV *vecsv;
12173                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12174                  * with the default "." */
12175                 q++;
12176                 if (vectorize)
12177                     goto unknown;
12178                 if (args)
12179                     vecsv = va_arg(*args, SV*);
12180                 else {
12181                     ix = ix ? ix - 1 : svix++;
12182                     vecsv = ix < sv_count ? svargs[ix]
12183                                        : (arg_missing = TRUE, &PL_sv_no);
12184                 }
12185                 dotstr = SvPV_const(vecsv, dotstrlen);
12186                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12187                    bad with tied or overloaded values that return UTF8.  */
12188                 if (DO_UTF8(vecsv))
12189                     is_utf8 = TRUE;
12190                 else if (has_utf8) {
12191                     vecsv = sv_mortalcopy(vecsv);
12192                     sv_utf8_upgrade(vecsv);
12193                     dotstr = SvPV_const(vecsv, dotstrlen);
12194                     is_utf8 = TRUE;
12195                 }
12196                 vectorize = TRUE;
12197                 goto tryasterisk;
12198             }
12199
12200             /* the asterisk specified a width */
12201             {
12202                 int i = 0;
12203                 SV *width_sv = NULL;
12204                 if (args)
12205                     i = va_arg(*args, int);
12206                 else {
12207                     ix = ix ? ix - 1 : svix++;
12208                     width_sv = (ix < sv_count) ? svargs[ix]
12209                                       : (arg_missing = TRUE, (SV*)NULL);
12210                 }
12211                 width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
12212             }
12213         }
12214         else if (*q == 'v') {
12215             q++;
12216             if (vectorize)
12217                 goto unknown;
12218             vectorize = TRUE;
12219             dotstr = ".";
12220             dotstrlen = 1;
12221             goto tryasterisk;
12222
12223         }
12224         else {
12225         /* explicit width? */
12226             if(*q == '0') {
12227                 fill = TRUE;
12228                 q++;
12229             }
12230             if (inRANGE(*q, '1', '9'))
12231                 width = expect_number(&q);
12232         }
12233
12234       gotwidth:
12235
12236         /* PRECISION */
12237
12238         if (*q == '.') {
12239             q++;
12240             if (*q == '*') {
12241                 STRLEN ix; /* explicit precision index */
12242                 q++;
12243                 if (inRANGE(*q, '1', '9')) {
12244                     ix = expect_number(&q);
12245                     if (*q++ == '$') {
12246                         if (args)
12247                             Perl_croak_nocontext(
12248                                 "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12249                         no_redundant_warning = TRUE;
12250                     } else
12251                         goto unknown;
12252                 }
12253                 else
12254                     ix = 0;
12255
12256                 {
12257                     int i = 0;
12258                     SV *width_sv = NULL;
12259                     bool neg = FALSE;
12260
12261                     if (args)
12262                         i = va_arg(*args, int);
12263                     else {
12264                         ix = ix ? ix - 1 : svix++;
12265                         width_sv = (ix < sv_count) ? svargs[ix]
12266                                           : (arg_missing = TRUE, (SV*)NULL);
12267                     }
12268                     precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
12269                     has_precis = !neg;
12270                     /* ignore negative precision */
12271                     if (!has_precis)
12272                         precis = 0;
12273                 }
12274             }
12275             else {
12276                 /* although it doesn't seem documented, this code has long
12277                  * behaved so that:
12278                  *   no digits following the '.' is treated like '.0'
12279                  *   the number may be preceded by any number of zeroes,
12280                  *      e.g. "%.0001f", which is the same as "%.1f"
12281                  * so I've kept that behaviour. DAPM May 2017
12282                  */
12283                 while (*q == '0')
12284                     q++;
12285                 precis = inRANGE(*q, '1', '9') ? expect_number(&q) : 0;
12286                 has_precis = TRUE;
12287             }
12288         }
12289
12290         /* SIZE */
12291
12292         switch (*q) {
12293 #ifdef WIN32
12294         case 'I':                       /* Ix, I32x, and I64x */
12295 #  ifdef USE_64_BIT_INT
12296             if (q[1] == '6' && q[2] == '4') {
12297                 q += 3;
12298                 intsize = 'q';
12299                 break;
12300             }
12301 #  endif
12302             if (q[1] == '3' && q[2] == '2') {
12303                 q += 3;
12304                 break;
12305             }
12306 #  ifdef USE_64_BIT_INT
12307             intsize = 'q';
12308 #  endif
12309             q++;
12310             break;
12311 #endif
12312 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12313     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12314         case 'L':                       /* Ld */
12315             /* FALLTHROUGH */
12316 #  ifdef USE_QUADMATH
12317         case 'Q':
12318             /* FALLTHROUGH */
12319 #  endif
12320 #  if IVSIZE >= 8
12321         case 'q':                       /* qd */
12322 #  endif
12323             intsize = 'q';
12324             q++;
12325             break;
12326 #endif
12327         case 'l':
12328             ++q;
12329 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12330     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12331             if (*q == 'l') {    /* lld, llf */
12332                 intsize = 'q';
12333                 ++q;
12334             }
12335             else
12336 #endif
12337                 intsize = 'l';
12338             break;
12339         case 'h':
12340             if (*++q == 'h') {  /* hhd, hhu */
12341                 intsize = 'c';
12342                 ++q;
12343             }
12344             else
12345                 intsize = 'h';
12346             break;
12347         case 'V':
12348         case 'z':
12349         case 't':
12350         case 'j':
12351             intsize = *q++;
12352             break;
12353         }
12354
12355         /* CONVERSION */
12356
12357         c = *q++; /* c now holds the conversion type */
12358
12359         /* '%' doesn't have an arg, so skip arg processing */
12360         if (c == '%') {
12361             eptr = q - 1;
12362             elen = 1;
12363             if (vectorize)
12364                 goto unknown;
12365             goto string;
12366         }
12367
12368         if (vectorize && !memCHRs("BbDdiOouUXx", c))
12369             goto unknown;
12370
12371         /* get next arg (individual branches do their own va_arg()
12372          * handling for the args case) */
12373
12374         if (!args) {
12375             efix = efix ? efix - 1 : svix++;
12376             argsv = efix < sv_count ? svargs[efix]
12377                                  : (arg_missing = TRUE, &PL_sv_no);
12378         }
12379
12380
12381         switch (c) {
12382
12383             /* STRINGS */
12384
12385         case 's':
12386             if (args) {
12387                 eptr = va_arg(*args, char*);
12388                 if (eptr)
12389                     if (has_precis)
12390                         elen = my_strnlen(eptr, precis);
12391                     else
12392                         elen = strlen(eptr);
12393                 else {
12394                     eptr = (char *)nullstr;
12395                     elen = sizeof nullstr - 1;
12396                 }
12397             }
12398             else {
12399                 eptr = SvPV_const(argsv, elen);
12400                 if (DO_UTF8(argsv)) {
12401                     STRLEN old_precis = precis;
12402                     if (has_precis && precis < elen) {
12403                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12404                         STRLEN p = precis > ulen ? ulen : precis;
12405                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12406                                                         /* sticks at end */
12407                     }
12408                     if (width) { /* fudge width (can't fudge elen) */
12409                         if (has_precis && precis < elen)
12410                             width += precis - old_precis;
12411                         else
12412                             width +=
12413                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12414                     }
12415                     is_utf8 = TRUE;
12416                 }
12417             }
12418
12419         string:
12420             if (has_precis && precis < elen)
12421                 elen = precis;
12422             break;
12423
12424             /* INTEGERS */
12425
12426         case 'p':
12427             if (alt)
12428                 goto unknown;
12429
12430             /* %p extensions:
12431              *
12432              * "%...p" is normally treated like "%...x", except that the
12433              * number to print is the SV's address (or a pointer address
12434              * for C-ish sprintf).
12435              *
12436              * However, the C-ish sprintf variant allows a few special
12437              * extensions. These are currently:
12438              *
12439              * %-p       (SVf)  Like %s, but gets the string from an SV*
12440              *                  arg rather than a char* arg.
12441              *                  (This was previously %_).
12442              *
12443              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12444              *
12445              * %2p       (HEKf) Like %s, but using the key string in a HEK
12446              *
12447              * %3p       (HEKf256) Ditto but like %.256s
12448              *
12449              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12450              *                       (cBOOL(utf8), len, string_buf).
12451              *                   It's handled by the "case 'd'" branch
12452              *                   rather than here.
12453              *
12454              * %<num>p   where num is 1 or > 4: reserved for future
12455              *           extensions. Warns, but then is treated as a
12456              *           general %p (print hex address) format.
12457              */
12458
12459             if (   args
12460                 && !intsize
12461                 && !fill
12462                 && !plus
12463                 && !has_precis
12464                     /* not %*p or %*1$p - any width was explicit */
12465                 && q[-2] != '*'
12466                 && q[-2] != '$'
12467             ) {
12468                 if (left) {                     /* %-p (SVf), %-NNNp */
12469                     if (width) {
12470                         precis = width;
12471                         has_precis = TRUE;
12472                     }
12473                     argsv = MUTABLE_SV(va_arg(*args, void*));
12474                     eptr = SvPV_const(argsv, elen);
12475                     if (DO_UTF8(argsv))
12476                         is_utf8 = TRUE;
12477                     width = 0;
12478                     goto string;
12479                 }
12480                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12481                     HEK * const hek = va_arg(*args, HEK *);
12482                     eptr = HEK_KEY(hek);
12483                     elen = HEK_LEN(hek);
12484                     if (HEK_UTF8(hek))
12485                         is_utf8 = TRUE;
12486                     if (width == 3) {
12487                         precis = 256;
12488                         has_precis = TRUE;
12489                     }
12490                     width = 0;
12491                     goto string;
12492                 }
12493                 else if (width) {
12494                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12495                          "internal %%<num>p might conflict with future printf extensions");
12496                 }
12497             }
12498
12499             /* treat as normal %...p */
12500
12501             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12502             base = 16;
12503             goto do_integer;
12504
12505         case 'c':
12506             /* Ignore any size specifiers, since they're not documented as
12507              * being allowed for %c (ideally we should warn on e.g. '%hc').
12508              * Setting a default intsize, along with a positive
12509              * (which signals unsigned) base, causes, for C-ish use, the
12510              * va_arg to be interpreted as as unsigned int, when it's
12511              * actually signed, which will convert -ve values to high +ve
12512              * values. Note that unlike the libc %c, values > 255 will
12513              * convert to high unicode points rather than being truncated
12514              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12515              * will again convert -ve args to high -ve values.
12516              */
12517             intsize = 0;
12518             base = 1; /* special value that indicates we're doing a 'c' */
12519             goto get_int_arg_val;
12520
12521         case 'D':
12522 #ifdef IV_IS_QUAD
12523             intsize = 'q';
12524 #else
12525             intsize = 'l';
12526 #endif
12527             base = -10;
12528             goto get_int_arg_val;
12529
12530         case 'd':
12531             /* probably just a plain %d, but it might be the start of the
12532              * special UTF8f format, which usually looks something like
12533              * "%d%lu%4p" (the lu may vary by platform)
12534              */
12535             assert((UTF8f)[0] == 'd');
12536             assert((UTF8f)[1] == '%');
12537
12538              if (   args              /* UTF8f only valid for C-ish sprintf */
12539                  && q == fmtstart + 1 /* plain %d, not %....d */
12540                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12541                  && *q == '%'
12542                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12543             {
12544                 /* The argument has already gone through cBOOL, so the cast
12545                    is safe. */
12546                 is_utf8 = (bool)va_arg(*args, int);
12547                 elen = va_arg(*args, UV);
12548                 /* if utf8 length is larger than 0x7ffff..., then it might
12549                  * have been a signed value that wrapped */
12550                 if (elen  > ((~(STRLEN)0) >> 1)) {
12551                     assert(0); /* in DEBUGGING build we want to crash */
12552                     elen = 0; /* otherwise we want to treat this as an empty string */
12553                 }
12554                 eptr = va_arg(*args, char *);
12555                 q += sizeof(UTF8f) - 2;
12556                 goto string;
12557             }
12558
12559             /* FALLTHROUGH */
12560         case 'i':
12561             base = -10;
12562             goto get_int_arg_val;
12563
12564         case 'U':
12565 #ifdef IV_IS_QUAD
12566             intsize = 'q';
12567 #else
12568             intsize = 'l';
12569 #endif
12570             /* FALLTHROUGH */
12571         case 'u':
12572             base = 10;
12573             goto get_int_arg_val;
12574
12575         case 'B':
12576         case 'b':
12577             base = 2;
12578             goto get_int_arg_val;
12579
12580         case 'O':
12581 #ifdef IV_IS_QUAD
12582             intsize = 'q';
12583 #else
12584             intsize = 'l';
12585 #endif
12586             /* FALLTHROUGH */
12587         case 'o':
12588             base = 8;
12589             goto get_int_arg_val;
12590
12591         case 'X':
12592         case 'x':
12593             base = 16;
12594
12595           get_int_arg_val:
12596
12597             if (vectorize) {
12598                 STRLEN ulen;
12599                 SV *vecsv;
12600
12601                 if (base < 0) {
12602                     base = -base;
12603                     if (plus)
12604                          esignbuf[esignlen++] = plus;
12605                 }
12606
12607                 /* initialise the vector string to iterate over */
12608
12609                 vecsv = args ? va_arg(*args, SV*) : argsv;
12610
12611                 /* if this is a version object, we need to convert
12612                  * back into v-string notation and then let the
12613                  * vectorize happen normally
12614                  */
12615                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12616                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12617                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12618                         "vector argument not supported with alpha versions");
12619                         vecsv = &PL_sv_no;
12620                     }
12621                     else {
12622                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12623                         vecsv = sv_newmortal();
12624                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12625                                      vecsv);
12626                     }
12627                 }
12628                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12629                 vec_utf8 = DO_UTF8(vecsv);
12630
12631               /* This is the re-entry point for when we're iterating
12632                * over the individual characters of a vector arg */
12633               vector:
12634                 if (!veclen)
12635                     goto done_valid_conversion;
12636                 if (vec_utf8)
12637                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12638                                         UTF8_ALLOW_ANYUV);
12639                 else {
12640                     uv = *vecstr;
12641                     ulen = 1;
12642                 }
12643                 vecstr += ulen;
12644                 veclen -= ulen;
12645             }
12646             else {
12647                 /* test arg for inf/nan. This can trigger an unwanted
12648                  * 'str' overload, so manually force 'num' overload first
12649                  * if necessary */
12650                 if (argsv) {
12651                     SvGETMAGIC(argsv);
12652                     if (UNLIKELY(SvAMAGIC(argsv)))
12653                         argsv = sv_2num(argsv);
12654                     if (UNLIKELY(isinfnansv(argsv)))
12655                         goto handle_infnan_argsv;
12656                 }
12657
12658                 if (base < 0) {
12659                     /* signed int type */
12660                     IV iv;
12661                     base = -base;
12662                     if (args) {
12663                         switch (intsize) {
12664                         case 'c':  iv = (char)va_arg(*args, int);  break;
12665                         case 'h':  iv = (short)va_arg(*args, int); break;
12666                         case 'l':  iv = va_arg(*args, long);       break;
12667                         case 'V':  iv = va_arg(*args, IV);         break;
12668                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12669 #ifdef HAS_PTRDIFF_T
12670                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12671 #endif
12672                         default:   iv = va_arg(*args, int);        break;
12673                         case 'j':  iv = (IV) va_arg(*args, PERL_INTMAX_T); break;
12674                         case 'q':
12675 #if IVSIZE >= 8
12676                                    iv = va_arg(*args, Quad_t);     break;
12677 #else
12678                                    goto unknown;
12679 #endif
12680                         }
12681                     }
12682                     else {
12683                         /* assign to tiv then cast to iv to work around
12684                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12685                         IV tiv = SvIV_nomg(argsv);
12686                         switch (intsize) {
12687                         case 'c':  iv = (char)tiv;   break;
12688                         case 'h':  iv = (short)tiv;  break;
12689                         case 'l':  iv = (long)tiv;   break;
12690                         case 'V':
12691                         default:   iv = tiv;         break;
12692                         case 'q':
12693 #if IVSIZE >= 8
12694                                    iv = (Quad_t)tiv; break;
12695 #else
12696                                    goto unknown;
12697 #endif
12698                         }
12699                     }
12700
12701                     /* now convert iv to uv */
12702                     if (iv >= 0) {
12703                         uv = iv;
12704                         if (plus)
12705                             esignbuf[esignlen++] = plus;
12706                     }
12707                     else {
12708                         /* Using 0- here to silence bogus warning from MS VC */
12709                         uv = (UV) (0 - (UV) iv);
12710                         esignbuf[esignlen++] = '-';
12711                     }
12712                 }
12713                 else {
12714                     /* unsigned int type */
12715                     if (args) {
12716                         switch (intsize) {
12717                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12718                                   break;
12719                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12720                                   break;
12721                         case 'l': uv = va_arg(*args, unsigned long); break;
12722                         case 'V': uv = va_arg(*args, UV);            break;
12723                         case 'z': uv = va_arg(*args, Size_t);        break;
12724 #ifdef HAS_PTRDIFF_T
12725                                   /* will sign extend, but there is no
12726                                    * uptrdiff_t, so oh well */
12727                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12728 #endif
12729                         case 'j': uv = (UV) va_arg(*args, PERL_UINTMAX_T); break;
12730                         default:  uv = va_arg(*args, unsigned);      break;
12731                         case 'q':
12732 #if IVSIZE >= 8
12733                                   uv = va_arg(*args, Uquad_t);       break;
12734 #else
12735                                   goto unknown;
12736 #endif
12737                         }
12738                     }
12739                     else {
12740                         /* assign to tiv then cast to iv to work around
12741                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12742                         UV tuv = SvUV_nomg(argsv);
12743                         switch (intsize) {
12744                         case 'c': uv = (unsigned char)tuv;  break;
12745                         case 'h': uv = (unsigned short)tuv; break;
12746                         case 'l': uv = (unsigned long)tuv;  break;
12747                         case 'V':
12748                         default:  uv = tuv;                 break;
12749                         case 'q':
12750 #if IVSIZE >= 8
12751                                   uv = (Uquad_t)tuv;        break;
12752 #else
12753                                   goto unknown;
12754 #endif
12755                         }
12756                     }
12757                 }
12758             }
12759
12760         do_integer:
12761             {
12762                 char *ptr = ebuf + sizeof ebuf;
12763                 unsigned dig;
12764                 zeros = 0;
12765
12766                 switch (base) {
12767                 case 16:
12768                     {
12769                     const char * const p =
12770                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12771
12772                         do {
12773                             dig = uv & 15;
12774                             *--ptr = p[dig];
12775                         } while (uv >>= 4);
12776                         if (alt && *ptr != '0') {
12777                             esignbuf[esignlen++] = '0';
12778                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12779                         }
12780                         break;
12781                     }
12782                 case 8:
12783                     do {
12784                         dig = uv & 7;
12785                         *--ptr = '0' + dig;
12786                     } while (uv >>= 3);
12787                     if (alt && *ptr != '0')
12788                         *--ptr = '0';
12789                     break;
12790                 case 2:
12791                     do {
12792                         dig = uv & 1;
12793                         *--ptr = '0' + dig;
12794                     } while (uv >>= 1);
12795                     if (alt && *ptr != '0') {
12796                         esignbuf[esignlen++] = '0';
12797                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12798                     }
12799                     break;
12800
12801                 case 1:
12802                     /* special-case: base 1 indicates a 'c' format:
12803                      * we use the common code for extracting a uv,
12804                      * but handle that value differently here than
12805                      * all the other int types */
12806                     if ((uv > 255 ||
12807                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12808                         && !IN_BYTES)
12809                     {
12810                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12811                         eptr = ebuf;
12812                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12813                         is_utf8 = TRUE;
12814                     }
12815                     else {
12816                         eptr = ebuf;
12817                         ebuf[0] = (char)uv;
12818                         elen = 1;
12819                     }
12820                     goto string;
12821
12822                 default:                /* it had better be ten or less */
12823                     do {
12824                         dig = uv % base;
12825                         *--ptr = '0' + dig;
12826                     } while (uv /= base);
12827                     break;
12828                 }
12829                 elen = (ebuf + sizeof ebuf) - ptr;
12830                 eptr = ptr;
12831                 if (has_precis) {
12832                     if (precis > elen)
12833                         zeros = precis - elen;
12834                     else if (precis == 0 && elen == 1 && *eptr == '0'
12835                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12836                         elen = 0;
12837
12838                     /* a precision nullifies the 0 flag. */
12839                     fill = FALSE;
12840                 }
12841             }
12842             break;
12843
12844             /* FLOATING POINT */
12845
12846         case 'F':
12847             c = 'f';            /* maybe %F isn't supported here */
12848             /* FALLTHROUGH */
12849         case 'e': case 'E':
12850         case 'f':
12851         case 'g': case 'G':
12852         case 'a': case 'A':
12853
12854         {
12855             STRLEN float_need; /* what PL_efloatsize needs to become */
12856             bool hexfp;        /* hexadecimal floating point? */
12857
12858             vcatpvfn_long_double_t fv;
12859             NV                     nv;
12860
12861             /* This is evil, but floating point is even more evil */
12862
12863             /* for SV-style calling, we can only get NV
12864                for C-style calling, we assume %f is double;
12865                for simplicity we allow any of %Lf, %llf, %qf for long double
12866             */
12867             switch (intsize) {
12868             case 'V':
12869 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12870                 intsize = 'q';
12871 #endif
12872                 break;
12873 /* [perl #20339] - we should accept and ignore %lf rather than die */
12874             case 'l':
12875                 /* FALLTHROUGH */
12876             default:
12877 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12878                 intsize = args ? 0 : 'q';
12879 #endif
12880                 break;
12881             case 'q':
12882 #if defined(HAS_LONG_DOUBLE)
12883                 break;
12884 #else
12885                 /* FALLTHROUGH */
12886 #endif
12887             case 'c':
12888             case 'h':
12889             case 'z':
12890             case 't':
12891             case 'j':
12892                 goto unknown;
12893             }
12894
12895             /* Now we need (long double) if intsize == 'q', else (double). */
12896             if (args) {
12897                 /* Note: do not pull NVs off the va_list with va_arg()
12898                  * (pull doubles instead) because if you have a build
12899                  * with long doubles, you would always be pulling long
12900                  * doubles, which would badly break anyone using only
12901                  * doubles (i.e. the majority of builds). In other
12902                  * words, you cannot mix doubles and long doubles.
12903                  * The only case where you can pull off long doubles
12904                  * is when the format specifier explicitly asks so with
12905                  * e.g. "%Lg". */
12906 #ifdef USE_QUADMATH
12907                 fv = intsize == 'q' ?
12908                     va_arg(*args, NV) : va_arg(*args, double);
12909                 nv = fv;
12910 #elif LONG_DOUBLESIZE > DOUBLESIZE
12911                 if (intsize == 'q') {
12912                     fv = va_arg(*args, long double);
12913                     nv = fv;
12914                 } else {
12915                     nv = va_arg(*args, double);
12916                     VCATPVFN_NV_TO_FV(nv, fv);
12917                 }
12918 #else
12919                 nv = va_arg(*args, double);
12920                 fv = nv;
12921 #endif
12922             }
12923             else
12924             {
12925                 SvGETMAGIC(argsv);
12926                 /* we jump here if an int-ish format encountered an
12927                  * infinite/Nan argsv. After setting nv/fv, it falls
12928                  * into the isinfnan block which follows */
12929               handle_infnan_argsv:
12930                 nv = SvNV_nomg(argsv);
12931                 VCATPVFN_NV_TO_FV(nv, fv);
12932             }
12933
12934             if (Perl_isinfnan(nv)) {
12935                 if (c == 'c')
12936                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12937                            SvNV_nomg(argsv), (int)c);
12938
12939                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12940                 assert(elen);
12941                 eptr = ebuf;
12942                 zeros     = 0;
12943                 esignlen  = 0;
12944                 dotstrlen = 0;
12945                 break;
12946             }
12947
12948             /* special-case "%.0f" */
12949             if (   c == 'f'
12950                 && !precis
12951                 && has_precis
12952                 && !(width || left || plus || alt)
12953                 && !fill
12954                 && intsize != 'q'
12955                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12956             )
12957                 goto float_concat;
12958
12959             /* Determine the buffer size needed for the various
12960              * floating-point formats.
12961              *
12962              * The basic possibilities are:
12963              *
12964              *               <---P--->
12965              *    %f 1111111.123456789
12966              *    %e       1.111111123e+06
12967              *    %a     0x1.0f4471f9bp+20
12968              *    %g        1111111.12
12969              *    %g        1.11111112e+15
12970              *
12971              * where P is the value of the precision in the format, or 6
12972              * if not specified. Note the two possible output formats of
12973              * %g; in both cases the number of significant digits is <=
12974              * precision.
12975              *
12976              * For most of the format types the maximum buffer size needed
12977              * is precision, plus: any leading 1 or 0x1, the radix
12978              * point, and an exponent.  The difficult one is %f: for a
12979              * large positive exponent it can have many leading digits,
12980              * which needs to be calculated specially. Also %a is slightly
12981              * different in that in the absence of a specified precision,
12982              * it uses as many digits as necessary to distinguish
12983              * different values.
12984              *
12985              * First, here are the constant bits. For ease of calculation
12986              * we over-estimate the needed buffer size, for example by
12987              * assuming all formats have an exponent and a leading 0x1.
12988              *
12989              * Also for production use, add a little extra overhead for
12990              * safety's sake. Under debugging don't, as it means we're
12991              * more likely to quickly spot issues during development.
12992              */
12993
12994             float_need =     1  /* possible unary minus */
12995                           +  4  /* "0x1" plus very unlikely carry */
12996                           +  1  /* default radix point '.' */
12997                           +  2  /* "e-", "p+" etc */
12998                           +  6  /* exponent: up to 16383 (quad fp) */
12999 #ifndef DEBUGGING
13000                           + 20  /* safety net */
13001 #endif
13002                           +  1; /* \0 */
13003
13004
13005             /* determine the radix point len, e.g. length(".") in "1.2" */
13006 #ifdef USE_LOCALE_NUMERIC
13007             /* note that we may either explicitly use PL_numeric_radix_sv
13008              * below, or implicitly, via an snprintf() variant.
13009              * Note also things like ps_AF.utf8 which has
13010              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
13011             if (! have_in_lc_numeric) {
13012                 in_lc_numeric = IN_LC(LC_NUMERIC);
13013                 have_in_lc_numeric = TRUE;
13014             }
13015
13016             if (in_lc_numeric) {
13017                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
13018                     /* this can't wrap unless PL_numeric_radix_sv is a string
13019                      * consuming virtually all the 32-bit or 64-bit address
13020                      * space
13021                      */
13022                     float_need += (SvCUR(PL_numeric_radix_sv) - 1);
13023
13024                     /* floating-point formats only get utf8 if the radix point
13025                      * is utf8. All other characters in the string are < 128
13026                      * and so can be safely appended to both a non-utf8 and utf8
13027                      * string as-is.
13028                      * Note that this will convert the output to utf8 even if
13029                      * the radix point didn't get output.
13030                      */
13031                     if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
13032                         sv_utf8_upgrade(sv);
13033                         has_utf8 = TRUE;
13034                     }
13035                 });
13036             }
13037 #endif
13038
13039             hexfp = FALSE;
13040
13041             if (isALPHA_FOLD_EQ(c, 'f')) {
13042                 /* Determine how many digits before the radix point
13043                  * might be emitted.  frexp() (or frexpl) has some
13044                  * unspecified behaviour for nan/inf/-inf, so lucky we've
13045                  * already handled them above */
13046                 STRLEN digits;
13047                 int i = PERL_INT_MIN;
13048                 (void)Perl_frexp((NV)fv, &i);
13049                 if (i == PERL_INT_MIN)
13050                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
13051
13052                 if (i > 0) {
13053                     digits = BIT_DIGITS(i);
13054                     /* this can't overflow. 'digits' will only be a few
13055                      * thousand even for the largest floating-point types.
13056                      * And up until now float_need is just some small
13057                      * constants plus radix len, which can't be in
13058                      * overflow territory unless the radix SV is consuming
13059                      * over 1/2 the address space */
13060                     assert(float_need < ((STRLEN)~0) - digits);
13061                     float_need += digits;
13062                 }
13063             }
13064             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13065                 hexfp = TRUE;
13066                 if (!has_precis) {
13067                     /* %a in the absence of precision may print as many
13068                      * digits as needed to represent the entire mantissa
13069                      * bit pattern.
13070                      * This estimate seriously overshoots in most cases,
13071                      * but better the undershooting.  Firstly, all bytes
13072                      * of the NV are not mantissa, some of them are
13073                      * exponent.  Secondly, for the reasonably common
13074                      * long doubles case, the "80-bit extended", two
13075                      * or six bytes of the NV are unused. Also, we'll
13076                      * still pick up an extra +6 from the default
13077                      * precision calculation below. */
13078                     STRLEN digits =
13079 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13080                         /* For the "double double", we need more.
13081                          * Since each double has their own exponent, the
13082                          * doubles may float (haha) rather far from each
13083                          * other, and the number of required bits is much
13084                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13085                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13086                          *
13087                          * Need 2 hexdigits for each byte. */
13088                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13089 #else
13090                         NVSIZE * 2; /* 2 hexdigits for each byte */
13091 #endif
13092                     /* see "this can't overflow" comment above */
13093                     assert(float_need < ((STRLEN)~0) - digits);
13094                     float_need += digits;
13095                 }
13096             }
13097             /* special-case "%.<number>g" if it will fit in ebuf */
13098             else if (c == 'g'
13099                 && precis   /* See earlier comment about buggy Gconvert
13100                                when digits, aka precis, is 0  */
13101                 && has_precis
13102                 /* check, in manner not involving wrapping, that it will
13103                  * fit in ebuf  */
13104                 && float_need < sizeof(ebuf)
13105                 && sizeof(ebuf) - float_need > precis
13106                 && !(width || left || plus || alt)
13107                 && !fill
13108                 && intsize != 'q'
13109             ) {
13110                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13111                     SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
13112                 );
13113                 elen = strlen(ebuf);
13114                 eptr = ebuf;
13115                 goto float_concat;
13116             }
13117
13118
13119             {
13120                 STRLEN pr = has_precis ? precis : 6; /* known default */
13121                 /* this probably can't wrap, since precis is limited
13122                  * to 1/4 address space size, but better safe than sorry
13123                  */
13124                 if (float_need >= ((STRLEN)~0) - pr)
13125                     croak_memory_wrap();
13126                 float_need += pr;
13127             }
13128
13129             if (float_need < width)
13130                 float_need = width;
13131
13132             if (float_need > INT_MAX) {
13133                 /* snprintf() returns an int, and we use that return value,
13134                    so die horribly if the expected size is too large for int
13135                 */
13136                 Perl_croak(aTHX_ "Numeric format result too large");
13137             }
13138
13139             if (PL_efloatsize <= float_need) {
13140                 /* PL_efloatbuf should be at least 1 greater than
13141                  * float_need to allow a trailing \0 to be returned by
13142                  * snprintf().  If we need to grow, overgrow for the
13143                  * benefit of future generations */
13144                 const STRLEN extra = 0x20;
13145                 if (float_need >= ((STRLEN)~0) - extra)
13146                     croak_memory_wrap();
13147                 float_need += extra;
13148                 Safefree(PL_efloatbuf);
13149                 PL_efloatsize = float_need;
13150                 Newx(PL_efloatbuf, PL_efloatsize, char);
13151                 PL_efloatbuf[0] = '\0';
13152             }
13153
13154             if (UNLIKELY(hexfp)) {
13155                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13156                                 nv, fv, has_precis, precis, width,
13157                                 alt, plus, left, fill, in_lc_numeric);
13158             }
13159             else {
13160                 char *ptr = ebuf + sizeof ebuf;
13161                 *--ptr = '\0';
13162                 *--ptr = c;
13163 #if defined(USE_QUADMATH)
13164                 if (intsize == 'q') {
13165                     /* "g" -> "Qg" */
13166                     *--ptr = 'Q';
13167                 }
13168                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13169 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13170                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13171                  * not USE_LONG_DOUBLE and NVff.  In other words,
13172                  * this needs to work without USE_LONG_DOUBLE. */
13173                 if (intsize == 'q') {
13174                     /* Copy the one or more characters in a long double
13175                      * format before the 'base' ([efgEFG]) character to
13176                      * the format string. */
13177                     static char const ldblf[] = PERL_PRIfldbl;
13178                     char const *p = ldblf + sizeof(ldblf) - 3;
13179                     while (p >= ldblf) { *--ptr = *p--; }
13180                 }
13181 #endif
13182                 if (has_precis) {
13183                     base = precis;
13184                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13185                     *--ptr = '.';
13186                 }
13187                 if (width) {
13188                     base = width;
13189                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13190                 }
13191                 if (fill)
13192                     *--ptr = '0';
13193                 if (left)
13194                     *--ptr = '-';
13195                 if (plus)
13196                     *--ptr = plus;
13197                 if (alt)
13198                     *--ptr = '#';
13199                 *--ptr = '%';
13200
13201                 /* No taint.  Otherwise we are in the strange situation
13202                  * where printf() taints but print($float) doesn't.
13203                  * --jhi */
13204
13205                 /* hopefully the above makes ptr a very constrained format
13206                  * that is safe to use, even though it's not literal */
13207                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13208 #ifdef USE_QUADMATH
13209                 {
13210                     if (!quadmath_format_valid(ptr))
13211                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13212                     WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13213                         elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13214                                                  ptr, nv);
13215                     );
13216                     if ((IV)elen == -1) {
13217                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
13218                     }
13219                 }
13220 #elif defined(HAS_LONG_DOUBLE)
13221                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13222                     elen = ((intsize == 'q')
13223                             ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13224                             : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
13225                 );
13226 #else
13227                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13228                     elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13229                 );
13230 #endif
13231                 GCC_DIAG_RESTORE_STMT;
13232             }
13233
13234             eptr = PL_efloatbuf;
13235
13236           float_concat:
13237
13238             /* Since floating-point formats do their own formatting and
13239              * padding, we skip the main block of code at the end of this
13240              * loop which handles appending eptr to sv, and do our own
13241              * stripped-down version */
13242
13243             assert(!zeros);
13244             assert(!esignlen);
13245             assert(elen);
13246             assert(elen >= width);
13247
13248             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13249
13250             goto done_valid_conversion;
13251         }
13252
13253             /* SPECIAL */
13254
13255         case 'n':
13256             {
13257                 STRLEN len;
13258                 /* XXX ideally we should warn if any flags etc have been
13259                  * set, e.g. "%-4.5n" */
13260                 /* XXX if sv was originally non-utf8 with a char in the
13261                  * range 0x80-0xff, then if it got upgraded, we should
13262                  * calculate char len rather than byte len here */
13263                 len = SvCUR(sv) - origlen;
13264                 if (args) {
13265                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13266
13267                     switch (intsize) {
13268                     case 'c':  *(va_arg(*args, char*))      = i; break;
13269                     case 'h':  *(va_arg(*args, short*))     = i; break;
13270                     default:   *(va_arg(*args, int*))       = i; break;
13271                     case 'l':  *(va_arg(*args, long*))      = i; break;
13272                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13273                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13274 #ifdef HAS_PTRDIFF_T
13275                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13276 #endif
13277                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13278                     case 'q':
13279 #if IVSIZE >= 8
13280                                *(va_arg(*args, Quad_t*))    = i; break;
13281 #else
13282                                goto unknown;
13283 #endif
13284                     }
13285                 }
13286                 else {
13287                     if (arg_missing)
13288                         Perl_croak_nocontext(
13289                             "Missing argument for %%n in %s",
13290                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13291                     sv_setuv_mg(argsv, has_utf8
13292                         ? (UV)utf8_length((U8*)SvPVX(sv), (U8*)SvEND(sv))
13293                         : (UV)len);
13294                 }
13295                 goto done_valid_conversion;
13296             }
13297
13298             /* UNKNOWN */
13299
13300         default:
13301       unknown:
13302             if (!args
13303                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13304                 && ckWARN(WARN_PRINTF))
13305             {
13306                 SV * const msg = sv_newmortal();
13307                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13308                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13309                 if (fmtstart < patend) {
13310                     const char * const fmtend = q < patend ? q : patend;
13311                     const char * f;
13312                     sv_catpvs(msg, "\"%");
13313                     for (f = fmtstart; f < fmtend; f++) {
13314                         if (isPRINT(*f)) {
13315                             sv_catpvn_nomg(msg, f, 1);
13316                         } else {
13317                             Perl_sv_catpvf(aTHX_ msg,
13318                                            "\\%03" UVof, (UV)*f & 0xFF);
13319                         }
13320                     }
13321                     sv_catpvs(msg, "\"");
13322                 } else {
13323                     sv_catpvs(msg, "end of string");
13324                 }
13325                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13326             }
13327
13328             /* mangled format: output the '%', then continue from the
13329              * character following that */
13330             sv_catpvn_nomg(sv, fmtstart-1, 1);
13331             q = fmtstart;
13332             svix = osvix;
13333             /* Any "redundant arg" warning from now onwards will probably
13334              * just be misleading, so don't bother. */
13335             no_redundant_warning = TRUE;
13336             continue;   /* not "break" */
13337         }
13338
13339         if (is_utf8 != has_utf8) {
13340             if (is_utf8) {
13341                 if (SvCUR(sv))
13342                     sv_utf8_upgrade(sv);
13343             }
13344             else {
13345                 const STRLEN old_elen = elen;
13346                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13347                 sv_utf8_upgrade(nsv);
13348                 eptr = SvPVX_const(nsv);
13349                 elen = SvCUR(nsv);
13350
13351                 if (width) { /* fudge width (can't fudge elen) */
13352                     width += elen - old_elen;
13353                 }
13354                 is_utf8 = TRUE;
13355             }
13356         }
13357
13358
13359         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13360
13361         {
13362             STRLEN need, have, gap;
13363             STRLEN i;
13364             char *s;
13365
13366             /* signed value that's wrapped? */
13367             assert(elen  <= ((~(STRLEN)0) >> 1));
13368
13369             /* if zeros is non-zero, then it represents filler between
13370              * elen and precis. So adding elen and zeros together will
13371              * always be <= precis, and the addition can never wrap */
13372             assert(!zeros || (precis > elen && precis - elen == zeros));
13373             have = elen + zeros;
13374
13375             if (have >= (((STRLEN)~0) - esignlen))
13376                 croak_memory_wrap();
13377             have += esignlen;
13378
13379             need = (have > width ? have : width);
13380             gap = need - have;
13381
13382             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13383                 croak_memory_wrap();
13384             need += (SvCUR(sv) + 1);
13385
13386             SvGROW(sv, need);
13387
13388             s = SvEND(sv);
13389
13390             if (left) {
13391                 for (i = 0; i < esignlen; i++)
13392                     *s++ = esignbuf[i];
13393                 for (i = zeros; i; i--)
13394                     *s++ = '0';
13395                 Copy(eptr, s, elen, char);
13396                 s += elen;
13397                 for (i = gap; i; i--)
13398                     *s++ = ' ';
13399             }
13400             else {
13401                 if (fill) {
13402                     for (i = 0; i < esignlen; i++)
13403                         *s++ = esignbuf[i];
13404                     assert(!zeros);
13405                     zeros = gap;
13406                 }
13407                 else {
13408                     for (i = gap; i; i--)
13409                         *s++ = ' ';
13410                     for (i = 0; i < esignlen; i++)
13411                         *s++ = esignbuf[i];
13412                 }
13413
13414                 for (i = zeros; i; i--)
13415                     *s++ = '0';
13416                 Copy(eptr, s, elen, char);
13417                 s += elen;
13418             }
13419
13420             *s = '\0';
13421             SvCUR_set(sv, s - SvPVX_const(sv));
13422
13423             if (is_utf8)
13424                 has_utf8 = TRUE;
13425             if (has_utf8)
13426                 SvUTF8_on(sv);
13427         }
13428
13429         if (vectorize && veclen) {
13430             /* we append the vector separator separately since %v isn't
13431              * very common: don't slow down the general case by adding
13432              * dotstrlen to need etc */
13433             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13434             esignlen = 0;
13435             goto vector; /* do next iteration */
13436         }
13437
13438       done_valid_conversion:
13439
13440         if (arg_missing)
13441             S_warn_vcatpvfn_missing_argument(aTHX);
13442     }
13443
13444     /* Now that we've consumed all our printf format arguments (svix)
13445      * do we have things left on the stack that we didn't use?
13446      */
13447     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13448         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13449                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13450     }
13451
13452     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13453         /* while we shouldn't set the cache, it may have been previously
13454            set in the caller, so clear it */
13455         MAGIC *mg = mg_find(sv, PERL_MAGIC_utf8);
13456         if (mg)
13457             magic_setutf8(sv,mg); /* clear UTF8 cache */
13458     }
13459     SvTAINT(sv);
13460 }
13461
13462 /* =========================================================================
13463
13464 =head1 Cloning an interpreter
13465
13466 =cut
13467
13468 All the macros and functions in this section are for the private use of
13469 the main function, perl_clone().
13470
13471 The foo_dup() functions make an exact copy of an existing foo thingy.
13472 During the course of a cloning, a hash table is used to map old addresses
13473 to new addresses.  The table is created and manipulated with the
13474 ptr_table_* functions.
13475
13476  * =========================================================================*/
13477
13478
13479 #if defined(USE_ITHREADS)
13480
13481 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13482 #ifndef GpREFCNT_inc
13483 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13484 #endif
13485
13486
13487 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13488    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13489    If this changes, please unmerge ss_dup.
13490    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13491 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13492 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13493 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13494 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13495 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13496 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13497 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13498 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13499 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13500 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13501 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13502 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13503 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13504
13505 /* clone a parser */
13506
13507 yy_parser *
13508 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13509 {
13510     yy_parser *parser;
13511
13512     PERL_ARGS_ASSERT_PARSER_DUP;
13513
13514     if (!proto)
13515         return NULL;
13516
13517     /* look for it in the table first */
13518     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13519     if (parser)
13520         return parser;
13521
13522     /* create anew and remember what it is */
13523     Newxz(parser, 1, yy_parser);
13524     ptr_table_store(PL_ptr_table, proto, parser);
13525
13526     /* XXX eventually, just Copy() most of the parser struct ? */
13527
13528     parser->lex_brackets = proto->lex_brackets;
13529     parser->lex_casemods = proto->lex_casemods;
13530     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13531                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13532     parser->lex_casestack = savepvn(proto->lex_casestack,
13533                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13534     parser->lex_defer   = proto->lex_defer;
13535     parser->lex_dojoin  = proto->lex_dojoin;
13536     parser->lex_formbrack = proto->lex_formbrack;
13537     parser->lex_inpat   = proto->lex_inpat;
13538     parser->lex_inwhat  = proto->lex_inwhat;
13539     parser->lex_op      = proto->lex_op;
13540     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13541     parser->lex_starts  = proto->lex_starts;
13542     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13543     parser->multi_close = proto->multi_close;
13544     parser->multi_open  = proto->multi_open;
13545     parser->multi_start = proto->multi_start;
13546     parser->multi_end   = proto->multi_end;
13547     parser->preambled   = proto->preambled;
13548     parser->lex_super_state = proto->lex_super_state;
13549     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13550     parser->lex_sub_op  = proto->lex_sub_op;
13551     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13552     parser->linestr     = sv_dup_inc(proto->linestr, param);
13553     parser->expect      = proto->expect;
13554     parser->copline     = proto->copline;
13555     parser->last_lop_op = proto->last_lop_op;
13556     parser->lex_state   = proto->lex_state;
13557     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13558     /* rsfp_filters entries have fake IoDIRP() */
13559     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13560     parser->in_my       = proto->in_my;
13561     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13562     parser->error_count = proto->error_count;
13563     parser->sig_elems   = proto->sig_elems;
13564     parser->sig_optelems= proto->sig_optelems;
13565     parser->sig_slurpy  = proto->sig_slurpy;
13566     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13567
13568     {
13569         char * const ols = SvPVX(proto->linestr);
13570         char * const ls  = SvPVX(parser->linestr);
13571
13572         parser->bufptr      = ls + (proto->bufptr >= ols ?
13573                                     proto->bufptr -  ols : 0);
13574         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13575                                     proto->oldbufptr -  ols : 0);
13576         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13577                                     proto->oldoldbufptr -  ols : 0);
13578         parser->linestart   = ls + (proto->linestart >= ols ?
13579                                     proto->linestart -  ols : 0);
13580         parser->last_uni    = ls + (proto->last_uni >= ols ?
13581                                     proto->last_uni -  ols : 0);
13582         parser->last_lop    = ls + (proto->last_lop >= ols ?
13583                                     proto->last_lop -  ols : 0);
13584
13585         parser->bufend      = ls + SvCUR(parser->linestr);
13586     }
13587
13588     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13589
13590
13591     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13592     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13593     parser->nexttoke    = proto->nexttoke;
13594
13595     /* XXX should clone saved_curcop here, but we aren't passed
13596      * proto_perl; so do it in perl_clone_using instead */
13597
13598     return parser;
13599 }
13600
13601
13602 /* duplicate a file handle */
13603
13604 PerlIO *
13605 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13606 {
13607     PerlIO *ret;
13608
13609     PERL_ARGS_ASSERT_FP_DUP;
13610     PERL_UNUSED_ARG(type);
13611
13612     if (!fp)
13613         return (PerlIO*)NULL;
13614
13615     /* look for it in the table first */
13616     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13617     if (ret)
13618         return ret;
13619
13620     /* create anew and remember what it is */
13621 #ifdef __amigaos4__
13622     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13623 #else
13624     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13625 #endif
13626     ptr_table_store(PL_ptr_table, fp, ret);
13627     return ret;
13628 }
13629
13630 /* duplicate a directory handle */
13631
13632 DIR *
13633 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13634 {
13635     DIR *ret;
13636
13637 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13638     DIR *pwd;
13639     const Direntry_t *dirent;
13640     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13641     char *name = NULL;
13642     STRLEN len = 0;
13643     long pos;
13644 #endif
13645
13646     PERL_UNUSED_CONTEXT;
13647     PERL_ARGS_ASSERT_DIRP_DUP;
13648
13649     if (!dp)
13650         return (DIR*)NULL;
13651
13652     /* look for it in the table first */
13653     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13654     if (ret)
13655         return ret;
13656
13657 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13658
13659     PERL_UNUSED_ARG(param);
13660
13661     /* create anew */
13662
13663     /* open the current directory (so we can switch back) */
13664     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13665
13666     /* chdir to our dir handle and open the present working directory */
13667     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13668         PerlDir_close(pwd);
13669         return (DIR *)NULL;
13670     }
13671     /* Now we should have two dir handles pointing to the same dir. */
13672
13673     /* Be nice to the calling code and chdir back to where we were. */
13674     /* XXX If this fails, then what? */
13675     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13676
13677     /* We have no need of the pwd handle any more. */
13678     PerlDir_close(pwd);
13679
13680 #ifdef DIRNAMLEN
13681 # define d_namlen(d) (d)->d_namlen
13682 #else
13683 # define d_namlen(d) strlen((d)->d_name)
13684 #endif
13685     /* Iterate once through dp, to get the file name at the current posi-
13686        tion. Then step back. */
13687     pos = PerlDir_tell(dp);
13688     if ((dirent = PerlDir_read(dp))) {
13689         len = d_namlen(dirent);
13690         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13691             /* If the len is somehow magically longer than the
13692              * maximum length of the directory entry, even though
13693              * we could fit it in a buffer, we could not copy it
13694              * from the dirent.  Bail out. */
13695             PerlDir_close(ret);
13696             return (DIR*)NULL;
13697         }
13698         if (len <= sizeof smallbuf) name = smallbuf;
13699         else Newx(name, len, char);
13700         Move(dirent->d_name, name, len, char);
13701     }
13702     PerlDir_seek(dp, pos);
13703
13704     /* Iterate through the new dir handle, till we find a file with the
13705        right name. */
13706     if (!dirent) /* just before the end */
13707         for(;;) {
13708             pos = PerlDir_tell(ret);
13709             if (PerlDir_read(ret)) continue; /* not there yet */
13710             PerlDir_seek(ret, pos); /* step back */
13711             break;
13712         }
13713     else {
13714         const long pos0 = PerlDir_tell(ret);
13715         for(;;) {
13716             pos = PerlDir_tell(ret);
13717             if ((dirent = PerlDir_read(ret))) {
13718                 if (len == (STRLEN)d_namlen(dirent)
13719                     && memEQ(name, dirent->d_name, len)) {
13720                     /* found it */
13721                     PerlDir_seek(ret, pos); /* step back */
13722                     break;
13723                 }
13724                 /* else we are not there yet; keep iterating */
13725             }
13726             else { /* This is not meant to happen. The best we can do is
13727                       reset the iterator to the beginning. */
13728                 PerlDir_seek(ret, pos0);
13729                 break;
13730             }
13731         }
13732     }
13733 #undef d_namlen
13734
13735     if (name && name != smallbuf)
13736         Safefree(name);
13737 #endif
13738
13739 #ifdef WIN32
13740     ret = win32_dirp_dup(dp, param);
13741 #endif
13742
13743     /* pop it in the pointer table */
13744     if (ret)
13745         ptr_table_store(PL_ptr_table, dp, ret);
13746
13747     return ret;
13748 }
13749
13750 /* duplicate a typeglob */
13751
13752 GP *
13753 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13754 {
13755     GP *ret;
13756
13757     PERL_ARGS_ASSERT_GP_DUP;
13758
13759     if (!gp)
13760         return (GP*)NULL;
13761     /* look for it in the table first */
13762     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13763     if (ret)
13764         return ret;
13765
13766     /* create anew and remember what it is */
13767     Newxz(ret, 1, GP);
13768     ptr_table_store(PL_ptr_table, gp, ret);
13769
13770     /* clone */
13771     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13772        on Newxz() to do this for us.  */
13773     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13774     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13775     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13776     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13777     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13778     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13779     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13780     ret->gp_cvgen       = gp->gp_cvgen;
13781     ret->gp_line        = gp->gp_line;
13782     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13783     return ret;
13784 }
13785
13786 /* duplicate a chain of magic */
13787
13788 MAGIC *
13789 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13790 {
13791     MAGIC *mgret = NULL;
13792     MAGIC **mgprev_p = &mgret;
13793
13794     PERL_ARGS_ASSERT_MG_DUP;
13795
13796     for (; mg; mg = mg->mg_moremagic) {
13797         MAGIC *nmg;
13798
13799         if ((param->flags & CLONEf_JOIN_IN)
13800                 && mg->mg_type == PERL_MAGIC_backref)
13801             /* when joining, we let the individual SVs add themselves to
13802              * backref as needed. */
13803             continue;
13804
13805         Newx(nmg, 1, MAGIC);
13806         *mgprev_p = nmg;
13807         mgprev_p = &(nmg->mg_moremagic);
13808
13809         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13810            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13811            from the original commit adding Perl_mg_dup() - revision 4538.
13812            Similarly there is the annotation "XXX random ptr?" next to the
13813            assignment to nmg->mg_ptr.  */
13814         *nmg = *mg;
13815
13816         /* FIXME for plugins
13817         if (nmg->mg_type == PERL_MAGIC_qr) {
13818             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13819         }
13820         else
13821         */
13822         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13823                           ? nmg->mg_type == PERL_MAGIC_backref
13824                                 /* The backref AV has its reference
13825                                  * count deliberately bumped by 1 */
13826                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13827                                                     nmg->mg_obj, param))
13828                                 : sv_dup_inc(nmg->mg_obj, param)
13829                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13830                              nmg->mg_type == PERL_MAGIC_regdata)
13831                                   ? nmg->mg_obj
13832                                   : sv_dup(nmg->mg_obj, param);
13833
13834         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13835             if (nmg->mg_len > 0) {
13836                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13837                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13838                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13839                 {
13840                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13841                     sv_dup_inc_multiple((SV**)(namtp->table),
13842                                         (SV**)(namtp->table), NofAMmeth, param);
13843                 }
13844             }
13845             else if (nmg->mg_len == HEf_SVKEY)
13846                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13847         }
13848         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13849             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13850         }
13851     }
13852     return mgret;
13853 }
13854
13855 #endif /* USE_ITHREADS */
13856
13857 struct ptr_tbl_arena {
13858     struct ptr_tbl_arena *next;
13859     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13860 };
13861
13862 /* create a new pointer-mapping table */
13863
13864 PTR_TBL_t *
13865 Perl_ptr_table_new(pTHX)
13866 {
13867     PTR_TBL_t *tbl;
13868     PERL_UNUSED_CONTEXT;
13869
13870     Newx(tbl, 1, PTR_TBL_t);
13871     tbl->tbl_max        = 511;
13872     tbl->tbl_items      = 0;
13873     tbl->tbl_arena      = NULL;
13874     tbl->tbl_arena_next = NULL;
13875     tbl->tbl_arena_end  = NULL;
13876     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13877     return tbl;
13878 }
13879
13880 #define PTR_TABLE_HASH(ptr) \
13881   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13882
13883 /* map an existing pointer using a table */
13884
13885 STATIC PTR_TBL_ENT_t *
13886 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13887 {
13888     PTR_TBL_ENT_t *tblent;
13889     const UV hash = PTR_TABLE_HASH(sv);
13890
13891     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13892
13893     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13894     for (; tblent; tblent = tblent->next) {
13895         if (tblent->oldval == sv)
13896             return tblent;
13897     }
13898     return NULL;
13899 }
13900
13901 void *
13902 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13903 {
13904     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13905
13906     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13907     PERL_UNUSED_CONTEXT;
13908
13909     return tblent ? tblent->newval : NULL;
13910 }
13911
13912 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13913  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13914  * the core's typical use of ptr_tables in thread cloning. */
13915
13916 void
13917 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13918 {
13919     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13920
13921     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13922     PERL_UNUSED_CONTEXT;
13923
13924     if (tblent) {
13925         tblent->newval = newsv;
13926     } else {
13927         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13928
13929         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13930             struct ptr_tbl_arena *new_arena;
13931
13932             Newx(new_arena, 1, struct ptr_tbl_arena);
13933             new_arena->next = tbl->tbl_arena;
13934             tbl->tbl_arena = new_arena;
13935             tbl->tbl_arena_next = new_arena->array;
13936             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13937         }
13938
13939         tblent = tbl->tbl_arena_next++;
13940
13941         tblent->oldval = oldsv;
13942         tblent->newval = newsv;
13943         tblent->next = tbl->tbl_ary[entry];
13944         tbl->tbl_ary[entry] = tblent;
13945         tbl->tbl_items++;
13946         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13947             ptr_table_split(tbl);
13948     }
13949 }
13950
13951 /* double the hash bucket size of an existing ptr table */
13952
13953 void
13954 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13955 {
13956     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13957     const UV oldsize = tbl->tbl_max + 1;
13958     UV newsize = oldsize * 2;
13959     UV i;
13960
13961     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13962     PERL_UNUSED_CONTEXT;
13963
13964     Renew(ary, newsize, PTR_TBL_ENT_t*);
13965     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13966     tbl->tbl_max = --newsize;
13967     tbl->tbl_ary = ary;
13968     for (i=0; i < oldsize; i++, ary++) {
13969         PTR_TBL_ENT_t **entp = ary;
13970         PTR_TBL_ENT_t *ent = *ary;
13971         PTR_TBL_ENT_t **curentp;
13972         if (!ent)
13973             continue;
13974         curentp = ary + oldsize;
13975         do {
13976             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13977                 *entp = ent->next;
13978                 ent->next = *curentp;
13979                 *curentp = ent;
13980             }
13981             else
13982                 entp = &ent->next;
13983             ent = *entp;
13984         } while (ent);
13985     }
13986 }
13987
13988 /* remove all the entries from a ptr table */
13989 /* Deprecated - will be removed post 5.14 */
13990
13991 void
13992 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13993 {
13994     PERL_UNUSED_CONTEXT;
13995     if (tbl && tbl->tbl_items) {
13996         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13997
13998         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13999
14000         while (arena) {
14001             struct ptr_tbl_arena *next = arena->next;
14002
14003             Safefree(arena);
14004             arena = next;
14005         };
14006
14007         tbl->tbl_items = 0;
14008         tbl->tbl_arena = NULL;
14009         tbl->tbl_arena_next = NULL;
14010         tbl->tbl_arena_end = NULL;
14011     }
14012 }
14013
14014 /* clear and free a ptr table */
14015
14016 void
14017 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
14018 {
14019     struct ptr_tbl_arena *arena;
14020
14021     PERL_UNUSED_CONTEXT;
14022
14023     if (!tbl) {
14024         return;
14025     }
14026
14027     arena = tbl->tbl_arena;
14028
14029     while (arena) {
14030         struct ptr_tbl_arena *next = arena->next;
14031
14032         Safefree(arena);
14033         arena = next;
14034     }
14035
14036     Safefree(tbl->tbl_ary);
14037     Safefree(tbl);
14038 }
14039
14040 #if defined(USE_ITHREADS)
14041
14042 void
14043 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
14044 {
14045     PERL_ARGS_ASSERT_RVPV_DUP;
14046
14047     assert(!isREGEXP(sstr));
14048     if (SvROK(sstr)) {
14049         if (SvWEAKREF(sstr)) {
14050             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
14051             if (param->flags & CLONEf_JOIN_IN) {
14052                 /* if joining, we add any back references individually rather
14053                  * than copying the whole backref array */
14054                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
14055             }
14056         }
14057         else
14058             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
14059     }
14060     else if (SvPVX_const(sstr)) {
14061         /* Has something there */
14062         if (SvLEN(sstr)) {
14063             /* Normal PV - clone whole allocated space */
14064             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
14065             /* sstr may not be that normal, but actually copy on write.
14066                But we are a true, independent SV, so:  */
14067             SvIsCOW_off(dstr);
14068         }
14069         else {
14070             /* Special case - not normally malloced for some reason */
14071             if (isGV_with_GP(sstr)) {
14072                 /* Don't need to do anything here.  */
14073             }
14074             else if ((SvIsCOW(sstr))) {
14075                 /* A "shared" PV - clone it as "shared" PV */
14076                 SvPV_set(dstr,
14077                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
14078                                          param)));
14079             }
14080             else {
14081                 /* Some other special case - random pointer */
14082                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
14083             }
14084         }
14085     }
14086     else {
14087         /* Copy the NULL */
14088         SvPV_set(dstr, NULL);
14089     }
14090 }
14091
14092 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14093 static SV **
14094 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14095                       SSize_t items, CLONE_PARAMS *const param)
14096 {
14097     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14098
14099     while (items-- > 0) {
14100         *dest++ = sv_dup_inc(*source++, param);
14101     }
14102
14103     return dest;
14104 }
14105
14106 /* duplicate an SV of any type (including AV, HV etc) */
14107
14108 static SV *
14109 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14110 {
14111     dVAR;
14112     SV *dstr;
14113
14114     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14115
14116     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
14117 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14118         abort();
14119 #endif
14120         return NULL;
14121     }
14122     /* look for it in the table first */
14123     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14124     if (dstr)
14125         return dstr;
14126
14127     if(param->flags & CLONEf_JOIN_IN) {
14128         /** We are joining here so we don't want do clone
14129             something that is bad **/
14130         if (SvTYPE(sstr) == SVt_PVHV) {
14131             const HEK * const hvname = HvNAME_HEK(sstr);
14132             if (hvname) {
14133                 /** don't clone stashes if they already exist **/
14134                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14135                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14136                 ptr_table_store(PL_ptr_table, sstr, dstr);
14137                 return dstr;
14138             }
14139         }
14140         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14141             HV *stash = GvSTASH(sstr);
14142             const HEK * hvname;
14143             if (stash && (hvname = HvNAME_HEK(stash))) {
14144                 /** don't clone GVs if they already exist **/
14145                 SV **svp;
14146                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14147                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14148                 svp = hv_fetch(
14149                         stash, GvNAME(sstr),
14150                         GvNAMEUTF8(sstr)
14151                             ? -GvNAMELEN(sstr)
14152                             :  GvNAMELEN(sstr),
14153                         0
14154                       );
14155                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14156                     ptr_table_store(PL_ptr_table, sstr, *svp);
14157                     return *svp;
14158                 }
14159             }
14160         }
14161     }
14162
14163     /* create anew and remember what it is */
14164     new_SV(dstr);
14165
14166 #ifdef DEBUG_LEAKING_SCALARS
14167     dstr->sv_debug_optype = sstr->sv_debug_optype;
14168     dstr->sv_debug_line = sstr->sv_debug_line;
14169     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14170     dstr->sv_debug_parent = (SV*)sstr;
14171     FREE_SV_DEBUG_FILE(dstr);
14172     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14173 #endif
14174
14175     ptr_table_store(PL_ptr_table, sstr, dstr);
14176
14177     /* clone */
14178     SvFLAGS(dstr)       = SvFLAGS(sstr);
14179     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14180     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14181
14182 #ifdef DEBUGGING
14183     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14184         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14185                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14186 #endif
14187
14188     /* don't clone objects whose class has asked us not to */
14189     if (SvOBJECT(sstr)
14190      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14191     {
14192         SvFLAGS(dstr) = 0;
14193         return dstr;
14194     }
14195
14196     switch (SvTYPE(sstr)) {
14197     case SVt_NULL:
14198         SvANY(dstr)     = NULL;
14199         break;
14200     case SVt_IV:
14201         SET_SVANY_FOR_BODYLESS_IV(dstr);
14202         if(SvROK(sstr)) {
14203             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14204         } else {
14205             SvIV_set(dstr, SvIVX(sstr));
14206         }
14207         break;
14208     case SVt_NV:
14209 #if NVSIZE <= IVSIZE
14210         SET_SVANY_FOR_BODYLESS_NV(dstr);
14211 #else
14212         SvANY(dstr)     = new_XNV();
14213 #endif
14214         SvNV_set(dstr, SvNVX(sstr));
14215         break;
14216     default:
14217         {
14218             /* These are all the types that need complex bodies allocating.  */
14219             void *new_body;
14220             const svtype sv_type = SvTYPE(sstr);
14221             const struct body_details *const sv_type_details
14222                 = bodies_by_type + sv_type;
14223
14224             switch (sv_type) {
14225             default:
14226                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14227                 NOT_REACHED; /* NOTREACHED */
14228                 break;
14229
14230             case SVt_PVGV:
14231             case SVt_PVIO:
14232             case SVt_PVFM:
14233             case SVt_PVHV:
14234             case SVt_PVAV:
14235             case SVt_PVCV:
14236             case SVt_PVLV:
14237             case SVt_REGEXP:
14238             case SVt_PVMG:
14239             case SVt_PVNV:
14240             case SVt_PVIV:
14241             case SVt_INVLIST:
14242             case SVt_PV:
14243                 assert(sv_type_details->body_size);
14244                 if (sv_type_details->arena) {
14245                     new_body_inline(new_body, sv_type);
14246                     new_body
14247                         = (void*)((char*)new_body - sv_type_details->offset);
14248                 } else {
14249                     new_body = new_NOARENA(sv_type_details);
14250                 }
14251             }
14252             assert(new_body);
14253             SvANY(dstr) = new_body;
14254
14255 #ifndef PURIFY
14256             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14257                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14258                  sv_type_details->copy, char);
14259 #else
14260             Copy(((char*)SvANY(sstr)),
14261                  ((char*)SvANY(dstr)),
14262                  sv_type_details->body_size + sv_type_details->offset, char);
14263 #endif
14264
14265             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14266                 && !isGV_with_GP(dstr)
14267                 && !isREGEXP(dstr)
14268                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14269                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14270
14271             /* The Copy above means that all the source (unduplicated) pointers
14272                are now in the destination.  We can check the flags and the
14273                pointers in either, but it's possible that there's less cache
14274                missing by always going for the destination.
14275                FIXME - instrument and check that assumption  */
14276             if (sv_type >= SVt_PVMG) {
14277                 if (SvMAGIC(dstr))
14278                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14279                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14280                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14281                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14282             }
14283
14284             /* The cast silences a GCC warning about unhandled types.  */
14285             switch ((int)sv_type) {
14286             case SVt_PV:
14287                 break;
14288             case SVt_PVIV:
14289                 break;
14290             case SVt_PVNV:
14291                 break;
14292             case SVt_PVMG:
14293                 break;
14294             case SVt_REGEXP:
14295               duprex:
14296                 /* FIXME for plugins */
14297                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14298                 break;
14299             case SVt_PVLV:
14300                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14301                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14302                     LvTARG(dstr) = dstr;
14303                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14304                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14305                 else
14306                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14307                 if (isREGEXP(sstr)) goto duprex;
14308                 /* FALLTHROUGH */
14309             case SVt_PVGV:
14310                 /* non-GP case already handled above */
14311                 if(isGV_with_GP(sstr)) {
14312                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14313                     /* Don't call sv_add_backref here as it's going to be
14314                        created as part of the magic cloning of the symbol
14315                        table--unless this is during a join and the stash
14316                        is not actually being cloned.  */
14317                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14318                        at the point of this comment.  */
14319                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14320                     if (param->flags & CLONEf_JOIN_IN)
14321                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14322                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14323                     (void)GpREFCNT_inc(GvGP(dstr));
14324                 }
14325                 break;
14326             case SVt_PVIO:
14327                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14328                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14329                     /* I have no idea why fake dirp (rsfps)
14330                        should be treated differently but otherwise
14331                        we end up with leaks -- sky*/
14332                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14333                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14334                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14335                 } else {
14336                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14337                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14338                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14339                     if (IoDIRP(dstr)) {
14340                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14341                     } else {
14342                         NOOP;
14343                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14344                     }
14345                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14346                 }
14347                 if (IoOFP(dstr) == IoIFP(sstr))
14348                     IoOFP(dstr) = IoIFP(dstr);
14349                 else
14350                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14351                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14352                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14353                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14354                 break;
14355             case SVt_PVAV:
14356                 /* avoid cloning an empty array */
14357                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14358                     SV **dst_ary, **src_ary;
14359                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14360
14361                     src_ary = AvARRAY((const AV *)sstr);
14362                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14363                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14364                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14365                     AvALLOC((const AV *)dstr) = dst_ary;
14366                     if (AvREAL((const AV *)sstr)) {
14367                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14368                                                       param);
14369                     }
14370                     else {
14371                         while (items-- > 0)
14372                             *dst_ary++ = sv_dup(*src_ary++, param);
14373                     }
14374                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14375                     while (items-- > 0) {
14376                         *dst_ary++ = NULL;
14377                     }
14378                 }
14379                 else {
14380                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14381                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14382                     AvMAX(  (const AV *)dstr)   = -1;
14383                     AvFILLp((const AV *)dstr)   = -1;
14384                 }
14385                 break;
14386             case SVt_PVHV:
14387                 if (HvARRAY((const HV *)sstr)) {
14388                     STRLEN i = 0;
14389                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14390                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14391                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14392                     char *darray;
14393                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14394                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14395                         char);
14396                     HvARRAY(dstr) = (HE**)darray;
14397                     while (i <= sxhv->xhv_max) {
14398                         const HE * const source = HvARRAY(sstr)[i];
14399                         HvARRAY(dstr)[i] = source
14400                             ? he_dup(source, sharekeys, param) : 0;
14401                         ++i;
14402                     }
14403                     if (SvOOK(sstr)) {
14404                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14405                         struct xpvhv_aux * const daux = HvAUX(dstr);
14406                         /* This flag isn't copied.  */
14407                         SvOOK_on(dstr);
14408
14409                         if (saux->xhv_name_count) {
14410                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14411                             const I32 count
14412                              = saux->xhv_name_count < 0
14413                                 ? -saux->xhv_name_count
14414                                 :  saux->xhv_name_count;
14415                             HEK **shekp = sname + count;
14416                             HEK **dhekp;
14417                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14418                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14419                             while (shekp-- > sname) {
14420                                 dhekp--;
14421                                 *dhekp = hek_dup(*shekp, param);
14422                             }
14423                         }
14424                         else {
14425                             daux->xhv_name_u.xhvnameu_name
14426                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14427                                           param);
14428                         }
14429                         daux->xhv_name_count = saux->xhv_name_count;
14430
14431                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14432 #ifdef PERL_HASH_RANDOMIZE_KEYS
14433                         daux->xhv_rand = saux->xhv_rand;
14434                         daux->xhv_last_rand = saux->xhv_last_rand;
14435 #endif
14436                         daux->xhv_riter = saux->xhv_riter;
14437                         daux->xhv_eiter = saux->xhv_eiter
14438                             ? he_dup(saux->xhv_eiter,
14439                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14440                         /* backref array needs refcnt=2; see sv_add_backref */
14441                         daux->xhv_backreferences =
14442                             (param->flags & CLONEf_JOIN_IN)
14443                                 /* when joining, we let the individual GVs and
14444                                  * CVs add themselves to backref as
14445                                  * needed. This avoids pulling in stuff
14446                                  * that isn't required, and simplifies the
14447                                  * case where stashes aren't cloned back
14448                                  * if they already exist in the parent
14449                                  * thread */
14450                             ? NULL
14451                             : saux->xhv_backreferences
14452                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14453                                     ? MUTABLE_AV(SvREFCNT_inc(
14454                                           sv_dup_inc((const SV *)
14455                                             saux->xhv_backreferences, param)))
14456                                     : MUTABLE_AV(sv_dup((const SV *)
14457                                             saux->xhv_backreferences, param))
14458                                 : 0;
14459
14460                         daux->xhv_mro_meta = saux->xhv_mro_meta
14461                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14462                             : 0;
14463
14464                         /* Record stashes for possible cloning in Perl_clone(). */
14465                         if (HvNAME(sstr))
14466                             av_push(param->stashes, dstr);
14467                     }
14468                 }
14469                 else
14470                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14471                 break;
14472             case SVt_PVCV:
14473                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14474                     CvDEPTH(dstr) = 0;
14475                 }
14476                 /* FALLTHROUGH */
14477             case SVt_PVFM:
14478                 /* NOTE: not refcounted */
14479                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14480                     hv_dup(CvSTASH(dstr), param);
14481                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14482                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14483                 if (!CvISXSUB(dstr)) {
14484                     OP_REFCNT_LOCK;
14485                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14486                     OP_REFCNT_UNLOCK;
14487                     CvSLABBED_off(dstr);
14488                 } else if (CvCONST(dstr)) {
14489                     CvXSUBANY(dstr).any_ptr =
14490                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14491                 }
14492                 assert(!CvSLABBED(dstr));
14493                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14494                 if (CvNAMED(dstr))
14495                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14496                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14497                 /* don't dup if copying back - CvGV isn't refcounted, so the
14498                  * duped GV may never be freed. A bit of a hack! DAPM */
14499                 else
14500                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14501                     CvCVGV_RC(dstr)
14502                     ? gv_dup_inc(CvGV(sstr), param)
14503                     : (param->flags & CLONEf_JOIN_IN)
14504                         ? NULL
14505                         : gv_dup(CvGV(sstr), param);
14506
14507                 if (!CvISXSUB(sstr)) {
14508                     PADLIST * padlist = CvPADLIST(sstr);
14509                     if(padlist)
14510                         padlist = padlist_dup(padlist, param);
14511                     CvPADLIST_set(dstr, padlist);
14512                 } else
14513 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14514                     PoisonPADLIST(dstr);
14515
14516                 CvOUTSIDE(dstr) =
14517                     CvWEAKOUTSIDE(sstr)
14518                     ? cv_dup(    CvOUTSIDE(dstr), param)
14519                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14520                 break;
14521             }
14522         }
14523     }
14524
14525     return dstr;
14526  }
14527
14528 SV *
14529 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14530 {
14531     PERL_ARGS_ASSERT_SV_DUP_INC;
14532     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14533 }
14534
14535 SV *
14536 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14537 {
14538     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14539     PERL_ARGS_ASSERT_SV_DUP;
14540
14541     /* Track every SV that (at least initially) had a reference count of 0.
14542        We need to do this by holding an actual reference to it in this array.
14543        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14544        (akin to the stashes hash, and the perl stack), we come unstuck if
14545        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14546        thread) is manipulated in a CLONE method, because CLONE runs before the
14547        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14548        (and fix things up by giving each a reference via the temps stack).
14549        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14550        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14551        before the walk of unreferenced happens and a reference to that is SV
14552        added to the temps stack. At which point we have the same SV considered
14553        to be in use, and free to be re-used. Not good.
14554     */
14555     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14556         assert(param->unreferenced);
14557         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14558     }
14559
14560     return dstr;
14561 }
14562
14563 /* duplicate a context */
14564
14565 PERL_CONTEXT *
14566 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14567 {
14568     PERL_CONTEXT *ncxs;
14569
14570     PERL_ARGS_ASSERT_CX_DUP;
14571
14572     if (!cxs)
14573         return (PERL_CONTEXT*)NULL;
14574
14575     /* look for it in the table first */
14576     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14577     if (ncxs)
14578         return ncxs;
14579
14580     /* create anew and remember what it is */
14581     Newx(ncxs, max + 1, PERL_CONTEXT);
14582     ptr_table_store(PL_ptr_table, cxs, ncxs);
14583     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14584
14585     while (ix >= 0) {
14586         PERL_CONTEXT * const ncx = &ncxs[ix];
14587         if (CxTYPE(ncx) == CXt_SUBST) {
14588             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14589         }
14590         else {
14591             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14592             switch (CxTYPE(ncx)) {
14593             case CXt_SUB:
14594                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14595                 if(CxHASARGS(ncx)){
14596                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14597                 } else {
14598                     ncx->blk_sub.savearray = NULL;
14599                 }
14600                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14601                                            ncx->blk_sub.prevcomppad);
14602                 break;
14603             case CXt_EVAL:
14604                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14605                                                       param);
14606                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14607                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14608                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14609                 /* XXX what do do with cur_top_env ???? */
14610                 break;
14611             case CXt_LOOP_LAZYSV:
14612                 ncx->blk_loop.state_u.lazysv.end
14613                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14614                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14615                    duplication code instead.
14616                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14617                    actually being the same function, and (2) order
14618                    equivalence of the two unions.
14619                    We can assert the later [but only at run time :-(]  */
14620                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14621                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14622                 /* FALLTHROUGH */
14623             case CXt_LOOP_ARY:
14624                 ncx->blk_loop.state_u.ary.ary
14625                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14626                 /* FALLTHROUGH */
14627             case CXt_LOOP_LIST:
14628             case CXt_LOOP_LAZYIV:
14629                 /* code common to all 'for' CXt_LOOP_* types */
14630                 ncx->blk_loop.itersave =
14631                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14632                 if (CxPADLOOP(ncx)) {
14633                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14634                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14635                     ncx->blk_loop.oldcomppad =
14636                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14637                                                 ncx->blk_loop.oldcomppad);
14638                     ncx->blk_loop.itervar_u.svp =
14639                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14640                 }
14641                 else {
14642                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14643                      * alias (for \$x (...)) - relies on gv_dup being the
14644                      * same as sv_dup */
14645                     ncx->blk_loop.itervar_u.gv
14646                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14647                                     param);
14648                 }
14649                 break;
14650             case CXt_LOOP_PLAIN:
14651                 break;
14652             case CXt_FORMAT:
14653                 ncx->blk_format.prevcomppad =
14654                         (PAD*)ptr_table_fetch(PL_ptr_table,
14655                                            ncx->blk_format.prevcomppad);
14656                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14657                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14658                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14659                                                      param);
14660                 break;
14661             case CXt_GIVEN:
14662                 ncx->blk_givwhen.defsv_save =
14663                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14664                 break;
14665             case CXt_BLOCK:
14666             case CXt_NULL:
14667             case CXt_WHEN:
14668                 break;
14669             }
14670         }
14671         --ix;
14672     }
14673     return ncxs;
14674 }
14675
14676 /* duplicate a stack info structure */
14677
14678 PERL_SI *
14679 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14680 {
14681     PERL_SI *nsi;
14682
14683     PERL_ARGS_ASSERT_SI_DUP;
14684
14685     if (!si)
14686         return (PERL_SI*)NULL;
14687
14688     /* look for it in the table first */
14689     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14690     if (nsi)
14691         return nsi;
14692
14693     /* create anew and remember what it is */
14694     Newx(nsi, 1, PERL_SI);
14695     ptr_table_store(PL_ptr_table, si, nsi);
14696
14697     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14698     nsi->si_cxix        = si->si_cxix;
14699     nsi->si_cxsubix     = si->si_cxsubix;
14700     nsi->si_cxmax       = si->si_cxmax;
14701     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14702     nsi->si_type        = si->si_type;
14703     nsi->si_prev        = si_dup(si->si_prev, param);
14704     nsi->si_next        = si_dup(si->si_next, param);
14705     nsi->si_markoff     = si->si_markoff;
14706 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14707     nsi->si_stack_hwm   = 0;
14708 #endif
14709
14710     return nsi;
14711 }
14712
14713 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14714 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14715 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14716 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14717 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14718 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14719 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14720 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14721 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14722 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14723 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14724 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14725 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14726 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14727 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14728 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14729
14730 /* XXXXX todo */
14731 #define pv_dup_inc(p)   SAVEPV(p)
14732 #define pv_dup(p)       SAVEPV(p)
14733 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14734
14735 /* map any object to the new equivent - either something in the
14736  * ptr table, or something in the interpreter structure
14737  */
14738
14739 void *
14740 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14741 {
14742     void *ret;
14743
14744     PERL_ARGS_ASSERT_ANY_DUP;
14745
14746     if (!v)
14747         return (void*)NULL;
14748
14749     /* look for it in the table first */
14750     ret = ptr_table_fetch(PL_ptr_table, v);
14751     if (ret)
14752         return ret;
14753
14754     /* see if it is part of the interpreter structure */
14755     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14756         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14757     else {
14758         ret = v;
14759     }
14760
14761     return ret;
14762 }
14763
14764 /* duplicate the save stack */
14765
14766 ANY *
14767 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14768 {
14769     dVAR;
14770     ANY * const ss      = proto_perl->Isavestack;
14771     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14772     I32 ix              = proto_perl->Isavestack_ix;
14773     ANY *nss;
14774     const SV *sv;
14775     const GV *gv;
14776     const AV *av;
14777     const HV *hv;
14778     void* ptr;
14779     int intval;
14780     long longval;
14781     GP *gp;
14782     IV iv;
14783     I32 i;
14784     char *c = NULL;
14785     void (*dptr) (void*);
14786     void (*dxptr) (pTHX_ void*);
14787
14788     PERL_ARGS_ASSERT_SS_DUP;
14789
14790     Newx(nss, max, ANY);
14791
14792     while (ix > 0) {
14793         const UV uv = POPUV(ss,ix);
14794         const U8 type = (U8)uv & SAVE_MASK;
14795
14796         TOPUV(nss,ix) = uv;
14797         switch (type) {
14798         case SAVEt_CLEARSV:
14799         case SAVEt_CLEARPADRANGE:
14800             break;
14801         case SAVEt_HELEM:               /* hash element */
14802         case SAVEt_SV:                  /* scalar reference */
14803             sv = (const SV *)POPPTR(ss,ix);
14804             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14805             /* FALLTHROUGH */
14806         case SAVEt_ITEM:                        /* normal string */
14807         case SAVEt_GVSV:                        /* scalar slot in GV */
14808             sv = (const SV *)POPPTR(ss,ix);
14809             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14810             if (type == SAVEt_SV)
14811                 break;
14812             /* FALLTHROUGH */
14813         case SAVEt_FREESV:
14814         case SAVEt_MORTALIZESV:
14815         case SAVEt_READONLY_OFF:
14816             sv = (const SV *)POPPTR(ss,ix);
14817             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14818             break;
14819         case SAVEt_FREEPADNAME:
14820             ptr = POPPTR(ss,ix);
14821             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14822             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14823             break;
14824         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14825             c = (char*)POPPTR(ss,ix);
14826             TOPPTR(nss,ix) = savesharedpv(c);
14827             ptr = POPPTR(ss,ix);
14828             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14829             break;
14830         case SAVEt_GENERIC_SVREF:               /* generic sv */
14831         case SAVEt_SVREF:                       /* scalar reference */
14832             sv = (const SV *)POPPTR(ss,ix);
14833             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14834             if (type == SAVEt_SVREF)
14835                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14836             ptr = POPPTR(ss,ix);
14837             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14838             break;
14839         case SAVEt_GVSLOT:              /* any slot in GV */
14840             sv = (const SV *)POPPTR(ss,ix);
14841             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14842             ptr = POPPTR(ss,ix);
14843             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14844             sv = (const SV *)POPPTR(ss,ix);
14845             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14846             break;
14847         case SAVEt_HV:                          /* hash reference */
14848         case SAVEt_AV:                          /* array reference */
14849             sv = (const SV *) POPPTR(ss,ix);
14850             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14851             /* FALLTHROUGH */
14852         case SAVEt_COMPPAD:
14853         case SAVEt_NSTAB:
14854             sv = (const SV *) POPPTR(ss,ix);
14855             TOPPTR(nss,ix) = sv_dup(sv, param);
14856             break;
14857         case SAVEt_INT:                         /* int reference */
14858             ptr = POPPTR(ss,ix);
14859             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14860             intval = (int)POPINT(ss,ix);
14861             TOPINT(nss,ix) = intval;
14862             break;
14863         case SAVEt_LONG:                        /* long reference */
14864             ptr = POPPTR(ss,ix);
14865             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14866             longval = (long)POPLONG(ss,ix);
14867             TOPLONG(nss,ix) = longval;
14868             break;
14869         case SAVEt_I32:                         /* I32 reference */
14870             ptr = POPPTR(ss,ix);
14871             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14872             i = POPINT(ss,ix);
14873             TOPINT(nss,ix) = i;
14874             break;
14875         case SAVEt_IV:                          /* IV reference */
14876         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14877             ptr = POPPTR(ss,ix);
14878             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14879             iv = POPIV(ss,ix);
14880             TOPIV(nss,ix) = iv;
14881             break;
14882         case SAVEt_TMPSFLOOR:
14883             iv = POPIV(ss,ix);
14884             TOPIV(nss,ix) = iv;
14885             break;
14886         case SAVEt_HPTR:                        /* HV* reference */
14887         case SAVEt_APTR:                        /* AV* reference */
14888         case SAVEt_SPTR:                        /* SV* reference */
14889             ptr = POPPTR(ss,ix);
14890             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14891             sv = (const SV *)POPPTR(ss,ix);
14892             TOPPTR(nss,ix) = sv_dup(sv, param);
14893             break;
14894         case SAVEt_VPTR:                        /* random* reference */
14895             ptr = POPPTR(ss,ix);
14896             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14897             /* FALLTHROUGH */
14898         case SAVEt_INT_SMALL:
14899         case SAVEt_I32_SMALL:
14900         case SAVEt_I16:                         /* I16 reference */
14901         case SAVEt_I8:                          /* I8 reference */
14902         case SAVEt_BOOL:
14903             ptr = POPPTR(ss,ix);
14904             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14905             break;
14906         case SAVEt_GENERIC_PVREF:               /* generic char* */
14907         case SAVEt_PPTR:                        /* char* reference */
14908             ptr = POPPTR(ss,ix);
14909             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14910             c = (char*)POPPTR(ss,ix);
14911             TOPPTR(nss,ix) = pv_dup(c);
14912             break;
14913         case SAVEt_GP:                          /* scalar reference */
14914             gp = (GP*)POPPTR(ss,ix);
14915             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14916             (void)GpREFCNT_inc(gp);
14917             gv = (const GV *)POPPTR(ss,ix);
14918             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14919             break;
14920         case SAVEt_FREEOP:
14921             ptr = POPPTR(ss,ix);
14922             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14923                 /* these are assumed to be refcounted properly */
14924                 OP *o;
14925                 switch (((OP*)ptr)->op_type) {
14926                 case OP_LEAVESUB:
14927                 case OP_LEAVESUBLV:
14928                 case OP_LEAVEEVAL:
14929                 case OP_LEAVE:
14930                 case OP_SCOPE:
14931                 case OP_LEAVEWRITE:
14932                     TOPPTR(nss,ix) = ptr;
14933                     o = (OP*)ptr;
14934                     OP_REFCNT_LOCK;
14935                     (void) OpREFCNT_inc(o);
14936                     OP_REFCNT_UNLOCK;
14937                     break;
14938                 default:
14939                     TOPPTR(nss,ix) = NULL;
14940                     break;
14941                 }
14942             }
14943             else
14944                 TOPPTR(nss,ix) = NULL;
14945             break;
14946         case SAVEt_FREECOPHH:
14947             ptr = POPPTR(ss,ix);
14948             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14949             break;
14950         case SAVEt_ADELETE:
14951             av = (const AV *)POPPTR(ss,ix);
14952             TOPPTR(nss,ix) = av_dup_inc(av, param);
14953             i = POPINT(ss,ix);
14954             TOPINT(nss,ix) = i;
14955             break;
14956         case SAVEt_DELETE:
14957             hv = (const HV *)POPPTR(ss,ix);
14958             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14959             i = POPINT(ss,ix);
14960             TOPINT(nss,ix) = i;
14961             /* FALLTHROUGH */
14962         case SAVEt_FREEPV:
14963             c = (char*)POPPTR(ss,ix);
14964             TOPPTR(nss,ix) = pv_dup_inc(c);
14965             break;
14966         case SAVEt_STACK_POS:           /* Position on Perl stack */
14967             i = POPINT(ss,ix);
14968             TOPINT(nss,ix) = i;
14969             break;
14970         case SAVEt_DESTRUCTOR:
14971             ptr = POPPTR(ss,ix);
14972             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14973             dptr = POPDPTR(ss,ix);
14974             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14975                                         any_dup(FPTR2DPTR(void *, dptr),
14976                                                 proto_perl));
14977             break;
14978         case SAVEt_DESTRUCTOR_X:
14979             ptr = POPPTR(ss,ix);
14980             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14981             dxptr = POPDXPTR(ss,ix);
14982             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14983                                          any_dup(FPTR2DPTR(void *, dxptr),
14984                                                  proto_perl));
14985             break;
14986         case SAVEt_REGCONTEXT:
14987         case SAVEt_ALLOC:
14988             ix -= uv >> SAVE_TIGHT_SHIFT;
14989             break;
14990         case SAVEt_AELEM:               /* array element */
14991             sv = (const SV *)POPPTR(ss,ix);
14992             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14993             iv = POPIV(ss,ix);
14994             TOPIV(nss,ix) = iv;
14995             av = (const AV *)POPPTR(ss,ix);
14996             TOPPTR(nss,ix) = av_dup_inc(av, param);
14997             break;
14998         case SAVEt_OP:
14999             ptr = POPPTR(ss,ix);
15000             TOPPTR(nss,ix) = ptr;
15001             break;
15002         case SAVEt_HINTS:
15003             ptr = POPPTR(ss,ix);
15004             ptr = cophh_copy((COPHH*)ptr);
15005             TOPPTR(nss,ix) = ptr;
15006             i = POPINT(ss,ix);
15007             TOPINT(nss,ix) = i;
15008             if (i & HINT_LOCALIZE_HH) {
15009                 hv = (const HV *)POPPTR(ss,ix);
15010                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
15011             }
15012             break;
15013         case SAVEt_PADSV_AND_MORTALIZE:
15014             longval = (long)POPLONG(ss,ix);
15015             TOPLONG(nss,ix) = longval;
15016             ptr = POPPTR(ss,ix);
15017             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15018             sv = (const SV *)POPPTR(ss,ix);
15019             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15020             break;
15021         case SAVEt_SET_SVFLAGS:
15022             i = POPINT(ss,ix);
15023             TOPINT(nss,ix) = i;
15024             i = POPINT(ss,ix);
15025             TOPINT(nss,ix) = i;
15026             sv = (const SV *)POPPTR(ss,ix);
15027             TOPPTR(nss,ix) = sv_dup(sv, param);
15028             break;
15029         case SAVEt_COMPILE_WARNINGS:
15030             ptr = POPPTR(ss,ix);
15031             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
15032             break;
15033         case SAVEt_PARSER:
15034             ptr = POPPTR(ss,ix);
15035             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
15036             break;
15037         default:
15038             Perl_croak(aTHX_
15039                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
15040         }
15041     }
15042
15043     return nss;
15044 }
15045
15046
15047 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
15048  * flag to the result. This is done for each stash before cloning starts,
15049  * so we know which stashes want their objects cloned */
15050
15051 static void
15052 do_mark_cloneable_stash(pTHX_ SV *const sv)
15053 {
15054     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
15055     if (hvname) {
15056         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
15057         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
15058         if (cloner && GvCV(cloner)) {
15059             dSP;
15060             UV status;
15061
15062             ENTER;
15063             SAVETMPS;
15064             PUSHMARK(SP);
15065             mXPUSHs(newSVhek(hvname));
15066             PUTBACK;
15067             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15068             SPAGAIN;
15069             status = POPu;
15070             PUTBACK;
15071             FREETMPS;
15072             LEAVE;
15073             if (status)
15074                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15075         }
15076     }
15077 }
15078
15079
15080
15081 /*
15082 =for apidoc perl_clone
15083
15084 Create and return a new interpreter by cloning the current one.
15085
15086 C<perl_clone> takes these flags as parameters:
15087
15088 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15089 without it we only clone the data and zero the stacks,
15090 with it we copy the stacks and the new perl interpreter is
15091 ready to run at the exact same point as the previous one.
15092 The pseudo-fork code uses C<COPY_STACKS> while the
15093 threads->create doesn't.
15094
15095 C<CLONEf_KEEP_PTR_TABLE> -
15096 C<perl_clone> keeps a ptr_table with the pointer of the old
15097 variable as a key and the new variable as a value,
15098 this allows it to check if something has been cloned and not
15099 clone it again, but rather just use the value and increase the
15100 refcount.
15101 If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
15102 using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
15103 A reason to keep it around is if you want to dup some of your own
15104 variables which are outside the graph that perl scans.
15105
15106 C<CLONEf_CLONE_HOST> -
15107 This is a win32 thing, it is ignored on unix, it tells perl's
15108 win32host code (which is c++) to clone itself, this is needed on
15109 win32 if you want to run two threads at the same time,
15110 if you just want to do some stuff in a separate perl interpreter
15111 and then throw it away and return to the original one,
15112 you don't need to do anything.
15113
15114 =cut
15115 */
15116
15117 /* XXX the above needs expanding by someone who actually understands it ! */
15118 EXTERN_C PerlInterpreter *
15119 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15120
15121 PerlInterpreter *
15122 perl_clone(PerlInterpreter *proto_perl, UV flags)
15123 {
15124    dVAR;
15125 #ifdef PERL_IMPLICIT_SYS
15126
15127     PERL_ARGS_ASSERT_PERL_CLONE;
15128
15129    /* perlhost.h so we need to call into it
15130    to clone the host, CPerlHost should have a c interface, sky */
15131
15132 #ifndef __amigaos4__
15133    if (flags & CLONEf_CLONE_HOST) {
15134        return perl_clone_host(proto_perl,flags);
15135    }
15136 #endif
15137    return perl_clone_using(proto_perl, flags,
15138                             proto_perl->IMem,
15139                             proto_perl->IMemShared,
15140                             proto_perl->IMemParse,
15141                             proto_perl->IEnv,
15142                             proto_perl->IStdIO,
15143                             proto_perl->ILIO,
15144                             proto_perl->IDir,
15145                             proto_perl->ISock,
15146                             proto_perl->IProc);
15147 }
15148
15149 PerlInterpreter *
15150 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15151                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15152                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15153                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15154                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15155                  struct IPerlProc* ipP)
15156 {
15157     /* XXX many of the string copies here can be optimized if they're
15158      * constants; they need to be allocated as common memory and just
15159      * their pointers copied. */
15160
15161     IV i;
15162     CLONE_PARAMS clone_params;
15163     CLONE_PARAMS* const param = &clone_params;
15164
15165     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15166
15167     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15168 #else           /* !PERL_IMPLICIT_SYS */
15169     IV i;
15170     CLONE_PARAMS clone_params;
15171     CLONE_PARAMS* param = &clone_params;
15172     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15173
15174     PERL_ARGS_ASSERT_PERL_CLONE;
15175 #endif          /* PERL_IMPLICIT_SYS */
15176
15177     /* for each stash, determine whether its objects should be cloned */
15178     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15179     PERL_SET_THX(my_perl);
15180
15181 #ifdef DEBUGGING
15182     PoisonNew(my_perl, 1, PerlInterpreter);
15183     PL_op = NULL;
15184     PL_curcop = NULL;
15185     PL_defstash = NULL; /* may be used by perl malloc() */
15186     PL_markstack = 0;
15187     PL_scopestack = 0;
15188     PL_scopestack_name = 0;
15189     PL_savestack = 0;
15190     PL_savestack_ix = 0;
15191     PL_savestack_max = -1;
15192     PL_sig_pending = 0;
15193     PL_parser = NULL;
15194     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15195     Zero(&PL_padname_undef, 1, PADNAME);
15196     Zero(&PL_padname_const, 1, PADNAME);
15197 #  ifdef DEBUG_LEAKING_SCALARS
15198     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15199 #  endif
15200 #  ifdef PERL_TRACE_OPS
15201     Zero(PL_op_exec_cnt, OP_max+2, UV);
15202 #  endif
15203 #else   /* !DEBUGGING */
15204     Zero(my_perl, 1, PerlInterpreter);
15205 #endif  /* DEBUGGING */
15206
15207 #ifdef PERL_IMPLICIT_SYS
15208     /* host pointers */
15209     PL_Mem              = ipM;
15210     PL_MemShared        = ipMS;
15211     PL_MemParse         = ipMP;
15212     PL_Env              = ipE;
15213     PL_StdIO            = ipStd;
15214     PL_LIO              = ipLIO;
15215     PL_Dir              = ipD;
15216     PL_Sock             = ipS;
15217     PL_Proc             = ipP;
15218 #endif          /* PERL_IMPLICIT_SYS */
15219
15220
15221     param->flags = flags;
15222     /* Nothing in the core code uses this, but we make it available to
15223        extensions (using mg_dup).  */
15224     param->proto_perl = proto_perl;
15225     /* Likely nothing will use this, but it is initialised to be consistent
15226        with Perl_clone_params_new().  */
15227     param->new_perl = my_perl;
15228     param->unreferenced = NULL;
15229
15230
15231     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15232
15233     PL_body_arenas = NULL;
15234     Zero(&PL_body_roots, 1, PL_body_roots);
15235     
15236     PL_sv_count         = 0;
15237     PL_sv_root          = NULL;
15238     PL_sv_arenaroot     = NULL;
15239
15240     PL_debug            = proto_perl->Idebug;
15241
15242     /* dbargs array probably holds garbage */
15243     PL_dbargs           = NULL;
15244
15245     PL_compiling = proto_perl->Icompiling;
15246
15247     /* pseudo environmental stuff */
15248     PL_origargc         = proto_perl->Iorigargc;
15249     PL_origargv         = proto_perl->Iorigargv;
15250
15251 #ifndef NO_TAINT_SUPPORT
15252     /* Set tainting stuff before PerlIO_debug can possibly get called */
15253     PL_tainting         = proto_perl->Itainting;
15254     PL_taint_warn       = proto_perl->Itaint_warn;
15255 #else
15256     PL_tainting         = FALSE;
15257     PL_taint_warn       = FALSE;
15258 #endif
15259
15260     PL_minus_c          = proto_perl->Iminus_c;
15261
15262     PL_localpatches     = proto_perl->Ilocalpatches;
15263     PL_splitstr         = proto_perl->Isplitstr;
15264     PL_minus_n          = proto_perl->Iminus_n;
15265     PL_minus_p          = proto_perl->Iminus_p;
15266     PL_minus_l          = proto_perl->Iminus_l;
15267     PL_minus_a          = proto_perl->Iminus_a;
15268     PL_minus_E          = proto_perl->Iminus_E;
15269     PL_minus_F          = proto_perl->Iminus_F;
15270     PL_doswitches       = proto_perl->Idoswitches;
15271     PL_dowarn           = proto_perl->Idowarn;
15272 #ifdef PERL_SAWAMPERSAND
15273     PL_sawampersand     = proto_perl->Isawampersand;
15274 #endif
15275     PL_unsafe           = proto_perl->Iunsafe;
15276     PL_perldb           = proto_perl->Iperldb;
15277     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15278     PL_exit_flags       = proto_perl->Iexit_flags;
15279
15280     /* XXX time(&PL_basetime) when asked for? */
15281     PL_basetime         = proto_perl->Ibasetime;
15282
15283     PL_maxsysfd         = proto_perl->Imaxsysfd;
15284     PL_statusvalue      = proto_perl->Istatusvalue;
15285 #ifdef __VMS
15286     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15287 #else
15288     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15289 #endif
15290
15291     /* RE engine related */
15292     PL_regmatch_slab    = NULL;
15293     PL_reg_curpm        = NULL;
15294
15295     PL_sub_generation   = proto_perl->Isub_generation;
15296
15297     /* funky return mechanisms */
15298     PL_forkprocess      = proto_perl->Iforkprocess;
15299
15300     /* internal state */
15301     PL_main_start       = proto_perl->Imain_start;
15302     PL_eval_root        = proto_perl->Ieval_root;
15303     PL_eval_start       = proto_perl->Ieval_start;
15304
15305     PL_filemode         = proto_perl->Ifilemode;
15306     PL_lastfd           = proto_perl->Ilastfd;
15307     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15308     PL_gensym           = proto_perl->Igensym;
15309
15310     PL_laststatval      = proto_perl->Ilaststatval;
15311     PL_laststype        = proto_perl->Ilaststype;
15312     PL_mess_sv          = NULL;
15313
15314     PL_profiledata      = NULL;
15315
15316     PL_generation       = proto_perl->Igeneration;
15317
15318     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15319     PL_in_clean_all     = proto_perl->Iin_clean_all;
15320
15321     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15322     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15323     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15324     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15325     PL_nomemok          = proto_perl->Inomemok;
15326     PL_an               = proto_perl->Ian;
15327     PL_evalseq          = proto_perl->Ievalseq;
15328     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15329     PL_origalen         = proto_perl->Iorigalen;
15330
15331     PL_sighandlerp      = proto_perl->Isighandlerp;
15332     PL_sighandler1p     = proto_perl->Isighandler1p;
15333     PL_sighandler3p     = proto_perl->Isighandler3p;
15334
15335     PL_runops           = proto_perl->Irunops;
15336
15337     PL_subline          = proto_perl->Isubline;
15338
15339     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15340
15341 #ifdef FCRYPT
15342     PL_cryptseen        = proto_perl->Icryptseen;
15343 #endif
15344
15345 #ifdef USE_LOCALE_COLLATE
15346     PL_collation_ix     = proto_perl->Icollation_ix;
15347     PL_collation_standard       = proto_perl->Icollation_standard;
15348     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15349     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15350     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15351 #endif /* USE_LOCALE_COLLATE */
15352
15353 #ifdef USE_LOCALE_NUMERIC
15354     PL_numeric_standard = proto_perl->Inumeric_standard;
15355     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15356     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15357 #endif /* !USE_LOCALE_NUMERIC */
15358
15359     /* Did the locale setup indicate UTF-8? */
15360     PL_utf8locale       = proto_perl->Iutf8locale;
15361     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15362     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15363     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15364 #if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
15365     PL_lc_numeric_mutex_depth = 0;
15366 #endif
15367     /* Unicode features (see perlrun/-C) */
15368     PL_unicode          = proto_perl->Iunicode;
15369
15370     /* Pre-5.8 signals control */
15371     PL_signals          = proto_perl->Isignals;
15372
15373     /* times() ticks per second */
15374     PL_clocktick        = proto_perl->Iclocktick;
15375
15376     /* Recursion stopper for PerlIO_find_layer */
15377     PL_in_load_module   = proto_perl->Iin_load_module;
15378
15379     /* sort() routine */
15380     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15381
15382     /* Not really needed/useful since the reenrant_retint is "volatile",
15383      * but do it for consistency's sake. */
15384     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15385
15386     /* Hooks to shared SVs and locks. */
15387     PL_sharehook        = proto_perl->Isharehook;
15388     PL_lockhook         = proto_perl->Ilockhook;
15389     PL_unlockhook       = proto_perl->Iunlockhook;
15390     PL_threadhook       = proto_perl->Ithreadhook;
15391     PL_destroyhook      = proto_perl->Idestroyhook;
15392     PL_signalhook       = proto_perl->Isignalhook;
15393
15394     PL_globhook         = proto_perl->Iglobhook;
15395
15396     PL_srand_called     = proto_perl->Isrand_called;
15397     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15398
15399     if (flags & CLONEf_COPY_STACKS) {
15400         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15401         PL_tmps_ix              = proto_perl->Itmps_ix;
15402         PL_tmps_max             = proto_perl->Itmps_max;
15403         PL_tmps_floor           = proto_perl->Itmps_floor;
15404
15405         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15406          * NOTE: unlike the others! */
15407         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15408         PL_scopestack_max       = proto_perl->Iscopestack_max;
15409
15410         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15411          * NOTE: unlike the others! */
15412         PL_savestack_ix         = proto_perl->Isavestack_ix;
15413         PL_savestack_max        = proto_perl->Isavestack_max;
15414     }
15415
15416     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15417     PL_top_env          = &PL_start_env;
15418
15419     PL_op               = proto_perl->Iop;
15420
15421     PL_Sv               = NULL;
15422     PL_Xpv              = (XPV*)NULL;
15423     my_perl->Ina        = proto_perl->Ina;
15424
15425     PL_statcache        = proto_perl->Istatcache;
15426
15427 #ifndef NO_TAINT_SUPPORT
15428     PL_tainted          = proto_perl->Itainted;
15429 #else
15430     PL_tainted          = FALSE;
15431 #endif
15432     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15433
15434     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15435
15436     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15437     PL_restartop        = proto_perl->Irestartop;
15438     PL_in_eval          = proto_perl->Iin_eval;
15439     PL_delaymagic       = proto_perl->Idelaymagic;
15440     PL_phase            = proto_perl->Iphase;
15441     PL_localizing       = proto_perl->Ilocalizing;
15442
15443     PL_hv_fetch_ent_mh  = NULL;
15444     PL_modcount         = proto_perl->Imodcount;
15445     PL_lastgotoprobe    = NULL;
15446     PL_dumpindent       = proto_perl->Idumpindent;
15447
15448     PL_efloatbuf        = NULL;         /* reinits on demand */
15449     PL_efloatsize       = 0;                    /* reinits on demand */
15450
15451     /* regex stuff */
15452
15453     PL_colorset         = 0;            /* reinits PL_colors[] */
15454     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15455
15456     /* Pluggable optimizer */
15457     PL_peepp            = proto_perl->Ipeepp;
15458     PL_rpeepp           = proto_perl->Irpeepp;
15459     /* op_free() hook */
15460     PL_opfreehook       = proto_perl->Iopfreehook;
15461
15462 #ifdef USE_REENTRANT_API
15463     /* XXX: things like -Dm will segfault here in perlio, but doing
15464      *  PERL_SET_CONTEXT(proto_perl);
15465      * breaks too many other things
15466      */
15467     Perl_reentrant_init(aTHX);
15468 #endif
15469
15470     /* create SV map for pointer relocation */
15471     PL_ptr_table = ptr_table_new();
15472
15473     /* initialize these special pointers as early as possible */
15474     init_constants();
15475     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15476     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15477     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15478     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15479     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15480                     &PL_padname_const);
15481
15482     /* create (a non-shared!) shared string table */
15483     PL_strtab           = newHV();
15484     HvSHAREKEYS_off(PL_strtab);
15485     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15486     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15487
15488     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15489
15490     /* This PV will be free'd special way so must set it same way op.c does */
15491     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15492     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15493
15494     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15495     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15496     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15497     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15498
15499     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15500     /* This makes no difference to the implementation, as it always pushes
15501        and shifts pointers to other SVs without changing their reference
15502        count, with the array becoming empty before it is freed. However, it
15503        makes it conceptually clear what is going on, and will avoid some
15504        work inside av.c, filling slots between AvFILL() and AvMAX() with
15505        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15506     AvREAL_off(param->stashes);
15507
15508     if (!(flags & CLONEf_COPY_STACKS)) {
15509         param->unreferenced = newAV();
15510     }
15511
15512 #ifdef PERLIO_LAYERS
15513     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15514     PerlIO_clone(aTHX_ proto_perl, param);
15515 #endif
15516
15517     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15518     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15519     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15520     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15521     PL_xsubfilename     = proto_perl->Ixsubfilename;
15522     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15523     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15524
15525     /* switches */
15526     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15527     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15528     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15529
15530     /* magical thingies */
15531
15532     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15533     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15534     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15535
15536    
15537     /* Clone the regex array */
15538     /* ORANGE FIXME for plugins, probably in the SV dup code.
15539        newSViv(PTR2IV(CALLREGDUPE(
15540        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15541     */
15542     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15543     PL_regex_pad = AvARRAY(PL_regex_padav);
15544
15545     PL_stashpadmax      = proto_perl->Istashpadmax;
15546     PL_stashpadix       = proto_perl->Istashpadix ;
15547     Newx(PL_stashpad, PL_stashpadmax, HV *);
15548     {
15549         PADOFFSET o = 0;
15550         for (; o < PL_stashpadmax; ++o)
15551             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15552     }
15553
15554     /* shortcuts to various I/O objects */
15555     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15556     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15557     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15558     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15559     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15560     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15561     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15562
15563     /* shortcuts to regexp stuff */
15564     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15565
15566     /* shortcuts to misc objects */
15567     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15568
15569     /* shortcuts to debugging objects */
15570     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15571     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15572     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15573     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15574     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15575     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15576     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15577
15578     /* symbol tables */
15579     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15580     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15581     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15582     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15583     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15584
15585     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15586     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15587     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15588     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15589     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15590     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15591     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15592     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15593     PL_savebegin        = proto_perl->Isavebegin;
15594
15595     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15596
15597     /* subprocess state */
15598     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15599
15600     if (proto_perl->Iop_mask)
15601         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15602     else
15603         PL_op_mask      = NULL;
15604     /* PL_asserting        = proto_perl->Iasserting; */
15605
15606     /* current interpreter roots */
15607     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15608     OP_REFCNT_LOCK;
15609     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15610     OP_REFCNT_UNLOCK;
15611
15612     /* runtime control stuff */
15613     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15614
15615     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15616
15617     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15618
15619     /* interpreter atexit processing */
15620     PL_exitlistlen      = proto_perl->Iexitlistlen;
15621     if (PL_exitlistlen) {
15622         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15623         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15624     }
15625     else
15626         PL_exitlist     = (PerlExitListEntry*)NULL;
15627
15628     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15629     if (PL_my_cxt_size) {
15630         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15631         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15632     }
15633     else {
15634         PL_my_cxt_list  = (void**)NULL;
15635     }
15636     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15637     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15638     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15639     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15640
15641     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15642
15643     PAD_CLONE_VARS(proto_perl, param);
15644
15645 #ifdef HAVE_INTERP_INTERN
15646     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15647 #endif
15648
15649     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15650
15651 #ifdef PERL_USES_PL_PIDSTATUS
15652     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15653 #endif
15654     PL_osname           = SAVEPV(proto_perl->Iosname);
15655     PL_parser           = parser_dup(proto_perl->Iparser, param);
15656
15657     /* XXX this only works if the saved cop has already been cloned */
15658     if (proto_perl->Iparser) {
15659         PL_parser->saved_curcop = (COP*)any_dup(
15660                                     proto_perl->Iparser->saved_curcop,
15661                                     proto_perl);
15662     }
15663
15664     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15665
15666 #if   defined(USE_POSIX_2008_LOCALE)      \
15667  &&   defined(USE_THREAD_SAFE_LOCALE)     \
15668  && ! defined(HAS_QUERYLOCALE)
15669     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
15670         PL_curlocales[i] = savepv("."); /* An illegal value */
15671     }
15672 #endif
15673 #ifdef USE_LOCALE_CTYPE
15674     /* Should we warn if uses locale? */
15675     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15676 #endif
15677
15678 #ifdef USE_LOCALE_COLLATE
15679     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15680 #endif /* USE_LOCALE_COLLATE */
15681
15682 #ifdef USE_LOCALE_NUMERIC
15683     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15684     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15685
15686 #  if defined(HAS_POSIX_2008_LOCALE)
15687     PL_underlying_numeric_obj = NULL;
15688 #  endif
15689 #endif /* !USE_LOCALE_NUMERIC */
15690
15691     PL_langinfo_buf = NULL;
15692     PL_langinfo_bufsize = 0;
15693
15694     PL_setlocale_buf = NULL;
15695     PL_setlocale_bufsize = 0;
15696
15697     /* Unicode inversion lists */
15698
15699     PL_AboveLatin1            = sv_dup_inc(proto_perl->IAboveLatin1, param);
15700     PL_Assigned_invlist       = sv_dup_inc(proto_perl->IAssigned_invlist, param);
15701     PL_GCB_invlist            = sv_dup_inc(proto_perl->IGCB_invlist, param);
15702     PL_HasMultiCharFold       = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15703     PL_InMultiCharFold        = sv_dup_inc(proto_perl->IInMultiCharFold, param);
15704     PL_Latin1                 = sv_dup_inc(proto_perl->ILatin1, param);
15705     PL_LB_invlist             = sv_dup_inc(proto_perl->ILB_invlist, param);
15706     PL_SB_invlist             = sv_dup_inc(proto_perl->ISB_invlist, param);
15707     PL_SCX_invlist            = sv_dup_inc(proto_perl->ISCX_invlist, param);
15708     PL_UpperLatin1            = sv_dup_inc(proto_perl->IUpperLatin1, param);
15709     PL_in_some_fold           = sv_dup_inc(proto_perl->Iin_some_fold, param);
15710     PL_utf8_idcont            = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15711     PL_utf8_idstart           = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15712     PL_utf8_perl_idcont       = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15713     PL_utf8_perl_idstart      = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15714     PL_utf8_xidcont           = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15715     PL_utf8_xidstart          = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15716     PL_WB_invlist             = sv_dup_inc(proto_perl->IWB_invlist, param);
15717     for (i = 0; i < POSIX_CC_COUNT; i++) {
15718         PL_XPosix_ptrs[i]     = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15719         if (i != _CC_CASED && i != _CC_VERTSPACE) {
15720             PL_Posix_ptrs[i]  = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
15721         }
15722     }
15723     PL_Posix_ptrs[_CC_CASED]  = PL_Posix_ptrs[_CC_ALPHA];
15724     PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
15725
15726     PL_utf8_toupper           = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15727     PL_utf8_totitle           = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15728     PL_utf8_tolower           = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15729     PL_utf8_tofold            = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15730     PL_utf8_tosimplefold      = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
15731     PL_utf8_charname_begin    = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15732     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15733     PL_utf8_mark              = sv_dup_inc(proto_perl->Iutf8_mark, param);
15734     PL_InBitmap               = sv_dup_inc(proto_perl->IInBitmap, param);
15735     PL_CCC_non0_non230        = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
15736     PL_Private_Use            = sv_dup_inc(proto_perl->IPrivate_Use, param);
15737
15738 #if 0
15739     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15740 #endif
15741
15742     if (proto_perl->Ipsig_pend) {
15743         Newxz(PL_psig_pend, SIG_SIZE, int);
15744     }
15745     else {
15746         PL_psig_pend    = (int*)NULL;
15747     }
15748
15749     if (proto_perl->Ipsig_name) {
15750         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15751         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15752                             param);
15753         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15754     }
15755     else {
15756         PL_psig_ptr     = (SV**)NULL;
15757         PL_psig_name    = (SV**)NULL;
15758     }
15759
15760     if (flags & CLONEf_COPY_STACKS) {
15761         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15762         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15763                             PL_tmps_ix+1, param);
15764
15765         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15766         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15767         Newx(PL_markstack, i, I32);
15768         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15769                                                   - proto_perl->Imarkstack);
15770         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15771                                                   - proto_perl->Imarkstack);
15772         Copy(proto_perl->Imarkstack, PL_markstack,
15773              PL_markstack_ptr - PL_markstack + 1, I32);
15774
15775         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15776          * NOTE: unlike the others! */
15777         Newx(PL_scopestack, PL_scopestack_max, I32);
15778         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15779
15780 #ifdef DEBUGGING
15781         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15782         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15783 #endif
15784         /* reset stack AV to correct length before its duped via
15785          * PL_curstackinfo */
15786         AvFILLp(proto_perl->Icurstack) =
15787                             proto_perl->Istack_sp - proto_perl->Istack_base;
15788
15789         /* NOTE: si_dup() looks at PL_markstack */
15790         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15791
15792         /* PL_curstack          = PL_curstackinfo->si_stack; */
15793         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15794         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15795
15796         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15797         PL_stack_base           = AvARRAY(PL_curstack);
15798         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15799                                                    - proto_perl->Istack_base);
15800         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15801
15802         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15803         PL_savestack            = ss_dup(proto_perl, param);
15804     }
15805     else {
15806         init_stacks();
15807         ENTER;                  /* perl_destruct() wants to LEAVE; */
15808     }
15809
15810     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15811     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15812
15813     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15814     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15815     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15816     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15817     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15818     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15819
15820     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15821
15822     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15823     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15824     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15825
15826     PL_stashcache       = newHV();
15827
15828     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15829                                             proto_perl->Iwatchaddr);
15830     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15831     if (PL_debug && PL_watchaddr) {
15832         PerlIO_printf(Perl_debug_log,
15833           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15834           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15835           PTR2UV(PL_watchok));
15836     }
15837
15838     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15839     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15840
15841     /* Call the ->CLONE method, if it exists, for each of the stashes
15842        identified by sv_dup() above.
15843     */
15844     while(av_tindex(param->stashes) != -1) {
15845         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15846         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15847         if (cloner && GvCV(cloner)) {
15848             dSP;
15849             ENTER;
15850             SAVETMPS;
15851             PUSHMARK(SP);
15852             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15853             PUTBACK;
15854             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15855             FREETMPS;
15856             LEAVE;
15857         }
15858     }
15859
15860     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15861         ptr_table_free(PL_ptr_table);
15862         PL_ptr_table = NULL;
15863     }
15864
15865     if (!(flags & CLONEf_COPY_STACKS)) {
15866         unreferenced_to_tmp_stack(param->unreferenced);
15867     }
15868
15869     SvREFCNT_dec(param->stashes);
15870
15871     /* orphaned? eg threads->new inside BEGIN or use */
15872     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15873         SvREFCNT_inc_simple_void(PL_compcv);
15874         SAVEFREESV(PL_compcv);
15875     }
15876
15877     return my_perl;
15878 }
15879
15880 static void
15881 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15882 {
15883     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15884     
15885     if (AvFILLp(unreferenced) > -1) {
15886         SV **svp = AvARRAY(unreferenced);
15887         SV **const last = svp + AvFILLp(unreferenced);
15888         SSize_t count = 0;
15889
15890         do {
15891             if (SvREFCNT(*svp) == 1)
15892                 ++count;
15893         } while (++svp <= last);
15894
15895         EXTEND_MORTAL(count);
15896         svp = AvARRAY(unreferenced);
15897
15898         do {
15899             if (SvREFCNT(*svp) == 1) {
15900                 /* Our reference is the only one to this SV. This means that
15901                    in this thread, the scalar effectively has a 0 reference.
15902                    That doesn't work (cleanup never happens), so donate our
15903                    reference to it onto the save stack. */
15904                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15905             } else {
15906                 /* As an optimisation, because we are already walking the
15907                    entire array, instead of above doing either
15908                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15909                    release our reference to the scalar, so that at the end of
15910                    the array owns zero references to the scalars it happens to
15911                    point to. We are effectively converting the array from
15912                    AvREAL() on to AvREAL() off. This saves the av_clear()
15913                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15914                    walking the array a second time.  */
15915                 SvREFCNT_dec(*svp);
15916             }
15917
15918         } while (++svp <= last);
15919         AvREAL_off(unreferenced);
15920     }
15921     SvREFCNT_dec_NN(unreferenced);
15922 }
15923
15924 void
15925 Perl_clone_params_del(CLONE_PARAMS *param)
15926 {
15927     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15928        happy: */
15929     PerlInterpreter *const to = param->new_perl;
15930     dTHXa(to);
15931     PerlInterpreter *const was = PERL_GET_THX;
15932
15933     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15934
15935     if (was != to) {
15936         PERL_SET_THX(to);
15937     }
15938
15939     SvREFCNT_dec(param->stashes);
15940     if (param->unreferenced)
15941         unreferenced_to_tmp_stack(param->unreferenced);
15942
15943     Safefree(param);
15944
15945     if (was != to) {
15946         PERL_SET_THX(was);
15947     }
15948 }
15949
15950 CLONE_PARAMS *
15951 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15952 {
15953     dVAR;
15954     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15955        does a dTHX; to get the context from thread local storage.
15956        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15957        a version that passes in my_perl.  */
15958     PerlInterpreter *const was = PERL_GET_THX;
15959     CLONE_PARAMS *param;
15960
15961     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15962
15963     if (was != to) {
15964         PERL_SET_THX(to);
15965     }
15966
15967     /* Given that we've set the context, we can do this unshared.  */
15968     Newx(param, 1, CLONE_PARAMS);
15969
15970     param->flags = 0;
15971     param->proto_perl = from;
15972     param->new_perl = to;
15973     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15974     AvREAL_off(param->stashes);
15975     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15976
15977     if (was != to) {
15978         PERL_SET_THX(was);
15979     }
15980     return param;
15981 }
15982
15983 #endif /* USE_ITHREADS */
15984
15985 void
15986 Perl_init_constants(pTHX)
15987 {
15988     dVAR;
15989
15990     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15991     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15992     SvANY(&PL_sv_undef)         = NULL;
15993
15994     SvANY(&PL_sv_no)            = new_XPVNV();
15995     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15996     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15997                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15998                                   |SVp_POK|SVf_POK;
15999
16000     SvANY(&PL_sv_yes)           = new_XPVNV();
16001     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
16002     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16003                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16004                                   |SVp_POK|SVf_POK;
16005
16006     SvANY(&PL_sv_zero)          = new_XPVNV();
16007     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
16008     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16009                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16010                                   |SVp_POK|SVf_POK
16011                                   |SVs_PADTMP;
16012
16013     SvPV_set(&PL_sv_no, (char*)PL_No);
16014     SvCUR_set(&PL_sv_no, 0);
16015     SvLEN_set(&PL_sv_no, 0);
16016     SvIV_set(&PL_sv_no, 0);
16017     SvNV_set(&PL_sv_no, 0);
16018
16019     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
16020     SvCUR_set(&PL_sv_yes, 1);
16021     SvLEN_set(&PL_sv_yes, 0);
16022     SvIV_set(&PL_sv_yes, 1);
16023     SvNV_set(&PL_sv_yes, 1);
16024
16025     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
16026     SvCUR_set(&PL_sv_zero, 1);
16027     SvLEN_set(&PL_sv_zero, 0);
16028     SvIV_set(&PL_sv_zero, 0);
16029     SvNV_set(&PL_sv_zero, 0);
16030
16031     PadnamePV(&PL_padname_const) = (char *)PL_No;
16032
16033     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
16034     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
16035     assert(SvIMMORTAL_INTERP(&PL_sv_no));
16036     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
16037
16038     assert(SvIMMORTAL(&PL_sv_yes));
16039     assert(SvIMMORTAL(&PL_sv_undef));
16040     assert(SvIMMORTAL(&PL_sv_no));
16041     assert(SvIMMORTAL(&PL_sv_zero));
16042
16043     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
16044     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
16045     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
16046     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
16047
16048     assert( SvTRUE_nomg_NN(&PL_sv_yes));
16049     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
16050     assert(!SvTRUE_nomg_NN(&PL_sv_no));
16051     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
16052 }
16053
16054 /*
16055 =head1 Unicode Support
16056
16057 =for apidoc sv_recode_to_utf8
16058
16059 C<encoding> is assumed to be an C<Encode> object, on entry the PV
16060 of C<sv> is assumed to be octets in that encoding, and C<sv>
16061 will be converted into Unicode (and UTF-8).
16062
16063 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
16064 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
16065 an C<Encode::XS> Encoding object, bad things will happen.
16066 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
16067
16068 The PV of C<sv> is returned.
16069
16070 =cut */
16071
16072 char *
16073 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
16074 {
16075     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
16076
16077     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
16078         SV *uni;
16079         STRLEN len;
16080         const char *s;
16081         dSP;
16082         SV *nsv = sv;
16083         ENTER;
16084         PUSHSTACK;
16085         SAVETMPS;
16086         if (SvPADTMP(nsv)) {
16087             nsv = sv_newmortal();
16088             SvSetSV_nosteal(nsv, sv);
16089         }
16090         save_re_context();
16091         PUSHMARK(sp);
16092         EXTEND(SP, 3);
16093         PUSHs(encoding);
16094         PUSHs(nsv);
16095 /*
16096   NI-S 2002/07/09
16097   Passing sv_yes is wrong - it needs to be or'ed set of constants
16098   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16099   remove converted chars from source.
16100
16101   Both will default the value - let them.
16102
16103         XPUSHs(&PL_sv_yes);
16104 */
16105         PUTBACK;
16106         call_method("decode", G_SCALAR);
16107         SPAGAIN;
16108         uni = POPs;
16109         PUTBACK;
16110         s = SvPV_const(uni, len);
16111         if (s != SvPVX_const(sv)) {
16112             SvGROW(sv, len + 1);
16113             Move(s, SvPVX(sv), len + 1, char);
16114             SvCUR_set(sv, len);
16115         }
16116         FREETMPS;
16117         POPSTACK;
16118         LEAVE;
16119         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16120             /* clear pos and any utf8 cache */
16121             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16122             if (mg)
16123                 mg->mg_len = -1;
16124             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16125                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16126         }
16127         SvUTF8_on(sv);
16128         return SvPVX(sv);
16129     }
16130     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16131 }
16132
16133 /*
16134 =for apidoc sv_cat_decode
16135
16136 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16137 assumed to be octets in that encoding and decoding the input starts
16138 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16139 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16140 when the string C<tstr> appears in decoding output or the input ends on
16141 the PV of C<ssv>.  The value which C<offset> points will be modified
16142 to the last input position on C<ssv>.
16143
16144 Returns TRUE if the terminator was found, else returns FALSE.
16145
16146 =cut */
16147
16148 bool
16149 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16150                    SV *ssv, int *offset, char *tstr, int tlen)
16151 {
16152     bool ret = FALSE;
16153
16154     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16155
16156     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16157         SV *offsv;
16158         dSP;
16159         ENTER;
16160         SAVETMPS;
16161         save_re_context();
16162         PUSHMARK(sp);
16163         EXTEND(SP, 6);
16164         PUSHs(encoding);
16165         PUSHs(dsv);
16166         PUSHs(ssv);
16167         offsv = newSViv(*offset);
16168         mPUSHs(offsv);
16169         mPUSHp(tstr, tlen);
16170         PUTBACK;
16171         call_method("cat_decode", G_SCALAR);
16172         SPAGAIN;
16173         ret = SvTRUE(TOPs);
16174         *offset = SvIV(offsv);
16175         PUTBACK;
16176         FREETMPS;
16177         LEAVE;
16178     }
16179     else
16180         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16181     return ret;
16182
16183 }
16184
16185 /* ---------------------------------------------------------------------
16186  *
16187  * support functions for report_uninit()
16188  */
16189
16190 /* the maxiumum size of array or hash where we will scan looking
16191  * for the undefined element that triggered the warning */
16192
16193 #define FUV_MAX_SEARCH_SIZE 1000
16194
16195 /* Look for an entry in the hash whose value has the same SV as val;
16196  * If so, return a mortal copy of the key. */
16197
16198 STATIC SV*
16199 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16200 {
16201     dVAR;
16202     HE **array;
16203     I32 i;
16204
16205     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16206
16207     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16208                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16209         return NULL;
16210
16211     array = HvARRAY(hv);
16212
16213     for (i=HvMAX(hv); i>=0; i--) {
16214         HE *entry;
16215         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16216             if (HeVAL(entry) != val)
16217                 continue;
16218             if (    HeVAL(entry) == &PL_sv_undef ||
16219                     HeVAL(entry) == &PL_sv_placeholder)
16220                 continue;
16221             if (!HeKEY(entry))
16222                 return NULL;
16223             if (HeKLEN(entry) == HEf_SVKEY)
16224                 return sv_mortalcopy(HeKEY_sv(entry));
16225             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16226         }
16227     }
16228     return NULL;
16229 }
16230
16231 /* Look for an entry in the array whose value has the same SV as val;
16232  * If so, return the index, otherwise return -1. */
16233
16234 STATIC SSize_t
16235 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16236 {
16237     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16238
16239     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16240                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16241         return -1;
16242
16243     if (val != &PL_sv_undef) {
16244         SV ** const svp = AvARRAY(av);
16245         SSize_t i;
16246
16247         for (i=AvFILLp(av); i>=0; i--)
16248             if (svp[i] == val)
16249                 return i;
16250     }
16251     return -1;
16252 }
16253
16254 /* varname(): return the name of a variable, optionally with a subscript.
16255  * If gv is non-zero, use the name of that global, along with gvtype (one
16256  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16257  * targ.  Depending on the value of the subscript_type flag, return:
16258  */
16259
16260 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16261 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16262 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16263 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16264
16265 SV*
16266 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16267         const SV *const keyname, SSize_t aindex, int subscript_type)
16268 {
16269
16270     SV * const name = sv_newmortal();
16271     if (gv && isGV(gv)) {
16272         char buffer[2];
16273         buffer[0] = gvtype;
16274         buffer[1] = 0;
16275
16276         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16277
16278         gv_fullname4(name, gv, buffer, 0);
16279
16280         if ((unsigned int)SvPVX(name)[1] <= 26) {
16281             buffer[0] = '^';
16282             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16283
16284             /* Swap the 1 unprintable control character for the 2 byte pretty
16285                version - ie substr($name, 1, 1) = $buffer; */
16286             sv_insert(name, 1, 1, buffer, 2);
16287         }
16288     }
16289     else {
16290         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16291         PADNAME *sv;
16292
16293         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16294
16295         if (!cv || !CvPADLIST(cv))
16296             return NULL;
16297         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16298         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16299         SvUTF8_on(name);
16300     }
16301
16302     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16303         SV * const sv = newSV(0);
16304         STRLEN len;
16305         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16306
16307         *SvPVX(name) = '$';
16308         Perl_sv_catpvf(aTHX_ name, "{%s}",
16309             pv_pretty(sv, pv, len, 32, NULL, NULL,
16310                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16311         SvREFCNT_dec_NN(sv);
16312     }
16313     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16314         *SvPVX(name) = '$';
16315         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16316     }
16317     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16318         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16319         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16320     }
16321
16322     return name;
16323 }
16324
16325
16326 /*
16327 =for apidoc find_uninit_var
16328
16329 Find the name of the undefined variable (if any) that caused the operator
16330 to issue a "Use of uninitialized value" warning.
16331 If match is true, only return a name if its value matches C<uninit_sv>.
16332 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16333 warning, then following the direct child of the op may yield an
16334 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16335 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16336 the variable name if we get an exact match.
16337 C<desc_p> points to a string pointer holding the description of the op.
16338 This may be updated if needed.
16339
16340 The name is returned as a mortal SV.
16341
16342 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16343 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16344
16345 =cut
16346 */
16347
16348 STATIC SV *
16349 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16350                   bool match, const char **desc_p)
16351 {
16352     dVAR;
16353     SV *sv;
16354     const GV *gv;
16355     const OP *o, *o2, *kid;
16356
16357     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16358
16359     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16360                             uninit_sv == &PL_sv_placeholder)))
16361         return NULL;
16362
16363     switch (obase->op_type) {
16364
16365     case OP_UNDEF:
16366         /* undef should care if its args are undef - any warnings
16367          * will be from tied/magic vars */
16368         break;
16369
16370     case OP_RV2AV:
16371     case OP_RV2HV:
16372     case OP_PADAV:
16373     case OP_PADHV:
16374       {
16375         const bool pad  = (    obase->op_type == OP_PADAV
16376                             || obase->op_type == OP_PADHV
16377                             || obase->op_type == OP_PADRANGE
16378                           );
16379
16380         const bool hash = (    obase->op_type == OP_PADHV
16381                             || obase->op_type == OP_RV2HV
16382                             || (obase->op_type == OP_PADRANGE
16383                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16384                           );
16385         SSize_t index = 0;
16386         SV *keysv = NULL;
16387         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16388
16389         if (pad) { /* @lex, %lex */
16390             sv = PAD_SVl(obase->op_targ);
16391             gv = NULL;
16392         }
16393         else {
16394             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16395             /* @global, %global */
16396                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16397                 if (!gv)
16398                     break;
16399                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16400             }
16401             else if (obase == PL_op) /* @{expr}, %{expr} */
16402                 return find_uninit_var(cUNOPx(obase)->op_first,
16403                                                 uninit_sv, match, desc_p);
16404             else /* @{expr}, %{expr} as a sub-expression */
16405                 return NULL;
16406         }
16407
16408         /* attempt to find a match within the aggregate */
16409         if (hash) {
16410             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16411             if (keysv)
16412                 subscript_type = FUV_SUBSCRIPT_HASH;
16413         }
16414         else {
16415             index = find_array_subscript((const AV *)sv, uninit_sv);
16416             if (index >= 0)
16417                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16418         }
16419
16420         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16421             break;
16422
16423         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16424                                     keysv, index, subscript_type);
16425       }
16426
16427     case OP_RV2SV:
16428         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16429             /* $global */
16430             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16431             if (!gv || !GvSTASH(gv))
16432                 break;
16433             if (match && (GvSV(gv) != uninit_sv))
16434                 break;
16435             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16436         }
16437         /* ${expr} */
16438         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16439
16440     case OP_PADSV:
16441         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16442             break;
16443         return varname(NULL, '$', obase->op_targ,
16444                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16445
16446     case OP_GVSV:
16447         gv = cGVOPx_gv(obase);
16448         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16449             break;
16450         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16451
16452     case OP_AELEMFAST_LEX:
16453         if (match) {
16454             SV **svp;
16455             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16456             if (!av || SvRMAGICAL(av))
16457                 break;
16458             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16459             if (!svp || *svp != uninit_sv)
16460                 break;
16461         }
16462         return varname(NULL, '$', obase->op_targ,
16463                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16464     case OP_AELEMFAST:
16465         {
16466             gv = cGVOPx_gv(obase);
16467             if (!gv)
16468                 break;
16469             if (match) {
16470                 SV **svp;
16471                 AV *const av = GvAV(gv);
16472                 if (!av || SvRMAGICAL(av))
16473                     break;
16474                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16475                 if (!svp || *svp != uninit_sv)
16476                     break;
16477             }
16478             return varname(gv, '$', 0,
16479                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16480         }
16481         NOT_REACHED; /* NOTREACHED */
16482
16483     case OP_EXISTS:
16484         o = cUNOPx(obase)->op_first;
16485         if (!o || o->op_type != OP_NULL ||
16486                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16487             break;
16488         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16489
16490     case OP_AELEM:
16491     case OP_HELEM:
16492     {
16493         bool negate = FALSE;
16494
16495         if (PL_op == obase)
16496             /* $a[uninit_expr] or $h{uninit_expr} */
16497             return find_uninit_var(cBINOPx(obase)->op_last,
16498                                                 uninit_sv, match, desc_p);
16499
16500         gv = NULL;
16501         o = cBINOPx(obase)->op_first;
16502         kid = cBINOPx(obase)->op_last;
16503
16504         /* get the av or hv, and optionally the gv */
16505         sv = NULL;
16506         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16507             sv = PAD_SV(o->op_targ);
16508         }
16509         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16510                 && cUNOPo->op_first->op_type == OP_GV)
16511         {
16512             gv = cGVOPx_gv(cUNOPo->op_first);
16513             if (!gv)
16514                 break;
16515             sv = o->op_type
16516                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16517         }
16518         if (!sv)
16519             break;
16520
16521         if (kid && kid->op_type == OP_NEGATE) {
16522             negate = TRUE;
16523             kid = cUNOPx(kid)->op_first;
16524         }
16525
16526         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16527             /* index is constant */
16528             SV* kidsv;
16529             if (negate) {
16530                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16531                 sv_catsv(kidsv, cSVOPx_sv(kid));
16532             }
16533             else
16534                 kidsv = cSVOPx_sv(kid);
16535             if (match) {
16536                 if (SvMAGICAL(sv))
16537                     break;
16538                 if (obase->op_type == OP_HELEM) {
16539                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16540                     if (!he || HeVAL(he) != uninit_sv)
16541                         break;
16542                 }
16543                 else {
16544                     SV * const  opsv = cSVOPx_sv(kid);
16545                     const IV  opsviv = SvIV(opsv);
16546                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16547                         negate ? - opsviv : opsviv,
16548                         FALSE);
16549                     if (!svp || *svp != uninit_sv)
16550                         break;
16551                 }
16552             }
16553             if (obase->op_type == OP_HELEM)
16554                 return varname(gv, '%', o->op_targ,
16555                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16556             else
16557                 return varname(gv, '@', o->op_targ, NULL,
16558                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16559                     FUV_SUBSCRIPT_ARRAY);
16560         }
16561         else  {
16562             /* index is an expression;
16563              * attempt to find a match within the aggregate */
16564             if (obase->op_type == OP_HELEM) {
16565                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16566                 if (keysv)
16567                     return varname(gv, '%', o->op_targ,
16568                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16569             }
16570             else {
16571                 const SSize_t index
16572                     = find_array_subscript((const AV *)sv, uninit_sv);
16573                 if (index >= 0)
16574                     return varname(gv, '@', o->op_targ,
16575                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16576             }
16577             if (match)
16578                 break;
16579             return varname(gv,
16580                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16581                 ? '@' : '%'),
16582                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16583         }
16584         NOT_REACHED; /* NOTREACHED */
16585     }
16586
16587     case OP_MULTIDEREF: {
16588         /* If we were executing OP_MULTIDEREF when the undef warning
16589          * triggered, then it must be one of the index values within
16590          * that triggered it. If not, then the only possibility is that
16591          * the value retrieved by the last aggregate index might be the
16592          * culprit. For the former, we set PL_multideref_pc each time before
16593          * using an index, so work though the item list until we reach
16594          * that point. For the latter, just work through the entire item
16595          * list; the last aggregate retrieved will be the candidate.
16596          * There is a third rare possibility: something triggered
16597          * magic while fetching an array/hash element. Just display
16598          * nothing in this case.
16599          */
16600
16601         /* the named aggregate, if any */
16602         PADOFFSET agg_targ = 0;
16603         GV       *agg_gv   = NULL;
16604         /* the last-seen index */
16605         UV        index_type;
16606         PADOFFSET index_targ;
16607         GV       *index_gv;
16608         IV        index_const_iv = 0; /* init for spurious compiler warn */
16609         SV       *index_const_sv;
16610         int       depth = 0;  /* how many array/hash lookups we've done */
16611
16612         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16613         UNOP_AUX_item *last = NULL;
16614         UV actions = items->uv;
16615         bool is_hv;
16616
16617         if (PL_op == obase) {
16618             last = PL_multideref_pc;
16619             assert(last >= items && last <= items + items[-1].uv);
16620         }
16621
16622         assert(actions);
16623
16624         while (1) {
16625             is_hv = FALSE;
16626             switch (actions & MDEREF_ACTION_MASK) {
16627
16628             case MDEREF_reload:
16629                 actions = (++items)->uv;
16630                 continue;
16631
16632             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16633                 is_hv = TRUE;
16634                 /* FALLTHROUGH */
16635             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16636                 agg_targ = (++items)->pad_offset;
16637                 agg_gv = NULL;
16638                 break;
16639
16640             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16641                 is_hv = TRUE;
16642                 /* FALLTHROUGH */
16643             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16644                 agg_targ = 0;
16645                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16646                 assert(isGV_with_GP(agg_gv));
16647                 break;
16648
16649             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16650             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16651                 ++items;
16652                 /* FALLTHROUGH */
16653             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16654             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16655                 agg_targ = 0;
16656                 agg_gv   = NULL;
16657                 is_hv    = TRUE;
16658                 break;
16659
16660             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16661             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16662                 ++items;
16663                 /* FALLTHROUGH */
16664             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16665             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16666                 agg_targ = 0;
16667                 agg_gv   = NULL;
16668             } /* switch */
16669
16670             index_targ     = 0;
16671             index_gv       = NULL;
16672             index_const_sv = NULL;
16673
16674             index_type = (actions & MDEREF_INDEX_MASK);
16675             switch (index_type) {
16676             case MDEREF_INDEX_none:
16677                 break;
16678             case MDEREF_INDEX_const:
16679                 if (is_hv)
16680                     index_const_sv = UNOP_AUX_item_sv(++items)
16681                 else
16682                     index_const_iv = (++items)->iv;
16683                 break;
16684             case MDEREF_INDEX_padsv:
16685                 index_targ = (++items)->pad_offset;
16686                 break;
16687             case MDEREF_INDEX_gvsv:
16688                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16689                 assert(isGV_with_GP(index_gv));
16690                 break;
16691             }
16692
16693             if (index_type != MDEREF_INDEX_none)
16694                 depth++;
16695
16696             if (   index_type == MDEREF_INDEX_none
16697                 || (actions & MDEREF_FLAG_last)
16698                 || (last && items >= last)
16699             )
16700                 break;
16701
16702             actions >>= MDEREF_SHIFT;
16703         } /* while */
16704
16705         if (PL_op == obase) {
16706             /* most likely index was undef */
16707
16708             *desc_p = (    (actions & MDEREF_FLAG_last)
16709                         && (obase->op_private
16710                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16711                         ?
16712                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16713                                 ? "exists"
16714                                 : "delete"
16715                         : is_hv ? "hash element" : "array element";
16716             assert(index_type != MDEREF_INDEX_none);
16717             if (index_gv) {
16718                 if (GvSV(index_gv) == uninit_sv)
16719                     return varname(index_gv, '$', 0, NULL, 0,
16720                                                     FUV_SUBSCRIPT_NONE);
16721                 else
16722                     return NULL;
16723             }
16724             if (index_targ) {
16725                 if (PL_curpad[index_targ] == uninit_sv)
16726                     return varname(NULL, '$', index_targ,
16727                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16728                 else
16729                     return NULL;
16730             }
16731             /* If we got to this point it was undef on a const subscript,
16732              * so magic probably involved, e.g. $ISA[0]. Give up. */
16733             return NULL;
16734         }
16735
16736         /* the SV returned by pp_multideref() was undef, if anything was */
16737
16738         if (depth != 1)
16739             break;
16740
16741         if (agg_targ)
16742             sv = PAD_SV(agg_targ);
16743         else if (agg_gv) {
16744             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16745             if (!sv)
16746                 break;
16747             }
16748         else
16749             break;
16750
16751         if (index_type == MDEREF_INDEX_const) {
16752             if (match) {
16753                 if (SvMAGICAL(sv))
16754                     break;
16755                 if (is_hv) {
16756                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16757                     if (!he || HeVAL(he) != uninit_sv)
16758                         break;
16759                 }
16760                 else {
16761                     SV * const * const svp =
16762                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16763                     if (!svp || *svp != uninit_sv)
16764                         break;
16765                 }
16766             }
16767             return is_hv
16768                 ? varname(agg_gv, '%', agg_targ,
16769                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16770                 : varname(agg_gv, '@', agg_targ,
16771                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16772         }
16773         else  {
16774             /* index is an var */
16775             if (is_hv) {
16776                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16777                 if (keysv)
16778                     return varname(agg_gv, '%', agg_targ,
16779                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16780             }
16781             else {
16782                 const SSize_t index
16783                     = find_array_subscript((const AV *)sv, uninit_sv);
16784                 if (index >= 0)
16785                     return varname(agg_gv, '@', agg_targ,
16786                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16787             }
16788             if (match)
16789                 break;
16790             return varname(agg_gv,
16791                 is_hv ? '%' : '@',
16792                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16793         }
16794         NOT_REACHED; /* NOTREACHED */
16795     }
16796
16797     case OP_AASSIGN:
16798         /* only examine RHS */
16799         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16800                                                                 match, desc_p);
16801
16802     case OP_OPEN:
16803         o = cUNOPx(obase)->op_first;
16804         if (   o->op_type == OP_PUSHMARK
16805            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16806         )
16807             o = OpSIBLING(o);
16808
16809         if (!OpHAS_SIBLING(o)) {
16810             /* one-arg version of open is highly magical */
16811
16812             if (o->op_type == OP_GV) { /* open FOO; */
16813                 gv = cGVOPx_gv(o);
16814                 if (match && GvSV(gv) != uninit_sv)
16815                     break;
16816                 return varname(gv, '$', 0,
16817                             NULL, 0, FUV_SUBSCRIPT_NONE);
16818             }
16819             /* other possibilities not handled are:
16820              * open $x; or open my $x;  should return '${*$x}'
16821              * open expr;               should return '$'.expr ideally
16822              */
16823              break;
16824         }
16825         match = 1;
16826         goto do_op;
16827
16828     /* ops where $_ may be an implicit arg */
16829     case OP_TRANS:
16830     case OP_TRANSR:
16831     case OP_SUBST:
16832     case OP_MATCH:
16833         if ( !(obase->op_flags & OPf_STACKED)) {
16834             if (uninit_sv == DEFSV)
16835                 return newSVpvs_flags("$_", SVs_TEMP);
16836             else if (obase->op_targ
16837                   && uninit_sv == PAD_SVl(obase->op_targ))
16838                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16839                                FUV_SUBSCRIPT_NONE);
16840         }
16841         goto do_op;
16842
16843     case OP_PRTF:
16844     case OP_PRINT:
16845     case OP_SAY:
16846         match = 1; /* print etc can return undef on defined args */
16847         /* skip filehandle as it can't produce 'undef' warning  */
16848         o = cUNOPx(obase)->op_first;
16849         if ((obase->op_flags & OPf_STACKED)
16850             &&
16851                (   o->op_type == OP_PUSHMARK
16852                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16853             o = OpSIBLING(OpSIBLING(o));
16854         goto do_op2;
16855
16856
16857     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16858     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16859
16860         /* the following ops are capable of returning PL_sv_undef even for
16861          * defined arg(s) */
16862
16863     case OP_BACKTICK:
16864     case OP_PIPE_OP:
16865     case OP_FILENO:
16866     case OP_BINMODE:
16867     case OP_TIED:
16868     case OP_GETC:
16869     case OP_SYSREAD:
16870     case OP_SEND:
16871     case OP_IOCTL:
16872     case OP_SOCKET:
16873     case OP_SOCKPAIR:
16874     case OP_BIND:
16875     case OP_CONNECT:
16876     case OP_LISTEN:
16877     case OP_ACCEPT:
16878     case OP_SHUTDOWN:
16879     case OP_SSOCKOPT:
16880     case OP_GETPEERNAME:
16881     case OP_FTRREAD:
16882     case OP_FTRWRITE:
16883     case OP_FTREXEC:
16884     case OP_FTROWNED:
16885     case OP_FTEREAD:
16886     case OP_FTEWRITE:
16887     case OP_FTEEXEC:
16888     case OP_FTEOWNED:
16889     case OP_FTIS:
16890     case OP_FTZERO:
16891     case OP_FTSIZE:
16892     case OP_FTFILE:
16893     case OP_FTDIR:
16894     case OP_FTLINK:
16895     case OP_FTPIPE:
16896     case OP_FTSOCK:
16897     case OP_FTBLK:
16898     case OP_FTCHR:
16899     case OP_FTTTY:
16900     case OP_FTSUID:
16901     case OP_FTSGID:
16902     case OP_FTSVTX:
16903     case OP_FTTEXT:
16904     case OP_FTBINARY:
16905     case OP_FTMTIME:
16906     case OP_FTATIME:
16907     case OP_FTCTIME:
16908     case OP_READLINK:
16909     case OP_OPEN_DIR:
16910     case OP_READDIR:
16911     case OP_TELLDIR:
16912     case OP_SEEKDIR:
16913     case OP_REWINDDIR:
16914     case OP_CLOSEDIR:
16915     case OP_GMTIME:
16916     case OP_ALARM:
16917     case OP_SEMGET:
16918     case OP_GETLOGIN:
16919     case OP_SUBSTR:
16920     case OP_AEACH:
16921     case OP_EACH:
16922     case OP_SORT:
16923     case OP_CALLER:
16924     case OP_DOFILE:
16925     case OP_PROTOTYPE:
16926     case OP_NCMP:
16927     case OP_SMARTMATCH:
16928     case OP_UNPACK:
16929     case OP_SYSOPEN:
16930     case OP_SYSSEEK:
16931         match = 1;
16932         goto do_op;
16933
16934     case OP_ENTERSUB:
16935     case OP_GOTO:
16936         /* XXX tmp hack: these two may call an XS sub, and currently
16937           XS subs don't have a SUB entry on the context stack, so CV and
16938           pad determination goes wrong, and BAD things happen. So, just
16939           don't try to determine the value under those circumstances.
16940           Need a better fix at dome point. DAPM 11/2007 */
16941         break;
16942
16943     case OP_FLIP:
16944     case OP_FLOP:
16945     {
16946         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16947         if (gv && GvSV(gv) == uninit_sv)
16948             return newSVpvs_flags("$.", SVs_TEMP);
16949         goto do_op;
16950     }
16951
16952     case OP_POS:
16953         /* def-ness of rval pos() is independent of the def-ness of its arg */
16954         if ( !(obase->op_flags & OPf_MOD))
16955             break;
16956         /* FALLTHROUGH */
16957
16958     case OP_SCHOMP:
16959     case OP_CHOMP:
16960         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16961             return newSVpvs_flags("${$/}", SVs_TEMP);
16962         /* FALLTHROUGH */
16963
16964     default:
16965     do_op:
16966         if (!(obase->op_flags & OPf_KIDS))
16967             break;
16968         o = cUNOPx(obase)->op_first;
16969         
16970     do_op2:
16971         if (!o)
16972             break;
16973
16974         /* This loop checks all the kid ops, skipping any that cannot pos-
16975          * sibly be responsible for the uninitialized value; i.e., defined
16976          * constants and ops that return nothing.  If there is only one op
16977          * left that is not skipped, then we *know* it is responsible for
16978          * the uninitialized value.  If there is more than one op left, we
16979          * have to look for an exact match in the while() loop below.
16980          * Note that we skip padrange, because the individual pad ops that
16981          * it replaced are still in the tree, so we work on them instead.
16982          */
16983         o2 = NULL;
16984         for (kid=o; kid; kid = OpSIBLING(kid)) {
16985             const OPCODE type = kid->op_type;
16986             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16987               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16988               || (type == OP_PUSHMARK)
16989               || (type == OP_PADRANGE)
16990             )
16991             continue;
16992
16993             if (o2) { /* more than one found */
16994                 o2 = NULL;
16995                 break;
16996             }
16997             o2 = kid;
16998         }
16999         if (o2)
17000             return find_uninit_var(o2, uninit_sv, match, desc_p);
17001
17002         /* scan all args */
17003         while (o) {
17004             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
17005             if (sv)
17006                 return sv;
17007             o = OpSIBLING(o);
17008         }
17009         break;
17010     }
17011     return NULL;
17012 }
17013
17014
17015 /*
17016 =for apidoc report_uninit
17017
17018 Print appropriate "Use of uninitialized variable" warning.
17019
17020 =cut
17021 */
17022
17023 void
17024 Perl_report_uninit(pTHX_ const SV *uninit_sv)
17025 {
17026     const char *desc = NULL;
17027     SV* varname = NULL;
17028
17029     if (PL_op) {
17030         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
17031                 ? "join or string"
17032                 : PL_op->op_type == OP_MULTICONCAT
17033                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
17034                 ? "sprintf"
17035                 : OP_DESC(PL_op);
17036         if (uninit_sv && PL_curpad) {
17037             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
17038             if (varname)
17039                 sv_insert(varname, 0, 0, " ", 1);
17040         }
17041     }
17042     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
17043         /* we've reached the end of a sort block or sub,
17044          * and the uninit value is probably what that code returned */
17045         desc = "sort";
17046
17047     /* PL_warn_uninit_sv is constant */
17048     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
17049     if (desc)
17050         /* diag_listed_as: Use of uninitialized value%s */
17051         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
17052                 SVfARG(varname ? varname : &PL_sv_no),
17053                 " in ", desc);
17054     else
17055         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
17056                 "", "", "");
17057     GCC_DIAG_RESTORE_STMT;
17058 }
17059
17060 /*
17061  * ex: set ts=8 sts=4 sw=4 et:
17062  */