This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regexec.c: Macro needs param to be dereferenced
[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 /* ============================================================================
129
130 =head1 Allocation and deallocation of SVs.
131 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
132 sv, av, hv...) contains type and reference count information, and for
133 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
134 contains fields specific to each type.  Some types store all they need
135 in the head, so don't have a body.
136
137 In all but the most memory-paranoid configurations (ex: PURIFY), heads
138 and bodies are allocated out of arenas, which by default are
139 approximately 4K chunks of memory parcelled up into N heads or bodies.
140 Sv-bodies are allocated by their sv-type, guaranteeing size
141 consistency needed to allocate safely from arrays.
142
143 For SV-heads, the first slot in each arena is reserved, and holds a
144 link to the next arena, some flags, and a note of the number of slots.
145 Snaked through each arena chain is a linked list of free items; when
146 this becomes empty, an extra arena is allocated and divided up into N
147 items which are threaded into the free list.
148
149 SV-bodies are similar, but they use arena-sets by default, which
150 separate the link and info from the arena itself, and reclaim the 1st
151 slot in the arena.  SV-bodies are further described later.
152
153 The following global variables are associated with arenas:
154
155  PL_sv_arenaroot     pointer to list of SV arenas
156  PL_sv_root          pointer to list of free SV structures
157
158  PL_body_arenas      head of linked-list of body arenas
159  PL_body_roots[]     array of pointers to list of free bodies of svtype
160                      arrays are indexed by the svtype needed
161
162 A few special SV heads are not allocated from an arena, but are
163 instead directly created in the interpreter structure, eg PL_sv_undef.
164 The size of arenas can be changed from the default by setting
165 PERL_ARENA_SIZE appropriately at compile time.
166
167 The SV arena serves the secondary purpose of allowing still-live SVs
168 to be located and destroyed during final cleanup.
169
170 At the lowest level, the macros new_SV() and del_SV() grab and free
171 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
172 to return the SV to the free list with error checking.) new_SV() calls
173 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
174 SVs in the free list have their SvTYPE field set to all ones.
175
176 At the time of very final cleanup, sv_free_arenas() is called from
177 perl_destruct() to physically free all the arenas allocated since the
178 start of the interpreter.
179
180 The function visit() scans the SV arenas list, and calls a specified
181 function for each SV it finds which is still live - ie which has an SvTYPE
182 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
183 following functions (specified as [function that calls visit()] / [function
184 called by visit() for each SV]):
185
186     sv_report_used() / do_report_used()
187                         dump all remaining SVs (debugging aid)
188
189     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
190                       do_clean_named_io_objs(),do_curse()
191                         Attempt to free all objects pointed to by RVs,
192                         try to do the same for all objects indir-
193                         ectly referenced by typeglobs too, and
194                         then do a final sweep, cursing any
195                         objects that remain.  Called once from
196                         perl_destruct(), prior to calling sv_clean_all()
197                         below.
198
199     sv_clean_all() / do_clean_all()
200                         SvREFCNT_dec(sv) each remaining SV, possibly
201                         triggering an sv_free(). It also sets the
202                         SVf_BREAK flag on the SV to indicate that the
203                         refcnt has been artificially lowered, and thus
204                         stopping sv_free() from giving spurious warnings
205                         about SVs which unexpectedly have a refcnt
206                         of zero.  called repeatedly from perl_destruct()
207                         until there are no SVs left.
208
209 =head2 Arena allocator API Summary
210
211 Private API to rest of sv.c
212
213     new_SV(),  del_SV(),
214
215     new_XPVNV(), del_XPVGV(),
216     etc
217
218 Public API:
219
220     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
221
222 =cut
223
224  * ========================================================================= */
225
226 /*
227  * "A time to plant, and a time to uproot what was planted..."
228  */
229
230 #ifdef PERL_MEM_LOG
231 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
232             Perl_mem_log_new_sv(sv, file, line, func)
233 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
234             Perl_mem_log_del_sv(sv, file, line, func)
235 #else
236 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
237 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
238 #endif
239
240 #ifdef DEBUG_LEAKING_SCALARS
241 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
242         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
243     } STMT_END
244 #  define DEBUG_SV_SERIAL(sv)                                               \
245     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
246             PTR2UV(sv), (long)(sv)->sv_debug_serial))
247 #else
248 #  define FREE_SV_DEBUG_FILE(sv)
249 #  define DEBUG_SV_SERIAL(sv)   NOOP
250 #endif
251
252 #ifdef PERL_POISON
253 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
254 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
255 /* Whilst I'd love to do this, it seems that things like to check on
256    unreferenced scalars
257 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
258 */
259 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
260                                 PoisonNew(&SvREFCNT(sv), 1, U32)
261 #else
262 #  define SvARENA_CHAIN(sv)     SvANY(sv)
263 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
264 #  define POISON_SV_HEAD(sv)
265 #endif
266
267 /* Mark an SV head as unused, and add to free list.
268  *
269  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
270  * its refcount artificially decremented during global destruction, so
271  * there may be dangling pointers to it. The last thing we want in that
272  * case is for it to be reused. */
273
274 #define plant_SV(p) \
275     STMT_START {                                        \
276         const U32 old_flags = SvFLAGS(p);                       \
277         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
278         DEBUG_SV_SERIAL(p);                             \
279         FREE_SV_DEBUG_FILE(p);                          \
280         POISON_SV_HEAD(p);                              \
281         SvFLAGS(p) = SVTYPEMASK;                        \
282         if (!(old_flags & SVf_BREAK)) {         \
283             SvARENA_CHAIN_SET(p, PL_sv_root);   \
284             PL_sv_root = (p);                           \
285         }                                               \
286         --PL_sv_count;                                  \
287     } STMT_END
288
289 #define uproot_SV(p) \
290     STMT_START {                                        \
291         (p) = PL_sv_root;                               \
292         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
293         ++PL_sv_count;                                  \
294     } STMT_END
295
296
297 /* make some more SVs by adding another arena */
298
299 STATIC SV*
300 S_more_sv(pTHX)
301 {
302     SV* sv;
303     char *chunk;                /* must use New here to match call to */
304     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
305     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
306     uproot_SV(sv);
307     return sv;
308 }
309
310 /* new_SV(): return a new, empty SV head */
311
312 #ifdef DEBUG_LEAKING_SCALARS
313 /* provide a real function for a debugger to play with */
314 STATIC SV*
315 S_new_SV(pTHX_ const char *file, int line, const char *func)
316 {
317     SV* sv;
318
319     if (PL_sv_root)
320         uproot_SV(sv);
321     else
322         sv = S_more_sv(aTHX);
323     SvANY(sv) = 0;
324     SvREFCNT(sv) = 1;
325     SvFLAGS(sv) = 0;
326     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
327     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
328                 ? PL_parser->copline
329                 :  PL_curcop
330                     ? CopLINE(PL_curcop)
331                     : 0
332             );
333     sv->sv_debug_inpad = 0;
334     sv->sv_debug_parent = NULL;
335     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
336
337     sv->sv_debug_serial = PL_sv_serial++;
338
339     MEM_LOG_NEW_SV(sv, file, line, func);
340     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
341             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
342
343     return sv;
344 }
345 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
346
347 #else
348 #  define new_SV(p) \
349     STMT_START {                                        \
350         if (PL_sv_root)                                 \
351             uproot_SV(p);                               \
352         else                                            \
353             (p) = S_more_sv(aTHX);                      \
354         SvANY(p) = 0;                                   \
355         SvREFCNT(p) = 1;                                \
356         SvFLAGS(p) = 0;                                 \
357         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
358     } STMT_END
359 #endif
360
361
362 /* del_SV(): return an empty SV head to the free list */
363
364 #ifdef DEBUGGING
365
366 #define del_SV(p) \
367     STMT_START {                                        \
368         if (DEBUG_D_TEST)                               \
369             del_sv(p);                                  \
370         else                                            \
371             plant_SV(p);                                \
372     } STMT_END
373
374 STATIC void
375 S_del_sv(pTHX_ SV *p)
376 {
377     PERL_ARGS_ASSERT_DEL_SV;
378
379     if (DEBUG_D_TEST) {
380         SV* sva;
381         bool ok = 0;
382         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
383             const SV * const sv = sva + 1;
384             const SV * const svend = &sva[SvREFCNT(sva)];
385             if (p >= sv && p < svend) {
386                 ok = 1;
387                 break;
388             }
389         }
390         if (!ok) {
391             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
392                              "Attempt to free non-arena SV: 0x%"UVxf
393                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
394             return;
395         }
396     }
397     plant_SV(p);
398 }
399
400 #else /* ! DEBUGGING */
401
402 #define del_SV(p)   plant_SV(p)
403
404 #endif /* DEBUGGING */
405
406 /*
407  * Bodyless IVs and NVs!
408  *
409  * Since 5.9.2, we can avoid allocating a body for SVt_IV-type SVs.
410  * Since the larger IV-holding variants of SVs store their integer
411  * values in their respective bodies, the family of SvIV() accessor
412  * macros would  naively have to branch on the SV type to find the
413  * integer value either in the HEAD or BODY. In order to avoid this
414  * expensive branch, a clever soul has deployed a great hack:
415  * We set up the SvANY pointer such that instead of pointing to a
416  * real body, it points into the memory before the location of the
417  * head. We compute this pointer such that the location of
418  * the integer member of the hypothetical body struct happens to
419  * be the same as the location of the integer member of the bodyless
420  * SV head. This now means that the SvIV() family of accessors can
421  * always read from the (hypothetical or real) body via SvANY.
422  *
423  * Since the 5.21 dev series, we employ the same trick for NVs
424  * if the architecture can support it (NVSIZE <= IVSIZE).
425  */
426
427 /* The following two macros compute the necessary offsets for the above
428  * trick and store them in SvANY for SvIV() (and friends) to use. */
429 #define SET_SVANY_FOR_BODYLESS_IV(sv) \
430         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv))
431
432 #define SET_SVANY_FOR_BODYLESS_NV(sv) \
433         SvANY(sv) = (XPVNV*)((char*)&(sv->sv_u.svu_nv) - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv))
434
435 /*
436 =head1 SV Manipulation Functions
437
438 =for apidoc sv_add_arena
439
440 Given a chunk of memory, link it to the head of the list of arenas,
441 and split it into a list of free SVs.
442
443 =cut
444 */
445
446 static void
447 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
448 {
449     SV *const sva = MUTABLE_SV(ptr);
450     SV* sv;
451     SV* svend;
452
453     PERL_ARGS_ASSERT_SV_ADD_ARENA;
454
455     /* The first SV in an arena isn't an SV. */
456     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
457     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
458     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
459
460     PL_sv_arenaroot = sva;
461     PL_sv_root = sva + 1;
462
463     svend = &sva[SvREFCNT(sva) - 1];
464     sv = sva + 1;
465     while (sv < svend) {
466         SvARENA_CHAIN_SET(sv, (sv + 1));
467 #ifdef DEBUGGING
468         SvREFCNT(sv) = 0;
469 #endif
470         /* Must always set typemask because it's always checked in on cleanup
471            when the arenas are walked looking for objects.  */
472         SvFLAGS(sv) = SVTYPEMASK;
473         sv++;
474     }
475     SvARENA_CHAIN_SET(sv, 0);
476 #ifdef DEBUGGING
477     SvREFCNT(sv) = 0;
478 #endif
479     SvFLAGS(sv) = SVTYPEMASK;
480 }
481
482 /* visit(): call the named function for each non-free SV in the arenas
483  * whose flags field matches the flags/mask args. */
484
485 STATIC I32
486 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
487 {
488     SV* sva;
489     I32 visited = 0;
490
491     PERL_ARGS_ASSERT_VISIT;
492
493     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
494         const SV * const svend = &sva[SvREFCNT(sva)];
495         SV* sv;
496         for (sv = sva + 1; sv < svend; ++sv) {
497             if (SvTYPE(sv) != (svtype)SVTYPEMASK
498                     && (sv->sv_flags & mask) == flags
499                     && SvREFCNT(sv))
500             {
501                 (*f)(aTHX_ sv);
502                 ++visited;
503             }
504         }
505     }
506     return visited;
507 }
508
509 #ifdef DEBUGGING
510
511 /* called by sv_report_used() for each live SV */
512
513 static void
514 do_report_used(pTHX_ SV *const sv)
515 {
516     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
517         PerlIO_printf(Perl_debug_log, "****\n");
518         sv_dump(sv);
519     }
520 }
521 #endif
522
523 /*
524 =for apidoc sv_report_used
525
526 Dump the contents of all SVs not yet freed (debugging aid).
527
528 =cut
529 */
530
531 void
532 Perl_sv_report_used(pTHX)
533 {
534 #ifdef DEBUGGING
535     visit(do_report_used, 0, 0);
536 #else
537     PERL_UNUSED_CONTEXT;
538 #endif
539 }
540
541 /* called by sv_clean_objs() for each live SV */
542
543 static void
544 do_clean_objs(pTHX_ SV *const ref)
545 {
546     assert (SvROK(ref));
547     {
548         SV * const target = SvRV(ref);
549         if (SvOBJECT(target)) {
550             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
551             if (SvWEAKREF(ref)) {
552                 sv_del_backref(target, ref);
553                 SvWEAKREF_off(ref);
554                 SvRV_set(ref, NULL);
555             } else {
556                 SvROK_off(ref);
557                 SvRV_set(ref, NULL);
558                 SvREFCNT_dec_NN(target);
559             }
560         }
561     }
562 }
563
564
565 /* clear any slots in a GV which hold objects - except IO;
566  * called by sv_clean_objs() for each live GV */
567
568 static void
569 do_clean_named_objs(pTHX_ SV *const sv)
570 {
571     SV *obj;
572     assert(SvTYPE(sv) == SVt_PVGV);
573     assert(isGV_with_GP(sv));
574     if (!GvGP(sv))
575         return;
576
577     /* freeing GP entries may indirectly free the current GV;
578      * hold onto it while we mess with the GP slots */
579     SvREFCNT_inc(sv);
580
581     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
582         DEBUG_D((PerlIO_printf(Perl_debug_log,
583                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
584         GvSV(sv) = NULL;
585         SvREFCNT_dec_NN(obj);
586     }
587     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
588         DEBUG_D((PerlIO_printf(Perl_debug_log,
589                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
590         GvAV(sv) = NULL;
591         SvREFCNT_dec_NN(obj);
592     }
593     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
594         DEBUG_D((PerlIO_printf(Perl_debug_log,
595                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
596         GvHV(sv) = NULL;
597         SvREFCNT_dec_NN(obj);
598     }
599     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
600         DEBUG_D((PerlIO_printf(Perl_debug_log,
601                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
602         GvCV_set(sv, NULL);
603         SvREFCNT_dec_NN(obj);
604     }
605     SvREFCNT_dec_NN(sv); /* undo the inc above */
606 }
607
608 /* clear any IO slots in a GV which hold objects (except stderr, defout);
609  * called by sv_clean_objs() for each live GV */
610
611 static void
612 do_clean_named_io_objs(pTHX_ SV *const sv)
613 {
614     SV *obj;
615     assert(SvTYPE(sv) == SVt_PVGV);
616     assert(isGV_with_GP(sv));
617     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
618         return;
619
620     SvREFCNT_inc(sv);
621     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
622         DEBUG_D((PerlIO_printf(Perl_debug_log,
623                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
624         GvIOp(sv) = NULL;
625         SvREFCNT_dec_NN(obj);
626     }
627     SvREFCNT_dec_NN(sv); /* undo the inc above */
628 }
629
630 /* Void wrapper to pass to visit() */
631 static void
632 do_curse(pTHX_ SV * const sv) {
633     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
634      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
635         return;
636     (void)curse(sv, 0);
637 }
638
639 /*
640 =for apidoc sv_clean_objs
641
642 Attempt to destroy all objects not yet freed.
643
644 =cut
645 */
646
647 void
648 Perl_sv_clean_objs(pTHX)
649 {
650     GV *olddef, *olderr;
651     PL_in_clean_objs = TRUE;
652     visit(do_clean_objs, SVf_ROK, SVf_ROK);
653     /* Some barnacles may yet remain, clinging to typeglobs.
654      * Run the non-IO destructors first: they may want to output
655      * error messages, close files etc */
656     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
657     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
658     /* And if there are some very tenacious barnacles clinging to arrays,
659        closures, or what have you.... */
660     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
661     olddef = PL_defoutgv;
662     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
663     if (olddef && isGV_with_GP(olddef))
664         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
665     olderr = PL_stderrgv;
666     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
667     if (olderr && isGV_with_GP(olderr))
668         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
669     SvREFCNT_dec(olddef);
670     PL_in_clean_objs = FALSE;
671 }
672
673 /* called by sv_clean_all() for each live SV */
674
675 static void
676 do_clean_all(pTHX_ SV *const sv)
677 {
678     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
679         /* don't clean pid table and strtab */
680         return;
681     }
682     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
683     SvFLAGS(sv) |= SVf_BREAK;
684     SvREFCNT_dec_NN(sv);
685 }
686
687 /*
688 =for apidoc sv_clean_all
689
690 Decrement the refcnt of each remaining SV, possibly triggering a
691 cleanup.  This function may have to be called multiple times to free
692 SVs which are in complex self-referential hierarchies.
693
694 =cut
695 */
696
697 I32
698 Perl_sv_clean_all(pTHX)
699 {
700     I32 cleaned;
701     PL_in_clean_all = TRUE;
702     cleaned = visit(do_clean_all, 0,0);
703     return cleaned;
704 }
705
706 /*
707   ARENASETS: a meta-arena implementation which separates arena-info
708   into struct arena_set, which contains an array of struct
709   arena_descs, each holding info for a single arena.  By separating
710   the meta-info from the arena, we recover the 1st slot, formerly
711   borrowed for list management.  The arena_set is about the size of an
712   arena, avoiding the needless malloc overhead of a naive linked-list.
713
714   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
715   memory in the last arena-set (1/2 on average).  In trade, we get
716   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
717   smaller types).  The recovery of the wasted space allows use of
718   small arenas for large, rare body types, by changing array* fields
719   in body_details_by_type[] below.
720 */
721 struct arena_desc {
722     char       *arena;          /* the raw storage, allocated aligned */
723     size_t      size;           /* its size ~4k typ */
724     svtype      utype;          /* bodytype stored in arena */
725 };
726
727 struct arena_set;
728
729 /* Get the maximum number of elements in set[] such that struct arena_set
730    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
731    therefore likely to be 1 aligned memory page.  */
732
733 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
734                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
735
736 struct arena_set {
737     struct arena_set* next;
738     unsigned int   set_size;    /* ie ARENAS_PER_SET */
739     unsigned int   curr;        /* index of next available arena-desc */
740     struct arena_desc set[ARENAS_PER_SET];
741 };
742
743 /*
744 =for apidoc sv_free_arenas
745
746 Deallocate the memory used by all arenas.  Note that all the individual SV
747 heads and bodies within the arenas must already have been freed.
748
749 =cut
750
751 */
752 void
753 Perl_sv_free_arenas(pTHX)
754 {
755     SV* sva;
756     SV* svanext;
757     unsigned int i;
758
759     /* Free arenas here, but be careful about fake ones.  (We assume
760        contiguity of the fake ones with the corresponding real ones.) */
761
762     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
763         svanext = MUTABLE_SV(SvANY(sva));
764         while (svanext && SvFAKE(svanext))
765             svanext = MUTABLE_SV(SvANY(svanext));
766
767         if (!SvFAKE(sva))
768             Safefree(sva);
769     }
770
771     {
772         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
773
774         while (aroot) {
775             struct arena_set *current = aroot;
776             i = aroot->curr;
777             while (i--) {
778                 assert(aroot->set[i].arena);
779                 Safefree(aroot->set[i].arena);
780             }
781             aroot = aroot->next;
782             Safefree(current);
783         }
784     }
785     PL_body_arenas = 0;
786
787     i = PERL_ARENA_ROOTS_SIZE;
788     while (i--)
789         PL_body_roots[i] = 0;
790
791     PL_sv_arenaroot = 0;
792     PL_sv_root = 0;
793 }
794
795 /*
796   Here are mid-level routines that manage the allocation of bodies out
797   of the various arenas.  There are 5 kinds of arenas:
798
799   1. SV-head arenas, which are discussed and handled above
800   2. regular body arenas
801   3. arenas for reduced-size bodies
802   4. Hash-Entry arenas
803
804   Arena types 2 & 3 are chained by body-type off an array of
805   arena-root pointers, which is indexed by svtype.  Some of the
806   larger/less used body types are malloced singly, since a large
807   unused block of them is wasteful.  Also, several svtypes dont have
808   bodies; the data fits into the sv-head itself.  The arena-root
809   pointer thus has a few unused root-pointers (which may be hijacked
810   later for arena types 4,5)
811
812   3 differs from 2 as an optimization; some body types have several
813   unused fields in the front of the structure (which are kept in-place
814   for consistency).  These bodies can be allocated in smaller chunks,
815   because the leading fields arent accessed.  Pointers to such bodies
816   are decremented to point at the unused 'ghost' memory, knowing that
817   the pointers are used with offsets to the real memory.
818
819
820 =head1 SV-Body Allocation
821
822 =cut
823
824 Allocation of SV-bodies is similar to SV-heads, differing as follows;
825 the allocation mechanism is used for many body types, so is somewhat
826 more complicated, it uses arena-sets, and has no need for still-live
827 SV detection.
828
829 At the outermost level, (new|del)_X*V macros return bodies of the
830 appropriate type.  These macros call either (new|del)_body_type or
831 (new|del)_body_allocated macro pairs, depending on specifics of the
832 type.  Most body types use the former pair, the latter pair is used to
833 allocate body types with "ghost fields".
834
835 "ghost fields" are fields that are unused in certain types, and
836 consequently don't need to actually exist.  They are declared because
837 they're part of a "base type", which allows use of functions as
838 methods.  The simplest examples are AVs and HVs, 2 aggregate types
839 which don't use the fields which support SCALAR semantics.
840
841 For these types, the arenas are carved up into appropriately sized
842 chunks, we thus avoid wasted memory for those unaccessed members.
843 When bodies are allocated, we adjust the pointer back in memory by the
844 size of the part not allocated, so it's as if we allocated the full
845 structure.  (But things will all go boom if you write to the part that
846 is "not there", because you'll be overwriting the last members of the
847 preceding structure in memory.)
848
849 We calculate the correction using the STRUCT_OFFSET macro on the first
850 member present.  If the allocated structure is smaller (no initial NV
851 actually allocated) then the net effect is to subtract the size of the NV
852 from the pointer, to return a new pointer as if an initial NV were actually
853 allocated.  (We were using structures named *_allocated for this, but
854 this turned out to be a subtle bug, because a structure without an NV
855 could have a lower alignment constraint, but the compiler is allowed to
856 optimised accesses based on the alignment constraint of the actual pointer
857 to the full structure, for example, using a single 64 bit load instruction
858 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
859
860 This is the same trick as was used for NV and IV bodies.  Ironically it
861 doesn't need to be used for NV bodies any more, because NV is now at
862 the start of the structure.  IV bodies, and also in some builds NV bodies,
863 don't need it either, because they are no longer allocated.
864
865 In turn, the new_body_* allocators call S_new_body(), which invokes
866 new_body_inline macro, which takes a lock, and takes a body off the
867 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
868 necessary to refresh an empty list.  Then the lock is released, and
869 the body is returned.
870
871 Perl_more_bodies allocates a new arena, and carves it up into an array of N
872 bodies, which it strings into a linked list.  It looks up arena-size
873 and body-size from the body_details table described below, thus
874 supporting the multiple body-types.
875
876 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
877 the (new|del)_X*V macros are mapped directly to malloc/free.
878
879 For each sv-type, struct body_details bodies_by_type[] carries
880 parameters which control these aspects of SV handling:
881
882 Arena_size determines whether arenas are used for this body type, and if
883 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
884 zero, forcing individual mallocs and frees.
885
886 Body_size determines how big a body is, and therefore how many fit into
887 each arena.  Offset carries the body-pointer adjustment needed for
888 "ghost fields", and is used in *_allocated macros.
889
890 But its main purpose is to parameterize info needed in
891 Perl_sv_upgrade().  The info here dramatically simplifies the function
892 vs the implementation in 5.8.8, making it table-driven.  All fields
893 are used for this, except for arena_size.
894
895 For the sv-types that have no bodies, arenas are not used, so those
896 PL_body_roots[sv_type] are unused, and can be overloaded.  In
897 something of a special case, SVt_NULL is borrowed for HE arenas;
898 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
899 bodies_by_type[SVt_NULL] slot is not used, as the table is not
900 available in hv.c.
901
902 */
903
904 struct body_details {
905     U8 body_size;       /* Size to allocate  */
906     U8 copy;            /* Size of structure to copy (may be shorter)  */
907     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
908     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
909     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
910     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
911     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
912     U32 arena_size;                 /* Size of arena to allocate */
913 };
914
915 #define HADNV FALSE
916 #define NONV TRUE
917
918
919 #ifdef PURIFY
920 /* With -DPURFIY we allocate everything directly, and don't use arenas.
921    This seems a rather elegant way to simplify some of the code below.  */
922 #define HASARENA FALSE
923 #else
924 #define HASARENA TRUE
925 #endif
926 #define NOARENA FALSE
927
928 /* Size the arenas to exactly fit a given number of bodies.  A count
929    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
930    simplifying the default.  If count > 0, the arena is sized to fit
931    only that many bodies, allowing arenas to be used for large, rare
932    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
933    limited by PERL_ARENA_SIZE, so we can safely oversize the
934    declarations.
935  */
936 #define FIT_ARENA0(body_size)                           \
937     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
938 #define FIT_ARENAn(count,body_size)                     \
939     ( count * body_size <= PERL_ARENA_SIZE)             \
940     ? count * body_size                                 \
941     : FIT_ARENA0 (body_size)
942 #define FIT_ARENA(count,body_size)                      \
943    (U32)(count                                          \
944     ? FIT_ARENAn (count, body_size)                     \
945     : FIT_ARENA0 (body_size))
946
947 /* Calculate the length to copy. Specifically work out the length less any
948    final padding the compiler needed to add.  See the comment in sv_upgrade
949    for why copying the padding proved to be a bug.  */
950
951 #define copy_length(type, last_member) \
952         STRUCT_OFFSET(type, last_member) \
953         + sizeof (((type*)SvANY((const SV *)0))->last_member)
954
955 static const struct body_details bodies_by_type[] = {
956     /* HEs use this offset for their arena.  */
957     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
958
959     /* IVs are in the head, so the allocation size is 0.  */
960     { 0,
961       sizeof(IV), /* This is used to copy out the IV body.  */
962       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
963       NOARENA /* IVS don't need an arena  */, 0
964     },
965
966 #if NVSIZE <= IVSIZE
967     { 0, sizeof(NV),
968       STRUCT_OFFSET(XPVNV, xnv_u),
969       SVt_NV, FALSE, HADNV, NOARENA, 0 },
970 #else
971     { sizeof(NV), sizeof(NV),
972       STRUCT_OFFSET(XPVNV, xnv_u),
973       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
974 #endif
975
976     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
977       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
978       + STRUCT_OFFSET(XPV, xpv_cur),
979       SVt_PV, FALSE, NONV, HASARENA,
980       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
981
982     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
983       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
984       + STRUCT_OFFSET(XPV, xpv_cur),
985       SVt_INVLIST, TRUE, NONV, HASARENA,
986       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
987
988     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
989       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
990       + STRUCT_OFFSET(XPV, xpv_cur),
991       SVt_PVIV, FALSE, NONV, HASARENA,
992       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
993
994     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
995       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
996       + STRUCT_OFFSET(XPV, xpv_cur),
997       SVt_PVNV, FALSE, HADNV, HASARENA,
998       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
999
1000     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
1001       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
1002
1003     { sizeof(regexp),
1004       sizeof(regexp),
1005       0,
1006       SVt_REGEXP, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(regexp))
1008     },
1009
1010     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
1011       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
1012     
1013     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1014       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
1015
1016     { sizeof(XPVAV),
1017       copy_length(XPVAV, xav_alloc),
1018       0,
1019       SVt_PVAV, TRUE, NONV, HASARENA,
1020       FIT_ARENA(0, sizeof(XPVAV)) },
1021
1022     { sizeof(XPVHV),
1023       copy_length(XPVHV, xhv_max),
1024       0,
1025       SVt_PVHV, TRUE, NONV, HASARENA,
1026       FIT_ARENA(0, sizeof(XPVHV)) },
1027
1028     { sizeof(XPVCV),
1029       sizeof(XPVCV),
1030       0,
1031       SVt_PVCV, TRUE, NONV, HASARENA,
1032       FIT_ARENA(0, sizeof(XPVCV)) },
1033
1034     { sizeof(XPVFM),
1035       sizeof(XPVFM),
1036       0,
1037       SVt_PVFM, TRUE, NONV, NOARENA,
1038       FIT_ARENA(20, sizeof(XPVFM)) },
1039
1040     { sizeof(XPVIO),
1041       sizeof(XPVIO),
1042       0,
1043       SVt_PVIO, TRUE, NONV, HASARENA,
1044       FIT_ARENA(24, sizeof(XPVIO)) },
1045 };
1046
1047 #define new_body_allocated(sv_type)             \
1048     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1049              - bodies_by_type[sv_type].offset)
1050
1051 /* return a thing to the free list */
1052
1053 #define del_body(thing, root)                           \
1054     STMT_START {                                        \
1055         void ** const thing_copy = (void **)thing;      \
1056         *thing_copy = *root;                            \
1057         *root = (void*)thing_copy;                      \
1058     } STMT_END
1059
1060 #ifdef PURIFY
1061 #if !(NVSIZE <= IVSIZE)
1062 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1063 #endif
1064 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1065 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1066
1067 #define del_XPVGV(p)    safefree(p)
1068
1069 #else /* !PURIFY */
1070
1071 #if !(NVSIZE <= IVSIZE)
1072 #  define new_XNV()     new_body_allocated(SVt_NV)
1073 #endif
1074 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1075 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1076
1077 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1078                                  &PL_body_roots[SVt_PVGV])
1079
1080 #endif /* PURIFY */
1081
1082 /* no arena for you! */
1083
1084 #define new_NOARENA(details) \
1085         safemalloc((details)->body_size + (details)->offset)
1086 #define new_NOARENAZ(details) \
1087         safecalloc((details)->body_size + (details)->offset, 1)
1088
1089 void *
1090 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1091                   const size_t arena_size)
1092 {
1093     void ** const root = &PL_body_roots[sv_type];
1094     struct arena_desc *adesc;
1095     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1096     unsigned int curr;
1097     char *start;
1098     const char *end;
1099     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1100 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1101     dVAR;
1102 #endif
1103 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1104     static bool done_sanity_check;
1105
1106     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1107      * variables like done_sanity_check. */
1108     if (!done_sanity_check) {
1109         unsigned int i = SVt_LAST;
1110
1111         done_sanity_check = TRUE;
1112
1113         while (i--)
1114             assert (bodies_by_type[i].type == i);
1115     }
1116 #endif
1117
1118     assert(arena_size);
1119
1120     /* may need new arena-set to hold new arena */
1121     if (!aroot || aroot->curr >= aroot->set_size) {
1122         struct arena_set *newroot;
1123         Newxz(newroot, 1, struct arena_set);
1124         newroot->set_size = ARENAS_PER_SET;
1125         newroot->next = aroot;
1126         aroot = newroot;
1127         PL_body_arenas = (void *) newroot;
1128         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1129     }
1130
1131     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1132     curr = aroot->curr++;
1133     adesc = &(aroot->set[curr]);
1134     assert(!adesc->arena);
1135     
1136     Newx(adesc->arena, good_arena_size, char);
1137     adesc->size = good_arena_size;
1138     adesc->utype = sv_type;
1139     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1140                           curr, (void*)adesc->arena, (UV)good_arena_size));
1141
1142     start = (char *) adesc->arena;
1143
1144     /* Get the address of the byte after the end of the last body we can fit.
1145        Remember, this is integer division:  */
1146     end = start + good_arena_size / body_size * body_size;
1147
1148     /* computed count doesn't reflect the 1st slot reservation */
1149 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1150     DEBUG_m(PerlIO_printf(Perl_debug_log,
1151                           "arena %p end %p arena-size %d (from %d) type %d "
1152                           "size %d ct %d\n",
1153                           (void*)start, (void*)end, (int)good_arena_size,
1154                           (int)arena_size, sv_type, (int)body_size,
1155                           (int)good_arena_size / (int)body_size));
1156 #else
1157     DEBUG_m(PerlIO_printf(Perl_debug_log,
1158                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1159                           (void*)start, (void*)end,
1160                           (int)arena_size, sv_type, (int)body_size,
1161                           (int)good_arena_size / (int)body_size));
1162 #endif
1163     *root = (void *)start;
1164
1165     while (1) {
1166         /* Where the next body would start:  */
1167         char * const next = start + body_size;
1168
1169         if (next >= end) {
1170             /* This is the last body:  */
1171             assert(next == end);
1172
1173             *(void **)start = 0;
1174             return *root;
1175         }
1176
1177         *(void**) start = (void *)next;
1178         start = next;
1179     }
1180 }
1181
1182 /* grab a new thing from the free list, allocating more if necessary.
1183    The inline version is used for speed in hot routines, and the
1184    function using it serves the rest (unless PURIFY).
1185 */
1186 #define new_body_inline(xpv, sv_type) \
1187     STMT_START { \
1188         void ** const r3wt = &PL_body_roots[sv_type]; \
1189         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1190           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1191                                              bodies_by_type[sv_type].body_size,\
1192                                              bodies_by_type[sv_type].arena_size)); \
1193         *(r3wt) = *(void**)(xpv); \
1194     } STMT_END
1195
1196 #ifndef PURIFY
1197
1198 STATIC void *
1199 S_new_body(pTHX_ const svtype sv_type)
1200 {
1201     void *xpv;
1202     new_body_inline(xpv, sv_type);
1203     return xpv;
1204 }
1205
1206 #endif
1207
1208 static const struct body_details fake_rv =
1209     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1210
1211 /*
1212 =for apidoc sv_upgrade
1213
1214 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1215 SV, then copies across as much information as possible from the old body.
1216 It croaks if the SV is already in a more complex form than requested.  You
1217 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1218 before calling C<sv_upgrade>, and hence does not croak.  See also
1219 C<L</svtype>>.
1220
1221 =cut
1222 */
1223
1224 void
1225 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1226 {
1227     void*       old_body;
1228     void*       new_body;
1229     const svtype old_type = SvTYPE(sv);
1230     const struct body_details *new_type_details;
1231     const struct body_details *old_type_details
1232         = bodies_by_type + old_type;
1233     SV *referant = NULL;
1234
1235     PERL_ARGS_ASSERT_SV_UPGRADE;
1236
1237     if (old_type == new_type)
1238         return;
1239
1240     /* This clause was purposefully added ahead of the early return above to
1241        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1242        inference by Nick I-S that it would fix other troublesome cases. See
1243        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1244
1245        Given that shared hash key scalars are no longer PVIV, but PV, there is
1246        no longer need to unshare so as to free up the IVX slot for its proper
1247        purpose. So it's safe to move the early return earlier.  */
1248
1249     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1250         sv_force_normal_flags(sv, 0);
1251     }
1252
1253     old_body = SvANY(sv);
1254
1255     /* Copying structures onto other structures that have been neatly zeroed
1256        has a subtle gotcha. Consider XPVMG
1257
1258        +------+------+------+------+------+-------+-------+
1259        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1260        +------+------+------+------+------+-------+-------+
1261        0      4      8     12     16     20      24      28
1262
1263        where NVs are aligned to 8 bytes, so that sizeof that structure is
1264        actually 32 bytes long, with 4 bytes of padding at the end:
1265
1266        +------+------+------+------+------+-------+-------+------+
1267        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1268        +------+------+------+------+------+-------+-------+------+
1269        0      4      8     12     16     20      24      28     32
1270
1271        so what happens if you allocate memory for this structure:
1272
1273        +------+------+------+------+------+-------+-------+------+------+...
1274        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1275        +------+------+------+------+------+-------+-------+------+------+...
1276        0      4      8     12     16     20      24      28     32     36
1277
1278        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1279        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1280        started out as zero once, but it's quite possible that it isn't. So now,
1281        rather than a nicely zeroed GP, you have it pointing somewhere random.
1282        Bugs ensue.
1283
1284        (In fact, GP ends up pointing at a previous GP structure, because the
1285        principle cause of the padding in XPVMG getting garbage is a copy of
1286        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1287        this happens to be moot because XPVGV has been re-ordered, with GP
1288        no longer after STASH)
1289
1290        So we are careful and work out the size of used parts of all the
1291        structures.  */
1292
1293     switch (old_type) {
1294     case SVt_NULL:
1295         break;
1296     case SVt_IV:
1297         if (SvROK(sv)) {
1298             referant = SvRV(sv);
1299             old_type_details = &fake_rv;
1300             if (new_type == SVt_NV)
1301                 new_type = SVt_PVNV;
1302         } else {
1303             if (new_type < SVt_PVIV) {
1304                 new_type = (new_type == SVt_NV)
1305                     ? SVt_PVNV : SVt_PVIV;
1306             }
1307         }
1308         break;
1309     case SVt_NV:
1310         if (new_type < SVt_PVNV) {
1311             new_type = SVt_PVNV;
1312         }
1313         break;
1314     case SVt_PV:
1315         assert(new_type > SVt_PV);
1316         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1317         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1318         break;
1319     case SVt_PVIV:
1320         break;
1321     case SVt_PVNV:
1322         break;
1323     case SVt_PVMG:
1324         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1325            there's no way that it can be safely upgraded, because perl.c
1326            expects to Safefree(SvANY(PL_mess_sv))  */
1327         assert(sv != PL_mess_sv);
1328         break;
1329     default:
1330         if (UNLIKELY(old_type_details->cant_upgrade))
1331             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1332                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1333     }
1334
1335     if (UNLIKELY(old_type > new_type))
1336         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1337                 (int)old_type, (int)new_type);
1338
1339     new_type_details = bodies_by_type + new_type;
1340
1341     SvFLAGS(sv) &= ~SVTYPEMASK;
1342     SvFLAGS(sv) |= new_type;
1343
1344     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1345        the return statements above will have triggered.  */
1346     assert (new_type != SVt_NULL);
1347     switch (new_type) {
1348     case SVt_IV:
1349         assert(old_type == SVt_NULL);
1350         SET_SVANY_FOR_BODYLESS_IV(sv);
1351         SvIV_set(sv, 0);
1352         return;
1353     case SVt_NV:
1354         assert(old_type == SVt_NULL);
1355 #if NVSIZE <= IVSIZE
1356         SET_SVANY_FOR_BODYLESS_NV(sv);
1357 #else
1358         SvANY(sv) = new_XNV();
1359 #endif
1360         SvNV_set(sv, 0);
1361         return;
1362     case SVt_PVHV:
1363     case SVt_PVAV:
1364         assert(new_type_details->body_size);
1365
1366 #ifndef PURIFY  
1367         assert(new_type_details->arena);
1368         assert(new_type_details->arena_size);
1369         /* This points to the start of the allocated area.  */
1370         new_body_inline(new_body, new_type);
1371         Zero(new_body, new_type_details->body_size, char);
1372         new_body = ((char *)new_body) - new_type_details->offset;
1373 #else
1374         /* We always allocated the full length item with PURIFY. To do this
1375            we fake things so that arena is false for all 16 types..  */
1376         new_body = new_NOARENAZ(new_type_details);
1377 #endif
1378         SvANY(sv) = new_body;
1379         if (new_type == SVt_PVAV) {
1380             AvMAX(sv)   = -1;
1381             AvFILLp(sv) = -1;
1382             AvREAL_only(sv);
1383             if (old_type_details->body_size) {
1384                 AvALLOC(sv) = 0;
1385             } else {
1386                 /* It will have been zeroed when the new body was allocated.
1387                    Lets not write to it, in case it confuses a write-back
1388                    cache.  */
1389             }
1390         } else {
1391             assert(!SvOK(sv));
1392             SvOK_off(sv);
1393 #ifndef NODEFAULT_SHAREKEYS
1394             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1395 #endif
1396             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1397             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1398         }
1399
1400         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1401            The target created by newSVrv also is, and it can have magic.
1402            However, it never has SvPVX set.
1403         */
1404         if (old_type == SVt_IV) {
1405             assert(!SvROK(sv));
1406         } else if (old_type >= SVt_PV) {
1407             assert(SvPVX_const(sv) == 0);
1408         }
1409
1410         if (old_type >= SVt_PVMG) {
1411             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1412             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1413         } else {
1414             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1415         }
1416         break;
1417
1418     case SVt_PVIV:
1419         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1420            no route from NV to PVIV, NOK can never be true  */
1421         assert(!SvNOKp(sv));
1422         assert(!SvNOK(sv));
1423         /* FALLTHROUGH */
1424     case SVt_PVIO:
1425     case SVt_PVFM:
1426     case SVt_PVGV:
1427     case SVt_PVCV:
1428     case SVt_PVLV:
1429     case SVt_INVLIST:
1430     case SVt_REGEXP:
1431     case SVt_PVMG:
1432     case SVt_PVNV:
1433     case SVt_PV:
1434
1435         assert(new_type_details->body_size);
1436         /* We always allocated the full length item with PURIFY. To do this
1437            we fake things so that arena is false for all 16 types..  */
1438         if(new_type_details->arena) {
1439             /* This points to the start of the allocated area.  */
1440             new_body_inline(new_body, new_type);
1441             Zero(new_body, new_type_details->body_size, char);
1442             new_body = ((char *)new_body) - new_type_details->offset;
1443         } else {
1444             new_body = new_NOARENAZ(new_type_details);
1445         }
1446         SvANY(sv) = new_body;
1447
1448         if (old_type_details->copy) {
1449             /* There is now the potential for an upgrade from something without
1450                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1451             int offset = old_type_details->offset;
1452             int length = old_type_details->copy;
1453
1454             if (new_type_details->offset > old_type_details->offset) {
1455                 const int difference
1456                     = new_type_details->offset - old_type_details->offset;
1457                 offset += difference;
1458                 length -= difference;
1459             }
1460             assert (length >= 0);
1461                 
1462             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1463                  char);
1464         }
1465
1466 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1467         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1468          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1469          * NV slot, but the new one does, then we need to initialise the
1470          * freshly created NV slot with whatever the correct bit pattern is
1471          * for 0.0  */
1472         if (old_type_details->zero_nv && !new_type_details->zero_nv
1473             && !isGV_with_GP(sv))
1474             SvNV_set(sv, 0);
1475 #endif
1476
1477         if (UNLIKELY(new_type == SVt_PVIO)) {
1478             IO * const io = MUTABLE_IO(sv);
1479             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1480
1481             SvOBJECT_on(io);
1482             /* Clear the stashcache because a new IO could overrule a package
1483                name */
1484             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1485             hv_clear(PL_stashcache);
1486
1487             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1488             IoPAGE_LEN(sv) = 60;
1489         }
1490         if (UNLIKELY(new_type == SVt_REGEXP))
1491             sv->sv_u.svu_rx = (regexp *)new_body;
1492         else if (old_type < SVt_PV) {
1493             /* referant will be NULL unless the old type was SVt_IV emulating
1494                SVt_RV */
1495             sv->sv_u.svu_rv = referant;
1496         }
1497         break;
1498     default:
1499         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1500                    (unsigned long)new_type);
1501     }
1502
1503     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1504        and sometimes SVt_NV */
1505     if (old_type_details->body_size) {
1506 #ifdef PURIFY
1507         safefree(old_body);
1508 #else
1509         /* Note that there is an assumption that all bodies of types that
1510            can be upgraded came from arenas. Only the more complex non-
1511            upgradable types are allowed to be directly malloc()ed.  */
1512         assert(old_type_details->arena);
1513         del_body((void*)((char*)old_body + old_type_details->offset),
1514                  &PL_body_roots[old_type]);
1515 #endif
1516     }
1517 }
1518
1519 /*
1520 =for apidoc sv_backoff
1521
1522 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1523 wrapper instead.
1524
1525 =cut
1526 */
1527
1528 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1529    prior to 5.23.4 this function always returned 0
1530 */
1531
1532 void
1533 Perl_sv_backoff(SV *const sv)
1534 {
1535     STRLEN delta;
1536     const char * const s = SvPVX_const(sv);
1537
1538     PERL_ARGS_ASSERT_SV_BACKOFF;
1539
1540     assert(SvOOK(sv));
1541     assert(SvTYPE(sv) != SVt_PVHV);
1542     assert(SvTYPE(sv) != SVt_PVAV);
1543
1544     SvOOK_offset(sv, delta);
1545     
1546     SvLEN_set(sv, SvLEN(sv) + delta);
1547     SvPV_set(sv, SvPVX(sv) - delta);
1548     SvFLAGS(sv) &= ~SVf_OOK;
1549     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1550     return;
1551 }
1552
1553 /*
1554 =for apidoc sv_grow
1555
1556 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1557 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1558 Use the C<SvGROW> wrapper instead.
1559
1560 =cut
1561 */
1562
1563 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1564
1565 char *
1566 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1567 {
1568     char *s;
1569
1570     PERL_ARGS_ASSERT_SV_GROW;
1571
1572     if (SvROK(sv))
1573         sv_unref(sv);
1574     if (SvTYPE(sv) < SVt_PV) {
1575         sv_upgrade(sv, SVt_PV);
1576         s = SvPVX_mutable(sv);
1577     }
1578     else if (SvOOK(sv)) {       /* pv is offset? */
1579         sv_backoff(sv);
1580         s = SvPVX_mutable(sv);
1581         if (newlen > SvLEN(sv))
1582             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1583     }
1584     else
1585     {
1586         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1587         s = SvPVX_mutable(sv);
1588     }
1589
1590 #ifdef PERL_COPY_ON_WRITE
1591     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1592      * to store the COW count. So in general, allocate one more byte than
1593      * asked for, to make it likely this byte is always spare: and thus
1594      * make more strings COW-able.
1595      * If the new size is a big power of two, don't bother: we assume the
1596      * caller wanted a nice 2^N sized block and will be annoyed at getting
1597      * 2^N+1.
1598      * Only increment if the allocation isn't MEM_SIZE_MAX,
1599      * otherwise it will wrap to 0.
1600      */
1601     if (newlen & 0xff && newlen != MEM_SIZE_MAX)
1602         newlen++;
1603 #endif
1604
1605 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1606 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1607 #endif
1608
1609     if (newlen > SvLEN(sv)) {           /* need more room? */
1610         STRLEN minlen = SvCUR(sv);
1611         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1612         if (newlen < minlen)
1613             newlen = minlen;
1614 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1615
1616         /* Don't round up on the first allocation, as odds are pretty good that
1617          * the initial request is accurate as to what is really needed */
1618         if (SvLEN(sv)) {
1619             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1620             if (rounded > newlen)
1621                 newlen = rounded;
1622         }
1623 #endif
1624         if (SvLEN(sv) && s) {
1625             s = (char*)saferealloc(s, newlen);
1626         }
1627         else {
1628             s = (char*)safemalloc(newlen);
1629             if (SvPVX_const(sv) && SvCUR(sv)) {
1630                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1631             }
1632         }
1633         SvPV_set(sv, s);
1634 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1635         /* Do this here, do it once, do it right, and then we will never get
1636            called back into sv_grow() unless there really is some growing
1637            needed.  */
1638         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1639 #else
1640         SvLEN_set(sv, newlen);
1641 #endif
1642     }
1643     return s;
1644 }
1645
1646 /*
1647 =for apidoc sv_setiv
1648
1649 Copies an integer into the given SV, upgrading first if necessary.
1650 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1651
1652 =cut
1653 */
1654
1655 void
1656 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1657 {
1658     PERL_ARGS_ASSERT_SV_SETIV;
1659
1660     SV_CHECK_THINKFIRST_COW_DROP(sv);
1661     switch (SvTYPE(sv)) {
1662     case SVt_NULL:
1663     case SVt_NV:
1664         sv_upgrade(sv, SVt_IV);
1665         break;
1666     case SVt_PV:
1667         sv_upgrade(sv, SVt_PVIV);
1668         break;
1669
1670     case SVt_PVGV:
1671         if (!isGV_with_GP(sv))
1672             break;
1673     case SVt_PVAV:
1674     case SVt_PVHV:
1675     case SVt_PVCV:
1676     case SVt_PVFM:
1677     case SVt_PVIO:
1678         /* diag_listed_as: Can't coerce %s to %s in %s */
1679         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1680                    OP_DESC(PL_op));
1681         break;
1682     default: NOOP;
1683     }
1684     (void)SvIOK_only(sv);                       /* validate number */
1685     SvIV_set(sv, i);
1686     SvTAINT(sv);
1687 }
1688
1689 /*
1690 =for apidoc sv_setiv_mg
1691
1692 Like C<sv_setiv>, but also handles 'set' magic.
1693
1694 =cut
1695 */
1696
1697 void
1698 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1699 {
1700     PERL_ARGS_ASSERT_SV_SETIV_MG;
1701
1702     sv_setiv(sv,i);
1703     SvSETMAGIC(sv);
1704 }
1705
1706 /*
1707 =for apidoc sv_setuv
1708
1709 Copies an unsigned integer into the given SV, upgrading first if necessary.
1710 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1711
1712 =cut
1713 */
1714
1715 void
1716 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1717 {
1718     PERL_ARGS_ASSERT_SV_SETUV;
1719
1720     /* With the if statement to ensure that integers are stored as IVs whenever
1721        possible:
1722        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1723
1724        without
1725        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1726
1727        If you wish to remove the following if statement, so that this routine
1728        (and its callers) always return UVs, please benchmark to see what the
1729        effect is. Modern CPUs may be different. Or may not :-)
1730     */
1731     if (u <= (UV)IV_MAX) {
1732        sv_setiv(sv, (IV)u);
1733        return;
1734     }
1735     sv_setiv(sv, 0);
1736     SvIsUV_on(sv);
1737     SvUV_set(sv, u);
1738 }
1739
1740 /*
1741 =for apidoc sv_setuv_mg
1742
1743 Like C<sv_setuv>, but also handles 'set' magic.
1744
1745 =cut
1746 */
1747
1748 void
1749 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1750 {
1751     PERL_ARGS_ASSERT_SV_SETUV_MG;
1752
1753     sv_setuv(sv,u);
1754     SvSETMAGIC(sv);
1755 }
1756
1757 /*
1758 =for apidoc sv_setnv
1759
1760 Copies a double into the given SV, upgrading first if necessary.
1761 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1762
1763 =cut
1764 */
1765
1766 void
1767 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1768 {
1769     PERL_ARGS_ASSERT_SV_SETNV;
1770
1771     SV_CHECK_THINKFIRST_COW_DROP(sv);
1772     switch (SvTYPE(sv)) {
1773     case SVt_NULL:
1774     case SVt_IV:
1775         sv_upgrade(sv, SVt_NV);
1776         break;
1777     case SVt_PV:
1778     case SVt_PVIV:
1779         sv_upgrade(sv, SVt_PVNV);
1780         break;
1781
1782     case SVt_PVGV:
1783         if (!isGV_with_GP(sv))
1784             break;
1785     case SVt_PVAV:
1786     case SVt_PVHV:
1787     case SVt_PVCV:
1788     case SVt_PVFM:
1789     case SVt_PVIO:
1790         /* diag_listed_as: Can't coerce %s to %s in %s */
1791         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1792                    OP_DESC(PL_op));
1793         break;
1794     default: NOOP;
1795     }
1796     SvNV_set(sv, num);
1797     (void)SvNOK_only(sv);                       /* validate number */
1798     SvTAINT(sv);
1799 }
1800
1801 /*
1802 =for apidoc sv_setnv_mg
1803
1804 Like C<sv_setnv>, but also handles 'set' magic.
1805
1806 =cut
1807 */
1808
1809 void
1810 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1811 {
1812     PERL_ARGS_ASSERT_SV_SETNV_MG;
1813
1814     sv_setnv(sv,num);
1815     SvSETMAGIC(sv);
1816 }
1817
1818 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1819  * not incrementable warning display.
1820  * Originally part of S_not_a_number().
1821  * The return value may be != tmpbuf.
1822  */
1823
1824 STATIC const char *
1825 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1826     const char *pv;
1827
1828      PERL_ARGS_ASSERT_SV_DISPLAY;
1829
1830      if (DO_UTF8(sv)) {
1831           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1832           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1833      } else {
1834           char *d = tmpbuf;
1835           const char * const limit = tmpbuf + tmpbuf_size - 8;
1836           /* each *s can expand to 4 chars + "...\0",
1837              i.e. need room for 8 chars */
1838         
1839           const char *s = SvPVX_const(sv);
1840           const char * const end = s + SvCUR(sv);
1841           for ( ; s < end && d < limit; s++ ) {
1842                int ch = *s & 0xFF;
1843                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1844                     *d++ = 'M';
1845                     *d++ = '-';
1846
1847                     /* Map to ASCII "equivalent" of Latin1 */
1848                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1849                }
1850                if (ch == '\n') {
1851                     *d++ = '\\';
1852                     *d++ = 'n';
1853                }
1854                else if (ch == '\r') {
1855                     *d++ = '\\';
1856                     *d++ = 'r';
1857                }
1858                else if (ch == '\f') {
1859                     *d++ = '\\';
1860                     *d++ = 'f';
1861                }
1862                else if (ch == '\\') {
1863                     *d++ = '\\';
1864                     *d++ = '\\';
1865                }
1866                else if (ch == '\0') {
1867                     *d++ = '\\';
1868                     *d++ = '0';
1869                }
1870                else if (isPRINT_LC(ch))
1871                     *d++ = ch;
1872                else {
1873                     *d++ = '^';
1874                     *d++ = toCTRL(ch);
1875                }
1876           }
1877           if (s < end) {
1878                *d++ = '.';
1879                *d++ = '.';
1880                *d++ = '.';
1881           }
1882           *d = '\0';
1883           pv = tmpbuf;
1884     }
1885
1886     return pv;
1887 }
1888
1889 /* Print an "isn't numeric" warning, using a cleaned-up,
1890  * printable version of the offending string
1891  */
1892
1893 STATIC void
1894 S_not_a_number(pTHX_ SV *const sv)
1895 {
1896      char tmpbuf[64];
1897      const char *pv;
1898
1899      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1900
1901      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1902
1903     if (PL_op)
1904         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1905                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1906                     "Argument \"%s\" isn't numeric in %s", pv,
1907                     OP_DESC(PL_op));
1908     else
1909         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1910                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1911                     "Argument \"%s\" isn't numeric", pv);
1912 }
1913
1914 STATIC void
1915 S_not_incrementable(pTHX_ SV *const sv) {
1916      char tmpbuf[64];
1917      const char *pv;
1918
1919      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1920
1921      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1922
1923      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1924                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1925 }
1926
1927 /*
1928 =for apidoc looks_like_number
1929
1930 Test if the content of an SV looks like a number (or is a number).
1931 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1932 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1933 ignored.
1934
1935 =cut
1936 */
1937
1938 I32
1939 Perl_looks_like_number(pTHX_ SV *const sv)
1940 {
1941     const char *sbegin;
1942     STRLEN len;
1943     int numtype;
1944
1945     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1946
1947     if (SvPOK(sv) || SvPOKp(sv)) {
1948         sbegin = SvPV_nomg_const(sv, len);
1949     }
1950     else
1951         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1952     numtype = grok_number(sbegin, len, NULL);
1953     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1954 }
1955
1956 STATIC bool
1957 S_glob_2number(pTHX_ GV * const gv)
1958 {
1959     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1960
1961     /* We know that all GVs stringify to something that is not-a-number,
1962         so no need to test that.  */
1963     if (ckWARN(WARN_NUMERIC))
1964     {
1965         SV *const buffer = sv_newmortal();
1966         gv_efullname3(buffer, gv, "*");
1967         not_a_number(buffer);
1968     }
1969     /* We just want something true to return, so that S_sv_2iuv_common
1970         can tail call us and return true.  */
1971     return TRUE;
1972 }
1973
1974 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1975    until proven guilty, assume that things are not that bad... */
1976
1977 /*
1978    NV_PRESERVES_UV:
1979
1980    As 64 bit platforms often have an NV that doesn't preserve all bits of
1981    an IV (an assumption perl has been based on to date) it becomes necessary
1982    to remove the assumption that the NV always carries enough precision to
1983    recreate the IV whenever needed, and that the NV is the canonical form.
1984    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1985    precision as a side effect of conversion (which would lead to insanity
1986    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1987    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1988       where precision was lost, and IV/UV/NV slots that have a valid conversion
1989       which has lost no precision
1990    2) to ensure that if a numeric conversion to one form is requested that
1991       would lose precision, the precise conversion (or differently
1992       imprecise conversion) is also performed and cached, to prevent
1993       requests for different numeric formats on the same SV causing
1994       lossy conversion chains. (lossless conversion chains are perfectly
1995       acceptable (still))
1996
1997
1998    flags are used:
1999    SvIOKp is true if the IV slot contains a valid value
2000    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
2001    SvNOKp is true if the NV slot contains a valid value
2002    SvNOK  is true only if the NV value is accurate
2003
2004    so
2005    while converting from PV to NV, check to see if converting that NV to an
2006    IV(or UV) would lose accuracy over a direct conversion from PV to
2007    IV(or UV). If it would, cache both conversions, return NV, but mark
2008    SV as IOK NOKp (ie not NOK).
2009
2010    While converting from PV to IV, check to see if converting that IV to an
2011    NV would lose accuracy over a direct conversion from PV to NV. If it
2012    would, cache both conversions, flag similarly.
2013
2014    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2015    correctly because if IV & NV were set NV *always* overruled.
2016    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2017    changes - now IV and NV together means that the two are interchangeable:
2018    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2019
2020    The benefit of this is that operations such as pp_add know that if
2021    SvIOK is true for both left and right operands, then integer addition
2022    can be used instead of floating point (for cases where the result won't
2023    overflow). Before, floating point was always used, which could lead to
2024    loss of precision compared with integer addition.
2025
2026    * making IV and NV equal status should make maths accurate on 64 bit
2027      platforms
2028    * may speed up maths somewhat if pp_add and friends start to use
2029      integers when possible instead of fp. (Hopefully the overhead in
2030      looking for SvIOK and checking for overflow will not outweigh the
2031      fp to integer speedup)
2032    * will slow down integer operations (callers of SvIV) on "inaccurate"
2033      values, as the change from SvIOK to SvIOKp will cause a call into
2034      sv_2iv each time rather than a macro access direct to the IV slot
2035    * should speed up number->string conversion on integers as IV is
2036      favoured when IV and NV are equally accurate
2037
2038    ####################################################################
2039    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2040    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2041    On the other hand, SvUOK is true iff UV.
2042    ####################################################################
2043
2044    Your mileage will vary depending your CPU's relative fp to integer
2045    performance ratio.
2046 */
2047
2048 #ifndef NV_PRESERVES_UV
2049 #  define IS_NUMBER_UNDERFLOW_IV 1
2050 #  define IS_NUMBER_UNDERFLOW_UV 2
2051 #  define IS_NUMBER_IV_AND_UV    2
2052 #  define IS_NUMBER_OVERFLOW_IV  4
2053 #  define IS_NUMBER_OVERFLOW_UV  5
2054
2055 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2056
2057 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2058 STATIC int
2059 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2060 #  ifdef DEBUGGING
2061                        , I32 numtype
2062 #  endif
2063                        )
2064 {
2065     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2066     PERL_UNUSED_CONTEXT;
2067
2068     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));
2069     if (SvNVX(sv) < (NV)IV_MIN) {
2070         (void)SvIOKp_on(sv);
2071         (void)SvNOK_on(sv);
2072         SvIV_set(sv, IV_MIN);
2073         return IS_NUMBER_UNDERFLOW_IV;
2074     }
2075     if (SvNVX(sv) > (NV)UV_MAX) {
2076         (void)SvIOKp_on(sv);
2077         (void)SvNOK_on(sv);
2078         SvIsUV_on(sv);
2079         SvUV_set(sv, UV_MAX);
2080         return IS_NUMBER_OVERFLOW_UV;
2081     }
2082     (void)SvIOKp_on(sv);
2083     (void)SvNOK_on(sv);
2084     /* Can't use strtol etc to convert this string.  (See truth table in
2085        sv_2iv  */
2086     if (SvNVX(sv) <= (UV)IV_MAX) {
2087         SvIV_set(sv, I_V(SvNVX(sv)));
2088         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2089             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2090         } else {
2091             /* Integer is imprecise. NOK, IOKp */
2092         }
2093         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2094     }
2095     SvIsUV_on(sv);
2096     SvUV_set(sv, U_V(SvNVX(sv)));
2097     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2098         if (SvUVX(sv) == UV_MAX) {
2099             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2100                possibly be preserved by NV. Hence, it must be overflow.
2101                NOK, IOKp */
2102             return IS_NUMBER_OVERFLOW_UV;
2103         }
2104         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2105     } else {
2106         /* Integer is imprecise. NOK, IOKp */
2107     }
2108     return IS_NUMBER_OVERFLOW_IV;
2109 }
2110 #endif /* !NV_PRESERVES_UV*/
2111
2112 /* If numtype is infnan, set the NV of the sv accordingly.
2113  * If numtype is anything else, try setting the NV using Atof(PV). */
2114 #ifdef USING_MSVC6
2115 #  pragma warning(push)
2116 #  pragma warning(disable:4756;disable:4056)
2117 #endif
2118 static void
2119 S_sv_setnv(pTHX_ SV* sv, int numtype)
2120 {
2121     bool pok = cBOOL(SvPOK(sv));
2122     bool nok = FALSE;
2123     if ((numtype & IS_NUMBER_INFINITY)) {
2124         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2125         nok = TRUE;
2126     }
2127     else if ((numtype & IS_NUMBER_NAN)) {
2128         SvNV_set(sv, NV_NAN);
2129         nok = TRUE;
2130     }
2131     else if (pok) {
2132         SvNV_set(sv, Atof(SvPVX_const(sv)));
2133         /* Purposefully no true nok here, since we don't want to blow
2134          * away the possible IOK/UV of an existing sv. */
2135     }
2136     if (nok) {
2137         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2138         if (pok)
2139             SvPOK_on(sv); /* PV is okay, though. */
2140     }
2141 }
2142 #ifdef USING_MSVC6
2143 #  pragma warning(pop)
2144 #endif
2145
2146 STATIC bool
2147 S_sv_2iuv_common(pTHX_ SV *const sv)
2148 {
2149     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2150
2151     if (SvNOKp(sv)) {
2152         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2153          * without also getting a cached IV/UV from it at the same time
2154          * (ie PV->NV conversion should detect loss of accuracy and cache
2155          * IV or UV at same time to avoid this. */
2156         /* IV-over-UV optimisation - choose to cache IV if possible */
2157
2158         if (SvTYPE(sv) == SVt_NV)
2159             sv_upgrade(sv, SVt_PVNV);
2160
2161         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2162         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2163            certainly cast into the IV range at IV_MAX, whereas the correct
2164            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2165            cases go to UV */
2166 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2167         if (Perl_isnan(SvNVX(sv))) {
2168             SvUV_set(sv, 0);
2169             SvIsUV_on(sv);
2170             return FALSE;
2171         }
2172 #endif
2173         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2174             SvIV_set(sv, I_V(SvNVX(sv)));
2175             if (SvNVX(sv) == (NV) SvIVX(sv)
2176 #ifndef NV_PRESERVES_UV
2177                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2178                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2179                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2180                 /* Don't flag it as "accurately an integer" if the number
2181                    came from a (by definition imprecise) NV operation, and
2182                    we're outside the range of NV integer precision */
2183 #endif
2184                 ) {
2185                 if (SvNOK(sv))
2186                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2187                 else {
2188                     /* scalar has trailing garbage, eg "42a" */
2189                 }
2190                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2191                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2192                                       PTR2UV(sv),
2193                                       SvNVX(sv),
2194                                       SvIVX(sv)));
2195
2196             } else {
2197                 /* IV not precise.  No need to convert from PV, as NV
2198                    conversion would already have cached IV if it detected
2199                    that PV->IV would be better than PV->NV->IV
2200                    flags already correct - don't set public IOK.  */
2201                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2202                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2203                                       PTR2UV(sv),
2204                                       SvNVX(sv),
2205                                       SvIVX(sv)));
2206             }
2207             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2208                but the cast (NV)IV_MIN rounds to a the value less (more
2209                negative) than IV_MIN which happens to be equal to SvNVX ??
2210                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2211                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2212                (NV)UVX == NVX are both true, but the values differ. :-(
2213                Hopefully for 2s complement IV_MIN is something like
2214                0x8000000000000000 which will be exact. NWC */
2215         }
2216         else {
2217             SvUV_set(sv, U_V(SvNVX(sv)));
2218             if (
2219                 (SvNVX(sv) == (NV) SvUVX(sv))
2220 #ifndef  NV_PRESERVES_UV
2221                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2222                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2223                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2224                 /* Don't flag it as "accurately an integer" if the number
2225                    came from a (by definition imprecise) NV operation, and
2226                    we're outside the range of NV integer precision */
2227 #endif
2228                 && SvNOK(sv)
2229                 )
2230                 SvIOK_on(sv);
2231             SvIsUV_on(sv);
2232             DEBUG_c(PerlIO_printf(Perl_debug_log,
2233                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2234                                   PTR2UV(sv),
2235                                   SvUVX(sv),
2236                                   SvUVX(sv)));
2237         }
2238     }
2239     else if (SvPOKp(sv)) {
2240         UV value;
2241         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2242         /* We want to avoid a possible problem when we cache an IV/ a UV which
2243            may be later translated to an NV, and the resulting NV is not
2244            the same as the direct translation of the initial string
2245            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2246            be careful to ensure that the value with the .456 is around if the
2247            NV value is requested in the future).
2248         
2249            This means that if we cache such an IV/a UV, we need to cache the
2250            NV as well.  Moreover, we trade speed for space, and do not
2251            cache the NV if we are sure it's not needed.
2252          */
2253
2254         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2255         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2256              == IS_NUMBER_IN_UV) {
2257             /* It's definitely an integer, only upgrade to PVIV */
2258             if (SvTYPE(sv) < SVt_PVIV)
2259                 sv_upgrade(sv, SVt_PVIV);
2260             (void)SvIOK_on(sv);
2261         } else if (SvTYPE(sv) < SVt_PVNV)
2262             sv_upgrade(sv, SVt_PVNV);
2263
2264         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2265             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2266                 not_a_number(sv);
2267             S_sv_setnv(aTHX_ sv, numtype);
2268             return FALSE;
2269         }
2270
2271         /* If NVs preserve UVs then we only use the UV value if we know that
2272            we aren't going to call atof() below. If NVs don't preserve UVs
2273            then the value returned may have more precision than atof() will
2274            return, even though value isn't perfectly accurate.  */
2275         if ((numtype & (IS_NUMBER_IN_UV
2276 #ifdef NV_PRESERVES_UV
2277                         | IS_NUMBER_NOT_INT
2278 #endif
2279             )) == IS_NUMBER_IN_UV) {
2280             /* This won't turn off the public IOK flag if it was set above  */
2281             (void)SvIOKp_on(sv);
2282
2283             if (!(numtype & IS_NUMBER_NEG)) {
2284                 /* positive */;
2285                 if (value <= (UV)IV_MAX) {
2286                     SvIV_set(sv, (IV)value);
2287                 } else {
2288                     /* it didn't overflow, and it was positive. */
2289                     SvUV_set(sv, value);
2290                     SvIsUV_on(sv);
2291                 }
2292             } else {
2293                 /* 2s complement assumption  */
2294                 if (value <= (UV)IV_MIN) {
2295                     SvIV_set(sv, value == (UV)IV_MIN
2296                                     ? IV_MIN : -(IV)value);
2297                 } else {
2298                     /* Too negative for an IV.  This is a double upgrade, but
2299                        I'm assuming it will be rare.  */
2300                     if (SvTYPE(sv) < SVt_PVNV)
2301                         sv_upgrade(sv, SVt_PVNV);
2302                     SvNOK_on(sv);
2303                     SvIOK_off(sv);
2304                     SvIOKp_on(sv);
2305                     SvNV_set(sv, -(NV)value);
2306                     SvIV_set(sv, IV_MIN);
2307                 }
2308             }
2309         }
2310         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2311            will be in the previous block to set the IV slot, and the next
2312            block to set the NV slot.  So no else here.  */
2313         
2314         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2315             != IS_NUMBER_IN_UV) {
2316             /* It wasn't an (integer that doesn't overflow the UV). */
2317             S_sv_setnv(aTHX_ sv, numtype);
2318
2319             if (! numtype && ckWARN(WARN_NUMERIC))
2320                 not_a_number(sv);
2321
2322             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2323                                   PTR2UV(sv), SvNVX(sv)));
2324
2325 #ifdef NV_PRESERVES_UV
2326             (void)SvIOKp_on(sv);
2327             (void)SvNOK_on(sv);
2328 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2329             if (Perl_isnan(SvNVX(sv))) {
2330                 SvUV_set(sv, 0);
2331                 SvIsUV_on(sv);
2332                 return FALSE;
2333             }
2334 #endif
2335             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2336                 SvIV_set(sv, I_V(SvNVX(sv)));
2337                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2338                     SvIOK_on(sv);
2339                 } else {
2340                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2341                 }
2342                 /* UV will not work better than IV */
2343             } else {
2344                 if (SvNVX(sv) > (NV)UV_MAX) {
2345                     SvIsUV_on(sv);
2346                     /* Integer is inaccurate. NOK, IOKp, is UV */
2347                     SvUV_set(sv, UV_MAX);
2348                 } else {
2349                     SvUV_set(sv, U_V(SvNVX(sv)));
2350                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2351                        NV preservse UV so can do correct comparison.  */
2352                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2353                         SvIOK_on(sv);
2354                     } else {
2355                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2356                     }
2357                 }
2358                 SvIsUV_on(sv);
2359             }
2360 #else /* NV_PRESERVES_UV */
2361             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2362                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2363                 /* The IV/UV slot will have been set from value returned by
2364                    grok_number above.  The NV slot has just been set using
2365                    Atof.  */
2366                 SvNOK_on(sv);
2367                 assert (SvIOKp(sv));
2368             } else {
2369                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2370                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2371                     /* Small enough to preserve all bits. */
2372                     (void)SvIOKp_on(sv);
2373                     SvNOK_on(sv);
2374                     SvIV_set(sv, I_V(SvNVX(sv)));
2375                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2376                         SvIOK_on(sv);
2377                     /* Assumption: first non-preserved integer is < IV_MAX,
2378                        this NV is in the preserved range, therefore: */
2379                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2380                           < (UV)IV_MAX)) {
2381                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2382                     }
2383                 } else {
2384                     /* IN_UV NOT_INT
2385                          0      0       already failed to read UV.
2386                          0      1       already failed to read UV.
2387                          1      0       you won't get here in this case. IV/UV
2388                                         slot set, public IOK, Atof() unneeded.
2389                          1      1       already read UV.
2390                        so there's no point in sv_2iuv_non_preserve() attempting
2391                        to use atol, strtol, strtoul etc.  */
2392 #  ifdef DEBUGGING
2393                     sv_2iuv_non_preserve (sv, numtype);
2394 #  else
2395                     sv_2iuv_non_preserve (sv);
2396 #  endif
2397                 }
2398             }
2399 #endif /* NV_PRESERVES_UV */
2400         /* It might be more code efficient to go through the entire logic above
2401            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2402            gets complex and potentially buggy, so more programmer efficient
2403            to do it this way, by turning off the public flags:  */
2404         if (!numtype)
2405             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2406         }
2407     }
2408     else  {
2409         if (isGV_with_GP(sv))
2410             return glob_2number(MUTABLE_GV(sv));
2411
2412         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2413                 report_uninit(sv);
2414         if (SvTYPE(sv) < SVt_IV)
2415             /* Typically the caller expects that sv_any is not NULL now.  */
2416             sv_upgrade(sv, SVt_IV);
2417         /* Return 0 from the caller.  */
2418         return TRUE;
2419     }
2420     return FALSE;
2421 }
2422
2423 /*
2424 =for apidoc sv_2iv_flags
2425
2426 Return the integer value of an SV, doing any necessary string
2427 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2428 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 IV
2434 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2435 {
2436     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2437
2438     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2439          && SvTYPE(sv) != SVt_PVFM);
2440
2441     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2442         mg_get(sv);
2443
2444     if (SvROK(sv)) {
2445         if (SvAMAGIC(sv)) {
2446             SV * tmpstr;
2447             if (flags & SV_SKIP_OVERLOAD)
2448                 return 0;
2449             tmpstr = AMG_CALLunary(sv, numer_amg);
2450             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2451                 return SvIV(tmpstr);
2452             }
2453         }
2454         return PTR2IV(SvRV(sv));
2455     }
2456
2457     if (SvVALID(sv) || isREGEXP(sv)) {
2458         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2459            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2460            In practice they are extremely unlikely to actually get anywhere
2461            accessible by user Perl code - the only way that I'm aware of is when
2462            a constant subroutine which is used as the second argument to index.
2463
2464            Regexps have no SvIVX and SvNVX fields.
2465         */
2466         assert(isREGEXP(sv) || SvPOKp(sv));
2467         {
2468             UV value;
2469             const char * const ptr =
2470                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2471             const int numtype
2472                 = grok_number(ptr, SvCUR(sv), &value);
2473
2474             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2475                 == IS_NUMBER_IN_UV) {
2476                 /* It's definitely an integer */
2477                 if (numtype & IS_NUMBER_NEG) {
2478                     if (value < (UV)IV_MIN)
2479                         return -(IV)value;
2480                 } else {
2481                     if (value < (UV)IV_MAX)
2482                         return (IV)value;
2483                 }
2484             }
2485
2486             /* Quite wrong but no good choices. */
2487             if ((numtype & IS_NUMBER_INFINITY)) {
2488                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2489             } else if ((numtype & IS_NUMBER_NAN)) {
2490                 return 0; /* So wrong. */
2491             }
2492
2493             if (!numtype) {
2494                 if (ckWARN(WARN_NUMERIC))
2495                     not_a_number(sv);
2496             }
2497             return I_V(Atof(ptr));
2498         }
2499     }
2500
2501     if (SvTHINKFIRST(sv)) {
2502         if (SvREADONLY(sv) && !SvOK(sv)) {
2503             if (ckWARN(WARN_UNINITIALIZED))
2504                 report_uninit(sv);
2505             return 0;
2506         }
2507     }
2508
2509     if (!SvIOKp(sv)) {
2510         if (S_sv_2iuv_common(aTHX_ sv))
2511             return 0;
2512     }
2513
2514     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2515         PTR2UV(sv),SvIVX(sv)));
2516     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2517 }
2518
2519 /*
2520 =for apidoc sv_2uv_flags
2521
2522 Return the unsigned integer value of an SV, doing any necessary string
2523 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2524 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2525
2526 =cut
2527 */
2528
2529 UV
2530 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2531 {
2532     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2533
2534     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2535         mg_get(sv);
2536
2537     if (SvROK(sv)) {
2538         if (SvAMAGIC(sv)) {
2539             SV *tmpstr;
2540             if (flags & SV_SKIP_OVERLOAD)
2541                 return 0;
2542             tmpstr = AMG_CALLunary(sv, numer_amg);
2543             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2544                 return SvUV(tmpstr);
2545             }
2546         }
2547         return PTR2UV(SvRV(sv));
2548     }
2549
2550     if (SvVALID(sv) || isREGEXP(sv)) {
2551         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2552            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2553            Regexps have no SvIVX and SvNVX fields. */
2554         assert(isREGEXP(sv) || SvPOKp(sv));
2555         {
2556             UV value;
2557             const char * const ptr =
2558                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2559             const int numtype
2560                 = grok_number(ptr, SvCUR(sv), &value);
2561
2562             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563                 == IS_NUMBER_IN_UV) {
2564                 /* It's definitely an integer */
2565                 if (!(numtype & IS_NUMBER_NEG))
2566                     return value;
2567             }
2568
2569             /* Quite wrong but no good choices. */
2570             if ((numtype & IS_NUMBER_INFINITY)) {
2571                 return UV_MAX; /* So wrong. */
2572             } else if ((numtype & IS_NUMBER_NAN)) {
2573                 return 0; /* So wrong. */
2574             }
2575
2576             if (!numtype) {
2577                 if (ckWARN(WARN_NUMERIC))
2578                     not_a_number(sv);
2579             }
2580             return U_V(Atof(ptr));
2581         }
2582     }
2583
2584     if (SvTHINKFIRST(sv)) {
2585         if (SvREADONLY(sv) && !SvOK(sv)) {
2586             if (ckWARN(WARN_UNINITIALIZED))
2587                 report_uninit(sv);
2588             return 0;
2589         }
2590     }
2591
2592     if (!SvIOKp(sv)) {
2593         if (S_sv_2iuv_common(aTHX_ sv))
2594             return 0;
2595     }
2596
2597     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2598                           PTR2UV(sv),SvUVX(sv)));
2599     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2600 }
2601
2602 /*
2603 =for apidoc sv_2nv_flags
2604
2605 Return the num value of an SV, doing any necessary string or integer
2606 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2607 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2608
2609 =cut
2610 */
2611
2612 NV
2613 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2614 {
2615     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2616
2617     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2618          && SvTYPE(sv) != SVt_PVFM);
2619     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2620         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2621            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2622            Regexps have no SvIVX and SvNVX fields.  */
2623         const char *ptr;
2624         if (flags & SV_GMAGIC)
2625             mg_get(sv);
2626         if (SvNOKp(sv))
2627             return SvNVX(sv);
2628         if (SvPOKp(sv) && !SvIOKp(sv)) {
2629             ptr = SvPVX_const(sv);
2630           grokpv:
2631             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2632                 !grok_number(ptr, SvCUR(sv), NULL))
2633                 not_a_number(sv);
2634             return Atof(ptr);
2635         }
2636         if (SvIOKp(sv)) {
2637             if (SvIsUV(sv))
2638                 return (NV)SvUVX(sv);
2639             else
2640                 return (NV)SvIVX(sv);
2641         }
2642         if (SvROK(sv)) {
2643             goto return_rok;
2644         }
2645         if (isREGEXP(sv)) {
2646             ptr = RX_WRAPPED((REGEXP *)sv);
2647             goto grokpv;
2648         }
2649         assert(SvTYPE(sv) >= SVt_PVMG);
2650         /* This falls through to the report_uninit near the end of the
2651            function. */
2652     } else if (SvTHINKFIRST(sv)) {
2653         if (SvROK(sv)) {
2654         return_rok:
2655             if (SvAMAGIC(sv)) {
2656                 SV *tmpstr;
2657                 if (flags & SV_SKIP_OVERLOAD)
2658                     return 0;
2659                 tmpstr = AMG_CALLunary(sv, numer_amg);
2660                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2661                     return SvNV(tmpstr);
2662                 }
2663             }
2664             return PTR2NV(SvRV(sv));
2665         }
2666         if (SvREADONLY(sv) && !SvOK(sv)) {
2667             if (ckWARN(WARN_UNINITIALIZED))
2668                 report_uninit(sv);
2669             return 0.0;
2670         }
2671     }
2672     if (SvTYPE(sv) < SVt_NV) {
2673         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2674         sv_upgrade(sv, SVt_NV);
2675         DEBUG_c({
2676             STORE_NUMERIC_LOCAL_SET_STANDARD();
2677             PerlIO_printf(Perl_debug_log,
2678                           "0x%"UVxf" num(%" NVgf ")\n",
2679                           PTR2UV(sv), SvNVX(sv));
2680             RESTORE_NUMERIC_LOCAL();
2681         });
2682     }
2683     else if (SvTYPE(sv) < SVt_PVNV)
2684         sv_upgrade(sv, SVt_PVNV);
2685     if (SvNOKp(sv)) {
2686         return SvNVX(sv);
2687     }
2688     if (SvIOKp(sv)) {
2689         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2690 #ifdef NV_PRESERVES_UV
2691         if (SvIOK(sv))
2692             SvNOK_on(sv);
2693         else
2694             SvNOKp_on(sv);
2695 #else
2696         /* Only set the public NV OK flag if this NV preserves the IV  */
2697         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2698         if (SvIOK(sv) &&
2699             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2700                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2701             SvNOK_on(sv);
2702         else
2703             SvNOKp_on(sv);
2704 #endif
2705     }
2706     else if (SvPOKp(sv)) {
2707         UV value;
2708         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2709         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2710             not_a_number(sv);
2711 #ifdef NV_PRESERVES_UV
2712         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2713             == IS_NUMBER_IN_UV) {
2714             /* It's definitely an integer */
2715             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2716         } else {
2717             S_sv_setnv(aTHX_ sv, numtype);
2718         }
2719         if (numtype)
2720             SvNOK_on(sv);
2721         else
2722             SvNOKp_on(sv);
2723 #else
2724         SvNV_set(sv, Atof(SvPVX_const(sv)));
2725         /* Only set the public NV OK flag if this NV preserves the value in
2726            the PV at least as well as an IV/UV would.
2727            Not sure how to do this 100% reliably. */
2728         /* if that shift count is out of range then Configure's test is
2729            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2730            UV_BITS */
2731         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2732             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2733             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2734         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2735             /* Can't use strtol etc to convert this string, so don't try.
2736                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2737             SvNOK_on(sv);
2738         } else {
2739             /* value has been set.  It may not be precise.  */
2740             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2741                 /* 2s complement assumption for (UV)IV_MIN  */
2742                 SvNOK_on(sv); /* Integer is too negative.  */
2743             } else {
2744                 SvNOKp_on(sv);
2745                 SvIOKp_on(sv);
2746
2747                 if (numtype & IS_NUMBER_NEG) {
2748                     /* -IV_MIN is undefined, but we should never reach
2749                      * this point with both IS_NUMBER_NEG and value ==
2750                      * (UV)IV_MIN */
2751                     assert(value != (UV)IV_MIN);
2752                     SvIV_set(sv, -(IV)value);
2753                 } else if (value <= (UV)IV_MAX) {
2754                     SvIV_set(sv, (IV)value);
2755                 } else {
2756                     SvUV_set(sv, value);
2757                     SvIsUV_on(sv);
2758                 }
2759
2760                 if (numtype & IS_NUMBER_NOT_INT) {
2761                     /* I believe that even if the original PV had decimals,
2762                        they are lost beyond the limit of the FP precision.
2763                        However, neither is canonical, so both only get p
2764                        flags.  NWC, 2000/11/25 */
2765                     /* Both already have p flags, so do nothing */
2766                 } else {
2767                     const NV nv = SvNVX(sv);
2768                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2769                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2770                         if (SvIVX(sv) == I_V(nv)) {
2771                             SvNOK_on(sv);
2772                         } else {
2773                             /* It had no "." so it must be integer.  */
2774                         }
2775                         SvIOK_on(sv);
2776                     } else {
2777                         /* between IV_MAX and NV(UV_MAX).
2778                            Could be slightly > UV_MAX */
2779
2780                         if (numtype & IS_NUMBER_NOT_INT) {
2781                             /* UV and NV both imprecise.  */
2782                         } else {
2783                             const UV nv_as_uv = U_V(nv);
2784
2785                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2786                                 SvNOK_on(sv);
2787                             }
2788                             SvIOK_on(sv);
2789                         }
2790                     }
2791                 }
2792             }
2793         }
2794         /* It might be more code efficient to go through the entire logic above
2795            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2796            gets complex and potentially buggy, so more programmer efficient
2797            to do it this way, by turning off the public flags:  */
2798         if (!numtype)
2799             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2800 #endif /* NV_PRESERVES_UV */
2801     }
2802     else  {
2803         if (isGV_with_GP(sv)) {
2804             glob_2number(MUTABLE_GV(sv));
2805             return 0.0;
2806         }
2807
2808         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2809             report_uninit(sv);
2810         assert (SvTYPE(sv) >= SVt_NV);
2811         /* Typically the caller expects that sv_any is not NULL now.  */
2812         /* XXX Ilya implies that this is a bug in callers that assume this
2813            and ideally should be fixed.  */
2814         return 0.0;
2815     }
2816     DEBUG_c({
2817         STORE_NUMERIC_LOCAL_SET_STANDARD();
2818         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2819                       PTR2UV(sv), SvNVX(sv));
2820         RESTORE_NUMERIC_LOCAL();
2821     });
2822     return SvNVX(sv);
2823 }
2824
2825 /*
2826 =for apidoc sv_2num
2827
2828 Return an SV with the numeric value of the source SV, doing any necessary
2829 reference or overload conversion.  The caller is expected to have handled
2830 get-magic already.
2831
2832 =cut
2833 */
2834
2835 SV *
2836 Perl_sv_2num(pTHX_ SV *const sv)
2837 {
2838     PERL_ARGS_ASSERT_SV_2NUM;
2839
2840     if (!SvROK(sv))
2841         return sv;
2842     if (SvAMAGIC(sv)) {
2843         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2844         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2845         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2846             return sv_2num(tmpsv);
2847     }
2848     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2849 }
2850
2851 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2852  * UV as a string towards the end of buf, and return pointers to start and
2853  * end of it.
2854  *
2855  * We assume that buf is at least TYPE_CHARS(UV) long.
2856  */
2857
2858 static char *
2859 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2860 {
2861     char *ptr = buf + TYPE_CHARS(UV);
2862     char * const ebuf = ptr;
2863     int sign;
2864
2865     PERL_ARGS_ASSERT_UIV_2BUF;
2866
2867     if (is_uv)
2868         sign = 0;
2869     else if (iv >= 0) {
2870         uv = iv;
2871         sign = 0;
2872     } else {
2873         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2874         sign = 1;
2875     }
2876     do {
2877         *--ptr = '0' + (char)(uv % 10);
2878     } while (uv /= 10);
2879     if (sign)
2880         *--ptr = '-';
2881     *peob = ebuf;
2882     return ptr;
2883 }
2884
2885 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2886  * infinity or a not-a-number, writes the appropriate strings to the
2887  * buffer, including a zero byte.  On success returns the written length,
2888  * excluding the zero byte, on failure (not an infinity, not a nan)
2889  * returns zero, assert-fails on maxlen being too short.
2890  *
2891  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2892  * shared string constants we point to, instead of generating a new
2893  * string for each instance. */
2894 STATIC size_t
2895 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2896     char* s = buffer;
2897     assert(maxlen >= 4);
2898     if (Perl_isinf(nv)) {
2899         if (nv < 0) {
2900             if (maxlen < 5) /* "-Inf\0"  */
2901                 return 0;
2902             *s++ = '-';
2903         } else if (plus) {
2904             *s++ = '+';
2905         }
2906         *s++ = 'I';
2907         *s++ = 'n';
2908         *s++ = 'f';
2909     }
2910     else if (Perl_isnan(nv)) {
2911         *s++ = 'N';
2912         *s++ = 'a';
2913         *s++ = 'N';
2914         /* XXX optionally output the payload mantissa bits as
2915          * "(unsigned)" (to match the nan("...") C99 function,
2916          * or maybe as "(0xhhh...)"  would make more sense...
2917          * provide a format string so that the user can decide?
2918          * NOTE: would affect the maxlen and assert() logic.*/
2919     }
2920     else {
2921       return 0;
2922     }
2923     assert((s == buffer + 3) || (s == buffer + 4));
2924     *s++ = 0;
2925     return s - buffer - 1; /* -1: excluding the zero byte */
2926 }
2927
2928 /*
2929 =for apidoc sv_2pv_flags
2930
2931 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2932 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2933 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2934 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2935
2936 =cut
2937 */
2938
2939 char *
2940 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2941 {
2942     char *s;
2943
2944     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2945
2946     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2947          && SvTYPE(sv) != SVt_PVFM);
2948     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2949         mg_get(sv);
2950     if (SvROK(sv)) {
2951         if (SvAMAGIC(sv)) {
2952             SV *tmpstr;
2953             if (flags & SV_SKIP_OVERLOAD)
2954                 return NULL;
2955             tmpstr = AMG_CALLunary(sv, string_amg);
2956             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2957             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2958                 /* Unwrap this:  */
2959                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2960                  */
2961
2962                 char *pv;
2963                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2964                     if (flags & SV_CONST_RETURN) {
2965                         pv = (char *) SvPVX_const(tmpstr);
2966                     } else {
2967                         pv = (flags & SV_MUTABLE_RETURN)
2968                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2969                     }
2970                     if (lp)
2971                         *lp = SvCUR(tmpstr);
2972                 } else {
2973                     pv = sv_2pv_flags(tmpstr, lp, flags);
2974                 }
2975                 if (SvUTF8(tmpstr))
2976                     SvUTF8_on(sv);
2977                 else
2978                     SvUTF8_off(sv);
2979                 return pv;
2980             }
2981         }
2982         {
2983             STRLEN len;
2984             char *retval;
2985             char *buffer;
2986             SV *const referent = SvRV(sv);
2987
2988             if (!referent) {
2989                 len = 7;
2990                 retval = buffer = savepvn("NULLREF", len);
2991             } else if (SvTYPE(referent) == SVt_REGEXP &&
2992                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2993                         amagic_is_enabled(string_amg))) {
2994                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2995
2996                 assert(re);
2997                         
2998                 /* If the regex is UTF-8 we want the containing scalar to
2999                    have an UTF-8 flag too */
3000                 if (RX_UTF8(re))
3001                     SvUTF8_on(sv);
3002                 else
3003                     SvUTF8_off(sv);     
3004
3005                 if (lp)
3006                     *lp = RX_WRAPLEN(re);
3007  
3008                 return RX_WRAPPED(re);
3009             } else {
3010                 const char *const typestr = sv_reftype(referent, 0);
3011                 const STRLEN typelen = strlen(typestr);
3012                 UV addr = PTR2UV(referent);
3013                 const char *stashname = NULL;
3014                 STRLEN stashnamelen = 0; /* hush, gcc */
3015                 const char *buffer_end;
3016
3017                 if (SvOBJECT(referent)) {
3018                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3019
3020                     if (name) {
3021                         stashname = HEK_KEY(name);
3022                         stashnamelen = HEK_LEN(name);
3023
3024                         if (HEK_UTF8(name)) {
3025                             SvUTF8_on(sv);
3026                         } else {
3027                             SvUTF8_off(sv);
3028                         }
3029                     } else {
3030                         stashname = "__ANON__";
3031                         stashnamelen = 8;
3032                     }
3033                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3034                         + 2 * sizeof(UV) + 2 /* )\0 */;
3035                 } else {
3036                     len = typelen + 3 /* (0x */
3037                         + 2 * sizeof(UV) + 2 /* )\0 */;
3038                 }
3039
3040                 Newx(buffer, len, char);
3041                 buffer_end = retval = buffer + len;
3042
3043                 /* Working backwards  */
3044                 *--retval = '\0';
3045                 *--retval = ')';
3046                 do {
3047                     *--retval = PL_hexdigit[addr & 15];
3048                 } while (addr >>= 4);
3049                 *--retval = 'x';
3050                 *--retval = '0';
3051                 *--retval = '(';
3052
3053                 retval -= typelen;
3054                 memcpy(retval, typestr, typelen);
3055
3056                 if (stashname) {
3057                     *--retval = '=';
3058                     retval -= stashnamelen;
3059                     memcpy(retval, stashname, stashnamelen);
3060                 }
3061                 /* retval may not necessarily have reached the start of the
3062                    buffer here.  */
3063                 assert (retval >= buffer);
3064
3065                 len = buffer_end - retval - 1; /* -1 for that \0  */
3066             }
3067             if (lp)
3068                 *lp = len;
3069             SAVEFREEPV(buffer);
3070             return retval;
3071         }
3072     }
3073
3074     if (SvPOKp(sv)) {
3075         if (lp)
3076             *lp = SvCUR(sv);
3077         if (flags & SV_MUTABLE_RETURN)
3078             return SvPVX_mutable(sv);
3079         if (flags & SV_CONST_RETURN)
3080             return (char *)SvPVX_const(sv);
3081         return SvPVX(sv);
3082     }
3083
3084     if (SvIOK(sv)) {
3085         /* I'm assuming that if both IV and NV are equally valid then
3086            converting the IV is going to be more efficient */
3087         const U32 isUIOK = SvIsUV(sv);
3088         char buf[TYPE_CHARS(UV)];
3089         char *ebuf, *ptr;
3090         STRLEN len;
3091
3092         if (SvTYPE(sv) < SVt_PVIV)
3093             sv_upgrade(sv, SVt_PVIV);
3094         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3095         len = ebuf - ptr;
3096         /* inlined from sv_setpvn */
3097         s = SvGROW_mutable(sv, len + 1);
3098         Move(ptr, s, len, char);
3099         s += len;
3100         *s = '\0';
3101         SvPOK_on(sv);
3102     }
3103     else if (SvNOK(sv)) {
3104         if (SvTYPE(sv) < SVt_PVNV)
3105             sv_upgrade(sv, SVt_PVNV);
3106         if (SvNVX(sv) == 0.0
3107 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3108             && !Perl_isnan(SvNVX(sv))
3109 #endif
3110         ) {
3111             s = SvGROW_mutable(sv, 2);
3112             *s++ = '0';
3113             *s = '\0';
3114         } else {
3115             STRLEN len;
3116             STRLEN size = 5; /* "-Inf\0" */
3117
3118             s = SvGROW_mutable(sv, size);
3119             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3120             if (len > 0) {
3121                 s += len;
3122                 SvPOK_on(sv);
3123             }
3124             else {
3125                 /* some Xenix systems wipe out errno here */
3126                 dSAVE_ERRNO;
3127
3128                 size =
3129                     1 + /* sign */
3130                     1 + /* "." */
3131                     NV_DIG +
3132                     1 + /* "e" */
3133                     1 + /* sign */
3134                     5 + /* exponent digits */
3135                     1 + /* \0 */
3136                     2; /* paranoia */
3137
3138                 s = SvGROW_mutable(sv, size);
3139 #ifndef USE_LOCALE_NUMERIC
3140                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3141
3142                 SvPOK_on(sv);
3143 #else
3144                 {
3145                     bool local_radix;
3146                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3147                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3148
3149                     local_radix =
3150                         PL_numeric_local &&
3151                         PL_numeric_radix_sv &&
3152                         SvUTF8(PL_numeric_radix_sv);
3153                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3154                         size += SvLEN(PL_numeric_radix_sv) - 1;
3155                         s = SvGROW_mutable(sv, size);
3156                     }
3157
3158                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3159
3160                     /* If the radix character is UTF-8, and actually is in the
3161                      * output, turn on the UTF-8 flag for the scalar */
3162                     if (local_radix &&
3163                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3164                         SvUTF8_on(sv);
3165                     }
3166
3167                     RESTORE_LC_NUMERIC();
3168                 }
3169
3170                 /* We don't call SvPOK_on(), because it may come to
3171                  * pass that the locale changes so that the
3172                  * stringification we just did is no longer correct.  We
3173                  * will have to re-stringify every time it is needed */
3174 #endif
3175                 RESTORE_ERRNO;
3176             }
3177             while (*s) s++;
3178         }
3179     }
3180     else if (isGV_with_GP(sv)) {
3181         GV *const gv = MUTABLE_GV(sv);
3182         SV *const buffer = sv_newmortal();
3183
3184         gv_efullname3(buffer, gv, "*");
3185
3186         assert(SvPOK(buffer));
3187         if (SvUTF8(buffer))
3188             SvUTF8_on(sv);
3189         if (lp)
3190             *lp = SvCUR(buffer);
3191         return SvPVX(buffer);
3192     }
3193     else if (isREGEXP(sv)) {
3194         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3195         return RX_WRAPPED((REGEXP *)sv);
3196     }
3197     else {
3198         if (lp)
3199             *lp = 0;
3200         if (flags & SV_UNDEF_RETURNS_NULL)
3201             return NULL;
3202         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3203             report_uninit(sv);
3204         /* Typically the caller expects that sv_any is not NULL now.  */
3205         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3206             sv_upgrade(sv, SVt_PV);
3207         return (char *)"";
3208     }
3209
3210     {
3211         const STRLEN len = s - SvPVX_const(sv);
3212         if (lp) 
3213             *lp = len;
3214         SvCUR_set(sv, len);
3215     }
3216     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3217                           PTR2UV(sv),SvPVX_const(sv)));
3218     if (flags & SV_CONST_RETURN)
3219         return (char *)SvPVX_const(sv);
3220     if (flags & SV_MUTABLE_RETURN)
3221         return SvPVX_mutable(sv);
3222     return SvPVX(sv);
3223 }
3224
3225 /*
3226 =for apidoc sv_copypv
3227
3228 Copies a stringified representation of the source SV into the
3229 destination SV.  Automatically performs any necessary C<mg_get> and
3230 coercion of numeric values into strings.  Guaranteed to preserve
3231 C<UTF8> flag even from overloaded objects.  Similar in nature to
3232 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3233 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3234 would lose the UTF-8'ness of the PV.
3235
3236 =for apidoc sv_copypv_nomg
3237
3238 Like C<sv_copypv>, but doesn't invoke get magic first.
3239
3240 =for apidoc sv_copypv_flags
3241
3242 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3243 has the C<SV_GMAGIC> bit set.
3244
3245 =cut
3246 */
3247
3248 void
3249 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3250 {
3251     STRLEN len;
3252     const char *s;
3253
3254     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3255
3256     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3257     sv_setpvn(dsv,s,len);
3258     if (SvUTF8(ssv))
3259         SvUTF8_on(dsv);
3260     else
3261         SvUTF8_off(dsv);
3262 }
3263
3264 /*
3265 =for apidoc sv_2pvbyte
3266
3267 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3268 to its length.  May cause the SV to be downgraded from UTF-8 as a
3269 side-effect.
3270
3271 Usually accessed via the C<SvPVbyte> macro.
3272
3273 =cut
3274 */
3275
3276 char *
3277 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3278 {
3279     PERL_ARGS_ASSERT_SV_2PVBYTE;
3280
3281     SvGETMAGIC(sv);
3282     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3283      || isGV_with_GP(sv) || SvROK(sv)) {
3284         SV *sv2 = sv_newmortal();
3285         sv_copypv_nomg(sv2,sv);
3286         sv = sv2;
3287     }
3288     sv_utf8_downgrade(sv,0);
3289     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3290 }
3291
3292 /*
3293 =for apidoc sv_2pvutf8
3294
3295 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3296 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3297
3298 Usually accessed via the C<SvPVutf8> macro.
3299
3300 =cut
3301 */
3302
3303 char *
3304 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3305 {
3306     PERL_ARGS_ASSERT_SV_2PVUTF8;
3307
3308     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3309      || isGV_with_GP(sv) || SvROK(sv))
3310         sv = sv_mortalcopy(sv);
3311     else
3312         SvGETMAGIC(sv);
3313     sv_utf8_upgrade_nomg(sv);
3314     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3315 }
3316
3317
3318 /*
3319 =for apidoc sv_2bool
3320
3321 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3322 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3323 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3324
3325 =for apidoc sv_2bool_flags
3326
3327 This function is only used by C<sv_true()> and friends,  and only if
3328 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3329 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3330
3331
3332 =cut
3333 */
3334
3335 bool
3336 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3337 {
3338     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3339
3340     restart:
3341     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3342
3343     if (!SvOK(sv))
3344         return 0;
3345     if (SvROK(sv)) {
3346         if (SvAMAGIC(sv)) {
3347             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3348             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3349                 bool svb;
3350                 sv = tmpsv;
3351                 if(SvGMAGICAL(sv)) {
3352                     flags = SV_GMAGIC;
3353                     goto restart; /* call sv_2bool */
3354                 }
3355                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3356                 else if(!SvOK(sv)) {
3357                     svb = 0;
3358                 }
3359                 else if(SvPOK(sv)) {
3360                     svb = SvPVXtrue(sv);
3361                 }
3362                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3363                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3364                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3365                 }
3366                 else {
3367                     flags = 0;
3368                     goto restart; /* call sv_2bool_nomg */
3369                 }
3370                 return cBOOL(svb);
3371             }
3372         }
3373         return SvRV(sv) != 0;
3374     }
3375     if (isREGEXP(sv))
3376         return
3377           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3378     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3379 }
3380
3381 /*
3382 =for apidoc sv_utf8_upgrade
3383
3384 Converts the PV of an SV to its UTF-8-encoded form.
3385 Forces the SV to string form if it is not already.
3386 Will C<mg_get> on C<sv> if appropriate.
3387 Always sets the C<SvUTF8> flag to avoid future validity checks even
3388 if the whole string is the same in UTF-8 as not.
3389 Returns the number of bytes in the converted string
3390
3391 This is not a general purpose byte encoding to Unicode interface:
3392 use the Encode extension for that.
3393
3394 =for apidoc sv_utf8_upgrade_nomg
3395
3396 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3397
3398 =for apidoc sv_utf8_upgrade_flags
3399
3400 Converts the PV of an SV to its UTF-8-encoded form.
3401 Forces the SV to string form if it is not already.
3402 Always sets the SvUTF8 flag to avoid future validity checks even
3403 if all the bytes are invariant in UTF-8.
3404 If C<flags> has C<SV_GMAGIC> bit set,
3405 will C<mg_get> on C<sv> if appropriate, else not.
3406
3407 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3408 will expand when converted to UTF-8, and skips the extra work of checking for
3409 that.  Typically this flag is used by a routine that has already parsed the
3410 string and found such characters, and passes this information on so that the
3411 work doesn't have to be repeated.
3412
3413 Returns the number of bytes in the converted string.
3414
3415 This is not a general purpose byte encoding to Unicode interface:
3416 use the Encode extension for that.
3417
3418 =for apidoc sv_utf8_upgrade_flags_grow
3419
3420 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3421 the number of unused bytes the string of C<sv> is guaranteed to have free after
3422 it upon return.  This allows the caller to reserve extra space that it intends
3423 to fill, to avoid extra grows.
3424
3425 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3426 are implemented in terms of this function.
3427
3428 Returns the number of bytes in the converted string (not including the spares).
3429
3430 =cut
3431
3432 (One might think that the calling routine could pass in the position of the
3433 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3434 have to be found again.  But that is not the case, because typically when the
3435 caller is likely to use this flag, it won't be calling this routine unless it
3436 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3437 and just use bytes.  But some things that do fit into a byte are variants in
3438 utf8, and the caller may not have been keeping track of these.)
3439
3440 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3441 C<NUL> isn't guaranteed due to having other routines do the work in some input
3442 cases, or if the input is already flagged as being in utf8.
3443
3444 The speed of this could perhaps be improved for many cases if someone wanted to
3445 write a fast function that counts the number of variant characters in a string,
3446 especially if it could return the position of the first one.
3447
3448 */
3449
3450 STRLEN
3451 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3452 {
3453     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3454
3455     if (sv == &PL_sv_undef)
3456         return 0;
3457     if (!SvPOK_nog(sv)) {
3458         STRLEN len = 0;
3459         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3460             (void) sv_2pv_flags(sv,&len, flags);
3461             if (SvUTF8(sv)) {
3462                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3463                 return len;
3464             }
3465         } else {
3466             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3467         }
3468     }
3469
3470     if (SvUTF8(sv)) {
3471         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3472         return SvCUR(sv);
3473     }
3474
3475     if (SvIsCOW(sv)) {
3476         S_sv_uncow(aTHX_ sv, 0);
3477     }
3478
3479     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3480         sv_recode_to_utf8(sv, _get_encoding());
3481         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3482         return SvCUR(sv);
3483     }
3484
3485     if (SvCUR(sv) == 0) {
3486         if (extra) SvGROW(sv, extra);
3487     } else { /* Assume Latin-1/EBCDIC */
3488         /* This function could be much more efficient if we
3489          * had a FLAG in SVs to signal if there are any variant
3490          * chars in the PV.  Given that there isn't such a flag
3491          * make the loop as fast as possible (although there are certainly ways
3492          * to speed this up, eg. through vectorization) */
3493         U8 * s = (U8 *) SvPVX_const(sv);
3494         U8 * e = (U8 *) SvEND(sv);
3495         U8 *t = s;
3496         STRLEN two_byte_count = 0;
3497         
3498         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3499
3500         /* See if really will need to convert to utf8.  We mustn't rely on our
3501          * incoming SV being well formed and having a trailing '\0', as certain
3502          * code in pp_formline can send us partially built SVs. */
3503
3504         while (t < e) {
3505             const U8 ch = *t++;
3506             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3507
3508             t--;    /* t already incremented; re-point to first variant */
3509             two_byte_count = 1;
3510             goto must_be_utf8;
3511         }
3512
3513         /* utf8 conversion not needed because all are invariants.  Mark as
3514          * UTF-8 even if no variant - saves scanning loop */
3515         SvUTF8_on(sv);
3516         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3517         return SvCUR(sv);
3518
3519       must_be_utf8:
3520
3521         /* Here, the string should be converted to utf8, either because of an
3522          * input flag (two_byte_count = 0), or because a character that
3523          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3524          * the beginning of the string (if we didn't examine anything), or to
3525          * the first variant.  In either case, everything from s to t - 1 will
3526          * occupy only 1 byte each on output.
3527          *
3528          * There are two main ways to convert.  One is to create a new string
3529          * and go through the input starting from the beginning, appending each
3530          * converted value onto the new string as we go along.  It's probably
3531          * best to allocate enough space in the string for the worst possible
3532          * case rather than possibly running out of space and having to
3533          * reallocate and then copy what we've done so far.  Since everything
3534          * from s to t - 1 is invariant, the destination can be initialized
3535          * with these using a fast memory copy
3536          *
3537          * The other way is to figure out exactly how big the string should be
3538          * by parsing the entire input.  Then you don't have to make it big
3539          * enough to handle the worst possible case, and more importantly, if
3540          * the string you already have is large enough, you don't have to
3541          * allocate a new string, you can copy the last character in the input
3542          * string to the final position(s) that will be occupied by the
3543          * converted string and go backwards, stopping at t, since everything
3544          * before that is invariant.
3545          *
3546          * There are advantages and disadvantages to each method.
3547          *
3548          * In the first method, we can allocate a new string, do the memory
3549          * copy from the s to t - 1, and then proceed through the rest of the
3550          * string byte-by-byte.
3551          *
3552          * In the second method, we proceed through the rest of the input
3553          * string just calculating how big the converted string will be.  Then
3554          * there are two cases:
3555          *  1)  if the string has enough extra space to handle the converted
3556          *      value.  We go backwards through the string, converting until we
3557          *      get to the position we are at now, and then stop.  If this
3558          *      position is far enough along in the string, this method is
3559          *      faster than the other method.  If the memory copy were the same
3560          *      speed as the byte-by-byte loop, that position would be about
3561          *      half-way, as at the half-way mark, parsing to the end and back
3562          *      is one complete string's parse, the same amount as starting
3563          *      over and going all the way through.  Actually, it would be
3564          *      somewhat less than half-way, as it's faster to just count bytes
3565          *      than to also copy, and we don't have the overhead of allocating
3566          *      a new string, changing the scalar to use it, and freeing the
3567          *      existing one.  But if the memory copy is fast, the break-even
3568          *      point is somewhere after half way.  The counting loop could be
3569          *      sped up by vectorization, etc, to move the break-even point
3570          *      further towards the beginning.
3571          *  2)  if the string doesn't have enough space to handle the converted
3572          *      value.  A new string will have to be allocated, and one might
3573          *      as well, given that, start from the beginning doing the first
3574          *      method.  We've spent extra time parsing the string and in
3575          *      exchange all we've gotten is that we know precisely how big to
3576          *      make the new one.  Perl is more optimized for time than space,
3577          *      so this case is a loser.
3578          * So what I've decided to do is not use the 2nd method unless it is
3579          * guaranteed that a new string won't have to be allocated, assuming
3580          * the worst case.  I also decided not to put any more conditions on it
3581          * than this, for now.  It seems likely that, since the worst case is
3582          * twice as big as the unknown portion of the string (plus 1), we won't
3583          * be guaranteed enough space, causing us to go to the first method,
3584          * unless the string is short, or the first variant character is near
3585          * the end of it.  In either of these cases, it seems best to use the
3586          * 2nd method.  The only circumstance I can think of where this would
3587          * be really slower is if the string had once had much more data in it
3588          * than it does now, but there is still a substantial amount in it  */
3589
3590         {
3591             STRLEN invariant_head = t - s;
3592             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3593             if (SvLEN(sv) < size) {
3594
3595                 /* Here, have decided to allocate a new string */
3596
3597                 U8 *dst;
3598                 U8 *d;
3599
3600                 Newx(dst, size, U8);
3601
3602                 /* If no known invariants at the beginning of the input string,
3603                  * set so starts from there.  Otherwise, can use memory copy to
3604                  * get up to where we are now, and then start from here */
3605
3606                 if (invariant_head == 0) {
3607                     d = dst;
3608                 } else {
3609                     Copy(s, dst, invariant_head, char);
3610                     d = dst + invariant_head;
3611                 }
3612
3613                 while (t < e) {
3614                     append_utf8_from_native_byte(*t, &d);
3615                     t++;
3616                 }
3617                 *d = '\0';
3618                 SvPV_free(sv); /* No longer using pre-existing string */
3619                 SvPV_set(sv, (char*)dst);
3620                 SvCUR_set(sv, d - dst);
3621                 SvLEN_set(sv, size);
3622             } else {
3623
3624                 /* Here, have decided to get the exact size of the string.
3625                  * Currently this happens only when we know that there is
3626                  * guaranteed enough space to fit the converted string, so
3627                  * don't have to worry about growing.  If two_byte_count is 0,
3628                  * then t points to the first byte of the string which hasn't
3629                  * been examined yet.  Otherwise two_byte_count is 1, and t
3630                  * points to the first byte in the string that will expand to
3631                  * two.  Depending on this, start examining at t or 1 after t.
3632                  * */
3633
3634                 U8 *d = t + two_byte_count;
3635
3636
3637                 /* Count up the remaining bytes that expand to two */
3638
3639                 while (d < e) {
3640                     const U8 chr = *d++;
3641                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3642                 }
3643
3644                 /* The string will expand by just the number of bytes that
3645                  * occupy two positions.  But we are one afterwards because of
3646                  * the increment just above.  This is the place to put the
3647                  * trailing NUL, and to set the length before we decrement */
3648
3649                 d += two_byte_count;
3650                 SvCUR_set(sv, d - s);
3651                 *d-- = '\0';
3652
3653
3654                 /* Having decremented d, it points to the position to put the
3655                  * very last byte of the expanded string.  Go backwards through
3656                  * the string, copying and expanding as we go, stopping when we
3657                  * get to the part that is invariant the rest of the way down */
3658
3659                 e--;
3660                 while (e >= t) {
3661                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3662                         *d-- = *e;
3663                     } else {
3664                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3665                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3666                     }
3667                     e--;
3668                 }
3669             }
3670
3671             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3672                 /* Update pos. We do it at the end rather than during
3673                  * the upgrade, to avoid slowing down the common case
3674                  * (upgrade without pos).
3675                  * pos can be stored as either bytes or characters.  Since
3676                  * this was previously a byte string we can just turn off
3677                  * the bytes flag. */
3678                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3679                 if (mg) {
3680                     mg->mg_flags &= ~MGf_BYTES;
3681                 }
3682                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3683                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3684             }
3685         }
3686     }
3687
3688     /* Mark as UTF-8 even if no variant - saves scanning loop */
3689     SvUTF8_on(sv);
3690     return SvCUR(sv);
3691 }
3692
3693 /*
3694 =for apidoc sv_utf8_downgrade
3695
3696 Attempts to convert the PV of an SV from characters to bytes.
3697 If the PV contains a character that cannot fit
3698 in a byte, this conversion will fail;
3699 in this case, either returns false or, if C<fail_ok> is not
3700 true, croaks.
3701
3702 This is not a general purpose Unicode to byte encoding interface:
3703 use the C<Encode> extension for that.
3704
3705 =cut
3706 */
3707
3708 bool
3709 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3710 {
3711     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3712
3713     if (SvPOKp(sv) && SvUTF8(sv)) {
3714         if (SvCUR(sv)) {
3715             U8 *s;
3716             STRLEN len;
3717             int mg_flags = SV_GMAGIC;
3718
3719             if (SvIsCOW(sv)) {
3720                 S_sv_uncow(aTHX_ sv, 0);
3721             }
3722             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3723                 /* update pos */
3724                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3725                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3726                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3727                                                 SV_GMAGIC|SV_CONST_RETURN);
3728                         mg_flags = 0; /* sv_pos_b2u does get magic */
3729                 }
3730                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3731                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3732
3733             }
3734             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3735
3736             if (!utf8_to_bytes(s, &len)) {
3737                 if (fail_ok)
3738                     return FALSE;
3739                 else {
3740                     if (PL_op)
3741                         Perl_croak(aTHX_ "Wide character in %s",
3742                                    OP_DESC(PL_op));
3743                     else
3744                         Perl_croak(aTHX_ "Wide character");
3745                 }
3746             }
3747             SvCUR_set(sv, len);
3748         }
3749     }
3750     SvUTF8_off(sv);
3751     return TRUE;
3752 }
3753
3754 /*
3755 =for apidoc sv_utf8_encode
3756
3757 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3758 flag off so that it looks like octets again.
3759
3760 =cut
3761 */
3762
3763 void
3764 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3765 {
3766     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3767
3768     if (SvREADONLY(sv)) {
3769         sv_force_normal_flags(sv, 0);
3770     }
3771     (void) sv_utf8_upgrade(sv);
3772     SvUTF8_off(sv);
3773 }
3774
3775 /*
3776 =for apidoc sv_utf8_decode
3777
3778 If the PV of the SV is an octet sequence in UTF-8
3779 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3780 so that it looks like a character.  If the PV contains only single-byte
3781 characters, the C<SvUTF8> flag stays off.
3782 Scans PV for validity and returns false if the PV is invalid UTF-8.
3783
3784 =cut
3785 */
3786
3787 bool
3788 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3789 {
3790     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3791
3792     if (SvPOKp(sv)) {
3793         const U8 *start, *c;
3794         const U8 *e;
3795
3796         /* The octets may have got themselves encoded - get them back as
3797          * bytes
3798          */
3799         if (!sv_utf8_downgrade(sv, TRUE))
3800             return FALSE;
3801
3802         /* it is actually just a matter of turning the utf8 flag on, but
3803          * we want to make sure everything inside is valid utf8 first.
3804          */
3805         c = start = (const U8 *) SvPVX_const(sv);
3806         if (!is_utf8_string(c, SvCUR(sv)))
3807             return FALSE;
3808         e = (const U8 *) SvEND(sv);
3809         while (c < e) {
3810             const U8 ch = *c++;
3811             if (!UTF8_IS_INVARIANT(ch)) {
3812                 SvUTF8_on(sv);
3813                 break;
3814             }
3815         }
3816         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3817             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3818                    after this, clearing pos.  Does anything on CPAN
3819                    need this? */
3820             /* adjust pos to the start of a UTF8 char sequence */
3821             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3822             if (mg) {
3823                 I32 pos = mg->mg_len;
3824                 if (pos > 0) {
3825                     for (c = start + pos; c > start; c--) {
3826                         if (UTF8_IS_START(*c))
3827                             break;
3828                     }
3829                     mg->mg_len  = c - start;
3830                 }
3831             }
3832             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3833                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3834         }
3835     }
3836     return TRUE;
3837 }
3838
3839 /*
3840 =for apidoc sv_setsv
3841
3842 Copies the contents of the source SV C<ssv> into the destination SV
3843 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3844 function if the source SV needs to be reused.  Does not handle 'set' magic on
3845 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3846 performs a copy-by-value, obliterating any previous content of the
3847 destination.
3848
3849 You probably want to use one of the assortment of wrappers, such as
3850 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3851 C<SvSetMagicSV_nosteal>.
3852
3853 =for apidoc sv_setsv_flags
3854
3855 Copies the contents of the source SV C<ssv> into the destination SV
3856 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3857 function if the source SV needs to be reused.  Does not handle 'set' magic.
3858 Loosely speaking, it performs a copy-by-value, obliterating any previous
3859 content of the destination.
3860 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3861 C<ssv> if appropriate, else not.  If the C<flags>
3862 parameter has the C<SV_NOSTEAL> bit set then the
3863 buffers of temps will not be stolen.  C<sv_setsv>
3864 and C<sv_setsv_nomg> are implemented in terms of this function.
3865
3866 You probably want to use one of the assortment of wrappers, such as
3867 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3868 C<SvSetMagicSV_nosteal>.
3869
3870 This is the primary function for copying scalars, and most other
3871 copy-ish functions and macros use this underneath.
3872
3873 =cut
3874 */
3875
3876 static void
3877 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3878 {
3879     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3880     HV *old_stash = NULL;
3881
3882     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3883
3884     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3885         const char * const name = GvNAME(sstr);
3886         const STRLEN len = GvNAMELEN(sstr);
3887         {
3888             if (dtype >= SVt_PV) {
3889                 SvPV_free(dstr);
3890                 SvPV_set(dstr, 0);
3891                 SvLEN_set(dstr, 0);
3892                 SvCUR_set(dstr, 0);
3893             }
3894             SvUPGRADE(dstr, SVt_PVGV);
3895             (void)SvOK_off(dstr);
3896             isGV_with_GP_on(dstr);
3897         }
3898         GvSTASH(dstr) = GvSTASH(sstr);
3899         if (GvSTASH(dstr))
3900             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3901         gv_name_set(MUTABLE_GV(dstr), name, len,
3902                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3903         SvFAKE_on(dstr);        /* can coerce to non-glob */
3904     }
3905
3906     if(GvGP(MUTABLE_GV(sstr))) {
3907         /* If source has method cache entry, clear it */
3908         if(GvCVGEN(sstr)) {
3909             SvREFCNT_dec(GvCV(sstr));
3910             GvCV_set(sstr, NULL);
3911             GvCVGEN(sstr) = 0;
3912         }
3913         /* If source has a real method, then a method is
3914            going to change */
3915         else if(
3916          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3917         ) {
3918             mro_changes = 1;
3919         }
3920     }
3921
3922     /* If dest already had a real method, that's a change as well */
3923     if(
3924         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3925      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3926     ) {
3927         mro_changes = 1;
3928     }
3929
3930     /* We don't need to check the name of the destination if it was not a
3931        glob to begin with. */
3932     if(dtype == SVt_PVGV) {
3933         const char * const name = GvNAME((const GV *)dstr);
3934         if(
3935             strEQ(name,"ISA")
3936          /* The stash may have been detached from the symbol table, so
3937             check its name. */
3938          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3939         )
3940             mro_changes = 2;
3941         else {
3942             const STRLEN len = GvNAMELEN(dstr);
3943             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3944              || (len == 1 && name[0] == ':')) {
3945                 mro_changes = 3;
3946
3947                 /* Set aside the old stash, so we can reset isa caches on
3948                    its subclasses. */
3949                 if((old_stash = GvHV(dstr)))
3950                     /* Make sure we do not lose it early. */
3951                     SvREFCNT_inc_simple_void_NN(
3952                      sv_2mortal((SV *)old_stash)
3953                     );
3954             }
3955         }
3956
3957         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3958     }
3959
3960     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3961      * so temporarily protect it */
3962     ENTER;
3963     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3964     gp_free(MUTABLE_GV(dstr));
3965     GvINTRO_off(dstr);          /* one-shot flag */
3966     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3967     LEAVE;
3968
3969     if (SvTAINTED(sstr))
3970         SvTAINT(dstr);
3971     if (GvIMPORTED(dstr) != GVf_IMPORTED
3972         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3973         {
3974             GvIMPORTED_on(dstr);
3975         }
3976     GvMULTI_on(dstr);
3977     if(mro_changes == 2) {
3978       if (GvAV((const GV *)sstr)) {
3979         MAGIC *mg;
3980         SV * const sref = (SV *)GvAV((const GV *)dstr);
3981         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3982             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3983                 AV * const ary = newAV();
3984                 av_push(ary, mg->mg_obj); /* takes the refcount */
3985                 mg->mg_obj = (SV *)ary;
3986             }
3987             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3988         }
3989         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3990       }
3991       mro_isa_changed_in(GvSTASH(dstr));
3992     }
3993     else if(mro_changes == 3) {
3994         HV * const stash = GvHV(dstr);
3995         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3996             mro_package_moved(
3997                 stash, old_stash,
3998                 (GV *)dstr, 0
3999             );
4000     }
4001     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
4002     if (GvIO(dstr) && dtype == SVt_PVGV) {
4003         DEBUG_o(Perl_deb(aTHX_
4004                         "glob_assign_glob clearing PL_stashcache\n"));
4005         /* It's a cache. It will rebuild itself quite happily.
4006            It's a lot of effort to work out exactly which key (or keys)
4007            might be invalidated by the creation of the this file handle.
4008          */
4009         hv_clear(PL_stashcache);
4010     }
4011     return;
4012 }
4013
4014 void
4015 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4016 {
4017     SV * const sref = SvRV(sstr);
4018     SV *dref;
4019     const int intro = GvINTRO(dstr);
4020     SV **location;
4021     U8 import_flag = 0;
4022     const U32 stype = SvTYPE(sref);
4023
4024     PERL_ARGS_ASSERT_GV_SETREF;
4025
4026     if (intro) {
4027         GvINTRO_off(dstr);      /* one-shot flag */
4028         GvLINE(dstr) = CopLINE(PL_curcop);
4029         GvEGV(dstr) = MUTABLE_GV(dstr);
4030     }
4031     GvMULTI_on(dstr);
4032     switch (stype) {
4033     case SVt_PVCV:
4034         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4035         import_flag = GVf_IMPORTED_CV;
4036         goto common;
4037     case SVt_PVHV:
4038         location = (SV **) &GvHV(dstr);
4039         import_flag = GVf_IMPORTED_HV;
4040         goto common;
4041     case SVt_PVAV:
4042         location = (SV **) &GvAV(dstr);
4043         import_flag = GVf_IMPORTED_AV;
4044         goto common;
4045     case SVt_PVIO:
4046         location = (SV **) &GvIOp(dstr);
4047         goto common;
4048     case SVt_PVFM:
4049         location = (SV **) &GvFORM(dstr);
4050         goto common;
4051     default:
4052         location = &GvSV(dstr);
4053         import_flag = GVf_IMPORTED_SV;
4054     common:
4055         if (intro) {
4056             if (stype == SVt_PVCV) {
4057                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4058                 if (GvCVGEN(dstr)) {
4059                     SvREFCNT_dec(GvCV(dstr));
4060                     GvCV_set(dstr, NULL);
4061                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4062                 }
4063             }
4064             /* SAVEt_GVSLOT takes more room on the savestack and has more
4065                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4066                leave_scope needs access to the GV so it can reset method
4067                caches.  We must use SAVEt_GVSLOT whenever the type is
4068                SVt_PVCV, even if the stash is anonymous, as the stash may
4069                gain a name somehow before leave_scope. */
4070             if (stype == SVt_PVCV) {
4071                 /* There is no save_pushptrptrptr.  Creating it for this
4072                    one call site would be overkill.  So inline the ss add
4073                    routines here. */
4074                 dSS_ADD;
4075                 SS_ADD_PTR(dstr);
4076                 SS_ADD_PTR(location);
4077                 SS_ADD_PTR(SvREFCNT_inc(*location));
4078                 SS_ADD_UV(SAVEt_GVSLOT);
4079                 SS_ADD_END(4);
4080             }
4081             else SAVEGENERICSV(*location);
4082         }
4083         dref = *location;
4084         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4085             CV* const cv = MUTABLE_CV(*location);
4086             if (cv) {
4087                 if (!GvCVGEN((const GV *)dstr) &&
4088                     (CvROOT(cv) || CvXSUB(cv)) &&
4089                     /* redundant check that avoids creating the extra SV
4090                        most of the time: */
4091                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4092                     {
4093                         SV * const new_const_sv =
4094                             CvCONST((const CV *)sref)
4095                                  ? cv_const_sv((const CV *)sref)
4096                                  : NULL;
4097                         report_redefined_cv(
4098                            sv_2mortal(Perl_newSVpvf(aTHX_
4099                                 "%"HEKf"::%"HEKf,
4100                                 HEKfARG(
4101                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4102                                 ),
4103                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4104                            )),
4105                            cv,
4106                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4107                         );
4108                     }
4109                 if (!intro)
4110                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4111                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4112                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4113                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4114             }
4115             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4116             GvASSUMECV_on(dstr);
4117             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4118                 if (intro && GvREFCNT(dstr) > 1) {
4119                     /* temporary remove extra savestack's ref */
4120                     --GvREFCNT(dstr);
4121                     gv_method_changed(dstr);
4122                     ++GvREFCNT(dstr);
4123                 }
4124                 else gv_method_changed(dstr);
4125             }
4126         }
4127         *location = SvREFCNT_inc_simple_NN(sref);
4128         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4129             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4130             GvFLAGS(dstr) |= import_flag;
4131         }
4132
4133         if (stype == SVt_PVHV) {
4134             const char * const name = GvNAME((GV*)dstr);
4135             const STRLEN len = GvNAMELEN(dstr);
4136             if (
4137                 (
4138                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4139                 || (len == 1 && name[0] == ':')
4140                 )
4141              && (!dref || HvENAME_get(dref))
4142             ) {
4143                 mro_package_moved(
4144                     (HV *)sref, (HV *)dref,
4145                     (GV *)dstr, 0
4146                 );
4147             }
4148         }
4149         else if (
4150             stype == SVt_PVAV && sref != dref
4151          && strEQ(GvNAME((GV*)dstr), "ISA")
4152          /* The stash may have been detached from the symbol table, so
4153             check its name before doing anything. */
4154          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4155         ) {
4156             MAGIC *mg;
4157             MAGIC * const omg = dref && SvSMAGICAL(dref)
4158                                  ? mg_find(dref, PERL_MAGIC_isa)
4159                                  : NULL;
4160             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4161                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4162                     AV * const ary = newAV();
4163                     av_push(ary, mg->mg_obj); /* takes the refcount */
4164                     mg->mg_obj = (SV *)ary;
4165                 }
4166                 if (omg) {
4167                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4168                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4169                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4170                         while (items--)
4171                             av_push(
4172                              (AV *)mg->mg_obj,
4173                              SvREFCNT_inc_simple_NN(*svp++)
4174                             );
4175                     }
4176                     else
4177                         av_push(
4178                          (AV *)mg->mg_obj,
4179                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4180                         );
4181                 }
4182                 else
4183                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4184             }
4185             else
4186             {
4187                 sv_magic(
4188                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4189                 );
4190                 mg = mg_find(sref, PERL_MAGIC_isa);
4191             }
4192             /* Since the *ISA assignment could have affected more than
4193                one stash, don't call mro_isa_changed_in directly, but let
4194                magic_clearisa do it for us, as it already has the logic for
4195                dealing with globs vs arrays of globs. */
4196             assert(mg);
4197             Perl_magic_clearisa(aTHX_ NULL, mg);
4198         }
4199         else if (stype == SVt_PVIO) {
4200             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4201             /* It's a cache. It will rebuild itself quite happily.
4202                It's a lot of effort to work out exactly which key (or keys)
4203                might be invalidated by the creation of the this file handle.
4204             */
4205             hv_clear(PL_stashcache);
4206         }
4207         break;
4208     }
4209     if (!intro) SvREFCNT_dec(dref);
4210     if (SvTAINTED(sstr))
4211         SvTAINT(dstr);
4212     return;
4213 }
4214
4215
4216
4217
4218 #ifdef PERL_DEBUG_READONLY_COW
4219 # include <sys/mman.h>
4220
4221 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4222 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4223 # endif
4224
4225 void
4226 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4227 {
4228     struct perl_memory_debug_header * const header =
4229         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4230     const MEM_SIZE len = header->size;
4231     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4232 # ifdef PERL_TRACK_MEMPOOL
4233     if (!header->readonly) header->readonly = 1;
4234 # endif
4235     if (mprotect(header, len, PROT_READ))
4236         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4237                          header, len, errno);
4238 }
4239
4240 static void
4241 S_sv_buf_to_rw(pTHX_ SV *sv)
4242 {
4243     struct perl_memory_debug_header * const header =
4244         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4245     const MEM_SIZE len = header->size;
4246     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4247     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4248         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4249                          header, len, errno);
4250 # ifdef PERL_TRACK_MEMPOOL
4251     header->readonly = 0;
4252 # endif
4253 }
4254
4255 #else
4256 # define sv_buf_to_ro(sv)       NOOP
4257 # define sv_buf_to_rw(sv)       NOOP
4258 #endif
4259
4260 void
4261 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4262 {
4263     U32 sflags;
4264     int dtype;
4265     svtype stype;
4266
4267     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4268
4269     if (UNLIKELY( sstr == dstr ))
4270         return;
4271
4272     if (SvIS_FREED(dstr)) {
4273         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4274                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4275     }
4276     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4277     if (UNLIKELY( !sstr ))
4278         sstr = &PL_sv_undef;
4279     if (SvIS_FREED(sstr)) {
4280         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4281                    (void*)sstr, (void*)dstr);
4282     }
4283     stype = SvTYPE(sstr);
4284     dtype = SvTYPE(dstr);
4285
4286     /* There's a lot of redundancy below but we're going for speed here */
4287
4288     switch (stype) {
4289     case SVt_NULL:
4290       undef_sstr:
4291         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4292             (void)SvOK_off(dstr);
4293             return;
4294         }
4295         break;
4296     case SVt_IV:
4297         if (SvIOK(sstr)) {
4298             switch (dtype) {
4299             case SVt_NULL:
4300                 /* For performance, we inline promoting to type SVt_IV. */
4301                 /* We're starting from SVt_NULL, so provided that define is
4302                  * actual 0, we don't have to unset any SV type flags
4303                  * to promote to SVt_IV. */
4304                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4305                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4306                 SvFLAGS(dstr) |= SVt_IV;
4307                 break;
4308             case SVt_NV:
4309             case SVt_PV:
4310                 sv_upgrade(dstr, SVt_PVIV);
4311                 break;
4312             case SVt_PVGV:
4313             case SVt_PVLV:
4314                 goto end_of_first_switch;
4315             }
4316             (void)SvIOK_only(dstr);
4317             SvIV_set(dstr,  SvIVX(sstr));
4318             if (SvIsUV(sstr))
4319                 SvIsUV_on(dstr);
4320             /* SvTAINTED can only be true if the SV has taint magic, which in
4321                turn means that the SV type is PVMG (or greater). This is the
4322                case statement for SVt_IV, so this cannot be true (whatever gcov
4323                may say).  */
4324             assert(!SvTAINTED(sstr));
4325             return;
4326         }
4327         if (!SvROK(sstr))
4328             goto undef_sstr;
4329         if (dtype < SVt_PV && dtype != SVt_IV)
4330             sv_upgrade(dstr, SVt_IV);
4331         break;
4332
4333     case SVt_NV:
4334         if (LIKELY( SvNOK(sstr) )) {
4335             switch (dtype) {
4336             case SVt_NULL:
4337             case SVt_IV:
4338                 sv_upgrade(dstr, SVt_NV);
4339                 break;
4340             case SVt_PV:
4341             case SVt_PVIV:
4342                 sv_upgrade(dstr, SVt_PVNV);
4343                 break;
4344             case SVt_PVGV:
4345             case SVt_PVLV:
4346                 goto end_of_first_switch;
4347             }
4348             SvNV_set(dstr, SvNVX(sstr));
4349             (void)SvNOK_only(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_NV, so this cannot be true (whatever gcov
4353                may say).  */
4354             assert(!SvTAINTED(sstr));
4355             return;
4356         }
4357         goto undef_sstr;
4358
4359     case SVt_PV:
4360         if (dtype < SVt_PV)
4361             sv_upgrade(dstr, SVt_PV);
4362         break;
4363     case SVt_PVIV:
4364         if (dtype < SVt_PVIV)
4365             sv_upgrade(dstr, SVt_PVIV);
4366         break;
4367     case SVt_PVNV:
4368         if (dtype < SVt_PVNV)
4369             sv_upgrade(dstr, SVt_PVNV);
4370         break;
4371     default:
4372         {
4373         const char * const type = sv_reftype(sstr,0);
4374         if (PL_op)
4375             /* diag_listed_as: Bizarre copy of %s */
4376             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4377         else
4378             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4379         }
4380         NOT_REACHED; /* NOTREACHED */
4381
4382     case SVt_REGEXP:
4383       upgregexp:
4384         if (dtype < SVt_REGEXP)
4385         {
4386             if (dtype >= SVt_PV) {
4387                 SvPV_free(dstr);
4388                 SvPV_set(dstr, 0);
4389                 SvLEN_set(dstr, 0);
4390                 SvCUR_set(dstr, 0);
4391             }
4392             sv_upgrade(dstr, SVt_REGEXP);
4393         }
4394         break;
4395
4396         case SVt_INVLIST:
4397     case SVt_PVLV:
4398     case SVt_PVGV:
4399     case SVt_PVMG:
4400         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4401             mg_get(sstr);
4402             if (SvTYPE(sstr) != stype)
4403                 stype = SvTYPE(sstr);
4404         }
4405         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4406                     glob_assign_glob(dstr, sstr, dtype);
4407                     return;
4408         }
4409         if (stype == SVt_PVLV)
4410         {
4411             if (isREGEXP(sstr)) goto upgregexp;
4412             SvUPGRADE(dstr, SVt_PVNV);
4413         }
4414         else
4415             SvUPGRADE(dstr, (svtype)stype);
4416     }
4417  end_of_first_switch:
4418
4419     /* dstr may have been upgraded.  */
4420     dtype = SvTYPE(dstr);
4421     sflags = SvFLAGS(sstr);
4422
4423     if (UNLIKELY( dtype == SVt_PVCV )) {
4424         /* Assigning to a subroutine sets the prototype.  */
4425         if (SvOK(sstr)) {
4426             STRLEN len;
4427             const char *const ptr = SvPV_const(sstr, len);
4428
4429             SvGROW(dstr, len + 1);
4430             Copy(ptr, SvPVX(dstr), len + 1, char);
4431             SvCUR_set(dstr, len);
4432             SvPOK_only(dstr);
4433             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4434             CvAUTOLOAD_off(dstr);
4435         } else {
4436             SvOK_off(dstr);
4437         }
4438     }
4439     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4440              || dtype == SVt_PVFM))
4441     {
4442         const char * const type = sv_reftype(dstr,0);
4443         if (PL_op)
4444             /* diag_listed_as: Cannot copy to %s */
4445             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4446         else
4447             Perl_croak(aTHX_ "Cannot copy to %s", type);
4448     } else if (sflags & SVf_ROK) {
4449         if (isGV_with_GP(dstr)
4450             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4451             sstr = SvRV(sstr);
4452             if (sstr == dstr) {
4453                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4454                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4455                 {
4456                     GvIMPORTED_on(dstr);
4457                 }
4458                 GvMULTI_on(dstr);
4459                 return;
4460             }
4461             glob_assign_glob(dstr, sstr, dtype);
4462             return;
4463         }
4464
4465         if (dtype >= SVt_PV) {
4466             if (isGV_with_GP(dstr)) {
4467                 gv_setref(dstr, sstr);
4468                 return;
4469             }
4470             if (SvPVX_const(dstr)) {
4471                 SvPV_free(dstr);
4472                 SvLEN_set(dstr, 0);
4473                 SvCUR_set(dstr, 0);
4474             }
4475         }
4476         (void)SvOK_off(dstr);
4477         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4478         SvFLAGS(dstr) |= sflags & SVf_ROK;
4479         assert(!(sflags & SVp_NOK));
4480         assert(!(sflags & SVp_IOK));
4481         assert(!(sflags & SVf_NOK));
4482         assert(!(sflags & SVf_IOK));
4483     }
4484     else if (isGV_with_GP(dstr)) {
4485         if (!(sflags & SVf_OK)) {
4486             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4487                            "Undefined value assigned to typeglob");
4488         }
4489         else {
4490             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4491             if (dstr != (const SV *)gv) {
4492                 const char * const name = GvNAME((const GV *)dstr);
4493                 const STRLEN len = GvNAMELEN(dstr);
4494                 HV *old_stash = NULL;
4495                 bool reset_isa = FALSE;
4496                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4497                  || (len == 1 && name[0] == ':')) {
4498                     /* Set aside the old stash, so we can reset isa caches
4499                        on its subclasses. */
4500                     if((old_stash = GvHV(dstr))) {
4501                         /* Make sure we do not lose it early. */
4502                         SvREFCNT_inc_simple_void_NN(
4503                          sv_2mortal((SV *)old_stash)
4504                         );
4505                     }
4506                     reset_isa = TRUE;
4507                 }
4508
4509                 if (GvGP(dstr)) {
4510                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4511                     gp_free(MUTABLE_GV(dstr));
4512                 }
4513                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4514
4515                 if (reset_isa) {
4516                     HV * const stash = GvHV(dstr);
4517                     if(
4518                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4519                     )
4520                         mro_package_moved(
4521                          stash, old_stash,
4522                          (GV *)dstr, 0
4523                         );
4524                 }
4525             }
4526         }
4527     }
4528     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4529           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4530         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4531     }
4532     else if (sflags & SVp_POK) {
4533         const STRLEN cur = SvCUR(sstr);
4534         const STRLEN len = SvLEN(sstr);
4535
4536         /*
4537          * We have three basic ways to copy the string:
4538          *
4539          *  1. Swipe
4540          *  2. Copy-on-write
4541          *  3. Actual copy
4542          * 
4543          * Which we choose is based on various factors.  The following
4544          * things are listed in order of speed, fastest to slowest:
4545          *  - Swipe
4546          *  - Copying a short string
4547          *  - Copy-on-write bookkeeping
4548          *  - malloc
4549          *  - Copying a long string
4550          * 
4551          * We swipe the string (steal the string buffer) if the SV on the
4552          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4553          * big win on long strings.  It should be a win on short strings if
4554          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4555          * slow things down, as SvPVX_const(sstr) would have been freed
4556          * soon anyway.
4557          * 
4558          * We also steal the buffer from a PADTMP (operator target) if it
4559          * is â€˜long enough’.  For short strings, a swipe does not help
4560          * here, as it causes more malloc calls the next time the target
4561          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4562          * be allocated it is still not worth swiping PADTMPs for short
4563          * strings, as the savings here are small.
4564          * 
4565          * If swiping is not an option, then we see whether it is
4566          * worth using copy-on-write.  If the lhs already has a buf-
4567          * fer big enough and the string is short, we skip it and fall back
4568          * to method 3, since memcpy is faster for short strings than the
4569          * later bookkeeping overhead that copy-on-write entails.
4570
4571          * If the rhs is not a copy-on-write string yet, then we also
4572          * consider whether the buffer is too large relative to the string
4573          * it holds.  Some operations such as readline allocate a large
4574          * buffer in the expectation of reusing it.  But turning such into
4575          * a COW buffer is counter-productive because it increases memory
4576          * usage by making readline allocate a new large buffer the sec-
4577          * ond time round.  So, if the buffer is too large, again, we use
4578          * method 3 (copy).
4579          * 
4580          * Finally, if there is no buffer on the left, or the buffer is too 
4581          * small, then we use copy-on-write and make both SVs share the
4582          * string buffer.
4583          *
4584          */
4585
4586         /* Whichever path we take through the next code, we want this true,
4587            and doing it now facilitates the COW check.  */
4588         (void)SvPOK_only(dstr);
4589
4590         if (
4591                  (              /* Either ... */
4592                                 /* slated for free anyway (and not COW)? */
4593                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4594                                 /* or a swipable TARG */
4595                  || ((sflags &
4596                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4597                        == SVs_PADTMP
4598                                 /* whose buffer is worth stealing */
4599                      && CHECK_COWBUF_THRESHOLD(cur,len)
4600                     )
4601                  ) &&
4602                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4603                  (!(flags & SV_NOSTEAL)) &&
4604                                         /* and we're allowed to steal temps */
4605                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4606                  len)             /* and really is a string */
4607         {       /* Passes the swipe test.  */
4608             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4609                 SvPV_free(dstr);
4610             SvPV_set(dstr, SvPVX_mutable(sstr));
4611             SvLEN_set(dstr, SvLEN(sstr));
4612             SvCUR_set(dstr, SvCUR(sstr));
4613
4614             SvTEMP_off(dstr);
4615             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4616             SvPV_set(sstr, NULL);
4617             SvLEN_set(sstr, 0);
4618             SvCUR_set(sstr, 0);
4619             SvTEMP_off(sstr);
4620         }
4621         else if (flags & SV_COW_SHARED_HASH_KEYS
4622               &&
4623 #ifdef PERL_COPY_ON_WRITE
4624                  (sflags & SVf_IsCOW
4625                    ? (!len ||
4626                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4627                           /* If this is a regular (non-hek) COW, only so
4628                              many COW "copies" are possible. */
4629                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4630                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4631                      && !(SvFLAGS(dstr) & SVf_BREAK)
4632                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4633                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4634                     ))
4635 #else
4636                  sflags & SVf_IsCOW
4637               && !(SvFLAGS(dstr) & SVf_BREAK)
4638 #endif
4639             ) {
4640             /* Either it's a shared hash key, or it's suitable for
4641                copy-on-write.  */
4642             if (DEBUG_C_TEST) {
4643                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4644                 sv_dump(sstr);
4645                 sv_dump(dstr);
4646             }
4647 #ifdef PERL_ANY_COW
4648             if (!(sflags & SVf_IsCOW)) {
4649                     SvIsCOW_on(sstr);
4650                     CowREFCNT(sstr) = 0;
4651             }
4652 #endif
4653             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4654                 SvPV_free(dstr);
4655             }
4656
4657 #ifdef PERL_ANY_COW
4658             if (len) {
4659                     if (sflags & SVf_IsCOW) {
4660                         sv_buf_to_rw(sstr);
4661                     }
4662                     CowREFCNT(sstr)++;
4663                     SvPV_set(dstr, SvPVX_mutable(sstr));
4664                     sv_buf_to_ro(sstr);
4665             } else
4666 #endif
4667             {
4668                     /* SvIsCOW_shared_hash */
4669                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4670                                           "Copy on write: Sharing hash\n"));
4671
4672                     assert (SvTYPE(dstr) >= SVt_PV);
4673                     SvPV_set(dstr,
4674                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4675             }
4676             SvLEN_set(dstr, len);
4677             SvCUR_set(dstr, cur);
4678             SvIsCOW_on(dstr);
4679         } else {
4680             /* Failed the swipe test, and we cannot do copy-on-write either.
4681                Have to copy the string.  */
4682             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4683             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4684             SvCUR_set(dstr, cur);
4685             *SvEND(dstr) = '\0';
4686         }
4687         if (sflags & SVp_NOK) {
4688             SvNV_set(dstr, SvNVX(sstr));
4689         }
4690         if (sflags & SVp_IOK) {
4691             SvIV_set(dstr, SvIVX(sstr));
4692             /* Must do this otherwise some other overloaded use of 0x80000000
4693                gets confused. I guess SVpbm_VALID */
4694             if (sflags & SVf_IVisUV)
4695                 SvIsUV_on(dstr);
4696         }
4697         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4698         {
4699             const MAGIC * const smg = SvVSTRING_mg(sstr);
4700             if (smg) {
4701                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4702                          smg->mg_ptr, smg->mg_len);
4703                 SvRMAGICAL_on(dstr);
4704             }
4705         }
4706     }
4707     else if (sflags & (SVp_IOK|SVp_NOK)) {
4708         (void)SvOK_off(dstr);
4709         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4710         if (sflags & SVp_IOK) {
4711             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4712             SvIV_set(dstr, SvIVX(sstr));
4713         }
4714         if (sflags & SVp_NOK) {
4715             SvNV_set(dstr, SvNVX(sstr));
4716         }
4717     }
4718     else {
4719         if (isGV_with_GP(sstr)) {
4720             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4721         }
4722         else
4723             (void)SvOK_off(dstr);
4724     }
4725     if (SvTAINTED(sstr))
4726         SvTAINT(dstr);
4727 }
4728
4729 /*
4730 =for apidoc sv_setsv_mg
4731
4732 Like C<sv_setsv>, but also handles 'set' magic.
4733
4734 =cut
4735 */
4736
4737 void
4738 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4739 {
4740     PERL_ARGS_ASSERT_SV_SETSV_MG;
4741
4742     sv_setsv(dstr,sstr);
4743     SvSETMAGIC(dstr);
4744 }
4745
4746 #ifdef PERL_ANY_COW
4747 #  define SVt_COW SVt_PV
4748 SV *
4749 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4750 {
4751     STRLEN cur = SvCUR(sstr);
4752     STRLEN len = SvLEN(sstr);
4753     char *new_pv;
4754 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4755     const bool already = cBOOL(SvIsCOW(sstr));
4756 #endif
4757
4758     PERL_ARGS_ASSERT_SV_SETSV_COW;
4759
4760     if (DEBUG_C_TEST) {
4761         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4762                       (void*)sstr, (void*)dstr);
4763         sv_dump(sstr);
4764         if (dstr)
4765                     sv_dump(dstr);
4766     }
4767
4768     if (dstr) {
4769         if (SvTHINKFIRST(dstr))
4770             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4771         else if (SvPVX_const(dstr))
4772             Safefree(SvPVX_mutable(dstr));
4773     }
4774     else
4775         new_SV(dstr);
4776     SvUPGRADE(dstr, SVt_COW);
4777
4778     assert (SvPOK(sstr));
4779     assert (SvPOKp(sstr));
4780
4781     if (SvIsCOW(sstr)) {
4782
4783         if (SvLEN(sstr) == 0) {
4784             /* source is a COW shared hash key.  */
4785             DEBUG_C(PerlIO_printf(Perl_debug_log,
4786                                   "Fast copy on write: Sharing hash\n"));
4787             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4788             goto common_exit;
4789         }
4790         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4791         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4792     } else {
4793         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4794         SvUPGRADE(sstr, SVt_COW);
4795         SvIsCOW_on(sstr);
4796         DEBUG_C(PerlIO_printf(Perl_debug_log,
4797                               "Fast copy on write: Converting sstr to COW\n"));
4798         CowREFCNT(sstr) = 0;    
4799     }
4800 #  ifdef PERL_DEBUG_READONLY_COW
4801     if (already) sv_buf_to_rw(sstr);
4802 #  endif
4803     CowREFCNT(sstr)++;  
4804     new_pv = SvPVX_mutable(sstr);
4805     sv_buf_to_ro(sstr);
4806
4807   common_exit:
4808     SvPV_set(dstr, new_pv);
4809     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4810     if (SvUTF8(sstr))
4811         SvUTF8_on(dstr);
4812     SvLEN_set(dstr, len);
4813     SvCUR_set(dstr, cur);
4814     if (DEBUG_C_TEST) {
4815         sv_dump(dstr);
4816     }
4817     return dstr;
4818 }
4819 #endif
4820
4821 /*
4822 =for apidoc sv_setpvn
4823
4824 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4825 The C<len> parameter indicates the number of
4826 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4827 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4828
4829 =cut
4830 */
4831
4832 void
4833 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4834 {
4835     char *dptr;
4836
4837     PERL_ARGS_ASSERT_SV_SETPVN;
4838
4839     SV_CHECK_THINKFIRST_COW_DROP(sv);
4840     if (!ptr) {
4841         (void)SvOK_off(sv);
4842         return;
4843     }
4844     else {
4845         /* len is STRLEN which is unsigned, need to copy to signed */
4846         const IV iv = len;
4847         if (iv < 0)
4848             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4849                        IVdf, iv);
4850     }
4851     SvUPGRADE(sv, SVt_PV);
4852
4853     dptr = SvGROW(sv, len + 1);
4854     Move(ptr,dptr,len,char);
4855     dptr[len] = '\0';
4856     SvCUR_set(sv, len);
4857     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4858     SvTAINT(sv);
4859     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4860 }
4861
4862 /*
4863 =for apidoc sv_setpvn_mg
4864
4865 Like C<sv_setpvn>, but also handles 'set' magic.
4866
4867 =cut
4868 */
4869
4870 void
4871 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4872 {
4873     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4874
4875     sv_setpvn(sv,ptr,len);
4876     SvSETMAGIC(sv);
4877 }
4878
4879 /*
4880 =for apidoc sv_setpv
4881
4882 Copies a string into an SV.  The string must be terminated with a C<NUL>
4883 character.
4884 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4885
4886 =cut
4887 */
4888
4889 void
4890 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4891 {
4892     STRLEN len;
4893
4894     PERL_ARGS_ASSERT_SV_SETPV;
4895
4896     SV_CHECK_THINKFIRST_COW_DROP(sv);
4897     if (!ptr) {
4898         (void)SvOK_off(sv);
4899         return;
4900     }
4901     len = strlen(ptr);
4902     SvUPGRADE(sv, SVt_PV);
4903
4904     SvGROW(sv, len + 1);
4905     Move(ptr,SvPVX(sv),len+1,char);
4906     SvCUR_set(sv, len);
4907     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4908     SvTAINT(sv);
4909     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4910 }
4911
4912 /*
4913 =for apidoc sv_setpv_mg
4914
4915 Like C<sv_setpv>, but also handles 'set' magic.
4916
4917 =cut
4918 */
4919
4920 void
4921 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4922 {
4923     PERL_ARGS_ASSERT_SV_SETPV_MG;
4924
4925     sv_setpv(sv,ptr);
4926     SvSETMAGIC(sv);
4927 }
4928
4929 void
4930 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4931 {
4932     PERL_ARGS_ASSERT_SV_SETHEK;
4933
4934     if (!hek) {
4935         return;
4936     }
4937
4938     if (HEK_LEN(hek) == HEf_SVKEY) {
4939         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4940         return;
4941     } else {
4942         const int flags = HEK_FLAGS(hek);
4943         if (flags & HVhek_WASUTF8) {
4944             STRLEN utf8_len = HEK_LEN(hek);
4945             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4946             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4947             SvUTF8_on(sv);
4948             return;
4949         } else if (flags & HVhek_UNSHARED) {
4950             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4951             if (HEK_UTF8(hek))
4952                 SvUTF8_on(sv);
4953             else SvUTF8_off(sv);
4954             return;
4955         }
4956         {
4957             SV_CHECK_THINKFIRST_COW_DROP(sv);
4958             SvUPGRADE(sv, SVt_PV);
4959             SvPV_free(sv);
4960             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4961             SvCUR_set(sv, HEK_LEN(hek));
4962             SvLEN_set(sv, 0);
4963             SvIsCOW_on(sv);
4964             SvPOK_on(sv);
4965             if (HEK_UTF8(hek))
4966                 SvUTF8_on(sv);
4967             else SvUTF8_off(sv);
4968             return;
4969         }
4970     }
4971 }
4972
4973
4974 /*
4975 =for apidoc sv_usepvn_flags
4976
4977 Tells an SV to use C<ptr> to find its string value.  Normally the
4978 string is stored inside the SV, but sv_usepvn allows the SV to use an
4979 outside string.  C<ptr> should point to memory that was allocated
4980 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
4981 the start of a C<Newx>-ed block of memory, and not a pointer to the
4982 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
4983 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
4984 string length, C<len>, must be supplied.  By default this function
4985 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4986 so that pointer should not be freed or used by the programmer after
4987 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
4988 that pointer (e.g. ptr + 1) be used.
4989
4990 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
4991 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
4992 and the realloc
4993 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4994 C<len>, and already meets the requirements for storing in C<SvPVX>).
4995
4996 =cut
4997 */
4998
4999 void
5000 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5001 {
5002     STRLEN allocate;
5003
5004     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5005
5006     SV_CHECK_THINKFIRST_COW_DROP(sv);
5007     SvUPGRADE(sv, SVt_PV);
5008     if (!ptr) {
5009         (void)SvOK_off(sv);
5010         if (flags & SV_SMAGIC)
5011             SvSETMAGIC(sv);
5012         return;
5013     }
5014     if (SvPVX_const(sv))
5015         SvPV_free(sv);
5016
5017 #ifdef DEBUGGING
5018     if (flags & SV_HAS_TRAILING_NUL)
5019         assert(ptr[len] == '\0');
5020 #endif
5021
5022     allocate = (flags & SV_HAS_TRAILING_NUL)
5023         ? len + 1 :
5024 #ifdef Perl_safesysmalloc_size
5025         len + 1;
5026 #else 
5027         PERL_STRLEN_ROUNDUP(len + 1);
5028 #endif
5029     if (flags & SV_HAS_TRAILING_NUL) {
5030         /* It's long enough - do nothing.
5031            Specifically Perl_newCONSTSUB is relying on this.  */
5032     } else {
5033 #ifdef DEBUGGING
5034         /* Force a move to shake out bugs in callers.  */
5035         char *new_ptr = (char*)safemalloc(allocate);
5036         Copy(ptr, new_ptr, len, char);
5037         PoisonFree(ptr,len,char);
5038         Safefree(ptr);
5039         ptr = new_ptr;
5040 #else
5041         ptr = (char*) saferealloc (ptr, allocate);
5042 #endif
5043     }
5044 #ifdef Perl_safesysmalloc_size
5045     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5046 #else
5047     SvLEN_set(sv, allocate);
5048 #endif
5049     SvCUR_set(sv, len);
5050     SvPV_set(sv, ptr);
5051     if (!(flags & SV_HAS_TRAILING_NUL)) {
5052         ptr[len] = '\0';
5053     }
5054     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5055     SvTAINT(sv);
5056     if (flags & SV_SMAGIC)
5057         SvSETMAGIC(sv);
5058 }
5059
5060 /*
5061 =for apidoc sv_force_normal_flags
5062
5063 Undo various types of fakery on an SV, where fakery means
5064 "more than" a string: if the PV is a shared string, make
5065 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5066 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5067 we do the copy, and is also used locally; if this is a
5068 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5069 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5070 C<SvPOK_off> rather than making a copy.  (Used where this
5071 scalar is about to be set to some other value.)  In addition,
5072 the C<flags> parameter gets passed to C<sv_unref_flags()>
5073 when unreffing.  C<sv_force_normal> calls this function
5074 with flags set to 0.
5075
5076 This function is expected to be used to signal to perl that this SV is
5077 about to be written to, and any extra book-keeping needs to be taken care
5078 of.  Hence, it croaks on read-only values.
5079
5080 =cut
5081 */
5082
5083 static void
5084 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5085 {
5086     assert(SvIsCOW(sv));
5087     {
5088 #ifdef PERL_ANY_COW
5089         const char * const pvx = SvPVX_const(sv);
5090         const STRLEN len = SvLEN(sv);
5091         const STRLEN cur = SvCUR(sv);
5092
5093         if (DEBUG_C_TEST) {
5094                 PerlIO_printf(Perl_debug_log,
5095                               "Copy on write: Force normal %ld\n",
5096                               (long) flags);
5097                 sv_dump(sv);
5098         }
5099         SvIsCOW_off(sv);
5100 # ifdef PERL_COPY_ON_WRITE
5101         if (len) {
5102             /* Must do this first, since the CowREFCNT uses SvPVX and
5103             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5104             the only owner left of the buffer. */
5105             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5106             {
5107                 U8 cowrefcnt = CowREFCNT(sv);
5108                 if(cowrefcnt != 0) {
5109                     cowrefcnt--;
5110                     CowREFCNT(sv) = cowrefcnt;
5111                     sv_buf_to_ro(sv);
5112                     goto copy_over;
5113                 }
5114             }
5115             /* Else we are the only owner of the buffer. */
5116         }
5117         else
5118 # endif
5119         {
5120             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5121             copy_over:
5122             SvPV_set(sv, NULL);
5123             SvCUR_set(sv, 0);
5124             SvLEN_set(sv, 0);
5125             if (flags & SV_COW_DROP_PV) {
5126                 /* OK, so we don't need to copy our buffer.  */
5127                 SvPOK_off(sv);
5128             } else {
5129                 SvGROW(sv, cur + 1);
5130                 Move(pvx,SvPVX(sv),cur,char);
5131                 SvCUR_set(sv, cur);
5132                 *SvEND(sv) = '\0';
5133             }
5134             if (len) {
5135             } else {
5136                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5137             }
5138             if (DEBUG_C_TEST) {
5139                 sv_dump(sv);
5140             }
5141         }
5142 #else
5143             const char * const pvx = SvPVX_const(sv);
5144             const STRLEN len = SvCUR(sv);
5145             SvIsCOW_off(sv);
5146             SvPV_set(sv, NULL);
5147             SvLEN_set(sv, 0);
5148             if (flags & SV_COW_DROP_PV) {
5149                 /* OK, so we don't need to copy our buffer.  */
5150                 SvPOK_off(sv);
5151             } else {
5152                 SvGROW(sv, len + 1);
5153                 Move(pvx,SvPVX(sv),len,char);
5154                 *SvEND(sv) = '\0';
5155             }
5156             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5157 #endif
5158     }
5159 }
5160
5161 void
5162 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5163 {
5164     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5165
5166     if (SvREADONLY(sv))
5167         Perl_croak_no_modify();
5168     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5169         S_sv_uncow(aTHX_ sv, flags);
5170     if (SvROK(sv))
5171         sv_unref_flags(sv, flags);
5172     else if (SvFAKE(sv) && isGV_with_GP(sv))
5173         sv_unglob(sv, flags);
5174     else if (SvFAKE(sv) && isREGEXP(sv)) {
5175         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5176            to sv_unglob. We only need it here, so inline it.  */
5177         const bool islv = SvTYPE(sv) == SVt_PVLV;
5178         const svtype new_type =
5179           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5180         SV *const temp = newSV_type(new_type);
5181         regexp *const temp_p = ReANY((REGEXP *)sv);
5182
5183         if (new_type == SVt_PVMG) {
5184             SvMAGIC_set(temp, SvMAGIC(sv));
5185             SvMAGIC_set(sv, NULL);
5186             SvSTASH_set(temp, SvSTASH(sv));
5187             SvSTASH_set(sv, NULL);
5188         }
5189         if (!islv) SvCUR_set(temp, SvCUR(sv));
5190         /* Remember that SvPVX is in the head, not the body.  But
5191            RX_WRAPPED is in the body. */
5192         assert(ReANY((REGEXP *)sv)->mother_re);
5193         /* Their buffer is already owned by someone else. */
5194         if (flags & SV_COW_DROP_PV) {
5195             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5196                zeroed body.  For SVt_PVLV, it should have been set to 0
5197                before turning into a regexp. */
5198             assert(!SvLEN(islv ? sv : temp));
5199             sv->sv_u.svu_pv = 0;
5200         }
5201         else {
5202             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5203             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5204             SvPOK_on(sv);
5205         }
5206
5207         /* Now swap the rest of the bodies. */
5208
5209         SvFAKE_off(sv);
5210         if (!islv) {
5211             SvFLAGS(sv) &= ~SVTYPEMASK;
5212             SvFLAGS(sv) |= new_type;
5213             SvANY(sv) = SvANY(temp);
5214         }
5215
5216         SvFLAGS(temp) &= ~(SVTYPEMASK);
5217         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5218         SvANY(temp) = temp_p;
5219         temp->sv_u.svu_rx = (regexp *)temp_p;
5220
5221         SvREFCNT_dec_NN(temp);
5222     }
5223     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5224 }
5225
5226 /*
5227 =for apidoc sv_chop
5228
5229 Efficient removal of characters from the beginning of the string buffer.
5230 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5231 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5232 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5233 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5234
5235 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5236 refer to the same chunk of data.
5237
5238 The unfortunate similarity of this function's name to that of Perl's C<chop>
5239 operator is strictly coincidental.  This function works from the left;
5240 C<chop> works from the right.
5241
5242 =cut
5243 */
5244
5245 void
5246 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5247 {
5248     STRLEN delta;
5249     STRLEN old_delta;
5250     U8 *p;
5251 #ifdef DEBUGGING
5252     const U8 *evacp;
5253     STRLEN evacn;
5254 #endif
5255     STRLEN max_delta;
5256
5257     PERL_ARGS_ASSERT_SV_CHOP;
5258
5259     if (!ptr || !SvPOKp(sv))
5260         return;
5261     delta = ptr - SvPVX_const(sv);
5262     if (!delta) {
5263         /* Nothing to do.  */
5264         return;
5265     }
5266     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5267     if (delta > max_delta)
5268         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5269                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5270     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5271     SV_CHECK_THINKFIRST(sv);
5272     SvPOK_only_UTF8(sv);
5273
5274     if (!SvOOK(sv)) {
5275         if (!SvLEN(sv)) { /* make copy of shared string */
5276             const char *pvx = SvPVX_const(sv);
5277             const STRLEN len = SvCUR(sv);
5278             SvGROW(sv, len + 1);
5279             Move(pvx,SvPVX(sv),len,char);
5280             *SvEND(sv) = '\0';
5281         }
5282         SvOOK_on(sv);
5283         old_delta = 0;
5284     } else {
5285         SvOOK_offset(sv, old_delta);
5286     }
5287     SvLEN_set(sv, SvLEN(sv) - delta);
5288     SvCUR_set(sv, SvCUR(sv) - delta);
5289     SvPV_set(sv, SvPVX(sv) + delta);
5290
5291     p = (U8 *)SvPVX_const(sv);
5292
5293 #ifdef DEBUGGING
5294     /* how many bytes were evacuated?  we will fill them with sentinel
5295        bytes, except for the part holding the new offset of course. */
5296     evacn = delta;
5297     if (old_delta)
5298         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5299     assert(evacn);
5300     assert(evacn <= delta + old_delta);
5301     evacp = p - evacn;
5302 #endif
5303
5304     /* This sets 'delta' to the accumulated value of all deltas so far */
5305     delta += old_delta;
5306     assert(delta);
5307
5308     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5309      * the string; otherwise store a 0 byte there and store 'delta' just prior
5310      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5311      * portion of the chopped part of the string */
5312     if (delta < 0x100) {
5313         *--p = (U8) delta;
5314     } else {
5315         *--p = 0;
5316         p -= sizeof(STRLEN);
5317         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5318     }
5319
5320 #ifdef DEBUGGING
5321     /* Fill the preceding buffer with sentinals to verify that no-one is
5322        using it.  */
5323     while (p > evacp) {
5324         --p;
5325         *p = (U8)PTR2UV(p);
5326     }
5327 #endif
5328 }
5329
5330 /*
5331 =for apidoc sv_catpvn
5332
5333 Concatenates the string onto the end of the string which is in the SV.
5334 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5335 status set, then the bytes appended should be valid UTF-8.
5336 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5337
5338 =for apidoc sv_catpvn_flags
5339
5340 Concatenates the string onto the end of the string which is in the SV.  The
5341 C<len> indicates number of bytes to copy.
5342
5343 By default, the string appended is assumed to be valid UTF-8 if the SV has
5344 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5345 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5346 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5347 string appended will be upgraded to UTF-8 if necessary.
5348
5349 If C<flags> has the C<SV_SMAGIC> bit set, will
5350 C<mg_set> on C<dsv> afterwards if appropriate.
5351 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5352 in terms of this function.
5353
5354 =cut
5355 */
5356
5357 void
5358 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5359 {
5360     STRLEN dlen;
5361     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5362
5363     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5364     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5365
5366     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5367       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5368          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5369          dlen = SvCUR(dsv);
5370       }
5371       else SvGROW(dsv, dlen + slen + 1);
5372       if (sstr == dstr)
5373         sstr = SvPVX_const(dsv);
5374       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5375       SvCUR_set(dsv, SvCUR(dsv) + slen);
5376     }
5377     else {
5378         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5379         const char * const send = sstr + slen;
5380         U8 *d;
5381
5382         /* Something this code does not account for, which I think is
5383            impossible; it would require the same pv to be treated as
5384            bytes *and* utf8, which would indicate a bug elsewhere. */
5385         assert(sstr != dstr);
5386
5387         SvGROW(dsv, dlen + slen * 2 + 1);
5388         d = (U8 *)SvPVX(dsv) + dlen;
5389
5390         while (sstr < send) {
5391             append_utf8_from_native_byte(*sstr, &d);
5392             sstr++;
5393         }
5394         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5395     }
5396     *SvEND(dsv) = '\0';
5397     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5398     SvTAINT(dsv);
5399     if (flags & SV_SMAGIC)
5400         SvSETMAGIC(dsv);
5401 }
5402
5403 /*
5404 =for apidoc sv_catsv
5405
5406 Concatenates the string from SV C<ssv> onto the end of the string in SV
5407 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5408 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5409 and C<L</sv_catsv_nomg>>.
5410
5411 =for apidoc sv_catsv_flags
5412
5413 Concatenates the string from SV C<ssv> onto the end of the string in SV
5414 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5415 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5416 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5417 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5418 and C<sv_catsv_mg> are implemented in terms of this function.
5419
5420 =cut */
5421
5422 void
5423 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5424 {
5425     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5426
5427     if (ssv) {
5428         STRLEN slen;
5429         const char *spv = SvPV_flags_const(ssv, slen, flags);
5430         if (flags & SV_GMAGIC)
5431                 SvGETMAGIC(dsv);
5432         sv_catpvn_flags(dsv, spv, slen,
5433                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5434         if (flags & SV_SMAGIC)
5435                 SvSETMAGIC(dsv);
5436     }
5437 }
5438
5439 /*
5440 =for apidoc sv_catpv
5441
5442 Concatenates the C<NUL>-terminated string onto the end of the string which is
5443 in the SV.
5444 If the SV has the UTF-8 status set, then the bytes appended should be
5445 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5446 C<L</sv_catpv_mg>>.
5447
5448 =cut */
5449
5450 void
5451 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5452 {
5453     STRLEN len;
5454     STRLEN tlen;
5455     char *junk;
5456
5457     PERL_ARGS_ASSERT_SV_CATPV;
5458
5459     if (!ptr)
5460         return;
5461     junk = SvPV_force(sv, tlen);
5462     len = strlen(ptr);
5463     SvGROW(sv, tlen + len + 1);
5464     if (ptr == junk)
5465         ptr = SvPVX_const(sv);
5466     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5467     SvCUR_set(sv, SvCUR(sv) + len);
5468     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5469     SvTAINT(sv);
5470 }
5471
5472 /*
5473 =for apidoc sv_catpv_flags
5474
5475 Concatenates the C<NUL>-terminated string onto the end of the string which is
5476 in the SV.
5477 If the SV has the UTF-8 status set, then the bytes appended should
5478 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5479 on the modified SV if appropriate.
5480
5481 =cut
5482 */
5483
5484 void
5485 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5486 {
5487     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5488     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5489 }
5490
5491 /*
5492 =for apidoc sv_catpv_mg
5493
5494 Like C<sv_catpv>, but also handles 'set' magic.
5495
5496 =cut
5497 */
5498
5499 void
5500 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5501 {
5502     PERL_ARGS_ASSERT_SV_CATPV_MG;
5503
5504     sv_catpv(sv,ptr);
5505     SvSETMAGIC(sv);
5506 }
5507
5508 /*
5509 =for apidoc newSV
5510
5511 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5512 bytes of preallocated string space the SV should have.  An extra byte for a
5513 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5514 space is allocated.)  The reference count for the new SV is set to 1.
5515
5516 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5517 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5518 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5519 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5520 modules supporting older perls.
5521
5522 =cut
5523 */
5524
5525 SV *
5526 Perl_newSV(pTHX_ const STRLEN len)
5527 {
5528     SV *sv;
5529
5530     new_SV(sv);
5531     if (len) {
5532         sv_grow(sv, len + 1);
5533     }
5534     return sv;
5535 }
5536 /*
5537 =for apidoc sv_magicext
5538
5539 Adds magic to an SV, upgrading it if necessary.  Applies the
5540 supplied C<vtable> and returns a pointer to the magic added.
5541
5542 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5543 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5544 one instance of the same C<how>.
5545
5546 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5547 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5548 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5549 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5550
5551 (This is now used as a subroutine by C<sv_magic>.)
5552
5553 =cut
5554 */
5555 MAGIC * 
5556 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5557                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5558 {
5559     MAGIC* mg;
5560
5561     PERL_ARGS_ASSERT_SV_MAGICEXT;
5562
5563     SvUPGRADE(sv, SVt_PVMG);
5564     Newxz(mg, 1, MAGIC);
5565     mg->mg_moremagic = SvMAGIC(sv);
5566     SvMAGIC_set(sv, mg);
5567
5568     /* Sometimes a magic contains a reference loop, where the sv and
5569        object refer to each other.  To prevent a reference loop that
5570        would prevent such objects being freed, we look for such loops
5571        and if we find one we avoid incrementing the object refcount.
5572
5573        Note we cannot do this to avoid self-tie loops as intervening RV must
5574        have its REFCNT incremented to keep it in existence.
5575
5576     */
5577     if (!obj || obj == sv ||
5578         how == PERL_MAGIC_arylen ||
5579         how == PERL_MAGIC_symtab ||
5580         (SvTYPE(obj) == SVt_PVGV &&
5581             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5582              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5583              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5584     {
5585         mg->mg_obj = obj;
5586     }
5587     else {
5588         mg->mg_obj = SvREFCNT_inc_simple(obj);
5589         mg->mg_flags |= MGf_REFCOUNTED;
5590     }
5591
5592     /* Normal self-ties simply pass a null object, and instead of
5593        using mg_obj directly, use the SvTIED_obj macro to produce a
5594        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5595        with an RV obj pointing to the glob containing the PVIO.  In
5596        this case, to avoid a reference loop, we need to weaken the
5597        reference.
5598     */
5599
5600     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5601         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5602     {
5603       sv_rvweaken(obj);
5604     }
5605
5606     mg->mg_type = how;
5607     mg->mg_len = namlen;
5608     if (name) {
5609         if (namlen > 0)
5610             mg->mg_ptr = savepvn(name, namlen);
5611         else if (namlen == HEf_SVKEY) {
5612             /* Yes, this is casting away const. This is only for the case of
5613                HEf_SVKEY. I think we need to document this aberation of the
5614                constness of the API, rather than making name non-const, as
5615                that change propagating outwards a long way.  */
5616             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5617         } else
5618             mg->mg_ptr = (char *) name;
5619     }
5620     mg->mg_virtual = (MGVTBL *) vtable;
5621
5622     mg_magical(sv);
5623     return mg;
5624 }
5625
5626 MAGIC *
5627 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5628 {
5629     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5630     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5631         /* This sv is only a delegate.  //g magic must be attached to
5632            its target. */
5633         vivify_defelem(sv);
5634         sv = LvTARG(sv);
5635     }
5636     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5637                        &PL_vtbl_mglob, 0, 0);
5638 }
5639
5640 /*
5641 =for apidoc sv_magic
5642
5643 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5644 necessary, then adds a new magic item of type C<how> to the head of the
5645 magic list.
5646
5647 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5648 handling of the C<name> and C<namlen> arguments.
5649
5650 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5651 to add more than one instance of the same C<how>.
5652
5653 =cut
5654 */
5655
5656 void
5657 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5658              const char *const name, const I32 namlen)
5659 {
5660     const MGVTBL *vtable;
5661     MAGIC* mg;
5662     unsigned int flags;
5663     unsigned int vtable_index;
5664
5665     PERL_ARGS_ASSERT_SV_MAGIC;
5666
5667     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5668         || ((flags = PL_magic_data[how]),
5669             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5670             > magic_vtable_max))
5671         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5672
5673     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5674        Useful for attaching extension internal data to perl vars.
5675        Note that multiple extensions may clash if magical scalars
5676        etc holding private data from one are passed to another. */
5677
5678     vtable = (vtable_index == magic_vtable_max)
5679         ? NULL : PL_magic_vtables + vtable_index;
5680
5681     if (SvREADONLY(sv)) {
5682         if (
5683             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5684            )
5685         {
5686             Perl_croak_no_modify();
5687         }
5688     }
5689     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5690         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5691             /* sv_magic() refuses to add a magic of the same 'how' as an
5692                existing one
5693              */
5694             if (how == PERL_MAGIC_taint)
5695                 mg->mg_len |= 1;
5696             return;
5697         }
5698     }
5699
5700     /* Force pos to be stored as characters, not bytes. */
5701     if (SvMAGICAL(sv) && DO_UTF8(sv)
5702       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5703       && mg->mg_len != -1
5704       && mg->mg_flags & MGf_BYTES) {
5705         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5706                                                SV_CONST_RETURN);
5707         mg->mg_flags &= ~MGf_BYTES;
5708     }
5709
5710     /* Rest of work is done else where */
5711     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5712
5713     switch (how) {
5714     case PERL_MAGIC_taint:
5715         mg->mg_len = 1;
5716         break;
5717     case PERL_MAGIC_ext:
5718     case PERL_MAGIC_dbfile:
5719         SvRMAGICAL_on(sv);
5720         break;
5721     }
5722 }
5723
5724 static int
5725 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5726 {
5727     MAGIC* mg;
5728     MAGIC** mgp;
5729
5730     assert(flags <= 1);
5731
5732     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5733         return 0;
5734     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5735     for (mg = *mgp; mg; mg = *mgp) {
5736         const MGVTBL* const virt = mg->mg_virtual;
5737         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5738             *mgp = mg->mg_moremagic;
5739             if (virt && virt->svt_free)
5740                 virt->svt_free(aTHX_ sv, mg);
5741             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5742                 if (mg->mg_len > 0)
5743                     Safefree(mg->mg_ptr);
5744                 else if (mg->mg_len == HEf_SVKEY)
5745                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5746                 else if (mg->mg_type == PERL_MAGIC_utf8)
5747                     Safefree(mg->mg_ptr);
5748             }
5749             if (mg->mg_flags & MGf_REFCOUNTED)
5750                 SvREFCNT_dec(mg->mg_obj);
5751             Safefree(mg);
5752         }
5753         else
5754             mgp = &mg->mg_moremagic;
5755     }
5756     if (SvMAGIC(sv)) {
5757         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5758             mg_magical(sv);     /*    else fix the flags now */
5759     }
5760     else
5761         SvMAGICAL_off(sv);
5762
5763     return 0;
5764 }
5765
5766 /*
5767 =for apidoc sv_unmagic
5768
5769 Removes all magic of type C<type> from an SV.
5770
5771 =cut
5772 */
5773
5774 int
5775 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5776 {
5777     PERL_ARGS_ASSERT_SV_UNMAGIC;
5778     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5779 }
5780
5781 /*
5782 =for apidoc sv_unmagicext
5783
5784 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5785
5786 =cut
5787 */
5788
5789 int
5790 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5791 {
5792     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5793     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5794 }
5795
5796 /*
5797 =for apidoc sv_rvweaken
5798
5799 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5800 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5801 push a back-reference to this RV onto the array of backreferences
5802 associated with that magic.  If the RV is magical, set magic will be
5803 called after the RV is cleared.
5804
5805 =cut
5806 */
5807
5808 SV *
5809 Perl_sv_rvweaken(pTHX_ SV *const sv)
5810 {
5811     SV *tsv;
5812
5813     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5814
5815     if (!SvOK(sv))  /* let undefs pass */
5816         return sv;
5817     if (!SvROK(sv))
5818         Perl_croak(aTHX_ "Can't weaken a nonreference");
5819     else if (SvWEAKREF(sv)) {
5820         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5821         return sv;
5822     }
5823     else if (SvREADONLY(sv)) croak_no_modify();
5824     tsv = SvRV(sv);
5825     Perl_sv_add_backref(aTHX_ tsv, sv);
5826     SvWEAKREF_on(sv);
5827     SvREFCNT_dec_NN(tsv);
5828     return sv;
5829 }
5830
5831 /*
5832 =for apidoc sv_get_backrefs
5833
5834 If C<sv> is the target of a weak reference then it returns the back
5835 references structure associated with the sv; otherwise return C<NULL>.
5836
5837 When returning a non-null result the type of the return is relevant. If it
5838 is an AV then the elements of the AV are the weak reference RVs which
5839 point at this item. If it is any other type then the item itself is the
5840 weak reference.
5841
5842 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5843 C<Perl_sv_kill_backrefs()>
5844
5845 =cut
5846 */
5847
5848 SV *
5849 Perl_sv_get_backrefs(SV *const sv)
5850 {
5851     SV *backrefs= NULL;
5852
5853     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5854
5855     /* find slot to store array or singleton backref */
5856
5857     if (SvTYPE(sv) == SVt_PVHV) {
5858         if (SvOOK(sv)) {
5859             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5860             backrefs = (SV *)iter->xhv_backreferences;
5861         }
5862     } else if (SvMAGICAL(sv)) {
5863         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5864         if (mg)
5865             backrefs = mg->mg_obj;
5866     }
5867     return backrefs;
5868 }
5869
5870 /* Give tsv backref magic if it hasn't already got it, then push a
5871  * back-reference to sv onto the array associated with the backref magic.
5872  *
5873  * As an optimisation, if there's only one backref and it's not an AV,
5874  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5875  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5876  * active.)
5877  */
5878
5879 /* A discussion about the backreferences array and its refcount:
5880  *
5881  * The AV holding the backreferences is pointed to either as the mg_obj of
5882  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5883  * xhv_backreferences field. The array is created with a refcount
5884  * of 2. This means that if during global destruction the array gets
5885  * picked on before its parent to have its refcount decremented by the
5886  * random zapper, it won't actually be freed, meaning it's still there for
5887  * when its parent gets freed.
5888  *
5889  * When the parent SV is freed, the extra ref is killed by
5890  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5891  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5892  *
5893  * When a single backref SV is stored directly, it is not reference
5894  * counted.
5895  */
5896
5897 void
5898 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5899 {
5900     SV **svp;
5901     AV *av = NULL;
5902     MAGIC *mg = NULL;
5903
5904     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5905
5906     /* find slot to store array or singleton backref */
5907
5908     if (SvTYPE(tsv) == SVt_PVHV) {
5909         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5910     } else {
5911         if (SvMAGICAL(tsv))
5912             mg = mg_find(tsv, PERL_MAGIC_backref);
5913         if (!mg)
5914             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5915         svp = &(mg->mg_obj);
5916     }
5917
5918     /* create or retrieve the array */
5919
5920     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5921         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5922     ) {
5923         /* create array */
5924         if (mg)
5925             mg->mg_flags |= MGf_REFCOUNTED;
5926         av = newAV();
5927         AvREAL_off(av);
5928         SvREFCNT_inc_simple_void_NN(av);
5929         /* av now has a refcnt of 2; see discussion above */
5930         av_extend(av, *svp ? 2 : 1);
5931         if (*svp) {
5932             /* move single existing backref to the array */
5933             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5934         }
5935         *svp = (SV*)av;
5936     }
5937     else {
5938         av = MUTABLE_AV(*svp);
5939         if (!av) {
5940             /* optimisation: store single backref directly in HvAUX or mg_obj */
5941             *svp = sv;
5942             return;
5943         }
5944         assert(SvTYPE(av) == SVt_PVAV);
5945         if (AvFILLp(av) >= AvMAX(av)) {
5946             av_extend(av, AvFILLp(av)+1);
5947         }
5948     }
5949     /* push new backref */
5950     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5951 }
5952
5953 /* delete a back-reference to ourselves from the backref magic associated
5954  * with the SV we point to.
5955  */
5956
5957 void
5958 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5959 {
5960     SV **svp = NULL;
5961
5962     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5963
5964     if (SvTYPE(tsv) == SVt_PVHV) {
5965         if (SvOOK(tsv))
5966             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5967     }
5968     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5969         /* It's possible for the the last (strong) reference to tsv to have
5970            become freed *before* the last thing holding a weak reference.
5971            If both survive longer than the backreferences array, then when
5972            the referent's reference count drops to 0 and it is freed, it's
5973            not able to chase the backreferences, so they aren't NULLed.
5974
5975            For example, a CV holds a weak reference to its stash. If both the
5976            CV and the stash survive longer than the backreferences array,
5977            and the CV gets picked for the SvBREAK() treatment first,
5978            *and* it turns out that the stash is only being kept alive because
5979            of an our variable in the pad of the CV, then midway during CV
5980            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5981            It ends up pointing to the freed HV. Hence it's chased in here, and
5982            if this block wasn't here, it would hit the !svp panic just below.
5983
5984            I don't believe that "better" destruction ordering is going to help
5985            here - during global destruction there's always going to be the
5986            chance that something goes out of order. We've tried to make it
5987            foolproof before, and it only resulted in evolutionary pressure on
5988            fools. Which made us look foolish for our hubris. :-(
5989         */
5990         return;
5991     }
5992     else {
5993         MAGIC *const mg
5994             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5995         svp =  mg ? &(mg->mg_obj) : NULL;
5996     }
5997
5998     if (!svp)
5999         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6000     if (!*svp) {
6001         /* It's possible that sv is being freed recursively part way through the
6002            freeing of tsv. If this happens, the backreferences array of tsv has
6003            already been freed, and so svp will be NULL. If this is the case,
6004            we should not panic. Instead, nothing needs doing, so return.  */
6005         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6006             return;
6007         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6008                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6009     }
6010
6011     if (SvTYPE(*svp) == SVt_PVAV) {
6012 #ifdef DEBUGGING
6013         int count = 1;
6014 #endif
6015         AV * const av = (AV*)*svp;
6016         SSize_t fill;
6017         assert(!SvIS_FREED(av));
6018         fill = AvFILLp(av);
6019         assert(fill > -1);
6020         svp = AvARRAY(av);
6021         /* for an SV with N weak references to it, if all those
6022          * weak refs are deleted, then sv_del_backref will be called
6023          * N times and O(N^2) compares will be done within the backref
6024          * array. To ameliorate this potential slowness, we:
6025          * 1) make sure this code is as tight as possible;
6026          * 2) when looking for SV, look for it at both the head and tail of the
6027          *    array first before searching the rest, since some create/destroy
6028          *    patterns will cause the backrefs to be freed in order.
6029          */
6030         if (*svp == sv) {
6031             AvARRAY(av)++;
6032             AvMAX(av)--;
6033         }
6034         else {
6035             SV **p = &svp[fill];
6036             SV *const topsv = *p;
6037             if (topsv != sv) {
6038 #ifdef DEBUGGING
6039                 count = 0;
6040 #endif
6041                 while (--p > svp) {
6042                     if (*p == sv) {
6043                         /* We weren't the last entry.
6044                            An unordered list has this property that you
6045                            can take the last element off the end to fill
6046                            the hole, and it's still an unordered list :-)
6047                         */
6048                         *p = topsv;
6049 #ifdef DEBUGGING
6050                         count++;
6051 #else
6052                         break; /* should only be one */
6053 #endif
6054                     }
6055                 }
6056             }
6057         }
6058         assert(count ==1);
6059         AvFILLp(av) = fill-1;
6060     }
6061     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6062         /* freed AV; skip */
6063     }
6064     else {
6065         /* optimisation: only a single backref, stored directly */
6066         if (*svp != sv)
6067             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6068                        (void*)*svp, (void*)sv);
6069         *svp = NULL;
6070     }
6071
6072 }
6073
6074 void
6075 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6076 {
6077     SV **svp;
6078     SV **last;
6079     bool is_array;
6080
6081     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6082
6083     if (!av)
6084         return;
6085
6086     /* after multiple passes through Perl_sv_clean_all() for a thingy
6087      * that has badly leaked, the backref array may have gotten freed,
6088      * since we only protect it against 1 round of cleanup */
6089     if (SvIS_FREED(av)) {
6090         if (PL_in_clean_all) /* All is fair */
6091             return;
6092         Perl_croak(aTHX_
6093                    "panic: magic_killbackrefs (freed backref AV/SV)");
6094     }
6095
6096
6097     is_array = (SvTYPE(av) == SVt_PVAV);
6098     if (is_array) {
6099         assert(!SvIS_FREED(av));
6100         svp = AvARRAY(av);
6101         if (svp)
6102             last = svp + AvFILLp(av);
6103     }
6104     else {
6105         /* optimisation: only a single backref, stored directly */
6106         svp = (SV**)&av;
6107         last = svp;
6108     }
6109
6110     if (svp) {
6111         while (svp <= last) {
6112             if (*svp) {
6113                 SV *const referrer = *svp;
6114                 if (SvWEAKREF(referrer)) {
6115                     /* XXX Should we check that it hasn't changed? */
6116                     assert(SvROK(referrer));
6117                     SvRV_set(referrer, 0);
6118                     SvOK_off(referrer);
6119                     SvWEAKREF_off(referrer);
6120                     SvSETMAGIC(referrer);
6121                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6122                            SvTYPE(referrer) == SVt_PVLV) {
6123                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6124                     /* You lookin' at me?  */
6125                     assert(GvSTASH(referrer));
6126                     assert(GvSTASH(referrer) == (const HV *)sv);
6127                     GvSTASH(referrer) = 0;
6128                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6129                            SvTYPE(referrer) == SVt_PVFM) {
6130                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6131                         /* You lookin' at me?  */
6132                         assert(CvSTASH(referrer));
6133                         assert(CvSTASH(referrer) == (const HV *)sv);
6134                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6135                     }
6136                     else {
6137                         assert(SvTYPE(sv) == SVt_PVGV);
6138                         /* You lookin' at me?  */
6139                         assert(CvGV(referrer));
6140                         assert(CvGV(referrer) == (const GV *)sv);
6141                         anonymise_cv_maybe(MUTABLE_GV(sv),
6142                                                 MUTABLE_CV(referrer));
6143                     }
6144
6145                 } else {
6146                     Perl_croak(aTHX_
6147                                "panic: magic_killbackrefs (flags=%"UVxf")",
6148                                (UV)SvFLAGS(referrer));
6149                 }
6150
6151                 if (is_array)
6152                     *svp = NULL;
6153             }
6154             svp++;
6155         }
6156     }
6157     if (is_array) {
6158         AvFILLp(av) = -1;
6159         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6160     }
6161     return;
6162 }
6163
6164 /*
6165 =for apidoc sv_insert
6166
6167 Inserts a string at the specified offset/length within the SV.  Similar to
6168 the Perl C<substr()> function.  Handles get magic.
6169
6170 =for apidoc sv_insert_flags
6171
6172 Same as C<sv_insert>, but the extra C<flags> are passed to the
6173 C<SvPV_force_flags> that applies to C<bigstr>.
6174
6175 =cut
6176 */
6177
6178 void
6179 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6180 {
6181     char *big;
6182     char *mid;
6183     char *midend;
6184     char *bigend;
6185     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6186     STRLEN curlen;
6187
6188     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6189
6190     SvPV_force_flags(bigstr, curlen, flags);
6191     (void)SvPOK_only_UTF8(bigstr);
6192     if (offset + len > curlen) {
6193         SvGROW(bigstr, offset+len+1);
6194         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6195         SvCUR_set(bigstr, offset+len);
6196     }
6197
6198     SvTAINT(bigstr);
6199     i = littlelen - len;
6200     if (i > 0) {                        /* string might grow */
6201         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6202         mid = big + offset + len;
6203         midend = bigend = big + SvCUR(bigstr);
6204         bigend += i;
6205         *bigend = '\0';
6206         while (midend > mid)            /* shove everything down */
6207             *--bigend = *--midend;
6208         Move(little,big+offset,littlelen,char);
6209         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6210         SvSETMAGIC(bigstr);
6211         return;
6212     }
6213     else if (i == 0) {
6214         Move(little,SvPVX(bigstr)+offset,len,char);
6215         SvSETMAGIC(bigstr);
6216         return;
6217     }
6218
6219     big = SvPVX(bigstr);
6220     mid = big + offset;
6221     midend = mid + len;
6222     bigend = big + SvCUR(bigstr);
6223
6224     if (midend > bigend)
6225         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6226                    midend, bigend);
6227
6228     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6229         if (littlelen) {
6230             Move(little, mid, littlelen,char);
6231             mid += littlelen;
6232         }
6233         i = bigend - midend;
6234         if (i > 0) {
6235             Move(midend, mid, i,char);
6236             mid += i;
6237         }
6238         *mid = '\0';
6239         SvCUR_set(bigstr, mid - big);
6240     }
6241     else if ((i = mid - big)) { /* faster from front */
6242         midend -= littlelen;
6243         mid = midend;
6244         Move(big, midend - i, i, char);
6245         sv_chop(bigstr,midend-i);
6246         if (littlelen)
6247             Move(little, mid, littlelen,char);
6248     }
6249     else if (littlelen) {
6250         midend -= littlelen;
6251         sv_chop(bigstr,midend);
6252         Move(little,midend,littlelen,char);
6253     }
6254     else {
6255         sv_chop(bigstr,midend);
6256     }
6257     SvSETMAGIC(bigstr);
6258 }
6259
6260 /*
6261 =for apidoc sv_replace
6262
6263 Make the first argument a copy of the second, then delete the original.
6264 The target SV physically takes over ownership of the body of the source SV
6265 and inherits its flags; however, the target keeps any magic it owns,
6266 and any magic in the source is discarded.
6267 Note that this is a rather specialist SV copying operation; most of the
6268 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6269
6270 =cut
6271 */
6272
6273 void
6274 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6275 {
6276     const U32 refcnt = SvREFCNT(sv);
6277
6278     PERL_ARGS_ASSERT_SV_REPLACE;
6279
6280     SV_CHECK_THINKFIRST_COW_DROP(sv);
6281     if (SvREFCNT(nsv) != 1) {
6282         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6283                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6284     }
6285     if (SvMAGICAL(sv)) {
6286         if (SvMAGICAL(nsv))
6287             mg_free(nsv);
6288         else
6289             sv_upgrade(nsv, SVt_PVMG);
6290         SvMAGIC_set(nsv, SvMAGIC(sv));
6291         SvFLAGS(nsv) |= SvMAGICAL(sv);
6292         SvMAGICAL_off(sv);
6293         SvMAGIC_set(sv, NULL);
6294     }
6295     SvREFCNT(sv) = 0;
6296     sv_clear(sv);
6297     assert(!SvREFCNT(sv));
6298 #ifdef DEBUG_LEAKING_SCALARS
6299     sv->sv_flags  = nsv->sv_flags;
6300     sv->sv_any    = nsv->sv_any;
6301     sv->sv_refcnt = nsv->sv_refcnt;
6302     sv->sv_u      = nsv->sv_u;
6303 #else
6304     StructCopy(nsv,sv,SV);
6305 #endif
6306     if(SvTYPE(sv) == SVt_IV) {
6307         SET_SVANY_FOR_BODYLESS_IV(sv);
6308     }
6309         
6310
6311     SvREFCNT(sv) = refcnt;
6312     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6313     SvREFCNT(nsv) = 0;
6314     del_SV(nsv);
6315 }
6316
6317 /* We're about to free a GV which has a CV that refers back to us.
6318  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6319  * field) */
6320
6321 STATIC void
6322 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6323 {
6324     SV *gvname;
6325     GV *anongv;
6326
6327     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6328
6329     /* be assertive! */
6330     assert(SvREFCNT(gv) == 0);
6331     assert(isGV(gv) && isGV_with_GP(gv));
6332     assert(GvGP(gv));
6333     assert(!CvANON(cv));
6334     assert(CvGV(cv) == gv);
6335     assert(!CvNAMED(cv));
6336
6337     /* will the CV shortly be freed by gp_free() ? */
6338     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6339         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6340         return;
6341     }
6342
6343     /* if not, anonymise: */
6344     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6345                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6346                     : newSVpvn_flags( "__ANON__", 8, 0 );
6347     sv_catpvs(gvname, "::__ANON__");
6348     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6349     SvREFCNT_dec_NN(gvname);
6350
6351     CvANON_on(cv);
6352     CvCVGV_RC_on(cv);
6353     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6354 }
6355
6356
6357 /*
6358 =for apidoc sv_clear
6359
6360 Clear an SV: call any destructors, free up any memory used by the body,
6361 and free the body itself.  The SV's head is I<not> freed, although
6362 its type is set to all 1's so that it won't inadvertently be assumed
6363 to be live during global destruction etc.
6364 This function should only be called when C<REFCNT> is zero.  Most of the time
6365 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6366 instead.
6367
6368 =cut
6369 */
6370
6371 void
6372 Perl_sv_clear(pTHX_ SV *const orig_sv)
6373 {
6374     dVAR;
6375     HV *stash;
6376     U32 type;
6377     const struct body_details *sv_type_details;
6378     SV* iter_sv = NULL;
6379     SV* next_sv = NULL;
6380     SV *sv = orig_sv;
6381     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6382                               Not strictly necessary */
6383
6384     PERL_ARGS_ASSERT_SV_CLEAR;
6385
6386     /* within this loop, sv is the SV currently being freed, and
6387      * iter_sv is the most recent AV or whatever that's being iterated
6388      * over to provide more SVs */
6389
6390     while (sv) {
6391
6392         type = SvTYPE(sv);
6393
6394         assert(SvREFCNT(sv) == 0);
6395         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6396
6397         if (type <= SVt_IV) {
6398             /* See the comment in sv.h about the collusion between this
6399              * early return and the overloading of the NULL slots in the
6400              * size table.  */
6401             if (SvROK(sv))
6402                 goto free_rv;
6403             SvFLAGS(sv) &= SVf_BREAK;
6404             SvFLAGS(sv) |= SVTYPEMASK;
6405             goto free_head;
6406         }
6407
6408         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6409            for another purpose  */
6410         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6411
6412         if (type >= SVt_PVMG) {
6413             if (SvOBJECT(sv)) {
6414                 if (!curse(sv, 1)) goto get_next_sv;
6415                 type = SvTYPE(sv); /* destructor may have changed it */
6416             }
6417             /* Free back-references before magic, in case the magic calls
6418              * Perl code that has weak references to sv. */
6419             if (type == SVt_PVHV) {
6420                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6421                 if (SvMAGIC(sv))
6422                     mg_free(sv);
6423             }
6424             else if (SvMAGIC(sv)) {
6425                 /* Free back-references before other types of magic. */
6426                 sv_unmagic(sv, PERL_MAGIC_backref);
6427                 mg_free(sv);
6428             }
6429             SvMAGICAL_off(sv);
6430         }
6431         switch (type) {
6432             /* case SVt_INVLIST: */
6433         case SVt_PVIO:
6434             if (IoIFP(sv) &&
6435                 IoIFP(sv) != PerlIO_stdin() &&
6436                 IoIFP(sv) != PerlIO_stdout() &&
6437                 IoIFP(sv) != PerlIO_stderr() &&
6438                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6439             {
6440                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6441                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6442                           IoTYPE(sv) == IoTYPE_RDWR   ||
6443                           IoTYPE(sv) == IoTYPE_APPEND));
6444             }
6445             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6446                 PerlDir_close(IoDIRP(sv));
6447             IoDIRP(sv) = (DIR*)NULL;
6448             Safefree(IoTOP_NAME(sv));
6449             Safefree(IoFMT_NAME(sv));
6450             Safefree(IoBOTTOM_NAME(sv));
6451             if ((const GV *)sv == PL_statgv)
6452                 PL_statgv = NULL;
6453             goto freescalar;
6454         case SVt_REGEXP:
6455             /* FIXME for plugins */
6456           freeregexp:
6457             pregfree2((REGEXP*) sv);
6458             goto freescalar;
6459         case SVt_PVCV:
6460         case SVt_PVFM:
6461             cv_undef(MUTABLE_CV(sv));
6462             /* If we're in a stash, we don't own a reference to it.
6463              * However it does have a back reference to us, which needs to
6464              * be cleared.  */
6465             if ((stash = CvSTASH(sv)))
6466                 sv_del_backref(MUTABLE_SV(stash), sv);
6467             goto freescalar;
6468         case SVt_PVHV:
6469             if (PL_last_swash_hv == (const HV *)sv) {
6470                 PL_last_swash_hv = NULL;
6471             }
6472             if (HvTOTALKEYS((HV*)sv) > 0) {
6473                 const HEK *hek;
6474                 /* this statement should match the one at the beginning of
6475                  * hv_undef_flags() */
6476                 if (   PL_phase != PERL_PHASE_DESTRUCT
6477                     && (hek = HvNAME_HEK((HV*)sv)))
6478                 {
6479                     if (PL_stashcache) {
6480                         DEBUG_o(Perl_deb(aTHX_
6481                             "sv_clear clearing PL_stashcache for '%"HEKf
6482                             "'\n",
6483                              HEKfARG(hek)));
6484                         (void)hv_deletehek(PL_stashcache,
6485                                            hek, G_DISCARD);
6486                     }
6487                     hv_name_set((HV*)sv, NULL, 0, 0);
6488                 }
6489
6490                 /* save old iter_sv in unused SvSTASH field */
6491                 assert(!SvOBJECT(sv));
6492                 SvSTASH(sv) = (HV*)iter_sv;
6493                 iter_sv = sv;
6494
6495                 /* save old hash_index in unused SvMAGIC field */
6496                 assert(!SvMAGICAL(sv));
6497                 assert(!SvMAGIC(sv));
6498                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6499                 hash_index = 0;
6500
6501                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6502                 goto get_next_sv; /* process this new sv */
6503             }
6504             /* free empty hash */
6505             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6506             assert(!HvARRAY((HV*)sv));
6507             break;
6508         case SVt_PVAV:
6509             {
6510                 AV* av = MUTABLE_AV(sv);
6511                 if (PL_comppad == av) {
6512                     PL_comppad = NULL;
6513                     PL_curpad = NULL;
6514                 }
6515                 if (AvREAL(av) && AvFILLp(av) > -1) {
6516                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6517                     /* save old iter_sv in top-most slot of AV,
6518                      * and pray that it doesn't get wiped in the meantime */
6519                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6520                     iter_sv = sv;
6521                     goto get_next_sv; /* process this new sv */
6522                 }
6523                 Safefree(AvALLOC(av));
6524             }
6525
6526             break;
6527         case SVt_PVLV:
6528             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6529                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6530                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6531                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6532             }
6533             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6534                 SvREFCNT_dec(LvTARG(sv));
6535             if (isREGEXP(sv)) goto freeregexp;
6536             /* FALLTHROUGH */
6537         case SVt_PVGV:
6538             if (isGV_with_GP(sv)) {
6539                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6540                    && HvENAME_get(stash))
6541                     mro_method_changed_in(stash);
6542                 gp_free(MUTABLE_GV(sv));
6543                 if (GvNAME_HEK(sv))
6544                     unshare_hek(GvNAME_HEK(sv));
6545                 /* If we're in a stash, we don't own a reference to it.
6546                  * However it does have a back reference to us, which
6547                  * needs to be cleared.  */
6548                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6549                         sv_del_backref(MUTABLE_SV(stash), sv);
6550             }
6551             /* FIXME. There are probably more unreferenced pointers to SVs
6552              * in the interpreter struct that we should check and tidy in
6553              * a similar fashion to this:  */
6554             /* See also S_sv_unglob, which does the same thing. */
6555             if ((const GV *)sv == PL_last_in_gv)
6556                 PL_last_in_gv = NULL;
6557             else if ((const GV *)sv == PL_statgv)
6558                 PL_statgv = NULL;
6559             else if ((const GV *)sv == PL_stderrgv)
6560                 PL_stderrgv = NULL;
6561             /* FALLTHROUGH */
6562         case SVt_PVMG:
6563         case SVt_PVNV:
6564         case SVt_PVIV:
6565         case SVt_INVLIST:
6566         case SVt_PV:
6567           freescalar:
6568             /* Don't bother with SvOOK_off(sv); as we're only going to
6569              * free it.  */
6570             if (SvOOK(sv)) {
6571                 STRLEN offset;
6572                 SvOOK_offset(sv, offset);
6573                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6574                 /* Don't even bother with turning off the OOK flag.  */
6575             }
6576             if (SvROK(sv)) {
6577             free_rv:
6578                 {
6579                     SV * const target = SvRV(sv);
6580                     if (SvWEAKREF(sv))
6581                         sv_del_backref(target, sv);
6582                     else
6583                         next_sv = target;
6584                 }
6585             }
6586 #ifdef PERL_ANY_COW
6587             else if (SvPVX_const(sv)
6588                      && !(SvTYPE(sv) == SVt_PVIO
6589                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6590             {
6591                 if (SvIsCOW(sv)) {
6592                     if (DEBUG_C_TEST) {
6593                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6594                         sv_dump(sv);
6595                     }
6596                     if (SvLEN(sv)) {
6597                         if (CowREFCNT(sv)) {
6598                             sv_buf_to_rw(sv);
6599                             CowREFCNT(sv)--;
6600                             sv_buf_to_ro(sv);
6601                             SvLEN_set(sv, 0);
6602                         }
6603                     } else {
6604                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6605                     }
6606
6607                 }
6608                 if (SvLEN(sv)) {
6609                     Safefree(SvPVX_mutable(sv));
6610                 }
6611             }
6612 #else
6613             else if (SvPVX_const(sv) && SvLEN(sv)
6614                      && !(SvTYPE(sv) == SVt_PVIO
6615                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6616                 Safefree(SvPVX_mutable(sv));
6617             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6618                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6619             }
6620 #endif
6621             break;
6622         case SVt_NV:
6623             break;
6624         }
6625
6626       free_body:
6627
6628         SvFLAGS(sv) &= SVf_BREAK;
6629         SvFLAGS(sv) |= SVTYPEMASK;
6630
6631         sv_type_details = bodies_by_type + type;
6632         if (sv_type_details->arena) {
6633             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6634                      &PL_body_roots[type]);
6635         }
6636         else if (sv_type_details->body_size) {
6637             safefree(SvANY(sv));
6638         }
6639
6640       free_head:
6641         /* caller is responsible for freeing the head of the original sv */
6642         if (sv != orig_sv && !SvREFCNT(sv))
6643             del_SV(sv);
6644
6645         /* grab and free next sv, if any */
6646       get_next_sv:
6647         while (1) {
6648             sv = NULL;
6649             if (next_sv) {
6650                 sv = next_sv;
6651                 next_sv = NULL;
6652             }
6653             else if (!iter_sv) {
6654                 break;
6655             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6656                 AV *const av = (AV*)iter_sv;
6657                 if (AvFILLp(av) > -1) {
6658                     sv = AvARRAY(av)[AvFILLp(av)--];
6659                 }
6660                 else { /* no more elements of current AV to free */
6661                     sv = iter_sv;
6662                     type = SvTYPE(sv);
6663                     /* restore previous value, squirrelled away */
6664                     iter_sv = AvARRAY(av)[AvMAX(av)];
6665                     Safefree(AvALLOC(av));
6666                     goto free_body;
6667                 }
6668             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6669                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6670                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6671                     /* no more elements of current HV to free */
6672                     sv = iter_sv;
6673                     type = SvTYPE(sv);
6674                     /* Restore previous values of iter_sv and hash_index,
6675                      * squirrelled away */
6676                     assert(!SvOBJECT(sv));
6677                     iter_sv = (SV*)SvSTASH(sv);
6678                     assert(!SvMAGICAL(sv));
6679                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6680 #ifdef DEBUGGING
6681                     /* perl -DA does not like rubbish in SvMAGIC. */
6682                     SvMAGIC_set(sv, 0);
6683 #endif
6684
6685                     /* free any remaining detritus from the hash struct */
6686                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6687                     assert(!HvARRAY((HV*)sv));
6688                     goto free_body;
6689                 }
6690             }
6691
6692             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6693
6694             if (!sv)
6695                 continue;
6696             if (!SvREFCNT(sv)) {
6697                 sv_free(sv);
6698                 continue;
6699             }
6700             if (--(SvREFCNT(sv)))
6701                 continue;
6702 #ifdef DEBUGGING
6703             if (SvTEMP(sv)) {
6704                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6705                          "Attempt to free temp prematurely: SV 0x%"UVxf
6706                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6707                 continue;
6708             }
6709 #endif
6710             if (SvIMMORTAL(sv)) {
6711                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6712                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6713                 continue;
6714             }
6715             break;
6716         } /* while 1 */
6717
6718     } /* while sv */
6719 }
6720
6721 /* This routine curses the sv itself, not the object referenced by sv. So
6722    sv does not have to be ROK. */
6723
6724 static bool
6725 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6726     PERL_ARGS_ASSERT_CURSE;
6727     assert(SvOBJECT(sv));
6728
6729     if (PL_defstash &&  /* Still have a symbol table? */
6730         SvDESTROYABLE(sv))
6731     {
6732         dSP;
6733         HV* stash;
6734         do {
6735           stash = SvSTASH(sv);
6736           assert(SvTYPE(stash) == SVt_PVHV);
6737           if (HvNAME(stash)) {
6738             CV* destructor = NULL;
6739             assert (SvOOK(stash));
6740             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6741             if (!destructor || HvMROMETA(stash)->destroy_gen
6742                                 != PL_sub_generation)
6743             {
6744                 GV * const gv =
6745                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6746                 if (gv) destructor = GvCV(gv);
6747                 if (!SvOBJECT(stash))
6748                 {
6749                     SvSTASH(stash) =
6750                         destructor ? (HV *)destructor : ((HV *)0)+1;
6751                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6752                         PL_sub_generation;
6753                 }
6754             }
6755             assert(!destructor || destructor == ((CV *)0)+1
6756                 || SvTYPE(destructor) == SVt_PVCV);
6757             if (destructor && destructor != ((CV *)0)+1
6758                 /* A constant subroutine can have no side effects, so
6759                    don't bother calling it.  */
6760                 && !CvCONST(destructor)
6761                 /* Don't bother calling an empty destructor or one that
6762                    returns immediately. */
6763                 && (CvISXSUB(destructor)
6764                 || (CvSTART(destructor)
6765                     && (CvSTART(destructor)->op_next->op_type
6766                                         != OP_LEAVESUB)
6767                     && (CvSTART(destructor)->op_next->op_type
6768                                         != OP_PUSHMARK
6769                         || CvSTART(destructor)->op_next->op_next->op_type
6770                                         != OP_RETURN
6771                        )
6772                    ))
6773                )
6774             {
6775                 SV* const tmpref = newRV(sv);
6776                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6777                 ENTER;
6778                 PUSHSTACKi(PERLSI_DESTROY);
6779                 EXTEND(SP, 2);
6780                 PUSHMARK(SP);
6781                 PUSHs(tmpref);
6782                 PUTBACK;
6783                 call_sv(MUTABLE_SV(destructor),
6784                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6785                 POPSTACK;
6786                 SPAGAIN;
6787                 LEAVE;
6788                 if(SvREFCNT(tmpref) < 2) {
6789                     /* tmpref is not kept alive! */
6790                     SvREFCNT(sv)--;
6791                     SvRV_set(tmpref, NULL);
6792                     SvROK_off(tmpref);
6793                 }
6794                 SvREFCNT_dec_NN(tmpref);
6795             }
6796           }
6797         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6798
6799
6800         if (check_refcnt && SvREFCNT(sv)) {
6801             if (PL_in_clean_objs)
6802                 Perl_croak(aTHX_
6803                   "DESTROY created new reference to dead object '%"HEKf"'",
6804                    HEKfARG(HvNAME_HEK(stash)));
6805             /* DESTROY gave object new lease on life */
6806             return FALSE;
6807         }
6808     }
6809
6810     if (SvOBJECT(sv)) {
6811         HV * const stash = SvSTASH(sv);
6812         /* Curse before freeing the stash, as freeing the stash could cause
6813            a recursive call into S_curse. */
6814         SvOBJECT_off(sv);       /* Curse the object. */
6815         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6816         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6817     }
6818     return TRUE;
6819 }
6820
6821 /*
6822 =for apidoc sv_newref
6823
6824 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6825 instead.
6826
6827 =cut
6828 */
6829
6830 SV *
6831 Perl_sv_newref(pTHX_ SV *const sv)
6832 {
6833     PERL_UNUSED_CONTEXT;
6834     if (sv)
6835         (SvREFCNT(sv))++;
6836     return sv;
6837 }
6838
6839 /*
6840 =for apidoc sv_free
6841
6842 Decrement an SV's reference count, and if it drops to zero, call
6843 C<sv_clear> to invoke destructors and free up any memory used by
6844 the body; finally, deallocating the SV's head itself.
6845 Normally called via a wrapper macro C<SvREFCNT_dec>.
6846
6847 =cut
6848 */
6849
6850 void
6851 Perl_sv_free(pTHX_ SV *const sv)
6852 {
6853     SvREFCNT_dec(sv);
6854 }
6855
6856
6857 /* Private helper function for SvREFCNT_dec().
6858  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6859
6860 void
6861 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6862 {
6863     dVAR;
6864
6865     PERL_ARGS_ASSERT_SV_FREE2;
6866
6867     if (LIKELY( rc == 1 )) {
6868         /* normal case */
6869         SvREFCNT(sv) = 0;
6870
6871 #ifdef DEBUGGING
6872         if (SvTEMP(sv)) {
6873             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6874                              "Attempt to free temp prematurely: SV 0x%"UVxf
6875                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6876             return;
6877         }
6878 #endif
6879         if (SvIMMORTAL(sv)) {
6880             /* make sure SvREFCNT(sv)==0 happens very seldom */
6881             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6882             return;
6883         }
6884         sv_clear(sv);
6885         if (! SvREFCNT(sv)) /* may have have been resurrected */
6886             del_SV(sv);
6887         return;
6888     }
6889
6890     /* handle exceptional cases */
6891
6892     assert(rc == 0);
6893
6894     if (SvFLAGS(sv) & SVf_BREAK)
6895         /* this SV's refcnt has been artificially decremented to
6896          * trigger cleanup */
6897         return;
6898     if (PL_in_clean_all) /* All is fair */
6899         return;
6900     if (SvIMMORTAL(sv)) {
6901         /* make sure SvREFCNT(sv)==0 happens very seldom */
6902         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6903         return;
6904     }
6905     if (ckWARN_d(WARN_INTERNAL)) {
6906 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6907         Perl_dump_sv_child(aTHX_ sv);
6908 #else
6909     #ifdef DEBUG_LEAKING_SCALARS
6910         sv_dump(sv);
6911     #endif
6912 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6913         if (PL_warnhook == PERL_WARNHOOK_FATAL
6914             || ckDEAD(packWARN(WARN_INTERNAL))) {
6915             /* Don't let Perl_warner cause us to escape our fate:  */
6916             abort();
6917         }
6918 #endif
6919         /* This may not return:  */
6920         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6921                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6922                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6923 #endif
6924     }
6925 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6926     abort();
6927 #endif
6928
6929 }
6930
6931
6932 /*
6933 =for apidoc sv_len
6934
6935 Returns the length of the string in the SV.  Handles magic and type
6936 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
6937 gives raw access to the C<xpv_cur> slot.
6938
6939 =cut
6940 */
6941
6942 STRLEN
6943 Perl_sv_len(pTHX_ SV *const sv)
6944 {
6945     STRLEN len;
6946
6947     if (!sv)
6948         return 0;
6949
6950     (void)SvPV_const(sv, len);
6951     return len;
6952 }
6953
6954 /*
6955 =for apidoc sv_len_utf8
6956
6957 Returns the number of characters in the string in an SV, counting wide
6958 UTF-8 bytes as a single character.  Handles magic and type coercion.
6959
6960 =cut
6961 */
6962
6963 /*
6964  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6965  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6966  * (Note that the mg_len is not the length of the mg_ptr field.
6967  * This allows the cache to store the character length of the string without
6968  * needing to malloc() extra storage to attach to the mg_ptr.)
6969  *
6970  */
6971
6972 STRLEN
6973 Perl_sv_len_utf8(pTHX_ SV *const sv)
6974 {
6975     if (!sv)
6976         return 0;
6977
6978     SvGETMAGIC(sv);
6979     return sv_len_utf8_nomg(sv);
6980 }
6981
6982 STRLEN
6983 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6984 {
6985     STRLEN len;
6986     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6987
6988     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6989
6990     if (PL_utf8cache && SvUTF8(sv)) {
6991             STRLEN ulen;
6992             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6993
6994             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6995                 if (mg->mg_len != -1)
6996                     ulen = mg->mg_len;
6997                 else {
6998                     /* We can use the offset cache for a headstart.
6999                        The longer value is stored in the first pair.  */
7000                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7001
7002                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7003                                                        s + len);
7004                 }
7005                 
7006                 if (PL_utf8cache < 0) {
7007                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7008                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7009                 }
7010             }
7011             else {
7012                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7013                 utf8_mg_len_cache_update(sv, &mg, ulen);
7014             }
7015             return ulen;
7016     }
7017     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7018 }
7019
7020 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7021    offset.  */
7022 static STRLEN
7023 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7024                       STRLEN *const uoffset_p, bool *const at_end)
7025 {
7026     const U8 *s = start;
7027     STRLEN uoffset = *uoffset_p;
7028
7029     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7030
7031     while (s < send && uoffset) {
7032         --uoffset;
7033         s += UTF8SKIP(s);
7034     }
7035     if (s == send) {
7036         *at_end = TRUE;
7037     }
7038     else if (s > send) {
7039         *at_end = TRUE;
7040         /* This is the existing behaviour. Possibly it should be a croak, as
7041            it's actually a bounds error  */
7042         s = send;
7043     }
7044     *uoffset_p -= uoffset;
7045     return s - start;
7046 }
7047
7048 /* Given the length of the string in both bytes and UTF-8 characters, decide
7049    whether to walk forwards or backwards to find the byte corresponding to
7050    the passed in UTF-8 offset.  */
7051 static STRLEN
7052 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7053                     STRLEN uoffset, const STRLEN uend)
7054 {
7055     STRLEN backw = uend - uoffset;
7056
7057     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7058
7059     if (uoffset < 2 * backw) {
7060         /* The assumption is that going forwards is twice the speed of going
7061            forward (that's where the 2 * backw comes from).
7062            (The real figure of course depends on the UTF-8 data.)  */
7063         const U8 *s = start;
7064
7065         while (s < send && uoffset--)
7066             s += UTF8SKIP(s);
7067         assert (s <= send);
7068         if (s > send)
7069             s = send;
7070         return s - start;
7071     }
7072
7073     while (backw--) {
7074         send--;
7075         while (UTF8_IS_CONTINUATION(*send))
7076             send--;
7077     }
7078     return send - start;
7079 }
7080
7081 /* For the string representation of the given scalar, find the byte
7082    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7083    give another position in the string, *before* the sought offset, which
7084    (which is always true, as 0, 0 is a valid pair of positions), which should
7085    help reduce the amount of linear searching.
7086    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7087    will be used to reduce the amount of linear searching. The cache will be
7088    created if necessary, and the found value offered to it for update.  */
7089 static STRLEN
7090 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7091                     const U8 *const send, STRLEN uoffset,
7092                     STRLEN uoffset0, STRLEN boffset0)
7093 {
7094     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7095     bool found = FALSE;
7096     bool at_end = FALSE;
7097
7098     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7099
7100     assert (uoffset >= uoffset0);
7101
7102     if (!uoffset)
7103         return 0;
7104
7105     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7106         && PL_utf8cache
7107         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7108                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7109         if ((*mgp)->mg_ptr) {
7110             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7111             if (cache[0] == uoffset) {
7112                 /* An exact match. */
7113                 return cache[1];
7114             }
7115             if (cache[2] == uoffset) {
7116                 /* An exact match. */
7117                 return cache[3];
7118             }
7119
7120             if (cache[0] < uoffset) {
7121                 /* The cache already knows part of the way.   */
7122                 if (cache[0] > uoffset0) {
7123                     /* The cache knows more than the passed in pair  */
7124                     uoffset0 = cache[0];
7125                     boffset0 = cache[1];
7126                 }
7127                 if ((*mgp)->mg_len != -1) {
7128                     /* And we know the end too.  */
7129                     boffset = boffset0
7130                         + sv_pos_u2b_midway(start + boffset0, send,
7131                                               uoffset - uoffset0,
7132                                               (*mgp)->mg_len - uoffset0);
7133                 } else {
7134                     uoffset -= uoffset0;
7135                     boffset = boffset0
7136                         + sv_pos_u2b_forwards(start + boffset0,
7137                                               send, &uoffset, &at_end);
7138                     uoffset += uoffset0;
7139                 }
7140             }
7141             else if (cache[2] < uoffset) {
7142                 /* We're between the two cache entries.  */
7143                 if (cache[2] > uoffset0) {
7144                     /* and the cache knows more than the passed in pair  */
7145                     uoffset0 = cache[2];
7146                     boffset0 = cache[3];
7147                 }
7148
7149                 boffset = boffset0
7150                     + sv_pos_u2b_midway(start + boffset0,
7151                                           start + cache[1],
7152                                           uoffset - uoffset0,
7153                                           cache[0] - uoffset0);
7154             } else {
7155                 boffset = boffset0
7156                     + sv_pos_u2b_midway(start + boffset0,
7157                                           start + cache[3],
7158                                           uoffset - uoffset0,
7159                                           cache[2] - uoffset0);
7160             }
7161             found = TRUE;
7162         }
7163         else if ((*mgp)->mg_len != -1) {
7164             /* If we can take advantage of a passed in offset, do so.  */
7165             /* In fact, offset0 is either 0, or less than offset, so don't
7166                need to worry about the other possibility.  */
7167             boffset = boffset0
7168                 + sv_pos_u2b_midway(start + boffset0, send,
7169                                       uoffset - uoffset0,
7170                                       (*mgp)->mg_len - uoffset0);
7171             found = TRUE;
7172         }
7173     }
7174
7175     if (!found || PL_utf8cache < 0) {
7176         STRLEN real_boffset;
7177         uoffset -= uoffset0;
7178         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7179                                                       send, &uoffset, &at_end);
7180         uoffset += uoffset0;
7181
7182         if (found && PL_utf8cache < 0)
7183             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7184                                        real_boffset, sv);
7185         boffset = real_boffset;
7186     }
7187
7188     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7189         if (at_end)
7190             utf8_mg_len_cache_update(sv, mgp, uoffset);
7191         else
7192             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7193     }
7194     return boffset;
7195 }
7196
7197
7198 /*
7199 =for apidoc sv_pos_u2b_flags
7200
7201 Converts the offset from a count of UTF-8 chars from
7202 the start of the string, to a count of the equivalent number of bytes; if
7203 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7204 C<offset>, rather than from the start
7205 of the string.  Handles type coercion.
7206 C<flags> is passed to C<SvPV_flags>, and usually should be
7207 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7208
7209 =cut
7210 */
7211
7212 /*
7213  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7214  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7215  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7216  *
7217  */
7218
7219 STRLEN
7220 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7221                       U32 flags)
7222 {
7223     const U8 *start;
7224     STRLEN len;
7225     STRLEN boffset;
7226
7227     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7228
7229     start = (U8*)SvPV_flags(sv, len, flags);
7230     if (len) {
7231         const U8 * const send = start + len;
7232         MAGIC *mg = NULL;
7233         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7234
7235         if (lenp
7236             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7237                         is 0, and *lenp is already set to that.  */) {
7238             /* Convert the relative offset to absolute.  */
7239             const STRLEN uoffset2 = uoffset + *lenp;
7240             const STRLEN boffset2
7241                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7242                                       uoffset, boffset) - boffset;
7243
7244             *lenp = boffset2;
7245         }
7246     } else {
7247         if (lenp)
7248             *lenp = 0;
7249         boffset = 0;
7250     }
7251
7252     return boffset;
7253 }
7254
7255 /*
7256 =for apidoc sv_pos_u2b
7257
7258 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7259 the start of the string, to a count of the equivalent number of bytes; if
7260 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7261 the offset, rather than from the start of the string.  Handles magic and
7262 type coercion.
7263
7264 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7265 than 2Gb.
7266
7267 =cut
7268 */
7269
7270 /*
7271  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7272  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7273  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7274  *
7275  */
7276
7277 /* This function is subject to size and sign problems */
7278
7279 void
7280 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7281 {
7282     PERL_ARGS_ASSERT_SV_POS_U2B;
7283
7284     if (lenp) {
7285         STRLEN ulen = (STRLEN)*lenp;
7286         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7287                                          SV_GMAGIC|SV_CONST_RETURN);
7288         *lenp = (I32)ulen;
7289     } else {
7290         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7291                                          SV_GMAGIC|SV_CONST_RETURN);
7292     }
7293 }
7294
7295 static void
7296 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7297                            const STRLEN ulen)
7298 {
7299     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7300     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7301         return;
7302
7303     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7304                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7305         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7306     }
7307     assert(*mgp);
7308
7309     (*mgp)->mg_len = ulen;
7310 }
7311
7312 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7313    byte length pairing. The (byte) length of the total SV is passed in too,
7314    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7315    may not have updated SvCUR, so we can't rely on reading it directly.
7316
7317    The proffered utf8/byte length pairing isn't used if the cache already has
7318    two pairs, and swapping either for the proffered pair would increase the
7319    RMS of the intervals between known byte offsets.
7320
7321    The cache itself consists of 4 STRLEN values
7322    0: larger UTF-8 offset
7323    1: corresponding byte offset
7324    2: smaller UTF-8 offset
7325    3: corresponding byte offset
7326
7327    Unused cache pairs have the value 0, 0.
7328    Keeping the cache "backwards" means that the invariant of
7329    cache[0] >= cache[2] is maintained even with empty slots, which means that
7330    the code that uses it doesn't need to worry if only 1 entry has actually
7331    been set to non-zero.  It also makes the "position beyond the end of the
7332    cache" logic much simpler, as the first slot is always the one to start
7333    from.   
7334 */
7335 static void
7336 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7337                            const STRLEN utf8, const STRLEN blen)
7338 {
7339     STRLEN *cache;
7340
7341     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7342
7343     if (SvREADONLY(sv))
7344         return;
7345
7346     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7347                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7348         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7349                            0);
7350         (*mgp)->mg_len = -1;
7351     }
7352     assert(*mgp);
7353
7354     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7355         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7356         (*mgp)->mg_ptr = (char *) cache;
7357     }
7358     assert(cache);
7359
7360     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7361         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7362            a pointer.  Note that we no longer cache utf8 offsets on refer-
7363            ences, but this check is still a good idea, for robustness.  */
7364         const U8 *start = (const U8 *) SvPVX_const(sv);
7365         const STRLEN realutf8 = utf8_length(start, start + byte);
7366
7367         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7368                                    sv);
7369     }
7370
7371     /* Cache is held with the later position first, to simplify the code
7372        that deals with unbounded ends.  */
7373        
7374     ASSERT_UTF8_CACHE(cache);
7375     if (cache[1] == 0) {
7376         /* Cache is totally empty  */
7377         cache[0] = utf8;
7378         cache[1] = byte;
7379     } else if (cache[3] == 0) {
7380         if (byte > cache[1]) {
7381             /* New one is larger, so goes first.  */
7382             cache[2] = cache[0];
7383             cache[3] = cache[1];
7384             cache[0] = utf8;
7385             cache[1] = byte;
7386         } else {
7387             cache[2] = utf8;
7388             cache[3] = byte;
7389         }
7390     } else {
7391 /* float casts necessary? XXX */
7392 #define THREEWAY_SQUARE(a,b,c,d) \
7393             ((float)((d) - (c))) * ((float)((d) - (c))) \
7394             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7395                + ((float)((b) - (a))) * ((float)((b) - (a)))
7396
7397         /* Cache has 2 slots in use, and we know three potential pairs.
7398            Keep the two that give the lowest RMS distance. Do the
7399            calculation in bytes simply because we always know the byte
7400            length.  squareroot has the same ordering as the positive value,
7401            so don't bother with the actual square root.  */
7402         if (byte > cache[1]) {
7403             /* New position is after the existing pair of pairs.  */
7404             const float keep_earlier
7405                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7406             const float keep_later
7407                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7408
7409             if (keep_later < keep_earlier) {
7410                 cache[2] = cache[0];
7411                 cache[3] = cache[1];
7412             }
7413             cache[0] = utf8;
7414             cache[1] = byte;
7415         }
7416         else {
7417             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7418             float b, c, keep_earlier;
7419             if (byte > cache[3]) {
7420                 /* New position is between the existing pair of pairs.  */
7421                 b = (float)cache[3];
7422                 c = (float)byte;
7423             } else {
7424                 /* New position is before the existing pair of pairs.  */
7425                 b = (float)byte;
7426                 c = (float)cache[3];
7427             }
7428             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7429             if (byte > cache[3]) {
7430                 if (keep_later < keep_earlier) {
7431                     cache[2] = utf8;
7432                     cache[3] = byte;
7433                 }
7434                 else {
7435                     cache[0] = utf8;
7436                     cache[1] = byte;
7437                 }
7438             }
7439             else {
7440                 if (! (keep_later < keep_earlier)) {
7441                     cache[0] = cache[2];
7442                     cache[1] = cache[3];
7443                 }
7444                 cache[2] = utf8;
7445                 cache[3] = byte;
7446             }
7447         }
7448     }
7449     ASSERT_UTF8_CACHE(cache);
7450 }
7451
7452 /* We already know all of the way, now we may be able to walk back.  The same
7453    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7454    backward is half the speed of walking forward. */
7455 static STRLEN
7456 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7457                     const U8 *end, STRLEN endu)
7458 {
7459     const STRLEN forw = target - s;
7460     STRLEN backw = end - target;
7461
7462     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7463
7464     if (forw < 2 * backw) {
7465         return utf8_length(s, target);
7466     }
7467
7468     while (end > target) {
7469         end--;
7470         while (UTF8_IS_CONTINUATION(*end)) {
7471             end--;
7472         }
7473         endu--;
7474     }
7475     return endu;
7476 }
7477
7478 /*
7479 =for apidoc sv_pos_b2u_flags
7480
7481 Converts C<offset> from a count of bytes from the start of the string, to
7482 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7483 C<flags> is passed to C<SvPV_flags>, and usually should be
7484 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7485
7486 =cut
7487 */
7488
7489 /*
7490  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7491  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7492  * and byte offsets.
7493  *
7494  */
7495 STRLEN
7496 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7497 {
7498     const U8* s;
7499     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7500     STRLEN blen;
7501     MAGIC* mg = NULL;
7502     const U8* send;
7503     bool found = FALSE;
7504
7505     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7506
7507     s = (const U8*)SvPV_flags(sv, blen, flags);
7508
7509     if (blen < offset)
7510         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7511                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7512
7513     send = s + offset;
7514
7515     if (!SvREADONLY(sv)
7516         && PL_utf8cache
7517         && SvTYPE(sv) >= SVt_PVMG
7518         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7519     {
7520         if (mg->mg_ptr) {
7521             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7522             if (cache[1] == offset) {
7523                 /* An exact match. */
7524                 return cache[0];
7525             }
7526             if (cache[3] == offset) {
7527                 /* An exact match. */
7528                 return cache[2];
7529             }
7530
7531             if (cache[1] < offset) {
7532                 /* We already know part of the way. */
7533                 if (mg->mg_len != -1) {
7534                     /* Actually, we know the end too.  */
7535                     len = cache[0]
7536                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7537                                               s + blen, mg->mg_len - cache[0]);
7538                 } else {
7539                     len = cache[0] + utf8_length(s + cache[1], send);
7540                 }
7541             }
7542             else if (cache[3] < offset) {
7543                 /* We're between the two cached pairs, so we do the calculation
7544                    offset by the byte/utf-8 positions for the earlier pair,
7545                    then add the utf-8 characters from the string start to
7546                    there.  */
7547                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7548                                           s + cache[1], cache[0] - cache[2])
7549                     + cache[2];
7550
7551             }
7552             else { /* cache[3] > offset */
7553                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7554                                           cache[2]);
7555
7556             }
7557             ASSERT_UTF8_CACHE(cache);
7558             found = TRUE;
7559         } else if (mg->mg_len != -1) {
7560             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7561             found = TRUE;
7562         }
7563     }
7564     if (!found || PL_utf8cache < 0) {
7565         const STRLEN real_len = utf8_length(s, send);
7566
7567         if (found && PL_utf8cache < 0)
7568             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7569         len = real_len;
7570     }
7571
7572     if (PL_utf8cache) {
7573         if (blen == offset)
7574             utf8_mg_len_cache_update(sv, &mg, len);
7575         else
7576             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7577     }
7578
7579     return len;
7580 }
7581
7582 /*
7583 =for apidoc sv_pos_b2u
7584
7585 Converts the value pointed to by C<offsetp> from a count of bytes from the
7586 start of the string, to a count of the equivalent number of UTF-8 chars.
7587 Handles magic and type coercion.
7588
7589 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7590 longer than 2Gb.
7591
7592 =cut
7593 */
7594
7595 /*
7596  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7597  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7598  * byte offsets.
7599  *
7600  */
7601 void
7602 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7603 {
7604     PERL_ARGS_ASSERT_SV_POS_B2U;
7605
7606     if (!sv)
7607         return;
7608
7609     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7610                                      SV_GMAGIC|SV_CONST_RETURN);
7611 }
7612
7613 static void
7614 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7615                              STRLEN real, SV *const sv)
7616 {
7617     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7618
7619     /* As this is debugging only code, save space by keeping this test here,
7620        rather than inlining it in all the callers.  */
7621     if (from_cache == real)
7622         return;
7623
7624     /* Need to turn the assertions off otherwise we may recurse infinitely
7625        while printing error messages.  */
7626     SAVEI8(PL_utf8cache);
7627     PL_utf8cache = 0;
7628     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7629                func, (UV) from_cache, (UV) real, SVfARG(sv));
7630 }
7631
7632 /*
7633 =for apidoc sv_eq
7634
7635 Returns a boolean indicating whether the strings in the two SVs are
7636 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7637 coerce its args to strings if necessary.
7638
7639 =for apidoc sv_eq_flags
7640
7641 Returns a boolean indicating whether the strings in the two SVs are
7642 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7643 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7644
7645 =cut
7646 */
7647
7648 I32
7649 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7650 {
7651     const char *pv1;
7652     STRLEN cur1;
7653     const char *pv2;
7654     STRLEN cur2;
7655     I32  eq     = 0;
7656     SV* svrecode = NULL;
7657
7658     if (!sv1) {
7659         pv1 = "";
7660         cur1 = 0;
7661     }
7662     else {
7663         /* if pv1 and pv2 are the same, second SvPV_const call may
7664          * invalidate pv1 (if we are handling magic), so we may need to
7665          * make a copy */
7666         if (sv1 == sv2 && flags & SV_GMAGIC
7667          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7668             pv1 = SvPV_const(sv1, cur1);
7669             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7670         }
7671         pv1 = SvPV_flags_const(sv1, cur1, flags);
7672     }
7673
7674     if (!sv2){
7675         pv2 = "";
7676         cur2 = 0;
7677     }
7678     else
7679         pv2 = SvPV_flags_const(sv2, cur2, flags);
7680
7681     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7682         /* Differing utf8ness.
7683          * Do not UTF8size the comparands as a side-effect. */
7684          if (IN_ENCODING) {
7685               if (SvUTF8(sv1)) {
7686                    svrecode = newSVpvn(pv2, cur2);
7687                    sv_recode_to_utf8(svrecode, _get_encoding());
7688                    pv2 = SvPV_const(svrecode, cur2);
7689               }
7690               else {
7691                    svrecode = newSVpvn(pv1, cur1);
7692                    sv_recode_to_utf8(svrecode, _get_encoding());
7693                    pv1 = SvPV_const(svrecode, cur1);
7694               }
7695               /* Now both are in UTF-8. */
7696               if (cur1 != cur2) {
7697                    SvREFCNT_dec_NN(svrecode);
7698                    return FALSE;
7699               }
7700          }
7701          else {
7702               if (SvUTF8(sv1)) {
7703                   /* sv1 is the UTF-8 one  */
7704                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7705                                         (const U8*)pv1, cur1) == 0;
7706               }
7707               else {
7708                   /* sv2 is the UTF-8 one  */
7709                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7710                                         (const U8*)pv2, cur2) == 0;
7711               }
7712          }
7713     }
7714
7715     if (cur1 == cur2)
7716         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7717         
7718     SvREFCNT_dec(svrecode);
7719
7720     return eq;
7721 }
7722
7723 /*
7724 =for apidoc sv_cmp
7725
7726 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7727 string in C<sv1> is less than, equal to, or greater than the string in
7728 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7729 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7730
7731 =for apidoc sv_cmp_flags
7732
7733 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7734 string in C<sv1> is less than, equal to, or greater than the string in
7735 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7736 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7737 also C<L</sv_cmp_locale_flags>>.
7738
7739 =cut
7740 */
7741
7742 I32
7743 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7744 {
7745     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7746 }
7747
7748 I32
7749 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7750                   const U32 flags)
7751 {
7752     STRLEN cur1, cur2;
7753     const char *pv1, *pv2;
7754     I32  cmp;
7755     SV *svrecode = NULL;
7756
7757     if (!sv1) {
7758         pv1 = "";
7759         cur1 = 0;
7760     }
7761     else
7762         pv1 = SvPV_flags_const(sv1, cur1, flags);
7763
7764     if (!sv2) {
7765         pv2 = "";
7766         cur2 = 0;
7767     }
7768     else
7769         pv2 = SvPV_flags_const(sv2, cur2, flags);
7770
7771     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7772         /* Differing utf8ness.
7773          * Do not UTF8size the comparands as a side-effect. */
7774         if (SvUTF8(sv1)) {
7775             if (IN_ENCODING) {
7776                  svrecode = newSVpvn(pv2, cur2);
7777                  sv_recode_to_utf8(svrecode, _get_encoding());
7778                  pv2 = SvPV_const(svrecode, cur2);
7779             }
7780             else {
7781                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7782                                                    (const U8*)pv1, cur1);
7783                 return retval ? retval < 0 ? -1 : +1 : 0;
7784             }
7785         }
7786         else {
7787             if (IN_ENCODING) {
7788                  svrecode = newSVpvn(pv1, cur1);
7789                  sv_recode_to_utf8(svrecode, _get_encoding());
7790                  pv1 = SvPV_const(svrecode, cur1);
7791             }
7792             else {
7793                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7794                                                   (const U8*)pv2, cur2);
7795                 return retval ? retval < 0 ? -1 : +1 : 0;
7796             }
7797         }
7798     }
7799
7800     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7801
7802     if (!cur1) {
7803         cmp = cur2 ? -1 : 0;
7804     } else if (!cur2) {
7805         cmp = 1;
7806     } else {
7807         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7808
7809 #ifdef EBCDIC
7810         if (! DO_UTF8(sv1)) {
7811 #endif
7812             const I32 retval = memcmp((const void*)pv1,
7813                                       (const void*)pv2,
7814                                       shortest_len);
7815             if (retval) {
7816                 cmp = retval < 0 ? -1 : 1;
7817             } else if (cur1 == cur2) {
7818                 cmp = 0;
7819             } else {
7820                 cmp = cur1 < cur2 ? -1 : 1;
7821             }
7822 #ifdef EBCDIC
7823         }
7824         else {  /* Both are to be treated as UTF-EBCDIC */
7825
7826             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7827              * which remaps code points 0-255.  We therefore generally have to
7828              * unmap back to the original values to get an accurate comparison.
7829              * But we don't have to do that for UTF-8 invariants, as by
7830              * definition, they aren't remapped, nor do we have to do it for
7831              * above-latin1 code points, as they also aren't remapped.  (This
7832              * code also works on ASCII platforms, but the memcmp() above is
7833              * much faster). */
7834
7835             const char *e = pv1 + shortest_len;
7836
7837             /* Find the first bytes that differ between the two strings */
7838             while (pv1 < e && *pv1 == *pv2) {
7839                 pv1++;
7840                 pv2++;
7841             }
7842
7843
7844             if (pv1 == e) { /* Are the same all the way to the end */
7845                 if (cur1 == cur2) {
7846                     cmp = 0;
7847                 } else {
7848                     cmp = cur1 < cur2 ? -1 : 1;
7849                 }
7850             }
7851             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7852                     * in the strings were.  The current bytes may or may not be
7853                     * at the beginning of a character.  But neither or both are
7854                     * (or else earlier bytes would have been different).  And
7855                     * if we are in the middle of a character, the two
7856                     * characters are comprised of the same number of bytes
7857                     * (because in this case the start bytes are the same, and
7858                     * the start bytes encode the character's length). */
7859                  if (UTF8_IS_INVARIANT(*pv1))
7860             {
7861                 /* If both are invariants; can just compare directly */
7862                 if (UTF8_IS_INVARIANT(*pv2)) {
7863                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7864                 }
7865                 else   /* Since *pv1 is invariant, it is the whole character,
7866                           which means it is at the beginning of a character.
7867                           That means pv2 is also at the beginning of a
7868                           character (see earlier comment).  Since it isn't
7869                           invariant, it must be a start byte.  If it starts a
7870                           character whose code point is above 255, that
7871                           character is greater than any single-byte char, which
7872                           *pv1 is */
7873                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7874                 {
7875                     cmp = -1;
7876                 }
7877                 else {
7878                     /* Here, pv2 points to a character composed of 2 bytes
7879                      * whose code point is < 256.  Get its code point and
7880                      * compare with *pv1 */
7881                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7882                            ?  -1
7883                            : 1;
7884                 }
7885             }
7886             else   /* The code point starting at pv1 isn't a single byte */
7887                  if (UTF8_IS_INVARIANT(*pv2))
7888             {
7889                 /* But here, the code point starting at *pv2 is a single byte,
7890                  * and so *pv1 must begin a character, hence is a start byte.
7891                  * If that character is above 255, it is larger than any
7892                  * single-byte char, which *pv2 is */
7893                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
7894                     cmp = 1;
7895                 }
7896                 else {
7897                     /* Here, pv1 points to a character composed of 2 bytes
7898                      * whose code point is < 256.  Get its code point and
7899                      * compare with the single byte character *pv2 */
7900                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
7901                           ?  -1
7902                           : 1;
7903                 }
7904             }
7905             else   /* Here, we've ruled out either *pv1 and *pv2 being
7906                       invariant.  That means both are part of variants, but not
7907                       necessarily at the start of a character */
7908                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
7909                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
7910             {
7911                 /* Here, at least one is the start of a character, which means
7912                  * the other is also a start byte.  And the code point of at
7913                  * least one of the characters is above 255.  It is a
7914                  * characteristic of UTF-EBCDIC that all start bytes for
7915                  * above-latin1 code points are well behaved as far as code
7916                  * point comparisons go, and all are larger than all other
7917                  * start bytes, so the comparison with those is also well
7918                  * behaved */
7919                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7920             }
7921             else {
7922                 /* Here both *pv1 and *pv2 are part of variant characters.
7923                  * They could be both continuations, or both start characters.
7924                  * (One or both could even be an illegal start character (for
7925                  * an overlong) which for the purposes of sorting we treat as
7926                  * legal. */
7927                 if (UTF8_IS_CONTINUATION(*pv1)) {
7928
7929                     /* If they are continuations for code points above 255,
7930                      * then comparing the current byte is sufficient, as there
7931                      * is no remapping of these and so the comparison is
7932                      * well-behaved.   We determine if they are such
7933                      * continuations by looking at the preceding byte.  It
7934                      * could be a start byte, from which we can tell if it is
7935                      * for an above 255 code point.  Or it could be a
7936                      * continuation, which means the character occupies at
7937                      * least 3 bytes, so must be above 255.  */
7938                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
7939                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
7940                     {
7941                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7942                         goto cmp_done;
7943                     }
7944
7945                     /* Here, the continuations are for code points below 256;
7946                      * back up one to get to the start byte */
7947                     pv1--;
7948                     pv2--;
7949                 }
7950
7951                 /* We need to get the actual native code point of each of these
7952                  * variants in order to compare them */
7953                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
7954                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7955                         ? -1
7956                         : 1;
7957             }
7958         }
7959       cmp_done: ;
7960 #endif
7961     }
7962
7963     SvREFCNT_dec(svrecode);
7964
7965     return cmp;
7966 }
7967
7968 /*
7969 =for apidoc sv_cmp_locale
7970
7971 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7972 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
7973 if necessary.  See also C<L</sv_cmp>>.
7974
7975 =for apidoc sv_cmp_locale_flags
7976
7977 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7978 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
7979 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
7980 C<L</sv_cmp_flags>>.
7981
7982 =cut
7983 */
7984
7985 I32
7986 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7987 {
7988     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7989 }
7990
7991 I32
7992 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7993                          const U32 flags)
7994 {
7995 #ifdef USE_LOCALE_COLLATE
7996
7997     char *pv1, *pv2;
7998     STRLEN len1, len2;
7999     I32 retval;
8000
8001     if (PL_collation_standard)
8002         goto raw_compare;
8003
8004     len1 = 0;
8005     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8006     len2 = 0;
8007     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8008
8009     if (!pv1 || !len1) {
8010         if (pv2 && len2)
8011             return -1;
8012         else
8013             goto raw_compare;
8014     }
8015     else {
8016         if (!pv2 || !len2)
8017             return 1;
8018     }
8019
8020     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8021
8022     if (retval)
8023         return retval < 0 ? -1 : 1;
8024
8025     /*
8026      * When the result of collation is equality, that doesn't mean
8027      * that there are no differences -- some locales exclude some
8028      * characters from consideration.  So to avoid false equalities,
8029      * we use the raw string as a tiebreaker.
8030      */
8031
8032   raw_compare:
8033     /* FALLTHROUGH */
8034
8035 #else
8036     PERL_UNUSED_ARG(flags);
8037 #endif /* USE_LOCALE_COLLATE */
8038
8039     return sv_cmp(sv1, sv2);
8040 }
8041
8042
8043 #ifdef USE_LOCALE_COLLATE
8044
8045 /*
8046 =for apidoc sv_collxfrm
8047
8048 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8049 C<L</sv_collxfrm_flags>>.
8050
8051 =for apidoc sv_collxfrm_flags
8052
8053 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8054 flags contain C<SV_GMAGIC>, it handles get-magic.
8055
8056 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8057 scalar data of the variable, but transformed to such a format that a normal
8058 memory comparison can be used to compare the data according to the locale
8059 settings.
8060
8061 =cut
8062 */
8063
8064 char *
8065 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8066 {
8067     MAGIC *mg;
8068
8069     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8070
8071     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8072     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8073         const char *s;
8074         char *xf;
8075         STRLEN len, xlen;
8076
8077         if (mg)
8078             Safefree(mg->mg_ptr);
8079         s = SvPV_flags_const(sv, len, flags);
8080         if ((xf = mem_collxfrm(s, len, &xlen))) {
8081             if (! mg) {
8082                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8083                                  0, 0);
8084                 assert(mg);
8085             }
8086             mg->mg_ptr = xf;
8087             mg->mg_len = xlen;
8088         }
8089         else {
8090             if (mg) {
8091                 mg->mg_ptr = NULL;
8092                 mg->mg_len = -1;
8093             }
8094         }
8095     }
8096     if (mg && mg->mg_ptr) {
8097         *nxp = mg->mg_len;
8098         return mg->mg_ptr + sizeof(PL_collation_ix);
8099     }
8100     else {
8101         *nxp = 0;
8102         return NULL;
8103     }
8104 }
8105
8106 #endif /* USE_LOCALE_COLLATE */
8107
8108 static char *
8109 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8110 {
8111     SV * const tsv = newSV(0);
8112     ENTER;
8113     SAVEFREESV(tsv);
8114     sv_gets(tsv, fp, 0);
8115     sv_utf8_upgrade_nomg(tsv);
8116     SvCUR_set(sv,append);
8117     sv_catsv(sv,tsv);
8118     LEAVE;
8119     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8120 }
8121
8122 static char *
8123 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8124 {
8125     SSize_t bytesread;
8126     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8127       /* Grab the size of the record we're getting */
8128     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8129     
8130     /* Go yank in */
8131 #ifdef __VMS
8132     int fd;
8133     Stat_t st;
8134
8135     /* With a true, record-oriented file on VMS, we need to use read directly
8136      * to ensure that we respect RMS record boundaries.  The user is responsible
8137      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8138      * record size) field.  N.B. This is likely to produce invalid results on
8139      * varying-width character data when a record ends mid-character.
8140      */
8141     fd = PerlIO_fileno(fp);
8142     if (fd != -1
8143         && PerlLIO_fstat(fd, &st) == 0
8144         && (st.st_fab_rfm == FAB$C_VAR
8145             || st.st_fab_rfm == FAB$C_VFC
8146             || st.st_fab_rfm == FAB$C_FIX)) {
8147
8148         bytesread = PerlLIO_read(fd, buffer, recsize);
8149     }
8150     else /* in-memory file from PerlIO::Scalar
8151           * or not a record-oriented file
8152           */
8153 #endif
8154     {
8155         bytesread = PerlIO_read(fp, buffer, recsize);
8156
8157         /* At this point, the logic in sv_get() means that sv will
8158            be treated as utf-8 if the handle is utf8.
8159         */
8160         if (PerlIO_isutf8(fp) && bytesread > 0) {
8161             char *bend = buffer + bytesread;
8162             char *bufp = buffer;
8163             size_t charcount = 0;
8164             bool charstart = TRUE;
8165             STRLEN skip = 0;
8166
8167             while (charcount < recsize) {
8168                 /* count accumulated characters */
8169                 while (bufp < bend) {
8170                     if (charstart) {
8171                         skip = UTF8SKIP(bufp);
8172                     }
8173                     if (bufp + skip > bend) {
8174                         /* partial at the end */
8175                         charstart = FALSE;
8176                         break;
8177                     }
8178                     else {
8179                         ++charcount;
8180                         bufp += skip;
8181                         charstart = TRUE;
8182                     }
8183                 }
8184
8185                 if (charcount < recsize) {
8186                     STRLEN readsize;
8187                     STRLEN bufp_offset = bufp - buffer;
8188                     SSize_t morebytesread;
8189
8190                     /* originally I read enough to fill any incomplete
8191                        character and the first byte of the next
8192                        character if needed, but if there's many
8193                        multi-byte encoded characters we're going to be
8194                        making a read call for every character beyond
8195                        the original read size.
8196
8197                        So instead, read the rest of the character if
8198                        any, and enough bytes to match at least the
8199                        start bytes for each character we're going to
8200                        read.
8201                     */
8202                     if (charstart)
8203                         readsize = recsize - charcount;
8204                     else 
8205                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8206                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8207                     bend = buffer + bytesread;
8208                     morebytesread = PerlIO_read(fp, bend, readsize);
8209                     if (morebytesread <= 0) {
8210                         /* we're done, if we still have incomplete
8211                            characters the check code in sv_gets() will
8212                            warn about them.
8213
8214                            I'd originally considered doing
8215                            PerlIO_ungetc() on all but the lead
8216                            character of the incomplete character, but
8217                            read() doesn't do that, so I don't.
8218                         */
8219                         break;
8220                     }
8221
8222                     /* prepare to scan some more */
8223                     bytesread += morebytesread;
8224                     bend = buffer + bytesread;
8225                     bufp = buffer + bufp_offset;
8226                 }
8227             }
8228         }
8229     }
8230
8231     if (bytesread < 0)
8232         bytesread = 0;
8233     SvCUR_set(sv, bytesread + append);
8234     buffer[bytesread] = '\0';
8235     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8236 }
8237
8238 /*
8239 =for apidoc sv_gets
8240
8241 Get a line from the filehandle and store it into the SV, optionally
8242 appending to the currently-stored string.  If C<append> is not 0, the
8243 line is appended to the SV instead of overwriting it.  C<append> should
8244 be set to the byte offset that the appended string should start at
8245 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8246
8247 =cut
8248 */
8249
8250 char *
8251 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8252 {
8253     const char *rsptr;
8254     STRLEN rslen;
8255     STDCHAR rslast;
8256     STDCHAR *bp;
8257     SSize_t cnt;
8258     int i = 0;
8259     int rspara = 0;
8260
8261     PERL_ARGS_ASSERT_SV_GETS;
8262
8263     if (SvTHINKFIRST(sv))
8264         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8265     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8266        from <>.
8267        However, perlbench says it's slower, because the existing swipe code
8268        is faster than copy on write.
8269        Swings and roundabouts.  */
8270     SvUPGRADE(sv, SVt_PV);
8271
8272     if (append) {
8273         /* line is going to be appended to the existing buffer in the sv */
8274         if (PerlIO_isutf8(fp)) {
8275             if (!SvUTF8(sv)) {
8276                 sv_utf8_upgrade_nomg(sv);
8277                 sv_pos_u2b(sv,&append,0);
8278             }
8279         } else if (SvUTF8(sv)) {
8280             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8281         }
8282     }
8283
8284     SvPOK_only(sv);
8285     if (!append) {
8286         /* not appending - "clear" the string by setting SvCUR to 0,
8287          * the pv is still avaiable. */
8288         SvCUR_set(sv,0);
8289     }
8290     if (PerlIO_isutf8(fp))
8291         SvUTF8_on(sv);
8292
8293     if (IN_PERL_COMPILETIME) {
8294         /* we always read code in line mode */
8295         rsptr = "\n";
8296         rslen = 1;
8297     }
8298     else if (RsSNARF(PL_rs)) {
8299         /* If it is a regular disk file use size from stat() as estimate
8300            of amount we are going to read -- may result in mallocing
8301            more memory than we really need if the layers below reduce
8302            the size we read (e.g. CRLF or a gzip layer).
8303          */
8304         Stat_t st;
8305         int fd = PerlIO_fileno(fp);
8306         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8307             const Off_t offset = PerlIO_tell(fp);
8308             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8309 #ifdef PERL_COPY_ON_WRITE
8310                 /* Add an extra byte for the sake of copy-on-write's
8311                  * buffer reference count. */
8312                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8313 #else
8314                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8315 #endif
8316             }
8317         }
8318         rsptr = NULL;
8319         rslen = 0;
8320     }
8321     else if (RsRECORD(PL_rs)) {
8322         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8323     }
8324     else if (RsPARA(PL_rs)) {
8325         rsptr = "\n\n";
8326         rslen = 2;
8327         rspara = 1;
8328     }
8329     else {
8330         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8331         if (PerlIO_isutf8(fp)) {
8332             rsptr = SvPVutf8(PL_rs, rslen);
8333         }
8334         else {
8335             if (SvUTF8(PL_rs)) {
8336                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8337                     Perl_croak(aTHX_ "Wide character in $/");
8338                 }
8339             }
8340             /* extract the raw pointer to the record separator */
8341             rsptr = SvPV_const(PL_rs, rslen);
8342         }
8343     }
8344
8345     /* rslast is the last character in the record separator
8346      * note we don't use rslast except when rslen is true, so the
8347      * null assign is a placeholder. */
8348     rslast = rslen ? rsptr[rslen - 1] : '\0';
8349
8350     if (rspara) {               /* have to do this both before and after */
8351         do {                    /* to make sure file boundaries work right */
8352             if (PerlIO_eof(fp))
8353                 return 0;
8354             i = PerlIO_getc(fp);
8355             if (i != '\n') {
8356                 if (i == -1)
8357                     return 0;
8358                 PerlIO_ungetc(fp,i);
8359                 break;
8360             }
8361         } while (i != EOF);
8362     }
8363
8364     /* See if we know enough about I/O mechanism to cheat it ! */
8365
8366     /* This used to be #ifdef test - it is made run-time test for ease
8367        of abstracting out stdio interface. One call should be cheap
8368        enough here - and may even be a macro allowing compile
8369        time optimization.
8370      */
8371
8372     if (PerlIO_fast_gets(fp)) {
8373     /*
8374      * We can do buffer based IO operations on this filehandle.
8375      *
8376      * This means we can bypass a lot of subcalls and process
8377      * the buffer directly, it also means we know the upper bound
8378      * on the amount of data we might read of the current buffer
8379      * into our sv. Knowing this allows us to preallocate the pv
8380      * to be able to hold that maximum, which allows us to simplify
8381      * a lot of logic. */
8382
8383     /*
8384      * We're going to steal some values from the stdio struct
8385      * and put EVERYTHING in the innermost loop into registers.
8386      */
8387     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8388     STRLEN bpx;         /* length of the data in the target sv
8389                            used to fix pointers after a SvGROW */
8390     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8391                            of data left in the read-ahead buffer.
8392                            If 0 then the pv buffer can hold the full
8393                            amount left, otherwise this is the amount it
8394                            can hold. */
8395
8396     /* Here is some breathtakingly efficient cheating */
8397
8398     /* When you read the following logic resist the urge to think
8399      * of record separators that are 1 byte long. They are an
8400      * uninteresting special (simple) case.
8401      *
8402      * Instead think of record separators which are at least 2 bytes
8403      * long, and keep in mind that we need to deal with such
8404      * separators when they cross a read-ahead buffer boundary.
8405      *
8406      * Also consider that we need to gracefully deal with separators
8407      * that may be longer than a single read ahead buffer.
8408      *
8409      * Lastly do not forget we want to copy the delimiter as well. We
8410      * are copying all data in the file _up_to_and_including_ the separator
8411      * itself.
8412      *
8413      * Now that you have all that in mind here is what is happening below:
8414      *
8415      * 1. When we first enter the loop we do some memory book keeping to see
8416      * how much free space there is in the target SV. (This sub assumes that
8417      * it is operating on the same SV most of the time via $_ and that it is
8418      * going to be able to reuse the same pv buffer each call.) If there is
8419      * "enough" room then we set "shortbuffered" to how much space there is
8420      * and start reading forward.
8421      *
8422      * 2. When we scan forward we copy from the read-ahead buffer to the target
8423      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8424      * and the end of the of pv, as well as for the "rslast", which is the last
8425      * char of the separator.
8426      *
8427      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8428      * (which has a "complete" record up to the point we saw rslast) and check
8429      * it to see if it matches the separator. If it does we are done. If it doesn't
8430      * we continue on with the scan/copy.
8431      *
8432      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8433      * the IO system to read the next buffer. We do this by doing a getc(), which
8434      * returns a single char read (or EOF), and prefills the buffer, and also
8435      * allows us to find out how full the buffer is.  We use this information to
8436      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8437      * the returned single char into the target sv, and then go back into scan
8438      * forward mode.
8439      *
8440      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8441      * remaining space in the read-buffer.
8442      *
8443      * Note that this code despite its twisty-turny nature is pretty darn slick.
8444      * It manages single byte separators, multi-byte cross boundary separators,
8445      * and cross-read-buffer separators cleanly and efficiently at the cost
8446      * of potentially greatly overallocating the target SV.
8447      *
8448      * Yves
8449      */
8450
8451
8452     /* get the number of bytes remaining in the read-ahead buffer
8453      * on first call on a given fp this will return 0.*/
8454     cnt = PerlIO_get_cnt(fp);
8455
8456     /* make sure we have the room */
8457     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8458         /* Not room for all of it
8459            if we are looking for a separator and room for some
8460          */
8461         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8462             /* just process what we have room for */
8463             shortbuffered = cnt - SvLEN(sv) + append + 1;
8464             cnt -= shortbuffered;
8465         }
8466         else {
8467             /* ensure that the target sv has enough room to hold
8468              * the rest of the read-ahead buffer */
8469             shortbuffered = 0;
8470             /* remember that cnt can be negative */
8471             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8472         }
8473     }
8474     else {
8475         /* we have enough room to hold the full buffer, lets scream */
8476         shortbuffered = 0;
8477     }
8478
8479     /* extract the pointer to sv's string buffer, offset by append as necessary */
8480     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8481     /* extract the point to the read-ahead buffer */
8482     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8483
8484     /* some trace debug output */
8485     DEBUG_P(PerlIO_printf(Perl_debug_log,
8486         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8487     DEBUG_P(PerlIO_printf(Perl_debug_log,
8488         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8489          UVuf"\n",
8490                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8491                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8492
8493     for (;;) {
8494       screamer:
8495         /* if there is stuff left in the read-ahead buffer */
8496         if (cnt > 0) {
8497             /* if there is a separator */
8498             if (rslen) {
8499                 /* loop until we hit the end of the read-ahead buffer */
8500                 while (cnt > 0) {                    /* this     |  eat */
8501                     /* scan forward copying and searching for rslast as we go */
8502                     cnt--;
8503                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8504                         goto thats_all_folks;        /* screams  |  sed :-) */
8505                 }
8506             }
8507             else {
8508                 /* no separator, slurp the full buffer */
8509                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8510                 bp += cnt;                           /* screams  |  dust */
8511                 ptr += cnt;                          /* louder   |  sed :-) */
8512                 cnt = 0;
8513                 assert (!shortbuffered);
8514                 goto cannot_be_shortbuffered;
8515             }
8516         }
8517         
8518         if (shortbuffered) {            /* oh well, must extend */
8519             /* we didnt have enough room to fit the line into the target buffer
8520              * so we must extend the target buffer and keep going */
8521             cnt = shortbuffered;
8522             shortbuffered = 0;
8523             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8524             SvCUR_set(sv, bpx);
8525             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8526             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8527             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8528             continue;
8529         }
8530
8531     cannot_be_shortbuffered:
8532         /* we need to refill the read-ahead buffer if possible */
8533
8534         DEBUG_P(PerlIO_printf(Perl_debug_log,
8535                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8536                               PTR2UV(ptr),(IV)cnt));
8537         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8538
8539         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8540            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8541             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8542             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8543
8544         /*
8545             call PerlIO_getc() to let it prefill the lookahead buffer
8546
8547             This used to call 'filbuf' in stdio form, but as that behaves like
8548             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8549             another abstraction.
8550
8551             Note we have to deal with the char in 'i' if we are not at EOF
8552         */
8553         i   = PerlIO_getc(fp);          /* get more characters */
8554
8555         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8556            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8557             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8558             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8559
8560         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8561         cnt = PerlIO_get_cnt(fp);
8562         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8563         DEBUG_P(PerlIO_printf(Perl_debug_log,
8564             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8565             PTR2UV(ptr),(IV)cnt));
8566
8567         if (i == EOF)                   /* all done for ever? */
8568             goto thats_really_all_folks;
8569
8570         /* make sure we have enough space in the target sv */
8571         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8572         SvCUR_set(sv, bpx);
8573         SvGROW(sv, bpx + cnt + 2);
8574         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8575
8576         /* copy of the char we got from getc() */
8577         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8578
8579         /* make sure we deal with the i being the last character of a separator */
8580         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8581             goto thats_all_folks;
8582     }
8583
8584   thats_all_folks:
8585     /* check if we have actually found the separator - only really applies
8586      * when rslen > 1 */
8587     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8588           memNE((char*)bp - rslen, rsptr, rslen))
8589         goto screamer;                          /* go back to the fray */
8590   thats_really_all_folks:
8591     if (shortbuffered)
8592         cnt += shortbuffered;
8593         DEBUG_P(PerlIO_printf(Perl_debug_log,
8594              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8595     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8596     DEBUG_P(PerlIO_printf(Perl_debug_log,
8597         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8598         "\n",
8599         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8600         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8601     *bp = '\0';
8602     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8603     DEBUG_P(PerlIO_printf(Perl_debug_log,
8604         "Screamer: done, len=%ld, string=|%.*s|\n",
8605         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8606     }
8607    else
8608     {
8609        /*The big, slow, and stupid way. */
8610 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8611         STDCHAR *buf = NULL;
8612         Newx(buf, 8192, STDCHAR);
8613         assert(buf);
8614 #else
8615         STDCHAR buf[8192];
8616 #endif
8617
8618       screamer2:
8619         if (rslen) {
8620             const STDCHAR * const bpe = buf + sizeof(buf);
8621             bp = buf;
8622             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8623                 ; /* keep reading */
8624             cnt = bp - buf;
8625         }
8626         else {
8627             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8628             /* Accommodate broken VAXC compiler, which applies U8 cast to
8629              * both args of ?: operator, causing EOF to change into 255
8630              */
8631             if (cnt > 0)
8632                  i = (U8)buf[cnt - 1];
8633             else
8634                  i = EOF;
8635         }
8636
8637         if (cnt < 0)
8638             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8639         if (append)
8640             sv_catpvn_nomg(sv, (char *) buf, cnt);
8641         else
8642             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8643
8644         if (i != EOF &&                 /* joy */
8645             (!rslen ||
8646              SvCUR(sv) < rslen ||
8647              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8648         {
8649             append = -1;
8650             /*
8651              * If we're reading from a TTY and we get a short read,
8652              * indicating that the user hit his EOF character, we need
8653              * to notice it now, because if we try to read from the TTY
8654              * again, the EOF condition will disappear.
8655              *
8656              * The comparison of cnt to sizeof(buf) is an optimization
8657              * that prevents unnecessary calls to feof().
8658              *
8659              * - jik 9/25/96
8660              */
8661             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8662                 goto screamer2;
8663         }
8664
8665 #ifdef USE_HEAP_INSTEAD_OF_STACK
8666         Safefree(buf);
8667 #endif
8668     }
8669
8670     if (rspara) {               /* have to do this both before and after */
8671         while (i != EOF) {      /* to make sure file boundaries work right */
8672             i = PerlIO_getc(fp);
8673             if (i != '\n') {
8674                 PerlIO_ungetc(fp,i);
8675                 break;
8676             }
8677         }
8678     }
8679
8680     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8681 }
8682
8683 /*
8684 =for apidoc sv_inc
8685
8686 Auto-increment of the value in the SV, doing string to numeric conversion
8687 if necessary.  Handles 'get' magic and operator overloading.
8688
8689 =cut
8690 */
8691
8692 void
8693 Perl_sv_inc(pTHX_ SV *const sv)
8694 {
8695     if (!sv)
8696         return;
8697     SvGETMAGIC(sv);
8698     sv_inc_nomg(sv);
8699 }
8700
8701 /*
8702 =for apidoc sv_inc_nomg
8703
8704 Auto-increment of the value in the SV, doing string to numeric conversion
8705 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8706
8707 =cut
8708 */
8709
8710 void
8711 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8712 {
8713     char *d;
8714     int flags;
8715
8716     if (!sv)
8717         return;
8718     if (SvTHINKFIRST(sv)) {
8719         if (SvREADONLY(sv)) {
8720                 Perl_croak_no_modify();
8721         }
8722         if (SvROK(sv)) {
8723             IV i;
8724             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8725                 return;
8726             i = PTR2IV(SvRV(sv));
8727             sv_unref(sv);
8728             sv_setiv(sv, i);
8729         }
8730         else sv_force_normal_flags(sv, 0);
8731     }
8732     flags = SvFLAGS(sv);
8733     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8734         /* It's (privately or publicly) a float, but not tested as an
8735            integer, so test it to see. */
8736         (void) SvIV(sv);
8737         flags = SvFLAGS(sv);
8738     }
8739     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8740         /* It's publicly an integer, or privately an integer-not-float */
8741 #ifdef PERL_PRESERVE_IVUV
8742       oops_its_int:
8743 #endif
8744         if (SvIsUV(sv)) {
8745             if (SvUVX(sv) == UV_MAX)
8746                 sv_setnv(sv, UV_MAX_P1);
8747             else
8748                 (void)SvIOK_only_UV(sv);
8749                 SvUV_set(sv, SvUVX(sv) + 1);
8750         } else {
8751             if (SvIVX(sv) == IV_MAX)
8752                 sv_setuv(sv, (UV)IV_MAX + 1);
8753             else {
8754                 (void)SvIOK_only(sv);
8755                 SvIV_set(sv, SvIVX(sv) + 1);
8756             }   
8757         }
8758         return;
8759     }
8760     if (flags & SVp_NOK) {
8761         const NV was = SvNVX(sv);
8762         if (LIKELY(!Perl_isinfnan(was)) &&
8763             NV_OVERFLOWS_INTEGERS_AT &&
8764             was >= NV_OVERFLOWS_INTEGERS_AT) {
8765             /* diag_listed_as: Lost precision when %s %f by 1 */
8766             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8767                            "Lost precision when incrementing %" NVff " by 1",
8768                            was);
8769         }
8770         (void)SvNOK_only(sv);
8771         SvNV_set(sv, was + 1.0);
8772         return;
8773     }
8774
8775     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8776     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8777         Perl_croak_no_modify();
8778
8779     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8780         if ((flags & SVTYPEMASK) < SVt_PVIV)
8781             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8782         (void)SvIOK_only(sv);
8783         SvIV_set(sv, 1);
8784         return;
8785     }
8786     d = SvPVX(sv);
8787     while (isALPHA(*d)) d++;
8788     while (isDIGIT(*d)) d++;
8789     if (d < SvEND(sv)) {
8790         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8791 #ifdef PERL_PRESERVE_IVUV
8792         /* Got to punt this as an integer if needs be, but we don't issue
8793            warnings. Probably ought to make the sv_iv_please() that does
8794            the conversion if possible, and silently.  */
8795         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8796             /* Need to try really hard to see if it's an integer.
8797                9.22337203685478e+18 is an integer.
8798                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8799                so $a="9.22337203685478e+18"; $a+0; $a++
8800                needs to be the same as $a="9.22337203685478e+18"; $a++
8801                or we go insane. */
8802         
8803             (void) sv_2iv(sv);
8804             if (SvIOK(sv))
8805                 goto oops_its_int;
8806
8807             /* sv_2iv *should* have made this an NV */
8808             if (flags & SVp_NOK) {
8809                 (void)SvNOK_only(sv);
8810                 SvNV_set(sv, SvNVX(sv) + 1.0);
8811                 return;
8812             }
8813             /* I don't think we can get here. Maybe I should assert this
8814                And if we do get here I suspect that sv_setnv will croak. NWC
8815                Fall through. */
8816             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8817                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8818         }
8819 #endif /* PERL_PRESERVE_IVUV */
8820         if (!numtype && ckWARN(WARN_NUMERIC))
8821             not_incrementable(sv);
8822         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8823         return;
8824     }
8825     d--;
8826     while (d >= SvPVX_const(sv)) {
8827         if (isDIGIT(*d)) {
8828             if (++*d <= '9')
8829                 return;
8830             *(d--) = '0';
8831         }
8832         else {
8833 #ifdef EBCDIC
8834             /* MKS: The original code here died if letters weren't consecutive.
8835              * at least it didn't have to worry about non-C locales.  The
8836              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8837              * arranged in order (although not consecutively) and that only
8838              * [A-Za-z] are accepted by isALPHA in the C locale.
8839              */
8840             if (isALPHA_FOLD_NE(*d, 'z')) {
8841                 do { ++*d; } while (!isALPHA(*d));
8842                 return;
8843             }
8844             *(d--) -= 'z' - 'a';
8845 #else
8846             ++*d;
8847             if (isALPHA(*d))
8848                 return;
8849             *(d--) -= 'z' - 'a' + 1;
8850 #endif
8851         }
8852     }
8853     /* oh,oh, the number grew */
8854     SvGROW(sv, SvCUR(sv) + 2);
8855     SvCUR_set(sv, SvCUR(sv) + 1);
8856     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8857         *d = d[-1];
8858     if (isDIGIT(d[1]))
8859         *d = '1';
8860     else
8861         *d = d[1];
8862 }
8863
8864 /*
8865 =for apidoc sv_dec
8866
8867 Auto-decrement of the value in the SV, doing string to numeric conversion
8868 if necessary.  Handles 'get' magic and operator overloading.
8869
8870 =cut
8871 */
8872
8873 void
8874 Perl_sv_dec(pTHX_ SV *const sv)
8875 {
8876     if (!sv)
8877         return;
8878     SvGETMAGIC(sv);
8879     sv_dec_nomg(sv);
8880 }
8881
8882 /*
8883 =for apidoc sv_dec_nomg
8884
8885 Auto-decrement of the value in the SV, doing string to numeric conversion
8886 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8887
8888 =cut
8889 */
8890
8891 void
8892 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8893 {
8894     int flags;
8895
8896     if (!sv)
8897         return;
8898     if (SvTHINKFIRST(sv)) {
8899         if (SvREADONLY(sv)) {
8900                 Perl_croak_no_modify();
8901         }
8902         if (SvROK(sv)) {
8903             IV i;
8904             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8905                 return;
8906             i = PTR2IV(SvRV(sv));
8907             sv_unref(sv);
8908             sv_setiv(sv, i);
8909         }
8910         else sv_force_normal_flags(sv, 0);
8911     }
8912     /* Unlike sv_inc we don't have to worry about string-never-numbers
8913        and keeping them magic. But we mustn't warn on punting */
8914     flags = SvFLAGS(sv);
8915     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8916         /* It's publicly an integer, or privately an integer-not-float */
8917 #ifdef PERL_PRESERVE_IVUV
8918       oops_its_int:
8919 #endif
8920         if (SvIsUV(sv)) {
8921             if (SvUVX(sv) == 0) {
8922                 (void)SvIOK_only(sv);
8923                 SvIV_set(sv, -1);
8924             }
8925             else {
8926                 (void)SvIOK_only_UV(sv);
8927                 SvUV_set(sv, SvUVX(sv) - 1);
8928             }   
8929         } else {
8930             if (SvIVX(sv) == IV_MIN) {
8931                 sv_setnv(sv, (NV)IV_MIN);
8932                 goto oops_its_num;
8933             }
8934             else {
8935                 (void)SvIOK_only(sv);
8936                 SvIV_set(sv, SvIVX(sv) - 1);
8937             }   
8938         }
8939         return;
8940     }
8941     if (flags & SVp_NOK) {
8942     oops_its_num:
8943         {
8944             const NV was = SvNVX(sv);
8945             if (LIKELY(!Perl_isinfnan(was)) &&
8946                 NV_OVERFLOWS_INTEGERS_AT &&
8947                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8948                 /* diag_listed_as: Lost precision when %s %f by 1 */
8949                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8950                                "Lost precision when decrementing %" NVff " by 1",
8951                                was);
8952             }
8953             (void)SvNOK_only(sv);
8954             SvNV_set(sv, was - 1.0);
8955             return;
8956         }
8957     }
8958
8959     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8960     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8961         Perl_croak_no_modify();
8962
8963     if (!(flags & SVp_POK)) {
8964         if ((flags & SVTYPEMASK) < SVt_PVIV)
8965             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8966         SvIV_set(sv, -1);
8967         (void)SvIOK_only(sv);
8968         return;
8969     }
8970 #ifdef PERL_PRESERVE_IVUV
8971     {
8972         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8973         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8974             /* Need to try really hard to see if it's an integer.
8975                9.22337203685478e+18 is an integer.
8976                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8977                so $a="9.22337203685478e+18"; $a+0; $a--
8978                needs to be the same as $a="9.22337203685478e+18"; $a--
8979                or we go insane. */
8980         
8981             (void) sv_2iv(sv);
8982             if (SvIOK(sv))
8983                 goto oops_its_int;
8984
8985             /* sv_2iv *should* have made this an NV */
8986             if (flags & SVp_NOK) {
8987                 (void)SvNOK_only(sv);
8988                 SvNV_set(sv, SvNVX(sv) - 1.0);
8989                 return;
8990             }
8991             /* I don't think we can get here. Maybe I should assert this
8992                And if we do get here I suspect that sv_setnv will croak. NWC
8993                Fall through. */
8994             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8995                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8996         }
8997     }
8998 #endif /* PERL_PRESERVE_IVUV */
8999     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9000 }
9001
9002 /* this define is used to eliminate a chunk of duplicated but shared logic
9003  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9004  * used anywhere but here - yves
9005  */
9006 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9007     STMT_START {      \
9008         SSize_t ix = ++PL_tmps_ix;              \
9009         if (UNLIKELY(ix >= PL_tmps_max))        \
9010             ix = tmps_grow_p(ix);                       \
9011         PL_tmps_stack[ix] = (AnSv); \
9012     } STMT_END
9013
9014 /*
9015 =for apidoc sv_mortalcopy
9016
9017 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9018 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9019 explicit call to C<FREETMPS>, or by an implicit call at places such as
9020 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9021
9022 =cut
9023 */
9024
9025 /* Make a string that will exist for the duration of the expression
9026  * evaluation.  Actually, it may have to last longer than that, but
9027  * hopefully we won't free it until it has been assigned to a
9028  * permanent location. */
9029
9030 SV *
9031 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9032 {
9033     SV *sv;
9034
9035     if (flags & SV_GMAGIC)
9036         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9037     new_SV(sv);
9038     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9039     PUSH_EXTEND_MORTAL__SV_C(sv);
9040     SvTEMP_on(sv);
9041     return sv;
9042 }
9043
9044 /*
9045 =for apidoc sv_newmortal
9046
9047 Creates a new null SV which is mortal.  The reference count of the SV is
9048 set to 1.  It will be destroyed "soon", either by an explicit call to
9049 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9050 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9051
9052 =cut
9053 */
9054
9055 SV *
9056 Perl_sv_newmortal(pTHX)
9057 {
9058     SV *sv;
9059
9060     new_SV(sv);
9061     SvFLAGS(sv) = SVs_TEMP;
9062     PUSH_EXTEND_MORTAL__SV_C(sv);
9063     return sv;
9064 }
9065
9066
9067 /*
9068 =for apidoc newSVpvn_flags
9069
9070 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9071 characters) into it.  The reference count for the
9072 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9073 string.  You are responsible for ensuring that the source string is at least
9074 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9075 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9076 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9077 returning.  If C<SVf_UTF8> is set, C<s>
9078 is considered to be in UTF-8 and the
9079 C<SVf_UTF8> flag will be set on the new SV.
9080 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9081
9082     #define newSVpvn_utf8(s, len, u)                    \
9083         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9084
9085 =cut
9086 */
9087
9088 SV *
9089 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9090 {
9091     SV *sv;
9092
9093     /* All the flags we don't support must be zero.
9094        And we're new code so I'm going to assert this from the start.  */
9095     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9096     new_SV(sv);
9097     sv_setpvn(sv,s,len);
9098
9099     /* This code used to do a sv_2mortal(), however we now unroll the call to
9100      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9101      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9102      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9103      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9104      * means that we eliminate quite a few steps than it looks - Yves
9105      * (explaining patch by gfx) */
9106
9107     SvFLAGS(sv) |= flags;
9108
9109     if(flags & SVs_TEMP){
9110         PUSH_EXTEND_MORTAL__SV_C(sv);
9111     }
9112
9113     return sv;
9114 }
9115
9116 /*
9117 =for apidoc sv_2mortal
9118
9119 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9120 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9121 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9122 string buffer can be "stolen" if this SV is copied.  See also
9123 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9124
9125 =cut
9126 */
9127
9128 SV *
9129 Perl_sv_2mortal(pTHX_ SV *const sv)
9130 {
9131     dVAR;
9132     if (!sv)
9133         return sv;
9134     if (SvIMMORTAL(sv))
9135         return sv;
9136     PUSH_EXTEND_MORTAL__SV_C(sv);
9137     SvTEMP_on(sv);
9138     return sv;
9139 }
9140
9141 /*
9142 =for apidoc newSVpv
9143
9144 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9145 characters) into it.  The reference count for the
9146 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9147 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9148 C<NUL> characters and has to have a terminating C<NUL> byte).
9149
9150 For efficiency, consider using C<newSVpvn> instead.
9151
9152 =cut
9153 */
9154
9155 SV *
9156 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9157 {
9158     SV *sv;
9159
9160     new_SV(sv);
9161     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9162     return sv;
9163 }
9164
9165 /*
9166 =for apidoc newSVpvn
9167
9168 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9169 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9170 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9171 are responsible for ensuring that the source buffer is at least
9172 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9173 undefined.
9174
9175 =cut
9176 */
9177
9178 SV *
9179 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9180 {
9181     SV *sv;
9182     new_SV(sv);
9183     sv_setpvn(sv,buffer,len);
9184     return sv;
9185 }
9186
9187 /*
9188 =for apidoc newSVhek
9189
9190 Creates a new SV from the hash key structure.  It will generate scalars that
9191 point to the shared string table where possible.  Returns a new (undefined)
9192 SV if C<hek> is NULL.
9193
9194 =cut
9195 */
9196
9197 SV *
9198 Perl_newSVhek(pTHX_ const HEK *const hek)
9199 {
9200     if (!hek) {
9201         SV *sv;
9202
9203         new_SV(sv);
9204         return sv;
9205     }
9206
9207     if (HEK_LEN(hek) == HEf_SVKEY) {
9208         return newSVsv(*(SV**)HEK_KEY(hek));
9209     } else {
9210         const int flags = HEK_FLAGS(hek);
9211         if (flags & HVhek_WASUTF8) {
9212             /* Trouble :-)
9213                Andreas would like keys he put in as utf8 to come back as utf8
9214             */
9215             STRLEN utf8_len = HEK_LEN(hek);
9216             SV * const sv = newSV_type(SVt_PV);
9217             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9218             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9219             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9220             SvUTF8_on (sv);
9221             return sv;
9222         } else if (flags & HVhek_UNSHARED) {
9223             /* A hash that isn't using shared hash keys has to have
9224                the flag in every key so that we know not to try to call
9225                share_hek_hek on it.  */
9226
9227             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9228             if (HEK_UTF8(hek))
9229                 SvUTF8_on (sv);
9230             return sv;
9231         }
9232         /* This will be overwhelminly the most common case.  */
9233         {
9234             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9235                more efficient than sharepvn().  */
9236             SV *sv;
9237
9238             new_SV(sv);
9239             sv_upgrade(sv, SVt_PV);
9240             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9241             SvCUR_set(sv, HEK_LEN(hek));
9242             SvLEN_set(sv, 0);
9243             SvIsCOW_on(sv);
9244             SvPOK_on(sv);
9245             if (HEK_UTF8(hek))
9246                 SvUTF8_on(sv);
9247             return sv;
9248         }
9249     }
9250 }
9251
9252 /*
9253 =for apidoc newSVpvn_share
9254
9255 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9256 table.  If the string does not already exist in the table, it is
9257 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9258 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9259 is non-zero, that value is used; otherwise the hash is computed.
9260 The string's hash can later be retrieved from the SV
9261 with the C<SvSHARED_HASH()> macro.  The idea here is
9262 that as the string table is used for shared hash keys these strings will have
9263 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9264
9265 =cut
9266 */
9267
9268 SV *
9269 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9270 {
9271     dVAR;
9272     SV *sv;
9273     bool is_utf8 = FALSE;
9274     const char *const orig_src = src;
9275
9276     if (len < 0) {
9277         STRLEN tmplen = -len;
9278         is_utf8 = TRUE;
9279         /* See the note in hv.c:hv_fetch() --jhi */
9280         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9281         len = tmplen;
9282     }
9283     if (!hash)
9284         PERL_HASH(hash, src, len);
9285     new_SV(sv);
9286     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9287        changes here, update it there too.  */
9288     sv_upgrade(sv, SVt_PV);
9289     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9290     SvCUR_set(sv, len);
9291     SvLEN_set(sv, 0);
9292     SvIsCOW_on(sv);
9293     SvPOK_on(sv);
9294     if (is_utf8)
9295         SvUTF8_on(sv);
9296     if (src != orig_src)
9297         Safefree(src);
9298     return sv;
9299 }
9300
9301 /*
9302 =for apidoc newSVpv_share
9303
9304 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9305 string/length pair.
9306
9307 =cut
9308 */
9309
9310 SV *
9311 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9312 {
9313     return newSVpvn_share(src, strlen(src), hash);
9314 }
9315
9316 #if defined(PERL_IMPLICIT_CONTEXT)
9317
9318 /* pTHX_ magic can't cope with varargs, so this is a no-context
9319  * version of the main function, (which may itself be aliased to us).
9320  * Don't access this version directly.
9321  */
9322
9323 SV *
9324 Perl_newSVpvf_nocontext(const char *const pat, ...)
9325 {
9326     dTHX;
9327     SV *sv;
9328     va_list args;
9329
9330     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9331
9332     va_start(args, pat);
9333     sv = vnewSVpvf(pat, &args);
9334     va_end(args);
9335     return sv;
9336 }
9337 #endif
9338
9339 /*
9340 =for apidoc newSVpvf
9341
9342 Creates a new SV and initializes it with the string formatted like
9343 C<sv_catpvf>.
9344
9345 =cut
9346 */
9347
9348 SV *
9349 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9350 {
9351     SV *sv;
9352     va_list args;
9353
9354     PERL_ARGS_ASSERT_NEWSVPVF;
9355
9356     va_start(args, pat);
9357     sv = vnewSVpvf(pat, &args);
9358     va_end(args);
9359     return sv;
9360 }
9361
9362 /* backend for newSVpvf() and newSVpvf_nocontext() */
9363
9364 SV *
9365 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9366 {
9367     SV *sv;
9368
9369     PERL_ARGS_ASSERT_VNEWSVPVF;
9370
9371     new_SV(sv);
9372     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9373     return sv;
9374 }
9375
9376 /*
9377 =for apidoc newSVnv
9378
9379 Creates a new SV and copies a floating point value into it.
9380 The reference count for the SV is set to 1.
9381
9382 =cut
9383 */
9384
9385 SV *
9386 Perl_newSVnv(pTHX_ const NV n)
9387 {
9388     SV *sv;
9389
9390     new_SV(sv);
9391     sv_setnv(sv,n);
9392     return sv;
9393 }
9394
9395 /*
9396 =for apidoc newSViv
9397
9398 Creates a new SV and copies an integer into it.  The reference count for the
9399 SV is set to 1.
9400
9401 =cut
9402 */
9403
9404 SV *
9405 Perl_newSViv(pTHX_ const IV i)
9406 {
9407     SV *sv;
9408
9409     new_SV(sv);
9410
9411     /* Inlining ONLY the small relevant subset of sv_setiv here
9412      * for performance. Makes a significant difference. */
9413
9414     /* We're starting from SVt_FIRST, so provided that's
9415      * actual 0, we don't have to unset any SV type flags
9416      * to promote to SVt_IV. */
9417     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9418
9419     SET_SVANY_FOR_BODYLESS_IV(sv);
9420     SvFLAGS(sv) |= SVt_IV;
9421     (void)SvIOK_on(sv);
9422
9423     SvIV_set(sv, i);
9424     SvTAINT(sv);
9425
9426     return sv;
9427 }
9428
9429 /*
9430 =for apidoc newSVuv
9431
9432 Creates a new SV and copies an unsigned integer into it.
9433 The reference count for the SV is set to 1.
9434
9435 =cut
9436 */
9437
9438 SV *
9439 Perl_newSVuv(pTHX_ const UV u)
9440 {
9441     SV *sv;
9442
9443     /* Inlining ONLY the small relevant subset of sv_setuv here
9444      * for performance. Makes a significant difference. */
9445
9446     /* Using ivs is more efficient than using uvs - see sv_setuv */
9447     if (u <= (UV)IV_MAX) {
9448         return newSViv((IV)u);
9449     }
9450
9451     new_SV(sv);
9452
9453     /* We're starting from SVt_FIRST, so provided that's
9454      * actual 0, we don't have to unset any SV type flags
9455      * to promote to SVt_IV. */
9456     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9457
9458     SET_SVANY_FOR_BODYLESS_IV(sv);
9459     SvFLAGS(sv) |= SVt_IV;
9460     (void)SvIOK_on(sv);
9461     (void)SvIsUV_on(sv);
9462
9463     SvUV_set(sv, u);
9464     SvTAINT(sv);
9465
9466     return sv;
9467 }
9468
9469 /*
9470 =for apidoc newSV_type
9471
9472 Creates a new SV, of the type specified.  The reference count for the new SV
9473 is set to 1.
9474
9475 =cut
9476 */
9477
9478 SV *
9479 Perl_newSV_type(pTHX_ const svtype type)
9480 {
9481     SV *sv;
9482
9483     new_SV(sv);
9484     ASSUME(SvTYPE(sv) == SVt_FIRST);
9485     if(type != SVt_FIRST)
9486         sv_upgrade(sv, type);
9487     return sv;
9488 }
9489
9490 /*
9491 =for apidoc newRV_noinc
9492
9493 Creates an RV wrapper for an SV.  The reference count for the original
9494 SV is B<not> incremented.
9495
9496 =cut
9497 */
9498
9499 SV *
9500 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9501 {
9502     SV *sv;
9503
9504     PERL_ARGS_ASSERT_NEWRV_NOINC;
9505
9506     new_SV(sv);
9507
9508     /* We're starting from SVt_FIRST, so provided that's
9509      * actual 0, we don't have to unset any SV type flags
9510      * to promote to SVt_IV. */
9511     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9512
9513     SET_SVANY_FOR_BODYLESS_IV(sv);
9514     SvFLAGS(sv) |= SVt_IV;
9515     SvROK_on(sv);
9516     SvIV_set(sv, 0);
9517
9518     SvTEMP_off(tmpRef);
9519     SvRV_set(sv, tmpRef);
9520
9521     return sv;
9522 }
9523
9524 /* newRV_inc is the official function name to use now.
9525  * newRV_inc is in fact #defined to newRV in sv.h
9526  */
9527
9528 SV *
9529 Perl_newRV(pTHX_ SV *const sv)
9530 {
9531     PERL_ARGS_ASSERT_NEWRV;
9532
9533     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9534 }
9535
9536 /*
9537 =for apidoc newSVsv
9538
9539 Creates a new SV which is an exact duplicate of the original SV.
9540 (Uses C<sv_setsv>.)
9541
9542 =cut
9543 */
9544
9545 SV *
9546 Perl_newSVsv(pTHX_ SV *const old)
9547 {
9548     SV *sv;
9549
9550     if (!old)
9551         return NULL;
9552     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9553         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9554         return NULL;
9555     }
9556     /* Do this here, otherwise we leak the new SV if this croaks. */
9557     SvGETMAGIC(old);
9558     new_SV(sv);
9559     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9560        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9561     sv_setsv_flags(sv, old, SV_NOSTEAL);
9562     return sv;
9563 }
9564
9565 /*
9566 =for apidoc sv_reset
9567
9568 Underlying implementation for the C<reset> Perl function.
9569 Note that the perl-level function is vaguely deprecated.
9570
9571 =cut
9572 */
9573
9574 void
9575 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9576 {
9577     PERL_ARGS_ASSERT_SV_RESET;
9578
9579     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9580 }
9581
9582 void
9583 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9584 {
9585     char todo[PERL_UCHAR_MAX+1];
9586     const char *send;
9587
9588     if (!stash || SvTYPE(stash) != SVt_PVHV)
9589         return;
9590
9591     if (!s) {           /* reset ?? searches */
9592         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9593         if (mg) {
9594             const U32 count = mg->mg_len / sizeof(PMOP**);
9595             PMOP **pmp = (PMOP**) mg->mg_ptr;
9596             PMOP *const *const end = pmp + count;
9597
9598             while (pmp < end) {
9599 #ifdef USE_ITHREADS
9600                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9601 #else
9602                 (*pmp)->op_pmflags &= ~PMf_USED;
9603 #endif
9604                 ++pmp;
9605             }
9606         }
9607         return;
9608     }
9609
9610     /* reset variables */
9611
9612     if (!HvARRAY(stash))
9613         return;
9614
9615     Zero(todo, 256, char);
9616     send = s + len;
9617     while (s < send) {
9618         I32 max;
9619         I32 i = (unsigned char)*s;
9620         if (s[1] == '-') {
9621             s += 2;
9622         }
9623         max = (unsigned char)*s++;
9624         for ( ; i <= max; i++) {
9625             todo[i] = 1;
9626         }
9627         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9628             HE *entry;
9629             for (entry = HvARRAY(stash)[i];
9630                  entry;
9631                  entry = HeNEXT(entry))
9632             {
9633                 GV *gv;
9634                 SV *sv;
9635
9636                 if (!todo[(U8)*HeKEY(entry)])
9637                     continue;
9638                 gv = MUTABLE_GV(HeVAL(entry));
9639                 sv = GvSV(gv);
9640                 if (sv && !SvREADONLY(sv)) {
9641                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9642                     if (!isGV(sv)) SvOK_off(sv);
9643                 }
9644                 if (GvAV(gv)) {
9645                     av_clear(GvAV(gv));
9646                 }
9647                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9648                     hv_clear(GvHV(gv));
9649                 }
9650             }
9651         }
9652     }
9653 }
9654
9655 /*
9656 =for apidoc sv_2io
9657
9658 Using various gambits, try to get an IO from an SV: the IO slot if its a
9659 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9660 named after the PV if we're a string.
9661
9662 'Get' magic is ignored on the C<sv> passed in, but will be called on
9663 C<SvRV(sv)> if C<sv> is an RV.
9664
9665 =cut
9666 */
9667
9668 IO*
9669 Perl_sv_2io(pTHX_ SV *const sv)
9670 {
9671     IO* io;
9672     GV* gv;
9673
9674     PERL_ARGS_ASSERT_SV_2IO;
9675
9676     switch (SvTYPE(sv)) {
9677     case SVt_PVIO:
9678         io = MUTABLE_IO(sv);
9679         break;
9680     case SVt_PVGV:
9681     case SVt_PVLV:
9682         if (isGV_with_GP(sv)) {
9683             gv = MUTABLE_GV(sv);
9684             io = GvIO(gv);
9685             if (!io)
9686                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9687                                     HEKfARG(GvNAME_HEK(gv)));
9688             break;
9689         }
9690         /* FALLTHROUGH */
9691     default:
9692         if (!SvOK(sv))
9693             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9694         if (SvROK(sv)) {
9695             SvGETMAGIC(SvRV(sv));
9696             return sv_2io(SvRV(sv));
9697         }
9698         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9699         if (gv)
9700             io = GvIO(gv);
9701         else
9702             io = 0;
9703         if (!io) {
9704             SV *newsv = sv;
9705             if (SvGMAGICAL(sv)) {
9706                 newsv = sv_newmortal();
9707                 sv_setsv_nomg(newsv, sv);
9708             }
9709             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9710         }
9711         break;
9712     }
9713     return io;
9714 }
9715
9716 /*
9717 =for apidoc sv_2cv
9718
9719 Using various gambits, try to get a CV from an SV; in addition, try if
9720 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9721 The flags in C<lref> are passed to C<gv_fetchsv>.
9722
9723 =cut
9724 */
9725
9726 CV *
9727 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9728 {
9729     GV *gv = NULL;
9730     CV *cv = NULL;
9731
9732     PERL_ARGS_ASSERT_SV_2CV;
9733
9734     if (!sv) {
9735         *st = NULL;
9736         *gvp = NULL;
9737         return NULL;
9738     }
9739     switch (SvTYPE(sv)) {
9740     case SVt_PVCV:
9741         *st = CvSTASH(sv);
9742         *gvp = NULL;
9743         return MUTABLE_CV(sv);
9744     case SVt_PVHV:
9745     case SVt_PVAV:
9746         *st = NULL;
9747         *gvp = NULL;
9748         return NULL;
9749     default:
9750         SvGETMAGIC(sv);
9751         if (SvROK(sv)) {
9752             if (SvAMAGIC(sv))
9753                 sv = amagic_deref_call(sv, to_cv_amg);
9754
9755             sv = SvRV(sv);
9756             if (SvTYPE(sv) == SVt_PVCV) {
9757                 cv = MUTABLE_CV(sv);
9758                 *gvp = NULL;
9759                 *st = CvSTASH(cv);
9760                 return cv;
9761             }
9762             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9763                 gv = MUTABLE_GV(sv);
9764             else
9765                 Perl_croak(aTHX_ "Not a subroutine reference");
9766         }
9767         else if (isGV_with_GP(sv)) {
9768             gv = MUTABLE_GV(sv);
9769         }
9770         else {
9771             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9772         }
9773         *gvp = gv;
9774         if (!gv) {
9775             *st = NULL;
9776             return NULL;
9777         }
9778         /* Some flags to gv_fetchsv mean don't really create the GV  */
9779         if (!isGV_with_GP(gv)) {
9780             *st = NULL;
9781             return NULL;
9782         }
9783         *st = GvESTASH(gv);
9784         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9785             /* XXX this is probably not what they think they're getting.
9786              * It has the same effect as "sub name;", i.e. just a forward
9787              * declaration! */
9788             newSTUB(gv,0);
9789         }
9790         return GvCVu(gv);
9791     }
9792 }
9793
9794 /*
9795 =for apidoc sv_true
9796
9797 Returns true if the SV has a true value by Perl's rules.
9798 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9799 instead use an in-line version.
9800
9801 =cut
9802 */
9803
9804 I32
9805 Perl_sv_true(pTHX_ SV *const sv)
9806 {
9807     if (!sv)
9808         return 0;
9809     if (SvPOK(sv)) {
9810         const XPV* const tXpv = (XPV*)SvANY(sv);
9811         if (tXpv &&
9812                 (tXpv->xpv_cur > 1 ||
9813                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9814             return 1;
9815         else
9816             return 0;
9817     }
9818     else {
9819         if (SvIOK(sv))
9820             return SvIVX(sv) != 0;
9821         else {
9822             if (SvNOK(sv))
9823                 return SvNVX(sv) != 0.0;
9824             else
9825                 return sv_2bool(sv);
9826         }
9827     }
9828 }
9829
9830 /*
9831 =for apidoc sv_pvn_force
9832
9833 Get a sensible string out of the SV somehow.
9834 A private implementation of the C<SvPV_force> macro for compilers which
9835 can't cope with complex macro expressions.  Always use the macro instead.
9836
9837 =for apidoc sv_pvn_force_flags
9838
9839 Get a sensible string out of the SV somehow.
9840 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9841 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9842 implemented in terms of this function.
9843 You normally want to use the various wrapper macros instead: see
9844 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
9845
9846 =cut
9847 */
9848
9849 char *
9850 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9851 {
9852     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9853
9854     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9855     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9856         sv_force_normal_flags(sv, 0);
9857
9858     if (SvPOK(sv)) {
9859         if (lp)
9860             *lp = SvCUR(sv);
9861     }
9862     else {
9863         char *s;
9864         STRLEN len;
9865  
9866         if (SvTYPE(sv) > SVt_PVLV
9867             || isGV_with_GP(sv))
9868             /* diag_listed_as: Can't coerce %s to %s in %s */
9869             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9870                 OP_DESC(PL_op));
9871         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9872         if (!s) {
9873           s = (char *)"";
9874         }
9875         if (lp)
9876             *lp = len;
9877
9878         if (SvTYPE(sv) < SVt_PV ||
9879             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9880             if (SvROK(sv))
9881                 sv_unref(sv);
9882             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9883             SvGROW(sv, len + 1);
9884             Move(s,SvPVX(sv),len,char);
9885             SvCUR_set(sv, len);
9886             SvPVX(sv)[len] = '\0';
9887         }
9888         if (!SvPOK(sv)) {
9889             SvPOK_on(sv);               /* validate pointer */
9890             SvTAINT(sv);
9891             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9892                                   PTR2UV(sv),SvPVX_const(sv)));
9893         }
9894     }
9895     (void)SvPOK_only_UTF8(sv);
9896     return SvPVX_mutable(sv);
9897 }
9898
9899 /*
9900 =for apidoc sv_pvbyten_force
9901
9902 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9903 instead.
9904
9905 =cut
9906 */
9907
9908 char *
9909 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9910 {
9911     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9912
9913     sv_pvn_force(sv,lp);
9914     sv_utf8_downgrade(sv,0);
9915     *lp = SvCUR(sv);
9916     return SvPVX(sv);
9917 }
9918
9919 /*
9920 =for apidoc sv_pvutf8n_force
9921
9922 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9923 instead.
9924
9925 =cut
9926 */
9927
9928 char *
9929 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9930 {
9931     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9932
9933     sv_pvn_force(sv,0);
9934     sv_utf8_upgrade_nomg(sv);
9935     *lp = SvCUR(sv);
9936     return SvPVX(sv);
9937 }
9938
9939 /*
9940 =for apidoc sv_reftype
9941
9942 Returns a string describing what the SV is a reference to.
9943
9944 If ob is true and the SV is blessed, the string is the class name,
9945 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
9946
9947 =cut
9948 */
9949
9950 const char *
9951 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9952 {
9953     PERL_ARGS_ASSERT_SV_REFTYPE;
9954     if (ob && SvOBJECT(sv)) {
9955         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9956     }
9957     else {
9958         /* WARNING - There is code, for instance in mg.c, that assumes that
9959          * the only reason that sv_reftype(sv,0) would return a string starting
9960          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9961          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9962          * this routine inside other subs, and it saves time.
9963          * Do not change this assumption without searching for "dodgy type check" in
9964          * the code.
9965          * - Yves */
9966         switch (SvTYPE(sv)) {
9967         case SVt_NULL:
9968         case SVt_IV:
9969         case SVt_NV:
9970         case SVt_PV:
9971         case SVt_PVIV:
9972         case SVt_PVNV:
9973         case SVt_PVMG:
9974                                 if (SvVOK(sv))
9975                                     return "VSTRING";
9976                                 if (SvROK(sv))
9977                                     return "REF";
9978                                 else
9979                                     return "SCALAR";
9980
9981         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9982                                 /* tied lvalues should appear to be
9983                                  * scalars for backwards compatibility */
9984                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9985                                     ? "SCALAR" : "LVALUE");
9986         case SVt_PVAV:          return "ARRAY";
9987         case SVt_PVHV:          return "HASH";
9988         case SVt_PVCV:          return "CODE";
9989         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9990                                     ? "GLOB" : "SCALAR");
9991         case SVt_PVFM:          return "FORMAT";
9992         case SVt_PVIO:          return "IO";
9993         case SVt_INVLIST:       return "INVLIST";
9994         case SVt_REGEXP:        return "REGEXP";
9995         default:                return "UNKNOWN";
9996         }
9997     }
9998 }
9999
10000 /*
10001 =for apidoc sv_ref
10002
10003 Returns a SV describing what the SV passed in is a reference to.
10004
10005 dst can be a SV to be set to the description or NULL, in which case a
10006 mortal SV is returned.
10007
10008 If ob is true and the SV is blessed, the description is the class
10009 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10010
10011 =cut
10012 */
10013
10014 SV *
10015 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10016 {
10017     PERL_ARGS_ASSERT_SV_REF;
10018
10019     if (!dst)
10020         dst = sv_newmortal();
10021
10022     if (ob && SvOBJECT(sv)) {
10023         HvNAME_get(SvSTASH(sv))
10024                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10025                     : sv_setpvn(dst, "__ANON__", 8);
10026     }
10027     else {
10028         const char * reftype = sv_reftype(sv, 0);
10029         sv_setpv(dst, reftype);
10030     }
10031     return dst;
10032 }
10033
10034 /*
10035 =for apidoc sv_isobject
10036
10037 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10038 object.  If the SV is not an RV, or if the object is not blessed, then this
10039 will return false.
10040
10041 =cut
10042 */
10043
10044 int
10045 Perl_sv_isobject(pTHX_ SV *sv)
10046 {
10047     if (!sv)
10048         return 0;
10049     SvGETMAGIC(sv);
10050     if (!SvROK(sv))
10051         return 0;
10052     sv = SvRV(sv);
10053     if (!SvOBJECT(sv))
10054         return 0;
10055     return 1;
10056 }
10057
10058 /*
10059 =for apidoc sv_isa
10060
10061 Returns a boolean indicating whether the SV is blessed into the specified
10062 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10063 an inheritance relationship.
10064
10065 =cut
10066 */
10067
10068 int
10069 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10070 {
10071     const char *hvname;
10072
10073     PERL_ARGS_ASSERT_SV_ISA;
10074
10075     if (!sv)
10076         return 0;
10077     SvGETMAGIC(sv);
10078     if (!SvROK(sv))
10079         return 0;
10080     sv = SvRV(sv);
10081     if (!SvOBJECT(sv))
10082         return 0;
10083     hvname = HvNAME_get(SvSTASH(sv));
10084     if (!hvname)
10085         return 0;
10086
10087     return strEQ(hvname, name);
10088 }
10089
10090 /*
10091 =for apidoc newSVrv
10092
10093 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10094 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10095 SV will be blessed in the specified package.  The new SV is returned and its
10096 reference count is 1.  The reference count 1 is owned by C<rv>.
10097
10098 =cut
10099 */
10100
10101 SV*
10102 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10103 {
10104     SV *sv;
10105
10106     PERL_ARGS_ASSERT_NEWSVRV;
10107
10108     new_SV(sv);
10109
10110     SV_CHECK_THINKFIRST_COW_DROP(rv);
10111
10112     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10113         const U32 refcnt = SvREFCNT(rv);
10114         SvREFCNT(rv) = 0;
10115         sv_clear(rv);
10116         SvFLAGS(rv) = 0;
10117         SvREFCNT(rv) = refcnt;
10118
10119         sv_upgrade(rv, SVt_IV);
10120     } else if (SvROK(rv)) {
10121         SvREFCNT_dec(SvRV(rv));
10122     } else {
10123         prepare_SV_for_RV(rv);
10124     }
10125
10126     SvOK_off(rv);
10127     SvRV_set(rv, sv);
10128     SvROK_on(rv);
10129
10130     if (classname) {
10131         HV* const stash = gv_stashpv(classname, GV_ADD);
10132         (void)sv_bless(rv, stash);
10133     }
10134     return sv;
10135 }
10136
10137 SV *
10138 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10139 {
10140     SV * const lv = newSV_type(SVt_PVLV);
10141     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10142     LvTYPE(lv) = 'y';
10143     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10144     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10145     LvSTARGOFF(lv) = ix;
10146     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10147     return lv;
10148 }
10149
10150 /*
10151 =for apidoc sv_setref_pv
10152
10153 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10154 argument will be upgraded to an RV.  That RV will be modified to point to
10155 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10156 into the SV.  The C<classname> argument indicates the package for the
10157 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10158 will have a reference count of 1, and the RV will be returned.
10159
10160 Do not use with other Perl types such as HV, AV, SV, CV, because those
10161 objects will become corrupted by the pointer copy process.
10162
10163 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10164
10165 =cut
10166 */
10167
10168 SV*
10169 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10170 {
10171     PERL_ARGS_ASSERT_SV_SETREF_PV;
10172
10173     if (!pv) {
10174         sv_setsv(rv, &PL_sv_undef);
10175         SvSETMAGIC(rv);
10176     }
10177     else
10178         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10179     return rv;
10180 }
10181
10182 /*
10183 =for apidoc sv_setref_iv
10184
10185 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10186 argument will be upgraded to an RV.  That RV will be modified to point to
10187 the new SV.  The C<classname> argument indicates the package for the
10188 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10189 will have a reference count of 1, and the RV will be returned.
10190
10191 =cut
10192 */
10193
10194 SV*
10195 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10196 {
10197     PERL_ARGS_ASSERT_SV_SETREF_IV;
10198
10199     sv_setiv(newSVrv(rv,classname), iv);
10200     return rv;
10201 }
10202
10203 /*
10204 =for apidoc sv_setref_uv
10205
10206 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10207 argument will be upgraded to an RV.  That RV will be modified to point to
10208 the new SV.  The C<classname> argument indicates the package for the
10209 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10210 will have a reference count of 1, and the RV will be returned.
10211
10212 =cut
10213 */
10214
10215 SV*
10216 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10217 {
10218     PERL_ARGS_ASSERT_SV_SETREF_UV;
10219
10220     sv_setuv(newSVrv(rv,classname), uv);
10221     return rv;
10222 }
10223
10224 /*
10225 =for apidoc sv_setref_nv
10226
10227 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10228 argument will be upgraded to an RV.  That RV will be modified to point to
10229 the new SV.  The C<classname> argument indicates the package for the
10230 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10231 will have a reference count of 1, and the RV will be returned.
10232
10233 =cut
10234 */
10235
10236 SV*
10237 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10238 {
10239     PERL_ARGS_ASSERT_SV_SETREF_NV;
10240
10241     sv_setnv(newSVrv(rv,classname), nv);
10242     return rv;
10243 }
10244
10245 /*
10246 =for apidoc sv_setref_pvn
10247
10248 Copies a string into a new SV, optionally blessing the SV.  The length of the
10249 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10250 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10251 argument indicates the package for the blessing.  Set C<classname> to
10252 C<NULL> to avoid the blessing.  The new SV will have a reference count
10253 of 1, and the RV will be returned.
10254
10255 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10256
10257 =cut
10258 */
10259
10260 SV*
10261 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10262                    const char *const pv, const STRLEN n)
10263 {
10264     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10265
10266     sv_setpvn(newSVrv(rv,classname), pv, n);
10267     return rv;
10268 }
10269
10270 /*
10271 =for apidoc sv_bless
10272
10273 Blesses an SV into a specified package.  The SV must be an RV.  The package
10274 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10275 of the SV is unaffected.
10276
10277 =cut
10278 */
10279
10280 SV*
10281 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10282 {
10283     SV *tmpRef;
10284     HV *oldstash = NULL;
10285
10286     PERL_ARGS_ASSERT_SV_BLESS;
10287
10288     SvGETMAGIC(sv);
10289     if (!SvROK(sv))
10290         Perl_croak(aTHX_ "Can't bless non-reference value");
10291     tmpRef = SvRV(sv);
10292     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10293         if (SvREADONLY(tmpRef))
10294             Perl_croak_no_modify();
10295         if (SvOBJECT(tmpRef)) {
10296             oldstash = SvSTASH(tmpRef);
10297         }
10298     }
10299     SvOBJECT_on(tmpRef);
10300     SvUPGRADE(tmpRef, SVt_PVMG);
10301     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10302     SvREFCNT_dec(oldstash);
10303
10304     if(SvSMAGICAL(tmpRef))
10305         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10306             mg_set(tmpRef);
10307
10308
10309
10310     return sv;
10311 }
10312
10313 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10314  * as it is after unglobbing it.
10315  */
10316
10317 PERL_STATIC_INLINE void
10318 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10319 {
10320     void *xpvmg;
10321     HV *stash;
10322     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10323
10324     PERL_ARGS_ASSERT_SV_UNGLOB;
10325
10326     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10327     SvFAKE_off(sv);
10328     if (!(flags & SV_COW_DROP_PV))
10329         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10330
10331     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10332     if (GvGP(sv)) {
10333         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10334            && HvNAME_get(stash))
10335             mro_method_changed_in(stash);
10336         gp_free(MUTABLE_GV(sv));
10337     }
10338     if (GvSTASH(sv)) {
10339         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10340         GvSTASH(sv) = NULL;
10341     }
10342     GvMULTI_off(sv);
10343     if (GvNAME_HEK(sv)) {
10344         unshare_hek(GvNAME_HEK(sv));
10345     }
10346     isGV_with_GP_off(sv);
10347
10348     if(SvTYPE(sv) == SVt_PVGV) {
10349         /* need to keep SvANY(sv) in the right arena */
10350         xpvmg = new_XPVMG();
10351         StructCopy(SvANY(sv), xpvmg, XPVMG);
10352         del_XPVGV(SvANY(sv));
10353         SvANY(sv) = xpvmg;
10354
10355         SvFLAGS(sv) &= ~SVTYPEMASK;
10356         SvFLAGS(sv) |= SVt_PVMG;
10357     }
10358
10359     /* Intentionally not calling any local SET magic, as this isn't so much a
10360        set operation as merely an internal storage change.  */
10361     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10362     else sv_setsv_flags(sv, temp, 0);
10363
10364     if ((const GV *)sv == PL_last_in_gv)
10365         PL_last_in_gv = NULL;
10366     else if ((const GV *)sv == PL_statgv)
10367         PL_statgv = NULL;
10368 }
10369
10370 /*
10371 =for apidoc sv_unref_flags
10372
10373 Unsets the RV status of the SV, and decrements the reference count of
10374 whatever was being referenced by the RV.  This can almost be thought of
10375 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10376 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10377 (otherwise the decrementing is conditional on the reference count being
10378 different from one or the reference being a readonly SV).
10379 See C<L</SvROK_off>>.
10380
10381 =cut
10382 */
10383
10384 void
10385 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10386 {
10387     SV* const target = SvRV(ref);
10388
10389     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10390
10391     if (SvWEAKREF(ref)) {
10392         sv_del_backref(target, ref);
10393         SvWEAKREF_off(ref);
10394         SvRV_set(ref, NULL);
10395         return;
10396     }
10397     SvRV_set(ref, NULL);
10398     SvROK_off(ref);
10399     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10400        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10401     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10402         SvREFCNT_dec_NN(target);
10403     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10404         sv_2mortal(target);     /* Schedule for freeing later */
10405 }
10406
10407 /*
10408 =for apidoc sv_untaint
10409
10410 Untaint an SV.  Use C<SvTAINTED_off> instead.
10411
10412 =cut
10413 */
10414
10415 void
10416 Perl_sv_untaint(pTHX_ SV *const sv)
10417 {
10418     PERL_ARGS_ASSERT_SV_UNTAINT;
10419     PERL_UNUSED_CONTEXT;
10420
10421     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10422         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10423         if (mg)
10424             mg->mg_len &= ~1;
10425     }
10426 }
10427
10428 /*
10429 =for apidoc sv_tainted
10430
10431 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10432
10433 =cut
10434 */
10435
10436 bool
10437 Perl_sv_tainted(pTHX_ SV *const sv)
10438 {
10439     PERL_ARGS_ASSERT_SV_TAINTED;
10440     PERL_UNUSED_CONTEXT;
10441
10442     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10443         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10444         if (mg && (mg->mg_len & 1) )
10445             return TRUE;
10446     }
10447     return FALSE;
10448 }
10449
10450 /*
10451 =for apidoc sv_setpviv
10452
10453 Copies an integer into the given SV, also updating its string value.
10454 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10455
10456 =cut
10457 */
10458
10459 void
10460 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10461 {
10462     char buf[TYPE_CHARS(UV)];
10463     char *ebuf;
10464     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10465
10466     PERL_ARGS_ASSERT_SV_SETPVIV;
10467
10468     sv_setpvn(sv, ptr, ebuf - ptr);
10469 }
10470
10471 /*
10472 =for apidoc sv_setpviv_mg
10473
10474 Like C<sv_setpviv>, but also handles 'set' magic.
10475
10476 =cut
10477 */
10478
10479 void
10480 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10481 {
10482     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10483
10484     sv_setpviv(sv, iv);
10485     SvSETMAGIC(sv);
10486 }
10487
10488 #if defined(PERL_IMPLICIT_CONTEXT)
10489
10490 /* pTHX_ magic can't cope with varargs, so this is a no-context
10491  * version of the main function, (which may itself be aliased to us).
10492  * Don't access this version directly.
10493  */
10494
10495 void
10496 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10497 {
10498     dTHX;
10499     va_list args;
10500
10501     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10502
10503     va_start(args, pat);
10504     sv_vsetpvf(sv, pat, &args);
10505     va_end(args);
10506 }
10507
10508 /* pTHX_ magic can't cope with varargs, so this is a no-context
10509  * version of the main function, (which may itself be aliased to us).
10510  * Don't access this version directly.
10511  */
10512
10513 void
10514 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10515 {
10516     dTHX;
10517     va_list args;
10518
10519     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10520
10521     va_start(args, pat);
10522     sv_vsetpvf_mg(sv, pat, &args);
10523     va_end(args);
10524 }
10525 #endif
10526
10527 /*
10528 =for apidoc sv_setpvf
10529
10530 Works like C<sv_catpvf> but copies the text into the SV instead of
10531 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10532
10533 =cut
10534 */
10535
10536 void
10537 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10538 {
10539     va_list args;
10540
10541     PERL_ARGS_ASSERT_SV_SETPVF;
10542
10543     va_start(args, pat);
10544     sv_vsetpvf(sv, pat, &args);
10545     va_end(args);
10546 }
10547
10548 /*
10549 =for apidoc sv_vsetpvf
10550
10551 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10552 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10553
10554 Usually used via its frontend C<sv_setpvf>.
10555
10556 =cut
10557 */
10558
10559 void
10560 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10561 {
10562     PERL_ARGS_ASSERT_SV_VSETPVF;
10563
10564     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10565 }
10566
10567 /*
10568 =for apidoc sv_setpvf_mg
10569
10570 Like C<sv_setpvf>, but also handles 'set' magic.
10571
10572 =cut
10573 */
10574
10575 void
10576 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10577 {
10578     va_list args;
10579
10580     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10581
10582     va_start(args, pat);
10583     sv_vsetpvf_mg(sv, pat, &args);
10584     va_end(args);
10585 }
10586
10587 /*
10588 =for apidoc sv_vsetpvf_mg
10589
10590 Like C<sv_vsetpvf>, but also handles 'set' magic.
10591
10592 Usually used via its frontend C<sv_setpvf_mg>.
10593
10594 =cut
10595 */
10596
10597 void
10598 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10599 {
10600     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10601
10602     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10603     SvSETMAGIC(sv);
10604 }
10605
10606 #if defined(PERL_IMPLICIT_CONTEXT)
10607
10608 /* pTHX_ magic can't cope with varargs, so this is a no-context
10609  * version of the main function, (which may itself be aliased to us).
10610  * Don't access this version directly.
10611  */
10612
10613 void
10614 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10615 {
10616     dTHX;
10617     va_list args;
10618
10619     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10620
10621     va_start(args, pat);
10622     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10623     va_end(args);
10624 }
10625
10626 /* pTHX_ magic can't cope with varargs, so this is a no-context
10627  * version of the main function, (which may itself be aliased to us).
10628  * Don't access this version directly.
10629  */
10630
10631 void
10632 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10633 {
10634     dTHX;
10635     va_list args;
10636
10637     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10638
10639     va_start(args, pat);
10640     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10641     SvSETMAGIC(sv);
10642     va_end(args);
10643 }
10644 #endif
10645
10646 /*
10647 =for apidoc sv_catpvf
10648
10649 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10650 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10651 variable argument list, argument reordering is not supported.
10652 If the appended data contains "wide" characters
10653 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10654 and characters >255 formatted with C<%c>), the original SV might get
10655 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10656 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10657 valid UTF-8; if the original SV was bytes, the pattern should be too.
10658
10659 =cut */
10660
10661 void
10662 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10663 {
10664     va_list args;
10665
10666     PERL_ARGS_ASSERT_SV_CATPVF;
10667
10668     va_start(args, pat);
10669     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10670     va_end(args);
10671 }
10672
10673 /*
10674 =for apidoc sv_vcatpvf
10675
10676 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10677 variable argument list, and appends the formatted
10678 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10679
10680 Usually used via its frontend C<sv_catpvf>.
10681
10682 =cut
10683 */
10684
10685 void
10686 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10687 {
10688     PERL_ARGS_ASSERT_SV_VCATPVF;
10689
10690     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10691 }
10692
10693 /*
10694 =for apidoc sv_catpvf_mg
10695
10696 Like C<sv_catpvf>, but also handles 'set' magic.
10697
10698 =cut
10699 */
10700
10701 void
10702 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10703 {
10704     va_list args;
10705
10706     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10707
10708     va_start(args, pat);
10709     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10710     SvSETMAGIC(sv);
10711     va_end(args);
10712 }
10713
10714 /*
10715 =for apidoc sv_vcatpvf_mg
10716
10717 Like C<sv_vcatpvf>, but also handles 'set' magic.
10718
10719 Usually used via its frontend C<sv_catpvf_mg>.
10720
10721 =cut
10722 */
10723
10724 void
10725 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10726 {
10727     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10728
10729     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10730     SvSETMAGIC(sv);
10731 }
10732
10733 /*
10734 =for apidoc sv_vsetpvfn
10735
10736 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10737 appending it.
10738
10739 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10740
10741 =cut
10742 */
10743
10744 void
10745 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10746                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10747 {
10748     PERL_ARGS_ASSERT_SV_VSETPVFN;
10749
10750     sv_setpvs(sv, "");
10751     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10752 }
10753
10754
10755 /*
10756  * Warn of missing argument to sprintf. The value used in place of such
10757  * arguments should be &PL_sv_no; an undefined value would yield
10758  * inappropriate "use of uninit" warnings [perl #71000].
10759  */
10760 STATIC void
10761 S_warn_vcatpvfn_missing_argument(pTHX) {
10762     if (ckWARN(WARN_MISSING)) {
10763         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10764                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10765     }
10766 }
10767
10768
10769 STATIC I32
10770 S_expect_number(pTHX_ char **const pattern)
10771 {
10772     I32 var = 0;
10773
10774     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10775
10776     switch (**pattern) {
10777     case '1': case '2': case '3':
10778     case '4': case '5': case '6':
10779     case '7': case '8': case '9':
10780         var = *(*pattern)++ - '0';
10781         while (isDIGIT(**pattern)) {
10782             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10783             if (tmp < var)
10784                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10785             var = tmp;
10786         }
10787     }
10788     return var;
10789 }
10790
10791 STATIC char *
10792 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10793 {
10794     const int neg = nv < 0;
10795     UV uv;
10796
10797     PERL_ARGS_ASSERT_F0CONVERT;
10798
10799     if (UNLIKELY(Perl_isinfnan(nv))) {
10800         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10801         *len = n;
10802         return endbuf - n;
10803     }
10804     if (neg)
10805         nv = -nv;
10806     if (nv < UV_MAX) {
10807         char *p = endbuf;
10808         nv += 0.5;
10809         uv = (UV)nv;
10810         if (uv & 1 && uv == nv)
10811             uv--;                       /* Round to even */
10812         do {
10813             const unsigned dig = uv % 10;
10814             *--p = '0' + dig;
10815         } while (uv /= 10);
10816         if (neg)
10817             *--p = '-';
10818         *len = endbuf - p;
10819         return p;
10820     }
10821     return NULL;
10822 }
10823
10824
10825 /*
10826 =for apidoc sv_vcatpvfn
10827
10828 =for apidoc sv_vcatpvfn_flags
10829
10830 Processes its arguments like C<vsprintf> and appends the formatted output
10831 to an SV.  Uses an array of SVs if the C-style variable argument list is
10832 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
10833 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10834 C<va_list> argument list with a format string that uses argument reordering
10835 will yield an exception.
10836
10837 When running with taint checks enabled, indicates via
10838 C<maybe_tainted> if results are untrustworthy (often due to the use of
10839 locales).
10840
10841 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
10842
10843 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10844
10845 =cut
10846 */
10847
10848 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10849                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10850                         vec_utf8 = DO_UTF8(vecsv);
10851
10852 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10853
10854 void
10855 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10856                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10857 {
10858     PERL_ARGS_ASSERT_SV_VCATPVFN;
10859
10860     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10861 }
10862
10863 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10864 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10865  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10866  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10867  * after the first 1023 zero bits.
10868  *
10869  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10870  * of dynamically growing buffer might be better, start at just 16 bytes
10871  * (for example) and grow only when necessary.  Or maybe just by looking
10872  * at the exponents of the two doubles? */
10873 #  define DOUBLEDOUBLE_MAXBITS 2098
10874 #endif
10875
10876 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10877  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10878  * per xdigit.  For the double-double case, this can be rather many.
10879  * The non-double-double-long-double overshoots since all bits of NV
10880  * are not mantissa bits, there are also exponent bits. */
10881 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10882 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
10883 #else
10884 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10885 #endif
10886
10887 /* If we do not have a known long double format, (including not using
10888  * long doubles, or long doubles being equal to doubles) then we will
10889  * fall back to the ldexp/frexp route, with which we can retrieve at
10890  * most as many bits as our widest unsigned integer type is.  We try
10891  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10892  *
10893  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10894  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10895  */
10896 #if defined(HAS_QUAD) && defined(Uquad_t)
10897 #  define MANTISSATYPE Uquad_t
10898 #  define MANTISSASIZE 8
10899 #else
10900 #  define MANTISSATYPE UV
10901 #  define MANTISSASIZE UVSIZE
10902 #endif
10903
10904 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10905 #  define HEXTRACT_LITTLE_ENDIAN
10906 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10907 #  define HEXTRACT_BIG_ENDIAN
10908 #else
10909 #  define HEXTRACT_MIX_ENDIAN
10910 #endif
10911
10912 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10913  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10914  * are being extracted from (either directly from the long double in-memory
10915  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10916  * is used to update the exponent.  vhex is the pointer to the beginning
10917  * of the output buffer (of VHEX_SIZE).
10918  *
10919  * The tricky part is that S_hextract() needs to be called twice:
10920  * the first time with vend as NULL, and the second time with vend as
10921  * the pointer returned by the first call.  What happens is that on
10922  * the first round the output size is computed, and the intended
10923  * extraction sanity checked.  On the second round the actual output
10924  * (the extraction of the hexadecimal values) takes place.
10925  * Sanity failures cause fatal failures during both rounds. */
10926 STATIC U8*
10927 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10928 {
10929     U8* v = vhex;
10930     int ix;
10931     int ixmin = 0, ixmax = 0;
10932
10933     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10934      * and elsewhere. */
10935
10936     /* These macros are just to reduce typos, they have multiple
10937      * repetitions below, but usually only one (or sometimes two)
10938      * of them is really being used. */
10939     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10940 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10941 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10942 #define HEXTRACT_OUTPUT(ix) \
10943     STMT_START { \
10944       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10945    } STMT_END
10946 #define HEXTRACT_COUNT(ix, c) \
10947     STMT_START { \
10948       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10949    } STMT_END
10950 #define HEXTRACT_BYTE(ix) \
10951     STMT_START { \
10952       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10953    } STMT_END
10954 #define HEXTRACT_LO_NYBBLE(ix) \
10955     STMT_START { \
10956       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10957    } STMT_END
10958     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10959      * to make it look less odd when the top bits of a NV
10960      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10961      * order bits can be in the "low nybble" of a byte. */
10962 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10963 #define HEXTRACT_BYTES_LE(a, b) \
10964     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10965 #define HEXTRACT_BYTES_BE(a, b) \
10966     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10967 #define HEXTRACT_IMPLICIT_BIT(nv) \
10968     STMT_START { \
10969         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10970    } STMT_END
10971
10972 /* Most formats do.  Those which don't should undef this. */
10973 #define HEXTRACT_HAS_IMPLICIT_BIT
10974 /* Many formats do.  Those which don't should undef this. */
10975 #define HEXTRACT_HAS_TOP_NYBBLE
10976
10977     /* HEXTRACTSIZE is the maximum number of xdigits. */
10978 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10979 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
10980 #else
10981 #  define HEXTRACTSIZE 2 * NVSIZE
10982 #endif
10983
10984     const U8* vmaxend = vhex + HEXTRACTSIZE;
10985     PERL_UNUSED_VAR(ix); /* might happen */
10986     (void)Perl_frexp(PERL_ABS(nv), exponent);
10987     if (vend && (vend <= vhex || vend > vmaxend)) {
10988         /* diag_listed_as: Hexadecimal float: internal error (%s) */
10989         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
10990     }
10991     {
10992         /* First check if using long doubles. */
10993 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
10994 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10995         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10996          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10997         /* The bytes 13..0 are the mantissa/fraction,
10998          * the 15,14 are the sign+exponent. */
10999         const U8* nvp = (const U8*)(&nv);
11000         HEXTRACT_IMPLICIT_BIT(nv);
11001 #   undef HEXTRACT_HAS_TOP_NYBBLE
11002         HEXTRACT_BYTES_LE(13, 0);
11003 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11004         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11005          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11006         /* The bytes 2..15 are the mantissa/fraction,
11007          * the 0,1 are the sign+exponent. */
11008         const U8* nvp = (const U8*)(&nv);
11009         HEXTRACT_IMPLICIT_BIT(nv);
11010 #   undef HEXTRACT_HAS_TOP_NYBBLE
11011         HEXTRACT_BYTES_BE(2, 15);
11012 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11013         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11014          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
11015          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
11016          * meaning that 2 or 6 bytes are empty padding. */
11017         /* The bytes 7..0 are the mantissa/fraction */
11018         const U8* nvp = (const U8*)(&nv);
11019 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11020 #    undef HEXTRACT_HAS_TOP_NYBBLE
11021         HEXTRACT_BYTES_LE(7, 0);
11022 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11023         /* Does this format ever happen? (Wikipedia says the Motorola
11024          * 6888x math coprocessors used format _like_ this but padded
11025          * to 96 bits with 16 unused bits between the exponent and the
11026          * mantissa.) */
11027         const U8* nvp = (const U8*)(&nv);
11028 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11029 #    undef HEXTRACT_HAS_TOP_NYBBLE
11030         HEXTRACT_BYTES_BE(0, 7);
11031 #  else
11032 #    define HEXTRACT_FALLBACK
11033         /* Double-double format: two doubles next to each other.
11034          * The first double is the high-order one, exactly like
11035          * it would be for a "lone" double.  The second double
11036          * is shifted down using the exponent so that that there
11037          * are no common bits.  The tricky part is that the value
11038          * of the double-double is the SUM of the two doubles and
11039          * the second one can be also NEGATIVE.
11040          *
11041          * Because of this tricky construction the bytewise extraction we
11042          * use for the other long double formats doesn't work, we must
11043          * extract the values bit by bit.
11044          *
11045          * The little-endian double-double is used .. somewhere?
11046          *
11047          * The big endian double-double is used in e.g. PPC/Power (AIX)
11048          * and MIPS (SGI).
11049          *
11050          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11051          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11052          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11053          */
11054 #  endif
11055 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11056         /* Using normal doubles, not long doubles.
11057          *
11058          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11059          * bytes, since we might need to handle printf precision, and
11060          * also need to insert the radix. */
11061 #  if NVSIZE == 8
11062 #    ifdef HEXTRACT_LITTLE_ENDIAN
11063         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11064         const U8* nvp = (const U8*)(&nv);
11065         HEXTRACT_IMPLICIT_BIT(nv);
11066         HEXTRACT_TOP_NYBBLE(6);
11067         HEXTRACT_BYTES_LE(5, 0);
11068 #    elif defined(HEXTRACT_BIG_ENDIAN)
11069         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11070         const U8* nvp = (const U8*)(&nv);
11071         HEXTRACT_IMPLICIT_BIT(nv);
11072         HEXTRACT_TOP_NYBBLE(1);
11073         HEXTRACT_BYTES_BE(2, 7);
11074 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11075         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11076         const U8* nvp = (const U8*)(&nv);
11077         HEXTRACT_IMPLICIT_BIT(nv);
11078         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11079         HEXTRACT_BYTE(1); /* 5 */
11080         HEXTRACT_BYTE(0); /* 4 */
11081         HEXTRACT_BYTE(7); /* 3 */
11082         HEXTRACT_BYTE(6); /* 2 */
11083         HEXTRACT_BYTE(5); /* 1 */
11084         HEXTRACT_BYTE(4); /* 0 */
11085 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11086         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11087         const U8* nvp = (const U8*)(&nv);
11088         HEXTRACT_IMPLICIT_BIT(nv);
11089         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11090         HEXTRACT_BYTE(6); /* 5 */
11091         HEXTRACT_BYTE(7); /* 4 */
11092         HEXTRACT_BYTE(0); /* 3 */
11093         HEXTRACT_BYTE(1); /* 2 */
11094         HEXTRACT_BYTE(2); /* 1 */
11095         HEXTRACT_BYTE(3); /* 0 */
11096 #    else
11097 #      define HEXTRACT_FALLBACK
11098 #    endif
11099 #  else
11100 #    define HEXTRACT_FALLBACK
11101 #  endif
11102 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11103 #  ifdef HEXTRACT_FALLBACK
11104 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11105         /* The fallback is used for the double-double format, and
11106          * for unknown long double formats, and for unknown double
11107          * formats, or in general unknown NV formats. */
11108         if (nv == (NV)0.0) {
11109             if (vend)
11110                 *v++ = 0;
11111             else
11112                 v++;
11113             *exponent = 0;
11114         }
11115         else {
11116             NV d = nv < 0 ? -nv : nv;
11117             NV e = (NV)1.0;
11118             U8 ha = 0x0; /* hexvalue accumulator */
11119             U8 hd = 0x8; /* hexvalue digit */
11120
11121             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11122              * this is essentially manual frexp(). Multiplying by 0.5 and
11123              * doubling should be lossless in binary floating point. */
11124
11125             *exponent = 1;
11126
11127             while (e > d) {
11128                 e *= (NV)0.5;
11129                 (*exponent)--;
11130             }
11131             /* Now d >= e */
11132
11133             while (d >= e + e) {
11134                 e += e;
11135                 (*exponent)++;
11136             }
11137             /* Now e <= d < 2*e */
11138
11139             /* First extract the leading hexdigit (the implicit bit). */
11140             if (d >= e) {
11141                 d -= e;
11142                 if (vend)
11143                     *v++ = 1;
11144                 else
11145                     v++;
11146             }
11147             else {
11148                 if (vend)
11149                     *v++ = 0;
11150                 else
11151                     v++;
11152             }
11153             e *= (NV)0.5;
11154
11155             /* Then extract the remaining hexdigits. */
11156             while (d > (NV)0.0) {
11157                 if (d >= e) {
11158                     ha |= hd;
11159                     d -= e;
11160                 }
11161                 if (hd == 1) {
11162                     /* Output or count in groups of four bits,
11163                      * that is, when the hexdigit is down to one. */
11164                     if (vend)
11165                         *v++ = ha;
11166                     else
11167                         v++;
11168                     /* Reset the hexvalue. */
11169                     ha = 0x0;
11170                     hd = 0x8;
11171                 }
11172                 else
11173                     hd >>= 1;
11174                 e *= (NV)0.5;
11175             }
11176
11177             /* Flush possible pending hexvalue. */
11178             if (ha) {
11179                 if (vend)
11180                     *v++ = ha;
11181                 else
11182                     v++;
11183             }
11184         }
11185 #  endif
11186     }
11187     /* Croak for various reasons: if the output pointer escaped the
11188      * output buffer, if the extraction index escaped the extraction
11189      * buffer, or if the ending output pointer didn't match the
11190      * previously computed value. */
11191     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11192         /* For double-double the ixmin and ixmax stay at zero,
11193          * which is convenient since the HEXTRACTSIZE is tricky
11194          * for double-double. */
11195         ixmin < 0 || ixmax >= NVSIZE ||
11196         (vend && v != vend)) {
11197         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11198         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11199     }
11200     return v;
11201 }
11202
11203 /* Helper for sv_vcatpvfn_flags().  */
11204 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11205     STMT_START {                                       \
11206         if (in_range)                                  \
11207             (var) = (expr);                            \
11208         else {                                         \
11209             (var) = &PL_sv_no; /* [perl #71000] */     \
11210             arg_missing = TRUE;                        \
11211         }                                              \
11212     } STMT_END
11213
11214 void
11215 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11216                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11217                        const U32 flags)
11218 {
11219     char *p;
11220     char *q;
11221     const char *patend;
11222     STRLEN origlen;
11223     I32 svix = 0;
11224     static const char nullstr[] = "(null)";
11225     SV *argsv = NULL;
11226     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11227     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11228     SV *nsv = NULL;
11229     /* Times 4: a decimal digit takes more than 3 binary digits.
11230      * NV_DIG: mantissa takes than many decimal digits.
11231      * Plus 32: Playing safe. */
11232     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11233     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11234     bool hexfp = FALSE; /* hexadecimal floating point? */
11235
11236     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11237
11238     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11239     PERL_UNUSED_ARG(maybe_tainted);
11240
11241     if (flags & SV_GMAGIC)
11242         SvGETMAGIC(sv);
11243
11244     /* no matter what, this is a string now */
11245     (void)SvPV_force_nomg(sv, origlen);
11246
11247     /* special-case "", "%s", and "%-p" (SVf - see below) */
11248     if (patlen == 0) {
11249         if (svmax && ckWARN(WARN_REDUNDANT))
11250             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11251                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11252         return;
11253     }
11254     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11255         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11256             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11257                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11258
11259         if (args) {
11260             const char * const s = va_arg(*args, char*);
11261             sv_catpv_nomg(sv, s ? s : nullstr);
11262         }
11263         else if (svix < svmax) {
11264             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11265             SvGETMAGIC(*svargs);
11266             sv_catsv_nomg(sv, *svargs);
11267         }
11268         else
11269             S_warn_vcatpvfn_missing_argument(aTHX);
11270         return;
11271     }
11272     if (args && patlen == 3 && pat[0] == '%' &&
11273                 pat[1] == '-' && pat[2] == 'p') {
11274         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11275             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11276                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11277         argsv = MUTABLE_SV(va_arg(*args, void*));
11278         sv_catsv_nomg(sv, argsv);
11279         return;
11280     }
11281
11282 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11283     /* special-case "%.<number>[gf]" */
11284     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11285          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11286         unsigned digits = 0;
11287         const char *pp;
11288
11289         pp = pat + 2;
11290         while (*pp >= '0' && *pp <= '9')
11291             digits = 10 * digits + (*pp++ - '0');
11292
11293         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11294            format the first argument and WARN_REDUNDANT if svmax > 1?
11295            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11296         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11297             const NV nv = SvNV(*svargs);
11298             if (LIKELY(!Perl_isinfnan(nv))) {
11299                 if (*pp == 'g') {
11300                     /* Add check for digits != 0 because it seems that some
11301                        gconverts are buggy in this case, and we don't yet have
11302                        a Configure test for this.  */
11303                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11304                         /* 0, point, slack */
11305                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11306                         SNPRINTF_G(nv, ebuf, size, digits);
11307                         sv_catpv_nomg(sv, ebuf);
11308                         if (*ebuf)      /* May return an empty string for digits==0 */
11309                             return;
11310                     }
11311                 } else if (!digits) {
11312                     STRLEN l;
11313
11314                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11315                         sv_catpvn_nomg(sv, p, l);
11316                         return;
11317                     }
11318                 }
11319             }
11320         }
11321     }
11322 #endif /* !USE_LONG_DOUBLE */
11323
11324     if (!args && svix < svmax && DO_UTF8(*svargs))
11325         has_utf8 = TRUE;
11326
11327     patend = (char*)pat + patlen;
11328     for (p = (char*)pat; p < patend; p = q) {
11329         bool alt = FALSE;
11330         bool left = FALSE;
11331         bool vectorize = FALSE;
11332         bool vectorarg = FALSE;
11333         bool vec_utf8 = FALSE;
11334         char fill = ' ';
11335         char plus = 0;
11336         char intsize = 0;
11337         STRLEN width = 0;
11338         STRLEN zeros = 0;
11339         bool has_precis = FALSE;
11340         STRLEN precis = 0;
11341         const I32 osvix = svix;
11342         bool is_utf8 = FALSE;  /* is this item utf8?   */
11343         bool used_explicit_ix = FALSE;
11344         bool arg_missing = FALSE;
11345 #ifdef HAS_LDBL_SPRINTF_BUG
11346         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11347            with sfio - Allen <allens@cpan.org> */
11348         bool fix_ldbl_sprintf_bug = FALSE;
11349 #endif
11350
11351         char esignbuf[4];
11352         U8 utf8buf[UTF8_MAXBYTES+1];
11353         STRLEN esignlen = 0;
11354
11355         const char *eptr = NULL;
11356         const char *fmtstart;
11357         STRLEN elen = 0;
11358         SV *vecsv = NULL;
11359         const U8 *vecstr = NULL;
11360         STRLEN veclen = 0;
11361         char c = 0;
11362         int i;
11363         unsigned base = 0;
11364         IV iv = 0;
11365         UV uv = 0;
11366         /* We need a long double target in case HAS_LONG_DOUBLE,
11367          * even without USE_LONG_DOUBLE, so that we can printf with
11368          * long double formats, even without NV being long double.
11369          * But we call the target 'fv' instead of 'nv', since most of
11370          * the time it is not (most compilers these days recognize
11371          * "long double", even if only as a synonym for "double").
11372         */
11373 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11374         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11375         long double fv;
11376 #  ifdef Perl_isfinitel
11377 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11378 #  endif
11379 #  define FV_GF PERL_PRIgldbl
11380 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11381        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11382 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11383                                            double _dv = nv;  \
11384                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11385                               } STMT_END
11386 #    else
11387 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11388 #    endif
11389 #else
11390         NV fv;
11391 #  define FV_GF NVgf
11392 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11393 #endif
11394 #ifndef FV_ISFINITE
11395 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11396 #endif
11397         NV nv;
11398         STRLEN have;
11399         STRLEN need;
11400         STRLEN gap;
11401         const char *dotstr = ".";
11402         STRLEN dotstrlen = 1;
11403         I32 efix = 0; /* explicit format parameter index */
11404         I32 ewix = 0; /* explicit width index */
11405         I32 epix = 0; /* explicit precision index */
11406         I32 evix = 0; /* explicit vector index */
11407         bool asterisk = FALSE;
11408         bool infnan = FALSE;
11409
11410         /* echo everything up to the next format specification */
11411         for (q = p; q < patend && *q != '%'; ++q) ;
11412         if (q > p) {
11413             if (has_utf8 && !pat_utf8)
11414                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11415             else
11416                 sv_catpvn_nomg(sv, p, q - p);
11417             p = q;
11418         }
11419         if (q++ >= patend)
11420             break;
11421
11422         fmtstart = q;
11423
11424 /*
11425     We allow format specification elements in this order:
11426         \d+\$              explicit format parameter index
11427         [-+ 0#]+           flags
11428         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11429         0                  flag (as above): repeated to allow "v02"     
11430         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11431         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11432         [hlqLV]            size
11433     [%bcdefginopsuxDFOUX] format (mandatory)
11434 */
11435
11436         if (args) {
11437 /*  
11438         As of perl5.9.3, printf format checking is on by default.
11439         Internally, perl uses %p formats to provide an escape to
11440         some extended formatting.  This block deals with those
11441         extensions: if it does not match, (char*)q is reset and
11442         the normal format processing code is used.
11443
11444         Currently defined extensions are:
11445                 %p              include pointer address (standard)      
11446                 %-p     (SVf)   include an SV (previously %_)
11447                 %-<num>p        include an SV with precision <num>      
11448                 %2p             include a HEK
11449                 %3p             include a HEK with precision of 256
11450                 %4p             char* preceded by utf8 flag and length
11451                 %<num>p         (where num is 1 or > 4) reserved for future
11452                                 extensions
11453
11454         Robin Barker 2005-07-14 (but modified since)
11455
11456                 %1p     (VDf)   removed.  RMB 2007-10-19
11457 */
11458             char* r = q; 
11459             bool sv = FALSE;    
11460             STRLEN n = 0;
11461             if (*q == '-')
11462                 sv = *q++;
11463             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11464                 /* The argument has already gone through cBOOL, so the cast
11465                    is safe. */
11466                 is_utf8 = (bool)va_arg(*args, int);
11467                 elen = va_arg(*args, UV);
11468                 /* if utf8 length is larger than 0x7ffff..., then it might
11469                  * have been a signed value that wrapped */
11470                 if (elen  > ((~(STRLEN)0) >> 1)) {
11471                     assert(0); /* in DEBUGGING build we want to crash */
11472                     elen= 0; /* otherwise we want to treat this as an empty string */
11473                 }
11474                 eptr = va_arg(*args, char *);
11475                 q += sizeof(UTF8f)-1;
11476                 goto string;
11477             }
11478             n = expect_number(&q);
11479             if (*q++ == 'p') {
11480                 if (sv) {                       /* SVf */
11481                     if (n) {
11482                         precis = n;
11483                         has_precis = TRUE;
11484                     }
11485                     argsv = MUTABLE_SV(va_arg(*args, void*));
11486                     eptr = SvPV_const(argsv, elen);
11487                     if (DO_UTF8(argsv))
11488                         is_utf8 = TRUE;
11489                     goto string;
11490                 }
11491                 else if (n==2 || n==3) {        /* HEKf */
11492                     HEK * const hek = va_arg(*args, HEK *);
11493                     eptr = HEK_KEY(hek);
11494                     elen = HEK_LEN(hek);
11495                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11496                     if (n==3) precis = 256, has_precis = TRUE;
11497                     goto string;
11498                 }
11499                 else if (n) {
11500                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11501                                      "internal %%<num>p might conflict with future printf extensions");
11502                 }
11503             }
11504             q = r; 
11505         }
11506
11507         if ( (width = expect_number(&q)) ) {
11508             if (*q == '$') {
11509                 if (args)
11510                     Perl_croak_nocontext(
11511                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11512                 ++q;
11513                 efix = width;
11514                 used_explicit_ix = TRUE;
11515             } else {
11516                 goto gotwidth;
11517             }
11518         }
11519
11520         /* FLAGS */
11521
11522         while (*q) {
11523             switch (*q) {
11524             case ' ':
11525             case '+':
11526                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11527                     q++;
11528                 else
11529                     plus = *q++;
11530                 continue;
11531
11532             case '-':
11533                 left = TRUE;
11534                 q++;
11535                 continue;
11536
11537             case '0':
11538                 fill = *q++;
11539                 continue;
11540
11541             case '#':
11542                 alt = TRUE;
11543                 q++;
11544                 continue;
11545
11546             default:
11547                 break;
11548             }
11549             break;
11550         }
11551
11552       tryasterisk:
11553         if (*q == '*') {
11554             q++;
11555             if ( (ewix = expect_number(&q)) ) {
11556                 if (*q++ == '$') {
11557                     if (args)
11558                         Perl_croak_nocontext(
11559                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11560                     used_explicit_ix = TRUE;
11561                 } else
11562                     goto unknown;
11563             }
11564             asterisk = TRUE;
11565         }
11566         if (*q == 'v') {
11567             q++;
11568             if (vectorize)
11569                 goto unknown;
11570             if ((vectorarg = asterisk)) {
11571                 evix = ewix;
11572                 ewix = 0;
11573                 asterisk = FALSE;
11574             }
11575             vectorize = TRUE;
11576             goto tryasterisk;
11577         }
11578
11579         if (!asterisk)
11580         {
11581             if( *q == '0' )
11582                 fill = *q++;
11583             width = expect_number(&q);
11584         }
11585
11586         if (vectorize && vectorarg) {
11587             /* vectorizing, but not with the default "." */
11588             if (args)
11589                 vecsv = va_arg(*args, SV*);
11590             else if (evix) {
11591                 FETCH_VCATPVFN_ARGUMENT(
11592                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11593             } else {
11594                 FETCH_VCATPVFN_ARGUMENT(
11595                     vecsv, svix < svmax, svargs[svix++]);
11596             }
11597             dotstr = SvPV_const(vecsv, dotstrlen);
11598             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11599                bad with tied or overloaded values that return UTF8.  */
11600             if (DO_UTF8(vecsv))
11601                 is_utf8 = TRUE;
11602             else if (has_utf8) {
11603                 vecsv = sv_mortalcopy(vecsv);
11604                 sv_utf8_upgrade(vecsv);
11605                 dotstr = SvPV_const(vecsv, dotstrlen);
11606                 is_utf8 = TRUE;
11607             }               
11608         }
11609
11610         if (asterisk) {
11611             if (args)
11612                 i = va_arg(*args, int);
11613             else
11614                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11615                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11616             left |= (i < 0);
11617             width = (i < 0) ? -i : i;
11618         }
11619       gotwidth:
11620
11621         /* PRECISION */
11622
11623         if (*q == '.') {
11624             q++;
11625             if (*q == '*') {
11626                 q++;
11627                 if ( (epix = expect_number(&q)) ) {
11628                     if (*q++ == '$') {
11629                         if (args)
11630                             Perl_croak_nocontext(
11631                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11632                         used_explicit_ix = TRUE;
11633                     } else
11634                         goto unknown;
11635                 }
11636                 if (args)
11637                     i = va_arg(*args, int);
11638                 else {
11639                     SV *precsv;
11640                     if (epix)
11641                         FETCH_VCATPVFN_ARGUMENT(
11642                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11643                     else
11644                         FETCH_VCATPVFN_ARGUMENT(
11645                             precsv, svix < svmax, svargs[svix++]);
11646                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11647                 }
11648                 precis = i;
11649                 has_precis = !(i < 0);
11650             }
11651             else {
11652                 precis = 0;
11653                 while (isDIGIT(*q))
11654                     precis = precis * 10 + (*q++ - '0');
11655                 has_precis = TRUE;
11656             }
11657         }
11658
11659         if (vectorize) {
11660             if (args) {
11661                 VECTORIZE_ARGS
11662             }
11663             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11664                 vecsv = svargs[efix ? efix-1 : svix++];
11665                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11666                 vec_utf8 = DO_UTF8(vecsv);
11667
11668                 /* if this is a version object, we need to convert
11669                  * back into v-string notation and then let the
11670                  * vectorize happen normally
11671                  */
11672                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11673                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11674                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11675                         "vector argument not supported with alpha versions");
11676                         goto vdblank;
11677                     }
11678                     vecsv = sv_newmortal();
11679                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11680                                  vecsv);
11681                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11682                     vec_utf8 = DO_UTF8(vecsv);
11683                 }
11684             }
11685             else {
11686               vdblank:
11687                 vecstr = (U8*)"";
11688                 veclen = 0;
11689             }
11690         }
11691
11692         /* SIZE */
11693
11694         switch (*q) {
11695 #ifdef WIN32
11696         case 'I':                       /* Ix, I32x, and I64x */
11697 #  ifdef USE_64_BIT_INT
11698             if (q[1] == '6' && q[2] == '4') {
11699                 q += 3;
11700                 intsize = 'q';
11701                 break;
11702             }
11703 #  endif
11704             if (q[1] == '3' && q[2] == '2') {
11705                 q += 3;
11706                 break;
11707             }
11708 #  ifdef USE_64_BIT_INT
11709             intsize = 'q';
11710 #  endif
11711             q++;
11712             break;
11713 #endif
11714 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11715     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11716         case 'L':                       /* Ld */
11717             /* FALLTHROUGH */
11718 #  ifdef USE_QUADMATH
11719         case 'Q':
11720             /* FALLTHROUGH */
11721 #  endif
11722 #  if IVSIZE >= 8
11723         case 'q':                       /* qd */
11724 #  endif
11725             intsize = 'q';
11726             q++;
11727             break;
11728 #endif
11729         case 'l':
11730             ++q;
11731 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11732     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11733             if (*q == 'l') {    /* lld, llf */
11734                 intsize = 'q';
11735                 ++q;
11736             }
11737             else
11738 #endif
11739                 intsize = 'l';
11740             break;
11741         case 'h':
11742             if (*++q == 'h') {  /* hhd, hhu */
11743                 intsize = 'c';
11744                 ++q;
11745             }
11746             else
11747                 intsize = 'h';
11748             break;
11749         case 'V':
11750         case 'z':
11751         case 't':
11752 #ifdef I_STDINT
11753         case 'j':
11754 #endif
11755             intsize = *q++;
11756             break;
11757         }
11758
11759         /* CONVERSION */
11760
11761         if (*q == '%') {
11762             eptr = q++;
11763             elen = 1;
11764             if (vectorize) {
11765                 c = '%';
11766                 goto unknown;
11767             }
11768             goto string;
11769         }
11770
11771         if (!vectorize && !args) {
11772             if (efix) {
11773                 const I32 i = efix-1;
11774                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11775             } else {
11776                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11777                                         svargs[svix++]);
11778             }
11779         }
11780
11781         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11782             /* XXX va_arg(*args) case? need peek, use va_copy? */
11783             SvGETMAGIC(argsv);
11784             if (UNLIKELY(SvAMAGIC(argsv)))
11785                 argsv = sv_2num(argsv);
11786             infnan = UNLIKELY(isinfnansv(argsv));
11787         }
11788
11789         switch (c = *q++) {
11790
11791             /* STRINGS */
11792
11793         case 'c':
11794             if (vectorize)
11795                 goto unknown;
11796             if (infnan)
11797                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11798                            /* no va_arg() case */
11799                            SvNV_nomg(argsv), (int)c);
11800             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11801             if ((uv > 255 ||
11802                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11803                 && !IN_BYTES) {
11804                 eptr = (char*)utf8buf;
11805                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11806                 is_utf8 = TRUE;
11807             }
11808             else {
11809                 c = (char)uv;
11810                 eptr = &c;
11811                 elen = 1;
11812             }
11813             goto string;
11814
11815         case 's':
11816             if (vectorize)
11817                 goto unknown;
11818             if (args) {
11819                 eptr = va_arg(*args, char*);
11820                 if (eptr)
11821                     elen = strlen(eptr);
11822                 else {
11823                     eptr = (char *)nullstr;
11824                     elen = sizeof nullstr - 1;
11825                 }
11826             }
11827             else {
11828                 eptr = SvPV_const(argsv, elen);
11829                 if (DO_UTF8(argsv)) {
11830                     STRLEN old_precis = precis;
11831                     if (has_precis && precis < elen) {
11832                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11833                         STRLEN p = precis > ulen ? ulen : precis;
11834                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11835                                                         /* sticks at end */
11836                     }
11837                     if (width) { /* fudge width (can't fudge elen) */
11838                         if (has_precis && precis < elen)
11839                             width += precis - old_precis;
11840                         else
11841                             width +=
11842                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11843                     }
11844                     is_utf8 = TRUE;
11845                 }
11846             }
11847
11848         string:
11849             if (has_precis && precis < elen)
11850                 elen = precis;
11851             break;
11852
11853             /* INTEGERS */
11854
11855         case 'p':
11856             if (infnan) {
11857                 goto floating_point;
11858             }
11859             if (alt || vectorize)
11860                 goto unknown;
11861             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11862             base = 16;
11863             goto integer;
11864
11865         case 'D':
11866 #ifdef IV_IS_QUAD
11867             intsize = 'q';
11868 #else
11869             intsize = 'l';
11870 #endif
11871             /* FALLTHROUGH */
11872         case 'd':
11873         case 'i':
11874             if (infnan) {
11875                 goto floating_point;
11876             }
11877             if (vectorize) {
11878                 STRLEN ulen;
11879                 if (!veclen)
11880                     goto donevalidconversion;
11881                 if (vec_utf8)
11882                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11883                                         UTF8_ALLOW_ANYUV);
11884                 else {
11885                     uv = *vecstr;
11886                     ulen = 1;
11887                 }
11888                 vecstr += ulen;
11889                 veclen -= ulen;
11890                 if (plus)
11891                      esignbuf[esignlen++] = plus;
11892             }
11893             else if (args) {
11894                 switch (intsize) {
11895                 case 'c':       iv = (char)va_arg(*args, int); break;
11896                 case 'h':       iv = (short)va_arg(*args, int); break;
11897                 case 'l':       iv = va_arg(*args, long); break;
11898                 case 'V':       iv = va_arg(*args, IV); break;
11899                 case 'z':       iv = va_arg(*args, SSize_t); break;
11900 #ifdef HAS_PTRDIFF_T
11901                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11902 #endif
11903                 default:        iv = va_arg(*args, int); break;
11904 #ifdef I_STDINT
11905                 case 'j':       iv = va_arg(*args, intmax_t); break;
11906 #endif
11907                 case 'q':
11908 #if IVSIZE >= 8
11909                                 iv = va_arg(*args, Quad_t); break;
11910 #else
11911                                 goto unknown;
11912 #endif
11913                 }
11914             }
11915             else {
11916                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11917                 switch (intsize) {
11918                 case 'c':       iv = (char)tiv; break;
11919                 case 'h':       iv = (short)tiv; break;
11920                 case 'l':       iv = (long)tiv; break;
11921                 case 'V':
11922                 default:        iv = tiv; break;
11923                 case 'q':
11924 #if IVSIZE >= 8
11925                                 iv = (Quad_t)tiv; break;
11926 #else
11927                                 goto unknown;
11928 #endif
11929                 }
11930             }
11931             if ( !vectorize )   /* we already set uv above */
11932             {
11933                 if (iv >= 0) {
11934                     uv = iv;
11935                     if (plus)
11936                         esignbuf[esignlen++] = plus;
11937                 }
11938                 else {
11939                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11940                     esignbuf[esignlen++] = '-';
11941                 }
11942             }
11943             base = 10;
11944             goto integer;
11945
11946         case 'U':
11947 #ifdef IV_IS_QUAD
11948             intsize = 'q';
11949 #else
11950             intsize = 'l';
11951 #endif
11952             /* FALLTHROUGH */
11953         case 'u':
11954             base = 10;
11955             goto uns_integer;
11956
11957         case 'B':
11958         case 'b':
11959             base = 2;
11960             goto uns_integer;
11961
11962         case 'O':
11963 #ifdef IV_IS_QUAD
11964             intsize = 'q';
11965 #else
11966             intsize = 'l';
11967 #endif
11968             /* FALLTHROUGH */
11969         case 'o':
11970             base = 8;
11971             goto uns_integer;
11972
11973         case 'X':
11974         case 'x':
11975             base = 16;
11976
11977         uns_integer:
11978             if (infnan) {
11979                 goto floating_point;
11980             }
11981             if (vectorize) {
11982                 STRLEN ulen;
11983         vector:
11984                 if (!veclen)
11985                     goto donevalidconversion;
11986                 if (vec_utf8)
11987                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11988                                         UTF8_ALLOW_ANYUV);
11989                 else {
11990                     uv = *vecstr;
11991                     ulen = 1;
11992                 }
11993                 vecstr += ulen;
11994                 veclen -= ulen;
11995             }
11996             else if (args) {
11997                 switch (intsize) {
11998                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11999                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12000                 case 'l':  uv = va_arg(*args, unsigned long); break;
12001                 case 'V':  uv = va_arg(*args, UV); break;
12002                 case 'z':  uv = va_arg(*args, Size_t); break;
12003 #ifdef HAS_PTRDIFF_T
12004                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12005 #endif
12006 #ifdef I_STDINT
12007                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12008 #endif
12009                 default:   uv = va_arg(*args, unsigned); break;
12010                 case 'q':
12011 #if IVSIZE >= 8
12012                            uv = va_arg(*args, Uquad_t); break;
12013 #else
12014                            goto unknown;
12015 #endif
12016                 }
12017             }
12018             else {
12019                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12020                 switch (intsize) {
12021                 case 'c':       uv = (unsigned char)tuv; break;
12022                 case 'h':       uv = (unsigned short)tuv; break;
12023                 case 'l':       uv = (unsigned long)tuv; break;
12024                 case 'V':
12025                 default:        uv = tuv; break;
12026                 case 'q':
12027 #if IVSIZE >= 8
12028                                 uv = (Uquad_t)tuv; break;
12029 #else
12030                                 goto unknown;
12031 #endif
12032                 }
12033             }
12034
12035         integer:
12036             {
12037                 char *ptr = ebuf + sizeof ebuf;
12038                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12039                 unsigned dig;
12040                 zeros = 0;
12041
12042                 switch (base) {
12043                 case 16:
12044                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12045                     do {
12046                         dig = uv & 15;
12047                         *--ptr = p[dig];
12048                     } while (uv >>= 4);
12049                     if (tempalt) {
12050                         esignbuf[esignlen++] = '0';
12051                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12052                     }
12053                     break;
12054                 case 8:
12055                     do {
12056                         dig = uv & 7;
12057                         *--ptr = '0' + dig;
12058                     } while (uv >>= 3);
12059                     if (alt && *ptr != '0')
12060                         *--ptr = '0';
12061                     break;
12062                 case 2:
12063                     do {
12064                         dig = uv & 1;
12065                         *--ptr = '0' + dig;
12066                     } while (uv >>= 1);
12067                     if (tempalt) {
12068                         esignbuf[esignlen++] = '0';
12069                         esignbuf[esignlen++] = c;
12070                     }
12071                     break;
12072                 default:                /* it had better be ten or less */
12073                     do {
12074                         dig = uv % base;
12075                         *--ptr = '0' + dig;
12076                     } while (uv /= base);
12077                     break;
12078                 }
12079                 elen = (ebuf + sizeof ebuf) - ptr;
12080                 eptr = ptr;
12081                 if (has_precis) {
12082                     if (precis > elen)
12083                         zeros = precis - elen;
12084                     else if (precis == 0 && elen == 1 && *eptr == '0'
12085                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12086                         elen = 0;
12087
12088                 /* a precision nullifies the 0 flag. */
12089                     if (fill == '0')
12090                         fill = ' ';
12091                 }
12092             }
12093             break;
12094
12095             /* FLOATING POINT */
12096
12097         floating_point:
12098
12099         case 'F':
12100             c = 'f';            /* maybe %F isn't supported here */
12101             /* FALLTHROUGH */
12102         case 'e': case 'E':
12103         case 'f':
12104         case 'g': case 'G':
12105         case 'a': case 'A':
12106             if (vectorize)
12107                 goto unknown;
12108
12109             /* This is evil, but floating point is even more evil */
12110
12111             /* for SV-style calling, we can only get NV
12112                for C-style calling, we assume %f is double;
12113                for simplicity we allow any of %Lf, %llf, %qf for long double
12114             */
12115             switch (intsize) {
12116             case 'V':
12117 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12118                 intsize = 'q';
12119 #endif
12120                 break;
12121 /* [perl #20339] - we should accept and ignore %lf rather than die */
12122             case 'l':
12123                 /* FALLTHROUGH */
12124             default:
12125 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12126                 intsize = args ? 0 : 'q';
12127 #endif
12128                 break;
12129             case 'q':
12130 #if defined(HAS_LONG_DOUBLE)
12131                 break;
12132 #else
12133                 /* FALLTHROUGH */
12134 #endif
12135             case 'c':
12136             case 'h':
12137             case 'z':
12138             case 't':
12139             case 'j':
12140                 goto unknown;
12141             }
12142
12143             /* Now we need (long double) if intsize == 'q', else (double). */
12144             if (args) {
12145                 /* Note: do not pull NVs off the va_list with va_arg()
12146                  * (pull doubles instead) because if you have a build
12147                  * with long doubles, you would always be pulling long
12148                  * doubles, which would badly break anyone using only
12149                  * doubles (i.e. the majority of builds). In other
12150                  * words, you cannot mix doubles and long doubles.
12151                  * The only case where you can pull off long doubles
12152                  * is when the format specifier explicitly asks so with
12153                  * e.g. "%Lg". */
12154 #ifdef USE_QUADMATH
12155                 fv = intsize == 'q' ?
12156                     va_arg(*args, NV) : va_arg(*args, double);
12157                 nv = fv;
12158 #elif LONG_DOUBLESIZE > DOUBLESIZE
12159                 if (intsize == 'q') {
12160                     fv = va_arg(*args, long double);
12161                     nv = fv;
12162                 } else {
12163                     nv = va_arg(*args, double);
12164                     NV_TO_FV(nv, fv);
12165                 }
12166 #else
12167                 nv = va_arg(*args, double);
12168                 fv = nv;
12169 #endif
12170             }
12171             else
12172             {
12173                 if (!infnan) SvGETMAGIC(argsv);
12174                 nv = SvNV_nomg(argsv);
12175                 NV_TO_FV(nv, fv);
12176             }
12177
12178             need = 0;
12179             /* frexp() (or frexpl) has some unspecified behaviour for
12180              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12181             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12182                 i = PERL_INT_MIN;
12183                 (void)Perl_frexp((NV)fv, &i);
12184                 if (i == PERL_INT_MIN)
12185                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12186                 /* Do not set hexfp earlier since we want to printf
12187                  * Inf/NaN for Inf/NaN, not their hexfp. */
12188                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12189                 if (UNLIKELY(hexfp)) {
12190                     /* This seriously overshoots in most cases, but
12191                      * better the undershooting.  Firstly, all bytes
12192                      * of the NV are not mantissa, some of them are
12193                      * exponent.  Secondly, for the reasonably common
12194                      * long doubles case, the "80-bit extended", two
12195                      * or six bytes of the NV are unused. */
12196                     need +=
12197                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12198                         2 + /* "0x" */
12199                         1 + /* the very unlikely carry */
12200                         1 + /* "1" */
12201                         1 + /* "." */
12202                         2 * NVSIZE + /* 2 hexdigits for each byte */
12203                         2 + /* "p+" */
12204                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12205                         1;   /* \0 */
12206 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12207                     /* However, for the "double double", we need more.
12208                      * Since each double has their own exponent, the
12209                      * doubles may float (haha) rather far from each
12210                      * other, and the number of required bits is much
12211                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12212                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12213                      *
12214                      * Need 2 hexdigits for each byte. */
12215                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12216                     /* the size for the exponent already added */
12217 #endif
12218 #ifdef USE_LOCALE_NUMERIC
12219                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12220                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12221                             need += SvLEN(PL_numeric_radix_sv);
12222                         RESTORE_LC_NUMERIC();
12223 #endif
12224                 }
12225                 else if (i > 0) {
12226                     need = BIT_DIGITS(i);
12227                 } /* if i < 0, the number of digits is hard to predict. */
12228             }
12229             need += has_precis ? precis : 6; /* known default */
12230
12231             if (need < width)
12232                 need = width;
12233
12234 #ifdef HAS_LDBL_SPRINTF_BUG
12235             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12236                with sfio - Allen <allens@cpan.org> */
12237
12238 #  ifdef DBL_MAX
12239 #    define MY_DBL_MAX DBL_MAX
12240 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12241 #    if DOUBLESIZE >= 8
12242 #      define MY_DBL_MAX 1.7976931348623157E+308L
12243 #    else
12244 #      define MY_DBL_MAX 3.40282347E+38L
12245 #    endif
12246 #  endif
12247
12248 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12249 #    define MY_DBL_MAX_BUG 1L
12250 #  else
12251 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12252 #  endif
12253
12254 #  ifdef DBL_MIN
12255 #    define MY_DBL_MIN DBL_MIN
12256 #  else  /* XXX guessing! -Allen */
12257 #    if DOUBLESIZE >= 8
12258 #      define MY_DBL_MIN 2.2250738585072014E-308L
12259 #    else
12260 #      define MY_DBL_MIN 1.17549435E-38L
12261 #    endif
12262 #  endif
12263
12264             if ((intsize == 'q') && (c == 'f') &&
12265                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12266                 (need < DBL_DIG)) {
12267                 /* it's going to be short enough that
12268                  * long double precision is not needed */
12269
12270                 if ((fv <= 0L) && (fv >= -0L))
12271                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12272                 else {
12273                     /* would use Perl_fp_class as a double-check but not
12274                      * functional on IRIX - see perl.h comments */
12275
12276                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12277                         /* It's within the range that a double can represent */
12278 #if defined(DBL_MAX) && !defined(DBL_MIN)
12279                         if ((fv >= ((long double)1/DBL_MAX)) ||
12280                             (fv <= (-(long double)1/DBL_MAX)))
12281 #endif
12282                         fix_ldbl_sprintf_bug = TRUE;
12283                     }
12284                 }
12285                 if (fix_ldbl_sprintf_bug == TRUE) {
12286                     double temp;
12287
12288                     intsize = 0;
12289                     temp = (double)fv;
12290                     fv = (NV)temp;
12291                 }
12292             }
12293
12294 #  undef MY_DBL_MAX
12295 #  undef MY_DBL_MAX_BUG
12296 #  undef MY_DBL_MIN
12297
12298 #endif /* HAS_LDBL_SPRINTF_BUG */
12299
12300             need += 20; /* fudge factor */
12301             if (PL_efloatsize < need) {
12302                 Safefree(PL_efloatbuf);
12303                 PL_efloatsize = need + 20; /* more fudge */
12304                 Newx(PL_efloatbuf, PL_efloatsize, char);
12305                 PL_efloatbuf[0] = '\0';
12306             }
12307
12308             if ( !(width || left || plus || alt) && fill != '0'
12309                  && has_precis && intsize != 'q'        /* Shortcuts */
12310                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12311                 /* See earlier comment about buggy Gconvert when digits,
12312                    aka precis is 0  */
12313                 if ( c == 'g' && precis ) {
12314                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12315                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12316                     /* May return an empty string for digits==0 */
12317                     if (*PL_efloatbuf) {
12318                         elen = strlen(PL_efloatbuf);
12319                         goto float_converted;
12320                     }
12321                 } else if ( c == 'f' && !precis ) {
12322                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12323                         break;
12324                 }
12325             }
12326
12327             if (UNLIKELY(hexfp)) {
12328                 /* Hexadecimal floating point. */
12329                 char* p = PL_efloatbuf;
12330                 U8 vhex[VHEX_SIZE];
12331                 U8* v = vhex; /* working pointer to vhex */
12332                 U8* vend; /* pointer to one beyond last digit of vhex */
12333                 U8* vfnz = NULL; /* first non-zero */
12334                 U8* vlnz = NULL; /* last non-zero */
12335                 const bool lower = (c == 'a');
12336                 /* At output the values of vhex (up to vend) will
12337                  * be mapped through the xdig to get the actual
12338                  * human-readable xdigits. */
12339                 const char* xdig = PL_hexdigit;
12340                 int zerotail = 0; /* how many extra zeros to append */
12341                 int exponent = 0; /* exponent of the floating point input */
12342                 bool hexradix = FALSE; /* should we output the radix */
12343
12344                 /* XXX: denormals, NaN, Inf.
12345                  *
12346                  * For example with denormals, (assuming the vanilla
12347                  * 64-bit double): the exponent is zero. 1xp-1074 is
12348                  * the smallest denormal and the smallest double, it
12349                  * should be output as 0x0.0000000000001p-1022 to
12350                  * match its internal structure. */
12351
12352                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12353                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12354
12355 #if NVSIZE > DOUBLESIZE
12356 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12357                 /* In this case there is an implicit bit,
12358                  * and therefore the exponent is shifted shift by one. */
12359                 exponent--;
12360 #  else
12361                 /* In this case there is no implicit bit,
12362                  * and the exponent is shifted by the first xdigit. */
12363                 exponent -= 4;
12364 #  endif
12365 #endif
12366
12367                 if (fv < 0
12368                     || Perl_signbit(nv)
12369                   )
12370                     *p++ = '-';
12371                 else if (plus)
12372                     *p++ = plus;
12373                 *p++ = '0';
12374                 if (lower) {
12375                     *p++ = 'x';
12376                 }
12377                 else {
12378                     *p++ = 'X';
12379                     xdig += 16; /* Use uppercase hex. */
12380                 }
12381
12382                 /* Find the first non-zero xdigit. */
12383                 for (v = vhex; v < vend; v++) {
12384                     if (*v) {
12385                         vfnz = v;
12386                         break;
12387                     }
12388                 }
12389
12390                 if (vfnz) {
12391                     /* Find the last non-zero xdigit. */
12392                     for (v = vend - 1; v >= vhex; v--) {
12393                         if (*v) {
12394                             vlnz = v;
12395                             break;
12396                         }
12397                     }
12398
12399 #if NVSIZE == DOUBLESIZE
12400                     if (fv != 0.0)
12401                         exponent--;
12402 #endif
12403
12404                     if (precis > 0) {
12405                         if ((SSize_t)(precis + 1) < vend - vhex) {
12406                             bool round;
12407
12408                             v = vhex + precis + 1;
12409                             /* Round away from zero: if the tail
12410                              * beyond the precis xdigits is equal to
12411                              * or greater than 0x8000... */
12412                             round = *v > 0x8;
12413                             if (!round && *v == 0x8) {
12414                                 for (v++; v < vend; v++) {
12415                                     if (*v) {
12416                                         round = TRUE;
12417                                         break;
12418                                     }
12419                                 }
12420                             }
12421                             if (round) {
12422                                 for (v = vhex + precis; v >= vhex; v--) {
12423                                     if (*v < 0xF) {
12424                                         (*v)++;
12425                                         break;
12426                                     }
12427                                     *v = 0;
12428                                     if (v == vhex) {
12429                                         /* If the carry goes all the way to
12430                                          * the front, we need to output
12431                                          * a single '1'. This goes against
12432                                          * the "xdigit and then radix"
12433                                          * but since this is "cannot happen"
12434                                          * category, that is probably good. */
12435                                         *p++ = xdig[1];
12436                                     }
12437                                 }
12438                             }
12439                             /* The new effective "last non zero". */
12440                             vlnz = vhex + precis;
12441                         }
12442                         else {
12443                             zerotail = precis - (vlnz - vhex);
12444                         }
12445                     }
12446
12447                     v = vhex;
12448                     *p++ = xdig[*v++];
12449
12450                     /* If there are non-zero xdigits, the radix
12451                      * is output after the first one. */
12452                     if (vfnz < vlnz) {
12453                       hexradix = TRUE;
12454                     }
12455                 }
12456                 else {
12457                     *p++ = '0';
12458                     exponent = 0;
12459                     zerotail = precis;
12460                 }
12461
12462                 /* The radix is always output if precis, or if alt. */
12463                 if (precis > 0 || alt) {
12464                   hexradix = TRUE;
12465                 }
12466
12467                 if (hexradix) {
12468 #ifndef USE_LOCALE_NUMERIC
12469                         *p++ = '.';
12470 #else
12471                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12472                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12473                             STRLEN n;
12474                             const char* r = SvPV(PL_numeric_radix_sv, n);
12475                             Copy(r, p, n, char);
12476                             p += n;
12477                         }
12478                         else {
12479                             *p++ = '.';
12480                         }
12481                         RESTORE_LC_NUMERIC();
12482 #endif
12483                 }
12484
12485                 if (vlnz) {
12486                     while (v <= vlnz)
12487                         *p++ = xdig[*v++];
12488                 }
12489
12490                 if (zerotail > 0) {
12491                   while (zerotail--) {
12492                     *p++ = '0';
12493                   }
12494                 }
12495
12496                 elen = p - PL_efloatbuf;
12497                 elen += my_snprintf(p, PL_efloatsize - elen,
12498                                     "%c%+d", lower ? 'p' : 'P',
12499                                     exponent);
12500
12501                 if (elen < width) {
12502                     if (left) {
12503                         /* Pad the back with spaces. */
12504                         memset(PL_efloatbuf + elen, ' ', width - elen);
12505                     }
12506                     else if (fill == '0') {
12507                         /* Insert the zeros between the "0x" and
12508                          * the digits, otherwise we end up with
12509                          * "0000xHHH..." */
12510                         STRLEN nzero = width - elen;
12511                         char* zerox = PL_efloatbuf + 2;
12512                         Move(zerox, zerox + nzero,  elen - 2, char);
12513                         memset(zerox, fill, nzero);
12514                     }
12515                     else {
12516                         /* Move it to the right. */
12517                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12518                              elen, char);
12519                         /* Pad the front with spaces. */
12520                         memset(PL_efloatbuf, ' ', width - elen);
12521                     }
12522                     elen = width;
12523                 }
12524             }
12525             else {
12526                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12527                 if (elen) {
12528                     /* Not affecting infnan output: precision, alt, fill. */
12529                     if (elen < width) {
12530                         if (left) {
12531                             /* Pack the back with spaces. */
12532                             memset(PL_efloatbuf + elen, ' ', width - elen);
12533                         } else {
12534                             /* Move it to the right. */
12535                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12536                                  elen, char);
12537                             /* Pad the front with spaces. */
12538                             memset(PL_efloatbuf, ' ', width - elen);
12539                         }
12540                         elen = width;
12541                     }
12542                 }
12543             }
12544
12545             if (elen == 0) {
12546                 char *ptr = ebuf + sizeof ebuf;
12547                 *--ptr = '\0';
12548                 *--ptr = c;
12549 #if defined(USE_QUADMATH)
12550                 if (intsize == 'q') {
12551                     /* "g" -> "Qg" */
12552                     *--ptr = 'Q';
12553                 }
12554                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12555 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12556                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12557                  * not USE_LONG_DOUBLE and NVff.  In other words,
12558                  * this needs to work without USE_LONG_DOUBLE. */
12559                 if (intsize == 'q') {
12560                     /* Copy the one or more characters in a long double
12561                      * format before the 'base' ([efgEFG]) character to
12562                      * the format string. */
12563                     static char const ldblf[] = PERL_PRIfldbl;
12564                     char const *p = ldblf + sizeof(ldblf) - 3;
12565                     while (p >= ldblf) { *--ptr = *p--; }
12566                 }
12567 #endif
12568                 if (has_precis) {
12569                     base = precis;
12570                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12571                     *--ptr = '.';
12572                 }
12573                 if (width) {
12574                     base = width;
12575                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12576                 }
12577                 if (fill == '0')
12578                     *--ptr = fill;
12579                 if (left)
12580                     *--ptr = '-';
12581                 if (plus)
12582                     *--ptr = plus;
12583                 if (alt)
12584                     *--ptr = '#';
12585                 *--ptr = '%';
12586
12587                 /* No taint.  Otherwise we are in the strange situation
12588                  * where printf() taints but print($float) doesn't.
12589                  * --jhi */
12590
12591                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12592
12593                 /* hopefully the above makes ptr a very constrained format
12594                  * that is safe to use, even though it's not literal */
12595                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12596 #ifdef USE_QUADMATH
12597                 {
12598                     const char* qfmt = quadmath_format_single(ptr);
12599                     if (!qfmt)
12600                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12601                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12602                                              qfmt, nv);
12603                     if ((IV)elen == -1)
12604                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12605                     if (qfmt != ptr)
12606                         Safefree(qfmt);
12607                 }
12608 #elif defined(HAS_LONG_DOUBLE)
12609                 elen = ((intsize == 'q')
12610                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12611                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12612 #else
12613                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12614 #endif
12615                 GCC_DIAG_RESTORE;
12616             }
12617
12618         float_converted:
12619             eptr = PL_efloatbuf;
12620             assert((IV)elen > 0); /* here zero elen is bad */
12621
12622 #ifdef USE_LOCALE_NUMERIC
12623             /* If the decimal point character in the string is UTF-8, make the
12624              * output utf8 */
12625             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12626                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12627             {
12628                 is_utf8 = TRUE;
12629             }
12630 #endif
12631
12632             break;
12633
12634             /* SPECIAL */
12635
12636         case 'n':
12637             if (vectorize)
12638                 goto unknown;
12639             i = SvCUR(sv) - origlen;
12640             if (args) {
12641                 switch (intsize) {
12642                 case 'c':       *(va_arg(*args, char*)) = i; break;
12643                 case 'h':       *(va_arg(*args, short*)) = i; break;
12644                 default:        *(va_arg(*args, int*)) = i; break;
12645                 case 'l':       *(va_arg(*args, long*)) = i; break;
12646                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12647                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12648 #ifdef HAS_PTRDIFF_T
12649                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12650 #endif
12651 #ifdef I_STDINT
12652                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12653 #endif
12654                 case 'q':
12655 #if IVSIZE >= 8
12656                                 *(va_arg(*args, Quad_t*)) = i; break;
12657 #else
12658                                 goto unknown;
12659 #endif
12660                 }
12661             }
12662             else
12663                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12664             goto donevalidconversion;
12665
12666             /* UNKNOWN */
12667
12668         default:
12669       unknown:
12670             if (!args
12671                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12672                 && ckWARN(WARN_PRINTF))
12673             {
12674                 SV * const msg = sv_newmortal();
12675                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12676                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12677                 if (fmtstart < patend) {
12678                     const char * const fmtend = q < patend ? q : patend;
12679                     const char * f;
12680                     sv_catpvs(msg, "\"%");
12681                     for (f = fmtstart; f < fmtend; f++) {
12682                         if (isPRINT(*f)) {
12683                             sv_catpvn_nomg(msg, f, 1);
12684                         } else {
12685                             Perl_sv_catpvf(aTHX_ msg,
12686                                            "\\%03"UVof, (UV)*f & 0xFF);
12687                         }
12688                     }
12689                     sv_catpvs(msg, "\"");
12690                 } else {
12691                     sv_catpvs(msg, "end of string");
12692                 }
12693                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12694             }
12695
12696             /* output mangled stuff ... */
12697             if (c == '\0')
12698                 --q;
12699             eptr = p;
12700             elen = q - p;
12701
12702             /* ... right here, because formatting flags should not apply */
12703             SvGROW(sv, SvCUR(sv) + elen + 1);
12704             p = SvEND(sv);
12705             Copy(eptr, p, elen, char);
12706             p += elen;
12707             *p = '\0';
12708             SvCUR_set(sv, p - SvPVX_const(sv));
12709             svix = osvix;
12710             continue;   /* not "break" */
12711         }
12712
12713         if (is_utf8 != has_utf8) {
12714             if (is_utf8) {
12715                 if (SvCUR(sv))
12716                     sv_utf8_upgrade(sv);
12717             }
12718             else {
12719                 const STRLEN old_elen = elen;
12720                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12721                 sv_utf8_upgrade(nsv);
12722                 eptr = SvPVX_const(nsv);
12723                 elen = SvCUR(nsv);
12724
12725                 if (width) { /* fudge width (can't fudge elen) */
12726                     width += elen - old_elen;
12727                 }
12728                 is_utf8 = TRUE;
12729             }
12730         }
12731
12732         /* signed value that's wrapped? */
12733         assert(elen  <= ((~(STRLEN)0) >> 1));
12734         have = esignlen + zeros + elen;
12735         if (have < zeros)
12736             croak_memory_wrap();
12737
12738         need = (have > width ? have : width);
12739         gap = need - have;
12740
12741         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12742             croak_memory_wrap();
12743         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12744         p = SvEND(sv);
12745         if (esignlen && fill == '0') {
12746             int i;
12747             for (i = 0; i < (int)esignlen; i++)
12748                 *p++ = esignbuf[i];
12749         }
12750         if (gap && !left) {
12751             memset(p, fill, gap);
12752             p += gap;
12753         }
12754         if (esignlen && fill != '0') {
12755             int i;
12756             for (i = 0; i < (int)esignlen; i++)
12757                 *p++ = esignbuf[i];
12758         }
12759         if (zeros) {
12760             int i;
12761             for (i = zeros; i; i--)
12762                 *p++ = '0';
12763         }
12764         if (elen) {
12765             Copy(eptr, p, elen, char);
12766             p += elen;
12767         }
12768         if (gap && left) {
12769             memset(p, ' ', gap);
12770             p += gap;
12771         }
12772         if (vectorize) {
12773             if (veclen) {
12774                 Copy(dotstr, p, dotstrlen, char);
12775                 p += dotstrlen;
12776             }
12777             else
12778                 vectorize = FALSE;              /* done iterating over vecstr */
12779         }
12780         if (is_utf8)
12781             has_utf8 = TRUE;
12782         if (has_utf8)
12783             SvUTF8_on(sv);
12784         *p = '\0';
12785         SvCUR_set(sv, p - SvPVX_const(sv));
12786         if (vectorize) {
12787             esignlen = 0;
12788             goto vector;
12789         }
12790
12791       donevalidconversion:
12792         if (used_explicit_ix)
12793             no_redundant_warning = TRUE;
12794         if (arg_missing)
12795             S_warn_vcatpvfn_missing_argument(aTHX);
12796     }
12797
12798     /* Now that we've consumed all our printf format arguments (svix)
12799      * do we have things left on the stack that we didn't use?
12800      */
12801     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12802         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12803                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12804     }
12805
12806     SvTAINT(sv);
12807
12808     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12809                                each iteration. */
12810 }
12811
12812 /* =========================================================================
12813
12814 =head1 Cloning an interpreter
12815
12816 =cut
12817
12818 All the macros and functions in this section are for the private use of
12819 the main function, perl_clone().
12820
12821 The foo_dup() functions make an exact copy of an existing foo thingy.
12822 During the course of a cloning, a hash table is used to map old addresses
12823 to new addresses.  The table is created and manipulated with the
12824 ptr_table_* functions.
12825
12826  * =========================================================================*/
12827
12828
12829 #if defined(USE_ITHREADS)
12830
12831 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12832 #ifndef GpREFCNT_inc
12833 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12834 #endif
12835
12836
12837 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12838    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12839    If this changes, please unmerge ss_dup.
12840    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12841 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12842 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12843 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12844 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12845 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12846 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12847 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12848 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12849 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12850 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12851 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12852 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12853 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12854
12855 /* clone a parser */
12856
12857 yy_parser *
12858 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12859 {
12860     yy_parser *parser;
12861
12862     PERL_ARGS_ASSERT_PARSER_DUP;
12863
12864     if (!proto)
12865         return NULL;
12866
12867     /* look for it in the table first */
12868     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12869     if (parser)
12870         return parser;
12871
12872     /* create anew and remember what it is */
12873     Newxz(parser, 1, yy_parser);
12874     ptr_table_store(PL_ptr_table, proto, parser);
12875
12876     /* XXX these not yet duped */
12877     parser->old_parser = NULL;
12878     parser->stack = NULL;
12879     parser->ps = NULL;
12880     parser->stack_size = 0;
12881     /* XXX parser->stack->state = 0; */
12882
12883     /* XXX eventually, just Copy() most of the parser struct ? */
12884
12885     parser->lex_brackets = proto->lex_brackets;
12886     parser->lex_casemods = proto->lex_casemods;
12887     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12888                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12889     parser->lex_casestack = savepvn(proto->lex_casestack,
12890                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12891     parser->lex_defer   = proto->lex_defer;
12892     parser->lex_dojoin  = proto->lex_dojoin;
12893     parser->lex_formbrack = proto->lex_formbrack;
12894     parser->lex_inpat   = proto->lex_inpat;
12895     parser->lex_inwhat  = proto->lex_inwhat;
12896     parser->lex_op      = proto->lex_op;
12897     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12898     parser->lex_starts  = proto->lex_starts;
12899     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12900     parser->multi_close = proto->multi_close;
12901     parser->multi_open  = proto->multi_open;
12902     parser->multi_start = proto->multi_start;
12903     parser->multi_end   = proto->multi_end;
12904     parser->preambled   = proto->preambled;
12905     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12906     parser->linestr     = sv_dup_inc(proto->linestr, param);
12907     parser->expect      = proto->expect;
12908     parser->copline     = proto->copline;
12909     parser->last_lop_op = proto->last_lop_op;
12910     parser->lex_state   = proto->lex_state;
12911     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12912     /* rsfp_filters entries have fake IoDIRP() */
12913     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12914     parser->in_my       = proto->in_my;
12915     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12916     parser->error_count = proto->error_count;
12917
12918
12919     parser->linestr     = sv_dup_inc(proto->linestr, param);
12920
12921     {
12922         char * const ols = SvPVX(proto->linestr);
12923         char * const ls  = SvPVX(parser->linestr);
12924
12925         parser->bufptr      = ls + (proto->bufptr >= ols ?
12926                                     proto->bufptr -  ols : 0);
12927         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12928                                     proto->oldbufptr -  ols : 0);
12929         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12930                                     proto->oldoldbufptr -  ols : 0);
12931         parser->linestart   = ls + (proto->linestart >= ols ?
12932                                     proto->linestart -  ols : 0);
12933         parser->last_uni    = ls + (proto->last_uni >= ols ?
12934                                     proto->last_uni -  ols : 0);
12935         parser->last_lop    = ls + (proto->last_lop >= ols ?
12936                                     proto->last_lop -  ols : 0);
12937
12938         parser->bufend      = ls + SvCUR(parser->linestr);
12939     }
12940
12941     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12942
12943
12944     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12945     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12946     parser->nexttoke    = proto->nexttoke;
12947
12948     /* XXX should clone saved_curcop here, but we aren't passed
12949      * proto_perl; so do it in perl_clone_using instead */
12950
12951     return parser;
12952 }
12953
12954
12955 /* duplicate a file handle */
12956
12957 PerlIO *
12958 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12959 {
12960     PerlIO *ret;
12961
12962     PERL_ARGS_ASSERT_FP_DUP;
12963     PERL_UNUSED_ARG(type);
12964
12965     if (!fp)
12966         return (PerlIO*)NULL;
12967
12968     /* look for it in the table first */
12969     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12970     if (ret)
12971         return ret;
12972
12973     /* create anew and remember what it is */
12974 #ifdef __amigaos4__
12975     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
12976 #else
12977     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12978 #endif
12979     ptr_table_store(PL_ptr_table, fp, ret);
12980     return ret;
12981 }
12982
12983 /* duplicate a directory handle */
12984
12985 DIR *
12986 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12987 {
12988     DIR *ret;
12989
12990 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12991     DIR *pwd;
12992     const Direntry_t *dirent;
12993     char smallbuf[256];
12994     char *name = NULL;
12995     STRLEN len = 0;
12996     long pos;
12997 #endif
12998
12999     PERL_UNUSED_CONTEXT;
13000     PERL_ARGS_ASSERT_DIRP_DUP;
13001
13002     if (!dp)
13003         return (DIR*)NULL;
13004
13005     /* look for it in the table first */
13006     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13007     if (ret)
13008         return ret;
13009
13010 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13011
13012     PERL_UNUSED_ARG(param);
13013
13014     /* create anew */
13015
13016     /* open the current directory (so we can switch back) */
13017     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13018
13019     /* chdir to our dir handle and open the present working directory */
13020     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13021         PerlDir_close(pwd);
13022         return (DIR *)NULL;
13023     }
13024     /* Now we should have two dir handles pointing to the same dir. */
13025
13026     /* Be nice to the calling code and chdir back to where we were. */
13027     /* XXX If this fails, then what? */
13028     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13029
13030     /* We have no need of the pwd handle any more. */
13031     PerlDir_close(pwd);
13032
13033 #ifdef DIRNAMLEN
13034 # define d_namlen(d) (d)->d_namlen
13035 #else
13036 # define d_namlen(d) strlen((d)->d_name)
13037 #endif
13038     /* Iterate once through dp, to get the file name at the current posi-
13039        tion. Then step back. */
13040     pos = PerlDir_tell(dp);
13041     if ((dirent = PerlDir_read(dp))) {
13042         len = d_namlen(dirent);
13043         if (len <= sizeof smallbuf) name = smallbuf;
13044         else Newx(name, len, char);
13045         Move(dirent->d_name, name, len, char);
13046     }
13047     PerlDir_seek(dp, pos);
13048
13049     /* Iterate through the new dir handle, till we find a file with the
13050        right name. */
13051     if (!dirent) /* just before the end */
13052         for(;;) {
13053             pos = PerlDir_tell(ret);
13054             if (PerlDir_read(ret)) continue; /* not there yet */
13055             PerlDir_seek(ret, pos); /* step back */
13056             break;
13057         }
13058     else {
13059         const long pos0 = PerlDir_tell(ret);
13060         for(;;) {
13061             pos = PerlDir_tell(ret);
13062             if ((dirent = PerlDir_read(ret))) {
13063                 if (len == (STRLEN)d_namlen(dirent)
13064                     && memEQ(name, dirent->d_name, len)) {
13065                     /* found it */
13066                     PerlDir_seek(ret, pos); /* step back */
13067                     break;
13068                 }
13069                 /* else we are not there yet; keep iterating */
13070             }
13071             else { /* This is not meant to happen. The best we can do is
13072                       reset the iterator to the beginning. */
13073                 PerlDir_seek(ret, pos0);
13074                 break;
13075             }
13076         }
13077     }
13078 #undef d_namlen
13079
13080     if (name && name != smallbuf)
13081         Safefree(name);
13082 #endif
13083
13084 #ifdef WIN32
13085     ret = win32_dirp_dup(dp, param);
13086 #endif
13087
13088     /* pop it in the pointer table */
13089     if (ret)
13090         ptr_table_store(PL_ptr_table, dp, ret);
13091
13092     return ret;
13093 }
13094
13095 /* duplicate a typeglob */
13096
13097 GP *
13098 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13099 {
13100     GP *ret;
13101
13102     PERL_ARGS_ASSERT_GP_DUP;
13103
13104     if (!gp)
13105         return (GP*)NULL;
13106     /* look for it in the table first */
13107     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13108     if (ret)
13109         return ret;
13110
13111     /* create anew and remember what it is */
13112     Newxz(ret, 1, GP);
13113     ptr_table_store(PL_ptr_table, gp, ret);
13114
13115     /* clone */
13116     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13117        on Newxz() to do this for us.  */
13118     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13119     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13120     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13121     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13122     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13123     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13124     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13125     ret->gp_cvgen       = gp->gp_cvgen;
13126     ret->gp_line        = gp->gp_line;
13127     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13128     return ret;
13129 }
13130
13131 /* duplicate a chain of magic */
13132
13133 MAGIC *
13134 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13135 {
13136     MAGIC *mgret = NULL;
13137     MAGIC **mgprev_p = &mgret;
13138
13139     PERL_ARGS_ASSERT_MG_DUP;
13140
13141     for (; mg; mg = mg->mg_moremagic) {
13142         MAGIC *nmg;
13143
13144         if ((param->flags & CLONEf_JOIN_IN)
13145                 && mg->mg_type == PERL_MAGIC_backref)
13146             /* when joining, we let the individual SVs add themselves to
13147              * backref as needed. */
13148             continue;
13149
13150         Newx(nmg, 1, MAGIC);
13151         *mgprev_p = nmg;
13152         mgprev_p = &(nmg->mg_moremagic);
13153
13154         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13155            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13156            from the original commit adding Perl_mg_dup() - revision 4538.
13157            Similarly there is the annotation "XXX random ptr?" next to the
13158            assignment to nmg->mg_ptr.  */
13159         *nmg = *mg;
13160
13161         /* FIXME for plugins
13162         if (nmg->mg_type == PERL_MAGIC_qr) {
13163             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13164         }
13165         else
13166         */
13167         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13168                           ? nmg->mg_type == PERL_MAGIC_backref
13169                                 /* The backref AV has its reference
13170                                  * count deliberately bumped by 1 */
13171                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13172                                                     nmg->mg_obj, param))
13173                                 : sv_dup_inc(nmg->mg_obj, param)
13174                           : sv_dup(nmg->mg_obj, param);
13175
13176         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13177             if (nmg->mg_len > 0) {
13178                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13179                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13180                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13181                 {
13182                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13183                     sv_dup_inc_multiple((SV**)(namtp->table),
13184                                         (SV**)(namtp->table), NofAMmeth, param);
13185                 }
13186             }
13187             else if (nmg->mg_len == HEf_SVKEY)
13188                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13189         }
13190         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13191             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13192         }
13193     }
13194     return mgret;
13195 }
13196
13197 #endif /* USE_ITHREADS */
13198
13199 struct ptr_tbl_arena {
13200     struct ptr_tbl_arena *next;
13201     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13202 };
13203
13204 /* create a new pointer-mapping table */
13205
13206 PTR_TBL_t *
13207 Perl_ptr_table_new(pTHX)
13208 {
13209     PTR_TBL_t *tbl;
13210     PERL_UNUSED_CONTEXT;
13211
13212     Newx(tbl, 1, PTR_TBL_t);
13213     tbl->tbl_max        = 511;
13214     tbl->tbl_items      = 0;
13215     tbl->tbl_arena      = NULL;
13216     tbl->tbl_arena_next = NULL;
13217     tbl->tbl_arena_end  = NULL;
13218     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13219     return tbl;
13220 }
13221
13222 #define PTR_TABLE_HASH(ptr) \
13223   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13224
13225 /* map an existing pointer using a table */
13226
13227 STATIC PTR_TBL_ENT_t *
13228 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13229 {
13230     PTR_TBL_ENT_t *tblent;
13231     const UV hash = PTR_TABLE_HASH(sv);
13232
13233     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13234
13235     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13236     for (; tblent; tblent = tblent->next) {
13237         if (tblent->oldval == sv)
13238             return tblent;
13239     }
13240     return NULL;
13241 }
13242
13243 void *
13244 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13245 {
13246     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13247
13248     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13249     PERL_UNUSED_CONTEXT;
13250
13251     return tblent ? tblent->newval : NULL;
13252 }
13253
13254 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13255  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13256  * the core's typical use of ptr_tables in thread cloning. */
13257
13258 void
13259 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13260 {
13261     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13262
13263     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13264     PERL_UNUSED_CONTEXT;
13265
13266     if (tblent) {
13267         tblent->newval = newsv;
13268     } else {
13269         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13270
13271         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13272             struct ptr_tbl_arena *new_arena;
13273
13274             Newx(new_arena, 1, struct ptr_tbl_arena);
13275             new_arena->next = tbl->tbl_arena;
13276             tbl->tbl_arena = new_arena;
13277             tbl->tbl_arena_next = new_arena->array;
13278             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13279         }
13280
13281         tblent = tbl->tbl_arena_next++;
13282
13283         tblent->oldval = oldsv;
13284         tblent->newval = newsv;
13285         tblent->next = tbl->tbl_ary[entry];
13286         tbl->tbl_ary[entry] = tblent;
13287         tbl->tbl_items++;
13288         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13289             ptr_table_split(tbl);
13290     }
13291 }
13292
13293 /* double the hash bucket size of an existing ptr table */
13294
13295 void
13296 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13297 {
13298     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13299     const UV oldsize = tbl->tbl_max + 1;
13300     UV newsize = oldsize * 2;
13301     UV i;
13302
13303     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13304     PERL_UNUSED_CONTEXT;
13305
13306     Renew(ary, newsize, PTR_TBL_ENT_t*);
13307     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13308     tbl->tbl_max = --newsize;
13309     tbl->tbl_ary = ary;
13310     for (i=0; i < oldsize; i++, ary++) {
13311         PTR_TBL_ENT_t **entp = ary;
13312         PTR_TBL_ENT_t *ent = *ary;
13313         PTR_TBL_ENT_t **curentp;
13314         if (!ent)
13315             continue;
13316         curentp = ary + oldsize;
13317         do {
13318             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13319                 *entp = ent->next;
13320                 ent->next = *curentp;
13321                 *curentp = ent;
13322             }
13323             else
13324                 entp = &ent->next;
13325             ent = *entp;
13326         } while (ent);
13327     }
13328 }
13329
13330 /* remove all the entries from a ptr table */
13331 /* Deprecated - will be removed post 5.14 */
13332
13333 void
13334 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13335 {
13336     PERL_UNUSED_CONTEXT;
13337     if (tbl && tbl->tbl_items) {
13338         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13339
13340         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13341
13342         while (arena) {
13343             struct ptr_tbl_arena *next = arena->next;
13344
13345             Safefree(arena);
13346             arena = next;
13347         };
13348
13349         tbl->tbl_items = 0;
13350         tbl->tbl_arena = NULL;
13351         tbl->tbl_arena_next = NULL;
13352         tbl->tbl_arena_end = NULL;
13353     }
13354 }
13355
13356 /* clear and free a ptr table */
13357
13358 void
13359 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13360 {
13361     struct ptr_tbl_arena *arena;
13362
13363     PERL_UNUSED_CONTEXT;
13364
13365     if (!tbl) {
13366         return;
13367     }
13368
13369     arena = tbl->tbl_arena;
13370
13371     while (arena) {
13372         struct ptr_tbl_arena *next = arena->next;
13373
13374         Safefree(arena);
13375         arena = next;
13376     }
13377
13378     Safefree(tbl->tbl_ary);
13379     Safefree(tbl);
13380 }
13381
13382 #if defined(USE_ITHREADS)
13383
13384 void
13385 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13386 {
13387     PERL_ARGS_ASSERT_RVPV_DUP;
13388
13389     assert(!isREGEXP(sstr));
13390     if (SvROK(sstr)) {
13391         if (SvWEAKREF(sstr)) {
13392             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13393             if (param->flags & CLONEf_JOIN_IN) {
13394                 /* if joining, we add any back references individually rather
13395                  * than copying the whole backref array */
13396                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13397             }
13398         }
13399         else
13400             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13401     }
13402     else if (SvPVX_const(sstr)) {
13403         /* Has something there */
13404         if (SvLEN(sstr)) {
13405             /* Normal PV - clone whole allocated space */
13406             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13407             /* sstr may not be that normal, but actually copy on write.
13408                But we are a true, independent SV, so:  */
13409             SvIsCOW_off(dstr);
13410         }
13411         else {
13412             /* Special case - not normally malloced for some reason */
13413             if (isGV_with_GP(sstr)) {
13414                 /* Don't need to do anything here.  */
13415             }
13416             else if ((SvIsCOW(sstr))) {
13417                 /* A "shared" PV - clone it as "shared" PV */
13418                 SvPV_set(dstr,
13419                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13420                                          param)));
13421             }
13422             else {
13423                 /* Some other special case - random pointer */
13424                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13425             }
13426         }
13427     }
13428     else {
13429         /* Copy the NULL */
13430         SvPV_set(dstr, NULL);
13431     }
13432 }
13433
13434 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13435 static SV **
13436 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13437                       SSize_t items, CLONE_PARAMS *const param)
13438 {
13439     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13440
13441     while (items-- > 0) {
13442         *dest++ = sv_dup_inc(*source++, param);
13443     }
13444
13445     return dest;
13446 }
13447
13448 /* duplicate an SV of any type (including AV, HV etc) */
13449
13450 static SV *
13451 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13452 {
13453     dVAR;
13454     SV *dstr;
13455
13456     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13457
13458     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13459 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13460         abort();
13461 #endif
13462         return NULL;
13463     }
13464     /* look for it in the table first */
13465     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13466     if (dstr)
13467         return dstr;
13468
13469     if(param->flags & CLONEf_JOIN_IN) {
13470         /** We are joining here so we don't want do clone
13471             something that is bad **/
13472         if (SvTYPE(sstr) == SVt_PVHV) {
13473             const HEK * const hvname = HvNAME_HEK(sstr);
13474             if (hvname) {
13475                 /** don't clone stashes if they already exist **/
13476                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13477                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13478                 ptr_table_store(PL_ptr_table, sstr, dstr);
13479                 return dstr;
13480             }
13481         }
13482         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13483             HV *stash = GvSTASH(sstr);
13484             const HEK * hvname;
13485             if (stash && (hvname = HvNAME_HEK(stash))) {
13486                 /** don't clone GVs if they already exist **/
13487                 SV **svp;
13488                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13489                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13490                 svp = hv_fetch(
13491                         stash, GvNAME(sstr),
13492                         GvNAMEUTF8(sstr)
13493                             ? -GvNAMELEN(sstr)
13494                             :  GvNAMELEN(sstr),
13495                         0
13496                       );
13497                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13498                     ptr_table_store(PL_ptr_table, sstr, *svp);
13499                     return *svp;
13500                 }
13501             }
13502         }
13503     }
13504
13505     /* create anew and remember what it is */
13506     new_SV(dstr);
13507
13508 #ifdef DEBUG_LEAKING_SCALARS
13509     dstr->sv_debug_optype = sstr->sv_debug_optype;
13510     dstr->sv_debug_line = sstr->sv_debug_line;
13511     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13512     dstr->sv_debug_parent = (SV*)sstr;
13513     FREE_SV_DEBUG_FILE(dstr);
13514     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13515 #endif
13516
13517     ptr_table_store(PL_ptr_table, sstr, dstr);
13518
13519     /* clone */
13520     SvFLAGS(dstr)       = SvFLAGS(sstr);
13521     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13522     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13523
13524 #ifdef DEBUGGING
13525     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13526         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13527                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13528 #endif
13529
13530     /* don't clone objects whose class has asked us not to */
13531     if (SvOBJECT(sstr)
13532      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13533     {
13534         SvFLAGS(dstr) = 0;
13535         return dstr;
13536     }
13537
13538     switch (SvTYPE(sstr)) {
13539     case SVt_NULL:
13540         SvANY(dstr)     = NULL;
13541         break;
13542     case SVt_IV:
13543         SET_SVANY_FOR_BODYLESS_IV(dstr);
13544         if(SvROK(sstr)) {
13545             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13546         } else {
13547             SvIV_set(dstr, SvIVX(sstr));
13548         }
13549         break;
13550     case SVt_NV:
13551 #if NVSIZE <= IVSIZE
13552         SET_SVANY_FOR_BODYLESS_NV(dstr);
13553 #else
13554         SvANY(dstr)     = new_XNV();
13555 #endif
13556         SvNV_set(dstr, SvNVX(sstr));
13557         break;
13558     default:
13559         {
13560             /* These are all the types that need complex bodies allocating.  */
13561             void *new_body;
13562             const svtype sv_type = SvTYPE(sstr);
13563             const struct body_details *const sv_type_details
13564                 = bodies_by_type + sv_type;
13565
13566             switch (sv_type) {
13567             default:
13568                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13569                 break;
13570
13571             case SVt_PVGV:
13572             case SVt_PVIO:
13573             case SVt_PVFM:
13574             case SVt_PVHV:
13575             case SVt_PVAV:
13576             case SVt_PVCV:
13577             case SVt_PVLV:
13578             case SVt_REGEXP:
13579             case SVt_PVMG:
13580             case SVt_PVNV:
13581             case SVt_PVIV:
13582             case SVt_INVLIST:
13583             case SVt_PV:
13584                 assert(sv_type_details->body_size);
13585                 if (sv_type_details->arena) {
13586                     new_body_inline(new_body, sv_type);
13587                     new_body
13588                         = (void*)((char*)new_body - sv_type_details->offset);
13589                 } else {
13590                     new_body = new_NOARENA(sv_type_details);
13591                 }
13592             }
13593             assert(new_body);
13594             SvANY(dstr) = new_body;
13595
13596 #ifndef PURIFY
13597             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13598                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13599                  sv_type_details->copy, char);
13600 #else
13601             Copy(((char*)SvANY(sstr)),
13602                  ((char*)SvANY(dstr)),
13603                  sv_type_details->body_size + sv_type_details->offset, char);
13604 #endif
13605
13606             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13607                 && !isGV_with_GP(dstr)
13608                 && !isREGEXP(dstr)
13609                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13610                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13611
13612             /* The Copy above means that all the source (unduplicated) pointers
13613                are now in the destination.  We can check the flags and the
13614                pointers in either, but it's possible that there's less cache
13615                missing by always going for the destination.
13616                FIXME - instrument and check that assumption  */
13617             if (sv_type >= SVt_PVMG) {
13618                 if (SvMAGIC(dstr))
13619                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13620                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13621                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13622                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13623             }
13624
13625             /* The cast silences a GCC warning about unhandled types.  */
13626             switch ((int)sv_type) {
13627             case SVt_PV:
13628                 break;
13629             case SVt_PVIV:
13630                 break;
13631             case SVt_PVNV:
13632                 break;
13633             case SVt_PVMG:
13634                 break;
13635             case SVt_REGEXP:
13636               duprex:
13637                 /* FIXME for plugins */
13638                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13639                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13640                 break;
13641             case SVt_PVLV:
13642                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13643                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13644                     LvTARG(dstr) = dstr;
13645                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13646                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13647                 else
13648                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13649                 if (isREGEXP(sstr)) goto duprex;
13650             case SVt_PVGV:
13651                 /* non-GP case already handled above */
13652                 if(isGV_with_GP(sstr)) {
13653                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13654                     /* Don't call sv_add_backref here as it's going to be
13655                        created as part of the magic cloning of the symbol
13656                        table--unless this is during a join and the stash
13657                        is not actually being cloned.  */
13658                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13659                        at the point of this comment.  */
13660                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13661                     if (param->flags & CLONEf_JOIN_IN)
13662                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13663                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13664                     (void)GpREFCNT_inc(GvGP(dstr));
13665                 }
13666                 break;
13667             case SVt_PVIO:
13668                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13669                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13670                     /* I have no idea why fake dirp (rsfps)
13671                        should be treated differently but otherwise
13672                        we end up with leaks -- sky*/
13673                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13674                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13675                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13676                 } else {
13677                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13678                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13679                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13680                     if (IoDIRP(dstr)) {
13681                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13682                     } else {
13683                         NOOP;
13684                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13685                     }
13686                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13687                 }
13688                 if (IoOFP(dstr) == IoIFP(sstr))
13689                     IoOFP(dstr) = IoIFP(dstr);
13690                 else
13691                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13692                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13693                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13694                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13695                 break;
13696             case SVt_PVAV:
13697                 /* avoid cloning an empty array */
13698                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13699                     SV **dst_ary, **src_ary;
13700                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13701
13702                     src_ary = AvARRAY((const AV *)sstr);
13703                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13704                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13705                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13706                     AvALLOC((const AV *)dstr) = dst_ary;
13707                     if (AvREAL((const AV *)sstr)) {
13708                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13709                                                       param);
13710                     }
13711                     else {
13712                         while (items-- > 0)
13713                             *dst_ary++ = sv_dup(*src_ary++, param);
13714                     }
13715                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13716                     while (items-- > 0) {
13717                         *dst_ary++ = NULL;
13718                     }
13719                 }
13720                 else {
13721                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13722                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13723                     AvMAX(  (const AV *)dstr)   = -1;
13724                     AvFILLp((const AV *)dstr)   = -1;
13725                 }
13726                 break;
13727             case SVt_PVHV:
13728                 if (HvARRAY((const HV *)sstr)) {
13729                     STRLEN i = 0;
13730                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13731                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13732                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13733                     char *darray;
13734                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13735                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13736                         char);
13737                     HvARRAY(dstr) = (HE**)darray;
13738                     while (i <= sxhv->xhv_max) {
13739                         const HE * const source = HvARRAY(sstr)[i];
13740                         HvARRAY(dstr)[i] = source
13741                             ? he_dup(source, sharekeys, param) : 0;
13742                         ++i;
13743                     }
13744                     if (SvOOK(sstr)) {
13745                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13746                         struct xpvhv_aux * const daux = HvAUX(dstr);
13747                         /* This flag isn't copied.  */
13748                         SvOOK_on(dstr);
13749
13750                         if (saux->xhv_name_count) {
13751                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13752                             const I32 count
13753                              = saux->xhv_name_count < 0
13754                                 ? -saux->xhv_name_count
13755                                 :  saux->xhv_name_count;
13756                             HEK **shekp = sname + count;
13757                             HEK **dhekp;
13758                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13759                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13760                             while (shekp-- > sname) {
13761                                 dhekp--;
13762                                 *dhekp = hek_dup(*shekp, param);
13763                             }
13764                         }
13765                         else {
13766                             daux->xhv_name_u.xhvnameu_name
13767                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13768                                           param);
13769                         }
13770                         daux->xhv_name_count = saux->xhv_name_count;
13771
13772                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13773                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13774 #ifdef PERL_HASH_RANDOMIZE_KEYS
13775                         daux->xhv_rand = saux->xhv_rand;
13776                         daux->xhv_last_rand = saux->xhv_last_rand;
13777 #endif
13778                         daux->xhv_riter = saux->xhv_riter;
13779                         daux->xhv_eiter = saux->xhv_eiter
13780                             ? he_dup(saux->xhv_eiter,
13781                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13782                         /* backref array needs refcnt=2; see sv_add_backref */
13783                         daux->xhv_backreferences =
13784                             (param->flags & CLONEf_JOIN_IN)
13785                                 /* when joining, we let the individual GVs and
13786                                  * CVs add themselves to backref as
13787                                  * needed. This avoids pulling in stuff
13788                                  * that isn't required, and simplifies the
13789                                  * case where stashes aren't cloned back
13790                                  * if they already exist in the parent
13791                                  * thread */
13792                             ? NULL
13793                             : saux->xhv_backreferences
13794                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13795                                     ? MUTABLE_AV(SvREFCNT_inc(
13796                                           sv_dup_inc((const SV *)
13797                                             saux->xhv_backreferences, param)))
13798                                     : MUTABLE_AV(sv_dup((const SV *)
13799                                             saux->xhv_backreferences, param))
13800                                 : 0;
13801
13802                         daux->xhv_mro_meta = saux->xhv_mro_meta
13803                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13804                             : 0;
13805
13806                         /* Record stashes for possible cloning in Perl_clone(). */
13807                         if (HvNAME(sstr))
13808                             av_push(param->stashes, dstr);
13809                     }
13810                 }
13811                 else
13812                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13813                 break;
13814             case SVt_PVCV:
13815                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13816                     CvDEPTH(dstr) = 0;
13817                 }
13818                 /* FALLTHROUGH */
13819             case SVt_PVFM:
13820                 /* NOTE: not refcounted */
13821                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13822                     hv_dup(CvSTASH(dstr), param);
13823                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13824                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13825                 if (!CvISXSUB(dstr)) {
13826                     OP_REFCNT_LOCK;
13827                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13828                     OP_REFCNT_UNLOCK;
13829                     CvSLABBED_off(dstr);
13830                 } else if (CvCONST(dstr)) {
13831                     CvXSUBANY(dstr).any_ptr =
13832                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13833                 }
13834                 assert(!CvSLABBED(dstr));
13835                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13836                 if (CvNAMED(dstr))
13837                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13838                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13839                 /* don't dup if copying back - CvGV isn't refcounted, so the
13840                  * duped GV may never be freed. A bit of a hack! DAPM */
13841                 else
13842                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13843                     CvCVGV_RC(dstr)
13844                     ? gv_dup_inc(CvGV(sstr), param)
13845                     : (param->flags & CLONEf_JOIN_IN)
13846                         ? NULL
13847                         : gv_dup(CvGV(sstr), param);
13848
13849                 if (!CvISXSUB(sstr)) {
13850                     PADLIST * padlist = CvPADLIST(sstr);
13851                     if(padlist)
13852                         padlist = padlist_dup(padlist, param);
13853                     CvPADLIST_set(dstr, padlist);
13854                 } else
13855 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13856                     PoisonPADLIST(dstr);
13857
13858                 CvOUTSIDE(dstr) =
13859                     CvWEAKOUTSIDE(sstr)
13860                     ? cv_dup(    CvOUTSIDE(dstr), param)
13861                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13862                 break;
13863             }
13864         }
13865     }
13866
13867     return dstr;
13868  }
13869
13870 SV *
13871 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13872 {
13873     PERL_ARGS_ASSERT_SV_DUP_INC;
13874     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13875 }
13876
13877 SV *
13878 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13879 {
13880     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13881     PERL_ARGS_ASSERT_SV_DUP;
13882
13883     /* Track every SV that (at least initially) had a reference count of 0.
13884        We need to do this by holding an actual reference to it in this array.
13885        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13886        (akin to the stashes hash, and the perl stack), we come unstuck if
13887        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13888        thread) is manipulated in a CLONE method, because CLONE runs before the
13889        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13890        (and fix things up by giving each a reference via the temps stack).
13891        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13892        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13893        before the walk of unreferenced happens and a reference to that is SV
13894        added to the temps stack. At which point we have the same SV considered
13895        to be in use, and free to be re-used. Not good.
13896     */
13897     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13898         assert(param->unreferenced);
13899         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13900     }
13901
13902     return dstr;
13903 }
13904
13905 /* duplicate a context */
13906
13907 PERL_CONTEXT *
13908 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13909 {
13910     PERL_CONTEXT *ncxs;
13911
13912     PERL_ARGS_ASSERT_CX_DUP;
13913
13914     if (!cxs)
13915         return (PERL_CONTEXT*)NULL;
13916
13917     /* look for it in the table first */
13918     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13919     if (ncxs)
13920         return ncxs;
13921
13922     /* create anew and remember what it is */
13923     Newx(ncxs, max + 1, PERL_CONTEXT);
13924     ptr_table_store(PL_ptr_table, cxs, ncxs);
13925     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13926
13927     while (ix >= 0) {
13928         PERL_CONTEXT * const ncx = &ncxs[ix];
13929         if (CxTYPE(ncx) == CXt_SUBST) {
13930             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13931         }
13932         else {
13933             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13934             switch (CxTYPE(ncx)) {
13935             case CXt_SUB:
13936                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13937                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13938                                            : cv_dup(ncx->blk_sub.cv,param));
13939                 if(CxHASARGS(ncx)){
13940                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13941                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13942                 } else {
13943                     ncx->blk_sub.argarray = NULL;
13944                     ncx->blk_sub.savearray = NULL;
13945                 }
13946                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13947                                            ncx->blk_sub.oldcomppad);
13948                 break;
13949             case CXt_EVAL:
13950                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13951                                                       param);
13952                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13953                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13954                 break;
13955             case CXt_LOOP_LAZYSV:
13956                 ncx->blk_loop.state_u.lazysv.end
13957                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13958                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
13959                    duplication code instead.
13960                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
13961                    actually being the same function, and (2) order
13962                    equivalence of the two unions.
13963                    We can assert the later [but only at run time :-(]  */
13964                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13965                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13966                 /* FALLTHROUGH */
13967             case CXt_LOOP_FOR:
13968                 ncx->blk_loop.state_u.ary.ary
13969                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13970                 /* FALLTHROUGH */
13971             case CXt_LOOP_LAZYIV:
13972             case CXt_LOOP_PLAIN:
13973                 /* code common to all CXt_LOOP_* types */
13974                 if (CxPADLOOP(ncx)) {
13975                     ncx->blk_loop.itervar_u.oldcomppad
13976                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13977                                         ncx->blk_loop.itervar_u.oldcomppad);
13978                 } else {
13979                     ncx->blk_loop.itervar_u.gv
13980                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13981                                     param);
13982                 }
13983                 break;
13984             case CXt_FORMAT:
13985                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13986                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13987                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13988                                                      param);
13989                 break;
13990             case CXt_BLOCK:
13991             case CXt_NULL:
13992             case CXt_WHEN:
13993             case CXt_GIVEN:
13994                 break;
13995             }
13996         }
13997         --ix;
13998     }
13999     return ncxs;
14000 }
14001
14002 /* duplicate a stack info structure */
14003
14004 PERL_SI *
14005 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14006 {
14007     PERL_SI *nsi;
14008
14009     PERL_ARGS_ASSERT_SI_DUP;
14010
14011     if (!si)
14012         return (PERL_SI*)NULL;
14013
14014     /* look for it in the table first */
14015     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14016     if (nsi)
14017         return nsi;
14018
14019     /* create anew and remember what it is */
14020     Newxz(nsi, 1, PERL_SI);
14021     ptr_table_store(PL_ptr_table, si, nsi);
14022
14023     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14024     nsi->si_cxix        = si->si_cxix;
14025     nsi->si_cxmax       = si->si_cxmax;
14026     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14027     nsi->si_type        = si->si_type;
14028     nsi->si_prev        = si_dup(si->si_prev, param);
14029     nsi->si_next        = si_dup(si->si_next, param);
14030     nsi->si_markoff     = si->si_markoff;
14031
14032     return nsi;
14033 }
14034
14035 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14036 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14037 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14038 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14039 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14040 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14041 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14042 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14043 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14044 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14045 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14046 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14047 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14048 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14049 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14050 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14051
14052 /* XXXXX todo */
14053 #define pv_dup_inc(p)   SAVEPV(p)
14054 #define pv_dup(p)       SAVEPV(p)
14055 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14056
14057 /* map any object to the new equivent - either something in the
14058  * ptr table, or something in the interpreter structure
14059  */
14060
14061 void *
14062 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14063 {
14064     void *ret;
14065
14066     PERL_ARGS_ASSERT_ANY_DUP;
14067
14068     if (!v)
14069         return (void*)NULL;
14070
14071     /* look for it in the table first */
14072     ret = ptr_table_fetch(PL_ptr_table, v);
14073     if (ret)
14074         return ret;
14075
14076     /* see if it is part of the interpreter structure */
14077     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14078         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14079     else {
14080         ret = v;
14081     }
14082
14083     return ret;
14084 }
14085
14086 /* duplicate the save stack */
14087
14088 ANY *
14089 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14090 {
14091     dVAR;
14092     ANY * const ss      = proto_perl->Isavestack;
14093     const I32 max       = proto_perl->Isavestack_max;
14094     I32 ix              = proto_perl->Isavestack_ix;
14095     ANY *nss;
14096     const SV *sv;
14097     const GV *gv;
14098     const AV *av;
14099     const HV *hv;
14100     void* ptr;
14101     int intval;
14102     long longval;
14103     GP *gp;
14104     IV iv;
14105     I32 i;
14106     char *c = NULL;
14107     void (*dptr) (void*);
14108     void (*dxptr) (pTHX_ void*);
14109
14110     PERL_ARGS_ASSERT_SS_DUP;
14111
14112     Newxz(nss, max, ANY);
14113
14114     while (ix > 0) {
14115         const UV uv = POPUV(ss,ix);
14116         const U8 type = (U8)uv & SAVE_MASK;
14117
14118         TOPUV(nss,ix) = uv;
14119         switch (type) {
14120         case SAVEt_CLEARSV:
14121         case SAVEt_CLEARPADRANGE:
14122             break;
14123         case SAVEt_HELEM:               /* hash element */
14124         case SAVEt_SV:                  /* scalar reference */
14125             sv = (const SV *)POPPTR(ss,ix);
14126             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14127             /* FALLTHROUGH */
14128         case SAVEt_ITEM:                        /* normal string */
14129         case SAVEt_GVSV:                        /* scalar slot in GV */
14130             sv = (const SV *)POPPTR(ss,ix);
14131             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14132             if (type == SAVEt_SV)
14133                 break;
14134             /* FALLTHROUGH */
14135         case SAVEt_FREESV:
14136         case SAVEt_MORTALIZESV:
14137         case SAVEt_READONLY_OFF:
14138             sv = (const SV *)POPPTR(ss,ix);
14139             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14140             break;
14141         case SAVEt_FREEPADNAME:
14142             ptr = POPPTR(ss,ix);
14143             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14144             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14145             break;
14146         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14147             c = (char*)POPPTR(ss,ix);
14148             TOPPTR(nss,ix) = savesharedpv(c);
14149             ptr = POPPTR(ss,ix);
14150             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14151             break;
14152         case SAVEt_GENERIC_SVREF:               /* generic sv */
14153         case SAVEt_SVREF:                       /* scalar reference */
14154             sv = (const SV *)POPPTR(ss,ix);
14155             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14156             if (type == SAVEt_SVREF)
14157                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14158             ptr = POPPTR(ss,ix);
14159             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14160             break;
14161         case SAVEt_GVSLOT:              /* any slot in GV */
14162             sv = (const SV *)POPPTR(ss,ix);
14163             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14164             ptr = POPPTR(ss,ix);
14165             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14166             sv = (const SV *)POPPTR(ss,ix);
14167             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14168             break;
14169         case SAVEt_HV:                          /* hash reference */
14170         case SAVEt_AV:                          /* array reference */
14171             sv = (const SV *) POPPTR(ss,ix);
14172             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14173             /* FALLTHROUGH */
14174         case SAVEt_COMPPAD:
14175         case SAVEt_NSTAB:
14176             sv = (const SV *) POPPTR(ss,ix);
14177             TOPPTR(nss,ix) = sv_dup(sv, param);
14178             break;
14179         case SAVEt_INT:                         /* int reference */
14180             ptr = POPPTR(ss,ix);
14181             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14182             intval = (int)POPINT(ss,ix);
14183             TOPINT(nss,ix) = intval;
14184             break;
14185         case SAVEt_LONG:                        /* long reference */
14186             ptr = POPPTR(ss,ix);
14187             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14188             longval = (long)POPLONG(ss,ix);
14189             TOPLONG(nss,ix) = longval;
14190             break;
14191         case SAVEt_I32:                         /* I32 reference */
14192             ptr = POPPTR(ss,ix);
14193             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14194             i = POPINT(ss,ix);
14195             TOPINT(nss,ix) = i;
14196             break;
14197         case SAVEt_IV:                          /* IV reference */
14198         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14199             ptr = POPPTR(ss,ix);
14200             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14201             iv = POPIV(ss,ix);
14202             TOPIV(nss,ix) = iv;
14203             break;
14204         case SAVEt_HPTR:                        /* HV* reference */
14205         case SAVEt_APTR:                        /* AV* reference */
14206         case SAVEt_SPTR:                        /* SV* reference */
14207             ptr = POPPTR(ss,ix);
14208             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14209             sv = (const SV *)POPPTR(ss,ix);
14210             TOPPTR(nss,ix) = sv_dup(sv, param);
14211             break;
14212         case SAVEt_VPTR:                        /* random* reference */
14213             ptr = POPPTR(ss,ix);
14214             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14215             /* FALLTHROUGH */
14216         case SAVEt_INT_SMALL:
14217         case SAVEt_I32_SMALL:
14218         case SAVEt_I16:                         /* I16 reference */
14219         case SAVEt_I8:                          /* I8 reference */
14220         case SAVEt_BOOL:
14221             ptr = POPPTR(ss,ix);
14222             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14223             break;
14224         case SAVEt_GENERIC_PVREF:               /* generic char* */
14225         case SAVEt_PPTR:                        /* char* reference */
14226             ptr = POPPTR(ss,ix);
14227             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14228             c = (char*)POPPTR(ss,ix);
14229             TOPPTR(nss,ix) = pv_dup(c);
14230             break;
14231         case SAVEt_GP:                          /* scalar reference */
14232             gp = (GP*)POPPTR(ss,ix);
14233             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14234             (void)GpREFCNT_inc(gp);
14235             gv = (const GV *)POPPTR(ss,ix);
14236             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14237             break;
14238         case SAVEt_FREEOP:
14239             ptr = POPPTR(ss,ix);
14240             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14241                 /* these are assumed to be refcounted properly */
14242                 OP *o;
14243                 switch (((OP*)ptr)->op_type) {
14244                 case OP_LEAVESUB:
14245                 case OP_LEAVESUBLV:
14246                 case OP_LEAVEEVAL:
14247                 case OP_LEAVE:
14248                 case OP_SCOPE:
14249                 case OP_LEAVEWRITE:
14250                     TOPPTR(nss,ix) = ptr;
14251                     o = (OP*)ptr;
14252                     OP_REFCNT_LOCK;
14253                     (void) OpREFCNT_inc(o);
14254                     OP_REFCNT_UNLOCK;
14255                     break;
14256                 default:
14257                     TOPPTR(nss,ix) = NULL;
14258                     break;
14259                 }
14260             }
14261             else
14262                 TOPPTR(nss,ix) = NULL;
14263             break;
14264         case SAVEt_FREECOPHH:
14265             ptr = POPPTR(ss,ix);
14266             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14267             break;
14268         case SAVEt_ADELETE:
14269             av = (const AV *)POPPTR(ss,ix);
14270             TOPPTR(nss,ix) = av_dup_inc(av, param);
14271             i = POPINT(ss,ix);
14272             TOPINT(nss,ix) = i;
14273             break;
14274         case SAVEt_DELETE:
14275             hv = (const HV *)POPPTR(ss,ix);
14276             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14277             i = POPINT(ss,ix);
14278             TOPINT(nss,ix) = i;
14279             /* FALLTHROUGH */
14280         case SAVEt_FREEPV:
14281             c = (char*)POPPTR(ss,ix);
14282             TOPPTR(nss,ix) = pv_dup_inc(c);
14283             break;
14284         case SAVEt_STACK_POS:           /* Position on Perl stack */
14285             i = POPINT(ss,ix);
14286             TOPINT(nss,ix) = i;
14287             break;
14288         case SAVEt_DESTRUCTOR:
14289             ptr = POPPTR(ss,ix);
14290             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14291             dptr = POPDPTR(ss,ix);
14292             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14293                                         any_dup(FPTR2DPTR(void *, dptr),
14294                                                 proto_perl));
14295             break;
14296         case SAVEt_DESTRUCTOR_X:
14297             ptr = POPPTR(ss,ix);
14298             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14299             dxptr = POPDXPTR(ss,ix);
14300             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14301                                          any_dup(FPTR2DPTR(void *, dxptr),
14302                                                  proto_perl));
14303             break;
14304         case SAVEt_REGCONTEXT:
14305         case SAVEt_ALLOC:
14306             ix -= uv >> SAVE_TIGHT_SHIFT;
14307             break;
14308         case SAVEt_AELEM:               /* array element */
14309             sv = (const SV *)POPPTR(ss,ix);
14310             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14311             i = POPINT(ss,ix);
14312             TOPINT(nss,ix) = i;
14313             av = (const AV *)POPPTR(ss,ix);
14314             TOPPTR(nss,ix) = av_dup_inc(av, param);
14315             break;
14316         case SAVEt_OP:
14317             ptr = POPPTR(ss,ix);
14318             TOPPTR(nss,ix) = ptr;
14319             break;
14320         case SAVEt_HINTS:
14321             ptr = POPPTR(ss,ix);
14322             ptr = cophh_copy((COPHH*)ptr);
14323             TOPPTR(nss,ix) = ptr;
14324             i = POPINT(ss,ix);
14325             TOPINT(nss,ix) = i;
14326             if (i & HINT_LOCALIZE_HH) {
14327                 hv = (const HV *)POPPTR(ss,ix);
14328                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14329             }
14330             break;
14331         case SAVEt_PADSV_AND_MORTALIZE:
14332             longval = (long)POPLONG(ss,ix);
14333             TOPLONG(nss,ix) = longval;
14334             ptr = POPPTR(ss,ix);
14335             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14336             sv = (const SV *)POPPTR(ss,ix);
14337             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14338             break;
14339         case SAVEt_SET_SVFLAGS:
14340             i = POPINT(ss,ix);
14341             TOPINT(nss,ix) = i;
14342             i = POPINT(ss,ix);
14343             TOPINT(nss,ix) = i;
14344             sv = (const SV *)POPPTR(ss,ix);
14345             TOPPTR(nss,ix) = sv_dup(sv, param);
14346             break;
14347         case SAVEt_COMPILE_WARNINGS:
14348             ptr = POPPTR(ss,ix);
14349             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14350             break;
14351         case SAVEt_PARSER:
14352             ptr = POPPTR(ss,ix);
14353             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14354             break;
14355         default:
14356             Perl_croak(aTHX_
14357                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14358         }
14359     }
14360
14361     return nss;
14362 }
14363
14364
14365 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14366  * flag to the result. This is done for each stash before cloning starts,
14367  * so we know which stashes want their objects cloned */
14368
14369 static void
14370 do_mark_cloneable_stash(pTHX_ SV *const sv)
14371 {
14372     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14373     if (hvname) {
14374         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14375         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14376         if (cloner && GvCV(cloner)) {
14377             dSP;
14378             UV status;
14379
14380             ENTER;
14381             SAVETMPS;
14382             PUSHMARK(SP);
14383             mXPUSHs(newSVhek(hvname));
14384             PUTBACK;
14385             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14386             SPAGAIN;
14387             status = POPu;
14388             PUTBACK;
14389             FREETMPS;
14390             LEAVE;
14391             if (status)
14392                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14393         }
14394     }
14395 }
14396
14397
14398
14399 /*
14400 =for apidoc perl_clone
14401
14402 Create and return a new interpreter by cloning the current one.
14403
14404 C<perl_clone> takes these flags as parameters:
14405
14406 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14407 without it we only clone the data and zero the stacks,
14408 with it we copy the stacks and the new perl interpreter is
14409 ready to run at the exact same point as the previous one.
14410 The pseudo-fork code uses C<COPY_STACKS> while the
14411 threads->create doesn't.
14412
14413 C<CLONEf_KEEP_PTR_TABLE> -
14414 C<perl_clone> keeps a ptr_table with the pointer of the old
14415 variable as a key and the new variable as a value,
14416 this allows it to check if something has been cloned and not
14417 clone it again but rather just use the value and increase the
14418 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14419 the ptr_table using the function
14420 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14421 reason to keep it around is if you want to dup some of your own
14422 variable who are outside the graph perl scans, an example of this
14423 code is in F<threads.xs> create.
14424
14425 C<CLONEf_CLONE_HOST> -
14426 This is a win32 thing, it is ignored on unix, it tells perls
14427 win32host code (which is c++) to clone itself, this is needed on
14428 win32 if you want to run two threads at the same time,
14429 if you just want to do some stuff in a separate perl interpreter
14430 and then throw it away and return to the original one,
14431 you don't need to do anything.
14432
14433 =cut
14434 */
14435
14436 /* XXX the above needs expanding by someone who actually understands it ! */
14437 EXTERN_C PerlInterpreter *
14438 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14439
14440 PerlInterpreter *
14441 perl_clone(PerlInterpreter *proto_perl, UV flags)
14442 {
14443    dVAR;
14444 #ifdef PERL_IMPLICIT_SYS
14445
14446     PERL_ARGS_ASSERT_PERL_CLONE;
14447
14448    /* perlhost.h so we need to call into it
14449    to clone the host, CPerlHost should have a c interface, sky */
14450
14451 #ifndef __amigaos4__
14452    if (flags & CLONEf_CLONE_HOST) {
14453        return perl_clone_host(proto_perl,flags);
14454    }
14455 #endif
14456    return perl_clone_using(proto_perl, flags,
14457                             proto_perl->IMem,
14458                             proto_perl->IMemShared,
14459                             proto_perl->IMemParse,
14460                             proto_perl->IEnv,
14461                             proto_perl->IStdIO,
14462                             proto_perl->ILIO,
14463                             proto_perl->IDir,
14464                             proto_perl->ISock,
14465                             proto_perl->IProc);
14466 }
14467
14468 PerlInterpreter *
14469 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14470                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14471                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14472                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14473                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14474                  struct IPerlProc* ipP)
14475 {
14476     /* XXX many of the string copies here can be optimized if they're
14477      * constants; they need to be allocated as common memory and just
14478      * their pointers copied. */
14479
14480     IV i;
14481     CLONE_PARAMS clone_params;
14482     CLONE_PARAMS* const param = &clone_params;
14483
14484     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14485
14486     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14487 #else           /* !PERL_IMPLICIT_SYS */
14488     IV i;
14489     CLONE_PARAMS clone_params;
14490     CLONE_PARAMS* param = &clone_params;
14491     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14492
14493     PERL_ARGS_ASSERT_PERL_CLONE;
14494 #endif          /* PERL_IMPLICIT_SYS */
14495
14496     /* for each stash, determine whether its objects should be cloned */
14497     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14498     PERL_SET_THX(my_perl);
14499
14500 #ifdef DEBUGGING
14501     PoisonNew(my_perl, 1, PerlInterpreter);
14502     PL_op = NULL;
14503     PL_curcop = NULL;
14504     PL_defstash = NULL; /* may be used by perl malloc() */
14505     PL_markstack = 0;
14506     PL_scopestack = 0;
14507     PL_scopestack_name = 0;
14508     PL_savestack = 0;
14509     PL_savestack_ix = 0;
14510     PL_savestack_max = -1;
14511     PL_sig_pending = 0;
14512     PL_parser = NULL;
14513     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14514     Zero(&PL_padname_undef, 1, PADNAME);
14515     Zero(&PL_padname_const, 1, PADNAME);
14516 #  ifdef DEBUG_LEAKING_SCALARS
14517     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14518 #  endif
14519 #  ifdef PERL_TRACE_OPS
14520     Zero(PL_op_exec_cnt, OP_max+2, UV);
14521 #  endif
14522 #else   /* !DEBUGGING */
14523     Zero(my_perl, 1, PerlInterpreter);
14524 #endif  /* DEBUGGING */
14525
14526 #ifdef PERL_IMPLICIT_SYS
14527     /* host pointers */
14528     PL_Mem              = ipM;
14529     PL_MemShared        = ipMS;
14530     PL_MemParse         = ipMP;
14531     PL_Env              = ipE;
14532     PL_StdIO            = ipStd;
14533     PL_LIO              = ipLIO;
14534     PL_Dir              = ipD;
14535     PL_Sock             = ipS;
14536     PL_Proc             = ipP;
14537 #endif          /* PERL_IMPLICIT_SYS */
14538
14539
14540     param->flags = flags;
14541     /* Nothing in the core code uses this, but we make it available to
14542        extensions (using mg_dup).  */
14543     param->proto_perl = proto_perl;
14544     /* Likely nothing will use this, but it is initialised to be consistent
14545        with Perl_clone_params_new().  */
14546     param->new_perl = my_perl;
14547     param->unreferenced = NULL;
14548
14549
14550     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14551
14552     PL_body_arenas = NULL;
14553     Zero(&PL_body_roots, 1, PL_body_roots);
14554     
14555     PL_sv_count         = 0;
14556     PL_sv_root          = NULL;
14557     PL_sv_arenaroot     = NULL;
14558
14559     PL_debug            = proto_perl->Idebug;
14560
14561     /* dbargs array probably holds garbage */
14562     PL_dbargs           = NULL;
14563
14564     PL_compiling = proto_perl->Icompiling;
14565
14566     /* pseudo environmental stuff */
14567     PL_origargc         = proto_perl->Iorigargc;
14568     PL_origargv         = proto_perl->Iorigargv;
14569
14570 #ifndef NO_TAINT_SUPPORT
14571     /* Set tainting stuff before PerlIO_debug can possibly get called */
14572     PL_tainting         = proto_perl->Itainting;
14573     PL_taint_warn       = proto_perl->Itaint_warn;
14574 #else
14575     PL_tainting         = FALSE;
14576     PL_taint_warn       = FALSE;
14577 #endif
14578
14579     PL_minus_c          = proto_perl->Iminus_c;
14580
14581     PL_localpatches     = proto_perl->Ilocalpatches;
14582     PL_splitstr         = proto_perl->Isplitstr;
14583     PL_minus_n          = proto_perl->Iminus_n;
14584     PL_minus_p          = proto_perl->Iminus_p;
14585     PL_minus_l          = proto_perl->Iminus_l;
14586     PL_minus_a          = proto_perl->Iminus_a;
14587     PL_minus_E          = proto_perl->Iminus_E;
14588     PL_minus_F          = proto_perl->Iminus_F;
14589     PL_doswitches       = proto_perl->Idoswitches;
14590     PL_dowarn           = proto_perl->Idowarn;
14591 #ifdef PERL_SAWAMPERSAND
14592     PL_sawampersand     = proto_perl->Isawampersand;
14593 #endif
14594     PL_unsafe           = proto_perl->Iunsafe;
14595     PL_perldb           = proto_perl->Iperldb;
14596     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14597     PL_exit_flags       = proto_perl->Iexit_flags;
14598
14599     /* XXX time(&PL_basetime) when asked for? */
14600     PL_basetime         = proto_perl->Ibasetime;
14601
14602     PL_maxsysfd         = proto_perl->Imaxsysfd;
14603     PL_statusvalue      = proto_perl->Istatusvalue;
14604 #ifdef __VMS
14605     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14606 #else
14607     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14608 #endif
14609
14610     /* RE engine related */
14611     PL_regmatch_slab    = NULL;
14612     PL_reg_curpm        = NULL;
14613
14614     PL_sub_generation   = proto_perl->Isub_generation;
14615
14616     /* funky return mechanisms */
14617     PL_forkprocess      = proto_perl->Iforkprocess;
14618
14619     /* internal state */
14620     PL_maxo             = proto_perl->Imaxo;
14621
14622     PL_main_start       = proto_perl->Imain_start;
14623     PL_eval_root        = proto_perl->Ieval_root;
14624     PL_eval_start       = proto_perl->Ieval_start;
14625
14626     PL_filemode         = proto_perl->Ifilemode;
14627     PL_lastfd           = proto_perl->Ilastfd;
14628     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14629     PL_Argv             = NULL;
14630     PL_Cmd              = NULL;
14631     PL_gensym           = proto_perl->Igensym;
14632
14633     PL_laststatval      = proto_perl->Ilaststatval;
14634     PL_laststype        = proto_perl->Ilaststype;
14635     PL_mess_sv          = NULL;
14636
14637     PL_profiledata      = NULL;
14638
14639     PL_generation       = proto_perl->Igeneration;
14640
14641     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14642     PL_in_clean_all     = proto_perl->Iin_clean_all;
14643
14644     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14645     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14646     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14647     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14648     PL_nomemok          = proto_perl->Inomemok;
14649     PL_an               = proto_perl->Ian;
14650     PL_evalseq          = proto_perl->Ievalseq;
14651     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14652     PL_origalen         = proto_perl->Iorigalen;
14653
14654     PL_sighandlerp      = proto_perl->Isighandlerp;
14655
14656     PL_runops           = proto_perl->Irunops;
14657
14658     PL_subline          = proto_perl->Isubline;
14659
14660     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14661
14662 #ifdef FCRYPT
14663     PL_cryptseen        = proto_perl->Icryptseen;
14664 #endif
14665
14666 #ifdef USE_LOCALE_COLLATE
14667     PL_collation_ix     = proto_perl->Icollation_ix;
14668     PL_collation_standard       = proto_perl->Icollation_standard;
14669     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14670     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14671 #endif /* USE_LOCALE_COLLATE */
14672
14673 #ifdef USE_LOCALE_NUMERIC
14674     PL_numeric_standard = proto_perl->Inumeric_standard;
14675     PL_numeric_local    = proto_perl->Inumeric_local;
14676 #endif /* !USE_LOCALE_NUMERIC */
14677
14678     /* Did the locale setup indicate UTF-8? */
14679     PL_utf8locale       = proto_perl->Iutf8locale;
14680     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14681     /* Unicode features (see perlrun/-C) */
14682     PL_unicode          = proto_perl->Iunicode;
14683
14684     /* Pre-5.8 signals control */
14685     PL_signals          = proto_perl->Isignals;
14686
14687     /* times() ticks per second */
14688     PL_clocktick        = proto_perl->Iclocktick;
14689
14690     /* Recursion stopper for PerlIO_find_layer */
14691     PL_in_load_module   = proto_perl->Iin_load_module;
14692
14693     /* sort() routine */
14694     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14695
14696     /* Not really needed/useful since the reenrant_retint is "volatile",
14697      * but do it for consistency's sake. */
14698     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14699
14700     /* Hooks to shared SVs and locks. */
14701     PL_sharehook        = proto_perl->Isharehook;
14702     PL_lockhook         = proto_perl->Ilockhook;
14703     PL_unlockhook       = proto_perl->Iunlockhook;
14704     PL_threadhook       = proto_perl->Ithreadhook;
14705     PL_destroyhook      = proto_perl->Idestroyhook;
14706     PL_signalhook       = proto_perl->Isignalhook;
14707
14708     PL_globhook         = proto_perl->Iglobhook;
14709
14710     /* swatch cache */
14711     PL_last_swash_hv    = NULL; /* reinits on demand */
14712     PL_last_swash_klen  = 0;
14713     PL_last_swash_key[0]= '\0';
14714     PL_last_swash_tmps  = (U8*)NULL;
14715     PL_last_swash_slen  = 0;
14716
14717     PL_srand_called     = proto_perl->Isrand_called;
14718     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14719
14720     if (flags & CLONEf_COPY_STACKS) {
14721         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14722         PL_tmps_ix              = proto_perl->Itmps_ix;
14723         PL_tmps_max             = proto_perl->Itmps_max;
14724         PL_tmps_floor           = proto_perl->Itmps_floor;
14725
14726         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14727          * NOTE: unlike the others! */
14728         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14729         PL_scopestack_max       = proto_perl->Iscopestack_max;
14730
14731         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14732          * NOTE: unlike the others! */
14733         PL_savestack_ix         = proto_perl->Isavestack_ix;
14734         PL_savestack_max        = proto_perl->Isavestack_max;
14735     }
14736
14737     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14738     PL_top_env          = &PL_start_env;
14739
14740     PL_op               = proto_perl->Iop;
14741
14742     PL_Sv               = NULL;
14743     PL_Xpv              = (XPV*)NULL;
14744     my_perl->Ina        = proto_perl->Ina;
14745
14746     PL_statbuf          = proto_perl->Istatbuf;
14747     PL_statcache        = proto_perl->Istatcache;
14748
14749 #ifndef NO_TAINT_SUPPORT
14750     PL_tainted          = proto_perl->Itainted;
14751 #else
14752     PL_tainted          = FALSE;
14753 #endif
14754     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14755
14756     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14757
14758     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14759     PL_restartop        = proto_perl->Irestartop;
14760     PL_in_eval          = proto_perl->Iin_eval;
14761     PL_delaymagic       = proto_perl->Idelaymagic;
14762     PL_phase            = proto_perl->Iphase;
14763     PL_localizing       = proto_perl->Ilocalizing;
14764
14765     PL_hv_fetch_ent_mh  = NULL;
14766     PL_modcount         = proto_perl->Imodcount;
14767     PL_lastgotoprobe    = NULL;
14768     PL_dumpindent       = proto_perl->Idumpindent;
14769
14770     PL_efloatbuf        = NULL;         /* reinits on demand */
14771     PL_efloatsize       = 0;                    /* reinits on demand */
14772
14773     /* regex stuff */
14774
14775     PL_colorset         = 0;            /* reinits PL_colors[] */
14776     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14777
14778     /* Pluggable optimizer */
14779     PL_peepp            = proto_perl->Ipeepp;
14780     PL_rpeepp           = proto_perl->Irpeepp;
14781     /* op_free() hook */
14782     PL_opfreehook       = proto_perl->Iopfreehook;
14783
14784 #ifdef USE_REENTRANT_API
14785     /* XXX: things like -Dm will segfault here in perlio, but doing
14786      *  PERL_SET_CONTEXT(proto_perl);
14787      * breaks too many other things
14788      */
14789     Perl_reentrant_init(aTHX);
14790 #endif
14791
14792     /* create SV map for pointer relocation */
14793     PL_ptr_table = ptr_table_new();
14794
14795     /* initialize these special pointers as early as possible */
14796     init_constants();
14797     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14798     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14799     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14800     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14801                     &PL_padname_const);
14802
14803     /* create (a non-shared!) shared string table */
14804     PL_strtab           = newHV();
14805     HvSHAREKEYS_off(PL_strtab);
14806     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14807     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14808
14809     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14810
14811     /* This PV will be free'd special way so must set it same way op.c does */
14812     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14813     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14814
14815     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14816     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14817     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14818     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14819
14820     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14821     /* This makes no difference to the implementation, as it always pushes
14822        and shifts pointers to other SVs without changing their reference
14823        count, with the array becoming empty before it is freed. However, it
14824        makes it conceptually clear what is going on, and will avoid some
14825        work inside av.c, filling slots between AvFILL() and AvMAX() with
14826        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14827     AvREAL_off(param->stashes);
14828
14829     if (!(flags & CLONEf_COPY_STACKS)) {
14830         param->unreferenced = newAV();
14831     }
14832
14833 #ifdef PERLIO_LAYERS
14834     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14835     PerlIO_clone(aTHX_ proto_perl, param);
14836 #endif
14837
14838     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14839     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14840     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14841     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14842     PL_xsubfilename     = proto_perl->Ixsubfilename;
14843     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14844     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14845
14846     /* switches */
14847     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14848     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14849     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14850
14851     /* magical thingies */
14852
14853     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14854     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14855
14856     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14857     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14858     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14859
14860    
14861     /* Clone the regex array */
14862     /* ORANGE FIXME for plugins, probably in the SV dup code.
14863        newSViv(PTR2IV(CALLREGDUPE(
14864        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14865     */
14866     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14867     PL_regex_pad = AvARRAY(PL_regex_padav);
14868
14869     PL_stashpadmax      = proto_perl->Istashpadmax;
14870     PL_stashpadix       = proto_perl->Istashpadix ;
14871     Newx(PL_stashpad, PL_stashpadmax, HV *);
14872     {
14873         PADOFFSET o = 0;
14874         for (; o < PL_stashpadmax; ++o)
14875             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14876     }
14877
14878     /* shortcuts to various I/O objects */
14879     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14880     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14881     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14882     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14883     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14884     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14885     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14886
14887     /* shortcuts to regexp stuff */
14888     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14889
14890     /* shortcuts to misc objects */
14891     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14892
14893     /* shortcuts to debugging objects */
14894     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14895     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14896     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14897     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14898     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14899     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14900     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14901
14902     /* symbol tables */
14903     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14904     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14905     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14906     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14907     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14908
14909     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14910     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14911     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14912     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14913     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14914     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14915     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14916     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14917     PL_savebegin        = proto_perl->Isavebegin;
14918
14919     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14920
14921     /* subprocess state */
14922     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14923
14924     if (proto_perl->Iop_mask)
14925         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14926     else
14927         PL_op_mask      = NULL;
14928     /* PL_asserting        = proto_perl->Iasserting; */
14929
14930     /* current interpreter roots */
14931     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14932     OP_REFCNT_LOCK;
14933     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14934     OP_REFCNT_UNLOCK;
14935
14936     /* runtime control stuff */
14937     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14938
14939     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14940
14941     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14942
14943     /* interpreter atexit processing */
14944     PL_exitlistlen      = proto_perl->Iexitlistlen;
14945     if (PL_exitlistlen) {
14946         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14947         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14948     }
14949     else
14950         PL_exitlist     = (PerlExitListEntry*)NULL;
14951
14952     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14953     if (PL_my_cxt_size) {
14954         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14955         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14956 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14957         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14958         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14959 #endif
14960     }
14961     else {
14962         PL_my_cxt_list  = (void**)NULL;
14963 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14964         PL_my_cxt_keys  = (const char**)NULL;
14965 #endif
14966     }
14967     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14968     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14969     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14970     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14971
14972     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14973
14974     PAD_CLONE_VARS(proto_perl, param);
14975
14976 #ifdef HAVE_INTERP_INTERN
14977     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14978 #endif
14979
14980     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14981
14982 #ifdef PERL_USES_PL_PIDSTATUS
14983     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14984 #endif
14985     PL_osname           = SAVEPV(proto_perl->Iosname);
14986     PL_parser           = parser_dup(proto_perl->Iparser, param);
14987
14988     /* XXX this only works if the saved cop has already been cloned */
14989     if (proto_perl->Iparser) {
14990         PL_parser->saved_curcop = (COP*)any_dup(
14991                                     proto_perl->Iparser->saved_curcop,
14992                                     proto_perl);
14993     }
14994
14995     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14996
14997 #ifdef USE_LOCALE_CTYPE
14998     /* Should we warn if uses locale? */
14999     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15000 #endif
15001
15002 #ifdef USE_LOCALE_COLLATE
15003     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15004 #endif /* USE_LOCALE_COLLATE */
15005
15006 #ifdef USE_LOCALE_NUMERIC
15007     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15008     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15009 #endif /* !USE_LOCALE_NUMERIC */
15010
15011     /* Unicode inversion lists */
15012     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15013     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15014     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15015     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15016
15017     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15018     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15019
15020     /* utf8 character class swashes */
15021     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15022         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15023     }
15024     for (i = 0; i < POSIX_CC_COUNT; i++) {
15025         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15026     }
15027     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15028     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15029     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15030     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15031     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15032     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15033     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15034     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15035     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15036     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15037     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15038     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15039     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15040     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15041     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15042     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15043     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15044
15045     if (proto_perl->Ipsig_pend) {
15046         Newxz(PL_psig_pend, SIG_SIZE, int);
15047     }
15048     else {
15049         PL_psig_pend    = (int*)NULL;
15050     }
15051
15052     if (proto_perl->Ipsig_name) {
15053         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15054         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15055                             param);
15056         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15057     }
15058     else {
15059         PL_psig_ptr     = (SV**)NULL;
15060         PL_psig_name    = (SV**)NULL;
15061     }
15062
15063     if (flags & CLONEf_COPY_STACKS) {
15064         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15065         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15066                             PL_tmps_ix+1, param);
15067
15068         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15069         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15070         Newxz(PL_markstack, i, I32);
15071         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15072                                                   - proto_perl->Imarkstack);
15073         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15074                                                   - proto_perl->Imarkstack);
15075         Copy(proto_perl->Imarkstack, PL_markstack,
15076              PL_markstack_ptr - PL_markstack + 1, I32);
15077
15078         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15079          * NOTE: unlike the others! */
15080         Newxz(PL_scopestack, PL_scopestack_max, I32);
15081         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15082
15083 #ifdef DEBUGGING
15084         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15085         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15086 #endif
15087         /* reset stack AV to correct length before its duped via
15088          * PL_curstackinfo */
15089         AvFILLp(proto_perl->Icurstack) =
15090                             proto_perl->Istack_sp - proto_perl->Istack_base;
15091
15092         /* NOTE: si_dup() looks at PL_markstack */
15093         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15094
15095         /* PL_curstack          = PL_curstackinfo->si_stack; */
15096         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15097         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15098
15099         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15100         PL_stack_base           = AvARRAY(PL_curstack);
15101         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15102                                                    - proto_perl->Istack_base);
15103         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15104
15105         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15106         PL_savestack            = ss_dup(proto_perl, param);
15107     }
15108     else {
15109         init_stacks();
15110         ENTER;                  /* perl_destruct() wants to LEAVE; */
15111     }
15112
15113     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15114     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15115
15116     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15117     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15118     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15119     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15120     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15121     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15122
15123     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15124
15125     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15126     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15127     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15128
15129     PL_stashcache       = newHV();
15130
15131     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15132                                             proto_perl->Iwatchaddr);
15133     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15134     if (PL_debug && PL_watchaddr) {
15135         PerlIO_printf(Perl_debug_log,
15136           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15137           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15138           PTR2UV(PL_watchok));
15139     }
15140
15141     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15142     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15143     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15144
15145     /* Call the ->CLONE method, if it exists, for each of the stashes
15146        identified by sv_dup() above.
15147     */
15148     while(av_tindex(param->stashes) != -1) {
15149         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15150         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15151         if (cloner && GvCV(cloner)) {
15152             dSP;
15153             ENTER;
15154             SAVETMPS;
15155             PUSHMARK(SP);
15156             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15157             PUTBACK;
15158             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15159             FREETMPS;
15160             LEAVE;
15161         }
15162     }
15163
15164     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15165         ptr_table_free(PL_ptr_table);
15166         PL_ptr_table = NULL;
15167     }
15168
15169     if (!(flags & CLONEf_COPY_STACKS)) {
15170         unreferenced_to_tmp_stack(param->unreferenced);
15171     }
15172
15173     SvREFCNT_dec(param->stashes);
15174
15175     /* orphaned? eg threads->new inside BEGIN or use */
15176     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15177         SvREFCNT_inc_simple_void(PL_compcv);
15178         SAVEFREESV(PL_compcv);
15179     }
15180
15181     return my_perl;
15182 }
15183
15184 static void
15185 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15186 {
15187     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15188     
15189     if (AvFILLp(unreferenced) > -1) {
15190         SV **svp = AvARRAY(unreferenced);
15191         SV **const last = svp + AvFILLp(unreferenced);
15192         SSize_t count = 0;
15193
15194         do {
15195             if (SvREFCNT(*svp) == 1)
15196                 ++count;
15197         } while (++svp <= last);
15198
15199         EXTEND_MORTAL(count);
15200         svp = AvARRAY(unreferenced);
15201
15202         do {
15203             if (SvREFCNT(*svp) == 1) {
15204                 /* Our reference is the only one to this SV. This means that
15205                    in this thread, the scalar effectively has a 0 reference.
15206                    That doesn't work (cleanup never happens), so donate our
15207                    reference to it onto the save stack. */
15208                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15209             } else {
15210                 /* As an optimisation, because we are already walking the
15211                    entire array, instead of above doing either
15212                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15213                    release our reference to the scalar, so that at the end of
15214                    the array owns zero references to the scalars it happens to
15215                    point to. We are effectively converting the array from
15216                    AvREAL() on to AvREAL() off. This saves the av_clear()
15217                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15218                    walking the array a second time.  */
15219                 SvREFCNT_dec(*svp);
15220             }
15221
15222         } while (++svp <= last);
15223         AvREAL_off(unreferenced);
15224     }
15225     SvREFCNT_dec_NN(unreferenced);
15226 }
15227
15228 void
15229 Perl_clone_params_del(CLONE_PARAMS *param)
15230 {
15231     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15232        happy: */
15233     PerlInterpreter *const to = param->new_perl;
15234     dTHXa(to);
15235     PerlInterpreter *const was = PERL_GET_THX;
15236
15237     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15238
15239     if (was != to) {
15240         PERL_SET_THX(to);
15241     }
15242
15243     SvREFCNT_dec(param->stashes);
15244     if (param->unreferenced)
15245         unreferenced_to_tmp_stack(param->unreferenced);
15246
15247     Safefree(param);
15248
15249     if (was != to) {
15250         PERL_SET_THX(was);
15251     }
15252 }
15253
15254 CLONE_PARAMS *
15255 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15256 {
15257     dVAR;
15258     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15259        does a dTHX; to get the context from thread local storage.
15260        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15261        a version that passes in my_perl.  */
15262     PerlInterpreter *const was = PERL_GET_THX;
15263     CLONE_PARAMS *param;
15264
15265     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15266
15267     if (was != to) {
15268         PERL_SET_THX(to);
15269     }
15270
15271     /* Given that we've set the context, we can do this unshared.  */
15272     Newx(param, 1, CLONE_PARAMS);
15273
15274     param->flags = 0;
15275     param->proto_perl = from;
15276     param->new_perl = to;
15277     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15278     AvREAL_off(param->stashes);
15279     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15280
15281     if (was != to) {
15282         PERL_SET_THX(was);
15283     }
15284     return param;
15285 }
15286
15287 #endif /* USE_ITHREADS */
15288
15289 void
15290 Perl_init_constants(pTHX)
15291 {
15292     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15293     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15294     SvANY(&PL_sv_undef)         = NULL;
15295
15296     SvANY(&PL_sv_no)            = new_XPVNV();
15297     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15298     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15299                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15300                                   |SVp_POK|SVf_POK;
15301
15302     SvANY(&PL_sv_yes)           = new_XPVNV();
15303     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15304     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15305                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15306                                   |SVp_POK|SVf_POK;
15307
15308     SvPV_set(&PL_sv_no, (char*)PL_No);
15309     SvCUR_set(&PL_sv_no, 0);
15310     SvLEN_set(&PL_sv_no, 0);
15311     SvIV_set(&PL_sv_no, 0);
15312     SvNV_set(&PL_sv_no, 0);
15313
15314     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15315     SvCUR_set(&PL_sv_yes, 1);
15316     SvLEN_set(&PL_sv_yes, 0);
15317     SvIV_set(&PL_sv_yes, 1);
15318     SvNV_set(&PL_sv_yes, 1);
15319
15320     PadnamePV(&PL_padname_const) = (char *)PL_No;
15321 }
15322
15323 /*
15324 =head1 Unicode Support
15325
15326 =for apidoc sv_recode_to_utf8
15327
15328 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15329 of C<sv> is assumed to be octets in that encoding, and C<sv>
15330 will be converted into Unicode (and UTF-8).
15331
15332 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15333 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15334 an C<Encode::XS> Encoding object, bad things will happen.
15335 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15336
15337 The PV of C<sv> is returned.
15338
15339 =cut */
15340
15341 char *
15342 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15343 {
15344     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15345
15346     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15347         SV *uni;
15348         STRLEN len;
15349         const char *s;
15350         dSP;
15351         SV *nsv = sv;
15352         ENTER;
15353         PUSHSTACK;
15354         SAVETMPS;
15355         if (SvPADTMP(nsv)) {
15356             nsv = sv_newmortal();
15357             SvSetSV_nosteal(nsv, sv);
15358         }
15359         save_re_context();
15360         PUSHMARK(sp);
15361         EXTEND(SP, 3);
15362         PUSHs(encoding);
15363         PUSHs(nsv);
15364 /*
15365   NI-S 2002/07/09
15366   Passing sv_yes is wrong - it needs to be or'ed set of constants
15367   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15368   remove converted chars from source.
15369
15370   Both will default the value - let them.
15371
15372         XPUSHs(&PL_sv_yes);
15373 */
15374         PUTBACK;
15375         call_method("decode", G_SCALAR);
15376         SPAGAIN;
15377         uni = POPs;
15378         PUTBACK;
15379         s = SvPV_const(uni, len);
15380         if (s != SvPVX_const(sv)) {
15381             SvGROW(sv, len + 1);
15382             Move(s, SvPVX(sv), len + 1, char);
15383             SvCUR_set(sv, len);
15384         }
15385         FREETMPS;
15386         POPSTACK;
15387         LEAVE;
15388         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15389             /* clear pos and any utf8 cache */
15390             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15391             if (mg)
15392                 mg->mg_len = -1;
15393             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15394                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15395         }
15396         SvUTF8_on(sv);
15397         return SvPVX(sv);
15398     }
15399     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15400 }
15401
15402 /*
15403 =for apidoc sv_cat_decode
15404
15405 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15406 assumed to be octets in that encoding and decoding the input starts
15407 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15408 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15409 when the string C<tstr> appears in decoding output or the input ends on
15410 the PV of C<ssv>.  The value which C<offset> points will be modified
15411 to the last input position on C<ssv>.
15412
15413 Returns TRUE if the terminator was found, else returns FALSE.
15414
15415 =cut */
15416
15417 bool
15418 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15419                    SV *ssv, int *offset, char *tstr, int tlen)
15420 {
15421     bool ret = FALSE;
15422
15423     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15424
15425     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15426         SV *offsv;
15427         dSP;
15428         ENTER;
15429         SAVETMPS;
15430         save_re_context();
15431         PUSHMARK(sp);
15432         EXTEND(SP, 6);
15433         PUSHs(encoding);
15434         PUSHs(dsv);
15435         PUSHs(ssv);
15436         offsv = newSViv(*offset);
15437         mPUSHs(offsv);
15438         mPUSHp(tstr, tlen);
15439         PUTBACK;
15440         call_method("cat_decode", G_SCALAR);
15441         SPAGAIN;
15442         ret = SvTRUE(TOPs);
15443         *offset = SvIV(offsv);
15444         PUTBACK;
15445         FREETMPS;
15446         LEAVE;
15447     }
15448     else
15449         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15450     return ret;
15451
15452 }
15453
15454 /* ---------------------------------------------------------------------
15455  *
15456  * support functions for report_uninit()
15457  */
15458
15459 /* the maxiumum size of array or hash where we will scan looking
15460  * for the undefined element that triggered the warning */
15461
15462 #define FUV_MAX_SEARCH_SIZE 1000
15463
15464 /* Look for an entry in the hash whose value has the same SV as val;
15465  * If so, return a mortal copy of the key. */
15466
15467 STATIC SV*
15468 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15469 {
15470     dVAR;
15471     HE **array;
15472     I32 i;
15473
15474     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15475
15476     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15477                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15478         return NULL;
15479
15480     array = HvARRAY(hv);
15481
15482     for (i=HvMAX(hv); i>=0; i--) {
15483         HE *entry;
15484         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15485             if (HeVAL(entry) != val)
15486                 continue;
15487             if (    HeVAL(entry) == &PL_sv_undef ||
15488                     HeVAL(entry) == &PL_sv_placeholder)
15489                 continue;
15490             if (!HeKEY(entry))
15491                 return NULL;
15492             if (HeKLEN(entry) == HEf_SVKEY)
15493                 return sv_mortalcopy(HeKEY_sv(entry));
15494             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15495         }
15496     }
15497     return NULL;
15498 }
15499
15500 /* Look for an entry in the array whose value has the same SV as val;
15501  * If so, return the index, otherwise return -1. */
15502
15503 STATIC I32
15504 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15505 {
15506     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15507
15508     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15509                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15510         return -1;
15511
15512     if (val != &PL_sv_undef) {
15513         SV ** const svp = AvARRAY(av);
15514         I32 i;
15515
15516         for (i=AvFILLp(av); i>=0; i--)
15517             if (svp[i] == val)
15518                 return i;
15519     }
15520     return -1;
15521 }
15522
15523 /* varname(): return the name of a variable, optionally with a subscript.
15524  * If gv is non-zero, use the name of that global, along with gvtype (one
15525  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15526  * targ.  Depending on the value of the subscript_type flag, return:
15527  */
15528
15529 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15530 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15531 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15532 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15533
15534 SV*
15535 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15536         const SV *const keyname, I32 aindex, int subscript_type)
15537 {
15538
15539     SV * const name = sv_newmortal();
15540     if (gv && isGV(gv)) {
15541         char buffer[2];
15542         buffer[0] = gvtype;
15543         buffer[1] = 0;
15544
15545         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15546
15547         gv_fullname4(name, gv, buffer, 0);
15548
15549         if ((unsigned int)SvPVX(name)[1] <= 26) {
15550             buffer[0] = '^';
15551             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15552
15553             /* Swap the 1 unprintable control character for the 2 byte pretty
15554                version - ie substr($name, 1, 1) = $buffer; */
15555             sv_insert(name, 1, 1, buffer, 2);
15556         }
15557     }
15558     else {
15559         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15560         PADNAME *sv;
15561
15562         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15563
15564         if (!cv || !CvPADLIST(cv))
15565             return NULL;
15566         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15567         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15568         SvUTF8_on(name);
15569     }
15570
15571     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15572         SV * const sv = newSV(0);
15573         *SvPVX(name) = '$';
15574         Perl_sv_catpvf(aTHX_ name, "{%s}",
15575             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15576                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15577         SvREFCNT_dec_NN(sv);
15578     }
15579     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15580         *SvPVX(name) = '$';
15581         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15582     }
15583     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15584         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15585         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15586     }
15587
15588     return name;
15589 }
15590
15591
15592 /*
15593 =for apidoc find_uninit_var
15594
15595 Find the name of the undefined variable (if any) that caused the operator
15596 to issue a "Use of uninitialized value" warning.
15597 If match is true, only return a name if its value matches C<uninit_sv>.
15598 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15599 warning, then following the direct child of the op may yield an
15600 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15601 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15602 the variable name if we get an exact match.
15603 C<desc_p> points to a string pointer holding the description of the op.
15604 This may be updated if needed.
15605
15606 The name is returned as a mortal SV.
15607
15608 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15609 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15610
15611 =cut
15612 */
15613
15614 STATIC SV *
15615 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15616                   bool match, const char **desc_p)
15617 {
15618     dVAR;
15619     SV *sv;
15620     const GV *gv;
15621     const OP *o, *o2, *kid;
15622
15623     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15624
15625     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15626                             uninit_sv == &PL_sv_placeholder)))
15627         return NULL;
15628
15629     switch (obase->op_type) {
15630
15631     case OP_RV2AV:
15632     case OP_RV2HV:
15633     case OP_PADAV:
15634     case OP_PADHV:
15635       {
15636         const bool pad  = (    obase->op_type == OP_PADAV
15637                             || obase->op_type == OP_PADHV
15638                             || obase->op_type == OP_PADRANGE
15639                           );
15640
15641         const bool hash = (    obase->op_type == OP_PADHV
15642                             || obase->op_type == OP_RV2HV
15643                             || (obase->op_type == OP_PADRANGE
15644                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15645                           );
15646         I32 index = 0;
15647         SV *keysv = NULL;
15648         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15649
15650         if (pad) { /* @lex, %lex */
15651             sv = PAD_SVl(obase->op_targ);
15652             gv = NULL;
15653         }
15654         else {
15655             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15656             /* @global, %global */
15657                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15658                 if (!gv)
15659                     break;
15660                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15661             }
15662             else if (obase == PL_op) /* @{expr}, %{expr} */
15663                 return find_uninit_var(cUNOPx(obase)->op_first,
15664                                                 uninit_sv, match, desc_p);
15665             else /* @{expr}, %{expr} as a sub-expression */
15666                 return NULL;
15667         }
15668
15669         /* attempt to find a match within the aggregate */
15670         if (hash) {
15671             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15672             if (keysv)
15673                 subscript_type = FUV_SUBSCRIPT_HASH;
15674         }
15675         else {
15676             index = find_array_subscript((const AV *)sv, uninit_sv);
15677             if (index >= 0)
15678                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15679         }
15680
15681         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15682             break;
15683
15684         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15685                                     keysv, index, subscript_type);
15686       }
15687
15688     case OP_RV2SV:
15689         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15690             /* $global */
15691             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15692             if (!gv || !GvSTASH(gv))
15693                 break;
15694             if (match && (GvSV(gv) != uninit_sv))
15695                 break;
15696             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15697         }
15698         /* ${expr} */
15699         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15700
15701     case OP_PADSV:
15702         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15703             break;
15704         return varname(NULL, '$', obase->op_targ,
15705                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15706
15707     case OP_GVSV:
15708         gv = cGVOPx_gv(obase);
15709         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15710             break;
15711         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15712
15713     case OP_AELEMFAST_LEX:
15714         if (match) {
15715             SV **svp;
15716             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15717             if (!av || SvRMAGICAL(av))
15718                 break;
15719             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15720             if (!svp || *svp != uninit_sv)
15721                 break;
15722         }
15723         return varname(NULL, '$', obase->op_targ,
15724                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15725     case OP_AELEMFAST:
15726         {
15727             gv = cGVOPx_gv(obase);
15728             if (!gv)
15729                 break;
15730             if (match) {
15731                 SV **svp;
15732                 AV *const av = GvAV(gv);
15733                 if (!av || SvRMAGICAL(av))
15734                     break;
15735                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15736                 if (!svp || *svp != uninit_sv)
15737                     break;
15738             }
15739             return varname(gv, '$', 0,
15740                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15741         }
15742         NOT_REACHED; /* NOTREACHED */
15743
15744     case OP_EXISTS:
15745         o = cUNOPx(obase)->op_first;
15746         if (!o || o->op_type != OP_NULL ||
15747                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15748             break;
15749         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15750
15751     case OP_AELEM:
15752     case OP_HELEM:
15753     {
15754         bool negate = FALSE;
15755
15756         if (PL_op == obase)
15757             /* $a[uninit_expr] or $h{uninit_expr} */
15758             return find_uninit_var(cBINOPx(obase)->op_last,
15759                                                 uninit_sv, match, desc_p);
15760
15761         gv = NULL;
15762         o = cBINOPx(obase)->op_first;
15763         kid = cBINOPx(obase)->op_last;
15764
15765         /* get the av or hv, and optionally the gv */
15766         sv = NULL;
15767         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15768             sv = PAD_SV(o->op_targ);
15769         }
15770         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15771                 && cUNOPo->op_first->op_type == OP_GV)
15772         {
15773             gv = cGVOPx_gv(cUNOPo->op_first);
15774             if (!gv)
15775                 break;
15776             sv = o->op_type
15777                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15778         }
15779         if (!sv)
15780             break;
15781
15782         if (kid && kid->op_type == OP_NEGATE) {
15783             negate = TRUE;
15784             kid = cUNOPx(kid)->op_first;
15785         }
15786
15787         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15788             /* index is constant */
15789             SV* kidsv;
15790             if (negate) {
15791                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15792                 sv_catsv(kidsv, cSVOPx_sv(kid));
15793             }
15794             else
15795                 kidsv = cSVOPx_sv(kid);
15796             if (match) {
15797                 if (SvMAGICAL(sv))
15798                     break;
15799                 if (obase->op_type == OP_HELEM) {
15800                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15801                     if (!he || HeVAL(he) != uninit_sv)
15802                         break;
15803                 }
15804                 else {
15805                     SV * const  opsv = cSVOPx_sv(kid);
15806                     const IV  opsviv = SvIV(opsv);
15807                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15808                         negate ? - opsviv : opsviv,
15809                         FALSE);
15810                     if (!svp || *svp != uninit_sv)
15811                         break;
15812                 }
15813             }
15814             if (obase->op_type == OP_HELEM)
15815                 return varname(gv, '%', o->op_targ,
15816                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15817             else
15818                 return varname(gv, '@', o->op_targ, NULL,
15819                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15820                     FUV_SUBSCRIPT_ARRAY);
15821         }
15822         else  {
15823             /* index is an expression;
15824              * attempt to find a match within the aggregate */
15825             if (obase->op_type == OP_HELEM) {
15826                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15827                 if (keysv)
15828                     return varname(gv, '%', o->op_targ,
15829                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15830             }
15831             else {
15832                 const I32 index
15833                     = find_array_subscript((const AV *)sv, uninit_sv);
15834                 if (index >= 0)
15835                     return varname(gv, '@', o->op_targ,
15836                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15837             }
15838             if (match)
15839                 break;
15840             return varname(gv,
15841                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15842                 ? '@' : '%'),
15843                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15844         }
15845         NOT_REACHED; /* NOTREACHED */
15846     }
15847
15848     case OP_MULTIDEREF: {
15849         /* If we were executing OP_MULTIDEREF when the undef warning
15850          * triggered, then it must be one of the index values within
15851          * that triggered it. If not, then the only possibility is that
15852          * the value retrieved by the last aggregate lookup might be the
15853          * culprit. For the former, we set PL_multideref_pc each time before
15854          * using an index, so work though the item list until we reach
15855          * that point. For the latter, just work through the entire item
15856          * list; the last aggregate retrieved will be the candidate.
15857          */
15858
15859         /* the named aggregate, if any */
15860         PADOFFSET agg_targ = 0;
15861         GV       *agg_gv   = NULL;
15862         /* the last-seen index */
15863         UV        index_type;
15864         PADOFFSET index_targ;
15865         GV       *index_gv;
15866         IV        index_const_iv = 0; /* init for spurious compiler warn */
15867         SV       *index_const_sv;
15868         int       depth = 0;  /* how many array/hash lookups we've done */
15869
15870         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15871         UNOP_AUX_item *last = NULL;
15872         UV actions = items->uv;
15873         bool is_hv;
15874
15875         if (PL_op == obase) {
15876             last = PL_multideref_pc;
15877             assert(last >= items && last <= items + items[-1].uv);
15878         }
15879
15880         assert(actions);
15881
15882         while (1) {
15883             is_hv = FALSE;
15884             switch (actions & MDEREF_ACTION_MASK) {
15885
15886             case MDEREF_reload:
15887                 actions = (++items)->uv;
15888                 continue;
15889
15890             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15891                 is_hv = TRUE;
15892                 /* FALLTHROUGH */
15893             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15894                 agg_targ = (++items)->pad_offset;
15895                 agg_gv = NULL;
15896                 break;
15897
15898             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15899                 is_hv = TRUE;
15900                 /* FALLTHROUGH */
15901             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15902                 agg_targ = 0;
15903                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15904                 assert(isGV_with_GP(agg_gv));
15905                 break;
15906
15907             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15908             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15909                 ++items;
15910                 /* FALLTHROUGH */
15911             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15912             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15913                 agg_targ = 0;
15914                 agg_gv   = NULL;
15915                 is_hv    = TRUE;
15916                 break;
15917
15918             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15919             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15920                 ++items;
15921                 /* FALLTHROUGH */
15922             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15923             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15924                 agg_targ = 0;
15925                 agg_gv   = NULL;
15926             } /* switch */
15927
15928             index_targ     = 0;
15929             index_gv       = NULL;
15930             index_const_sv = NULL;
15931
15932             index_type = (actions & MDEREF_INDEX_MASK);
15933             switch (index_type) {
15934             case MDEREF_INDEX_none:
15935                 break;
15936             case MDEREF_INDEX_const:
15937                 if (is_hv)
15938                     index_const_sv = UNOP_AUX_item_sv(++items)
15939                 else
15940                     index_const_iv = (++items)->iv;
15941                 break;
15942             case MDEREF_INDEX_padsv:
15943                 index_targ = (++items)->pad_offset;
15944                 break;
15945             case MDEREF_INDEX_gvsv:
15946                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15947                 assert(isGV_with_GP(index_gv));
15948                 break;
15949             }
15950
15951             if (index_type != MDEREF_INDEX_none)
15952                 depth++;
15953
15954             if (   index_type == MDEREF_INDEX_none
15955                 || (actions & MDEREF_FLAG_last)
15956                 || (last && items == last)
15957             )
15958                 break;
15959
15960             actions >>= MDEREF_SHIFT;
15961         } /* while */
15962
15963         if (PL_op == obase) {
15964             /* index was undef */
15965
15966             *desc_p = (    (actions & MDEREF_FLAG_last)
15967                         && (obase->op_private
15968                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15969                         ?
15970                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15971                                 ? "exists"
15972                                 : "delete"
15973                         : is_hv ? "hash element" : "array element";
15974             assert(index_type != MDEREF_INDEX_none);
15975             if (index_gv)
15976                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15977             if (index_targ)
15978                 return varname(NULL, '$', index_targ,
15979                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15980             assert(is_hv); /* AV index is an IV and can't be undef */
15981             /* can a const HV index ever be undef? */
15982             return NULL;
15983         }
15984
15985         /* the SV returned by pp_multideref() was undef, if anything was */
15986
15987         if (depth != 1)
15988             break;
15989
15990         if (agg_targ)
15991             sv = PAD_SV(agg_targ);
15992         else if (agg_gv)
15993             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
15994         else
15995             break;
15996
15997         if (index_type == MDEREF_INDEX_const) {
15998             if (match) {
15999                 if (SvMAGICAL(sv))
16000                     break;
16001                 if (is_hv) {
16002                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16003                     if (!he || HeVAL(he) != uninit_sv)
16004                         break;
16005                 }
16006                 else {
16007                     SV * const * const svp =
16008                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16009                     if (!svp || *svp != uninit_sv)
16010                         break;
16011                 }
16012             }
16013             return is_hv
16014                 ? varname(agg_gv, '%', agg_targ,
16015                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16016                 : varname(agg_gv, '@', agg_targ,
16017                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16018         }
16019         else  {
16020             /* index is an var */
16021             if (is_hv) {
16022                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16023                 if (keysv)
16024                     return varname(agg_gv, '%', agg_targ,
16025                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16026             }
16027             else {
16028                 const I32 index
16029                     = find_array_subscript((const AV *)sv, uninit_sv);
16030                 if (index >= 0)
16031                     return varname(agg_gv, '@', agg_targ,
16032                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16033             }
16034             if (match)
16035                 break;
16036             return varname(agg_gv,
16037                 is_hv ? '%' : '@',
16038                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16039         }
16040         NOT_REACHED; /* NOTREACHED */
16041     }
16042
16043     case OP_AASSIGN:
16044         /* only examine RHS */
16045         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16046                                                                 match, desc_p);
16047
16048     case OP_OPEN:
16049         o = cUNOPx(obase)->op_first;
16050         if (   o->op_type == OP_PUSHMARK
16051            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16052         )
16053             o = OpSIBLING(o);
16054
16055         if (!OpHAS_SIBLING(o)) {
16056             /* one-arg version of open is highly magical */
16057
16058             if (o->op_type == OP_GV) { /* open FOO; */
16059                 gv = cGVOPx_gv(o);
16060                 if (match && GvSV(gv) != uninit_sv)
16061                     break;
16062                 return varname(gv, '$', 0,
16063                             NULL, 0, FUV_SUBSCRIPT_NONE);
16064             }
16065             /* other possibilities not handled are:
16066              * open $x; or open my $x;  should return '${*$x}'
16067              * open expr;               should return '$'.expr ideally
16068              */
16069              break;
16070         }
16071         goto do_op;
16072
16073     /* ops where $_ may be an implicit arg */
16074     case OP_TRANS:
16075     case OP_TRANSR:
16076     case OP_SUBST:
16077     case OP_MATCH:
16078         if ( !(obase->op_flags & OPf_STACKED)) {
16079             if (uninit_sv == DEFSV)
16080                 return newSVpvs_flags("$_", SVs_TEMP);
16081             else if (obase->op_targ
16082                   && uninit_sv == PAD_SVl(obase->op_targ))
16083                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16084                                FUV_SUBSCRIPT_NONE);
16085         }
16086         goto do_op;
16087
16088     case OP_PRTF:
16089     case OP_PRINT:
16090     case OP_SAY:
16091         match = 1; /* print etc can return undef on defined args */
16092         /* skip filehandle as it can't produce 'undef' warning  */
16093         o = cUNOPx(obase)->op_first;
16094         if ((obase->op_flags & OPf_STACKED)
16095             &&
16096                (   o->op_type == OP_PUSHMARK
16097                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16098             o = OpSIBLING(OpSIBLING(o));
16099         goto do_op2;
16100
16101
16102     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16103     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16104
16105         /* the following ops are capable of returning PL_sv_undef even for
16106          * defined arg(s) */
16107
16108     case OP_BACKTICK:
16109     case OP_PIPE_OP:
16110     case OP_FILENO:
16111     case OP_BINMODE:
16112     case OP_TIED:
16113     case OP_GETC:
16114     case OP_SYSREAD:
16115     case OP_SEND:
16116     case OP_IOCTL:
16117     case OP_SOCKET:
16118     case OP_SOCKPAIR:
16119     case OP_BIND:
16120     case OP_CONNECT:
16121     case OP_LISTEN:
16122     case OP_ACCEPT:
16123     case OP_SHUTDOWN:
16124     case OP_SSOCKOPT:
16125     case OP_GETPEERNAME:
16126     case OP_FTRREAD:
16127     case OP_FTRWRITE:
16128     case OP_FTREXEC:
16129     case OP_FTROWNED:
16130     case OP_FTEREAD:
16131     case OP_FTEWRITE:
16132     case OP_FTEEXEC:
16133     case OP_FTEOWNED:
16134     case OP_FTIS:
16135     case OP_FTZERO:
16136     case OP_FTSIZE:
16137     case OP_FTFILE:
16138     case OP_FTDIR:
16139     case OP_FTLINK:
16140     case OP_FTPIPE:
16141     case OP_FTSOCK:
16142     case OP_FTBLK:
16143     case OP_FTCHR:
16144     case OP_FTTTY:
16145     case OP_FTSUID:
16146     case OP_FTSGID:
16147     case OP_FTSVTX:
16148     case OP_FTTEXT:
16149     case OP_FTBINARY:
16150     case OP_FTMTIME:
16151     case OP_FTATIME:
16152     case OP_FTCTIME:
16153     case OP_READLINK:
16154     case OP_OPEN_DIR:
16155     case OP_READDIR:
16156     case OP_TELLDIR:
16157     case OP_SEEKDIR:
16158     case OP_REWINDDIR:
16159     case OP_CLOSEDIR:
16160     case OP_GMTIME:
16161     case OP_ALARM:
16162     case OP_SEMGET:
16163     case OP_GETLOGIN:
16164     case OP_UNDEF:
16165     case OP_SUBSTR:
16166     case OP_AEACH:
16167     case OP_EACH:
16168     case OP_SORT:
16169     case OP_CALLER:
16170     case OP_DOFILE:
16171     case OP_PROTOTYPE:
16172     case OP_NCMP:
16173     case OP_SMARTMATCH:
16174     case OP_UNPACK:
16175     case OP_SYSOPEN:
16176     case OP_SYSSEEK:
16177         match = 1;
16178         goto do_op;
16179
16180     case OP_ENTERSUB:
16181     case OP_GOTO:
16182         /* XXX tmp hack: these two may call an XS sub, and currently
16183           XS subs don't have a SUB entry on the context stack, so CV and
16184           pad determination goes wrong, and BAD things happen. So, just
16185           don't try to determine the value under those circumstances.
16186           Need a better fix at dome point. DAPM 11/2007 */
16187         break;
16188
16189     case OP_FLIP:
16190     case OP_FLOP:
16191     {
16192         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16193         if (gv && GvSV(gv) == uninit_sv)
16194             return newSVpvs_flags("$.", SVs_TEMP);
16195         goto do_op;
16196     }
16197
16198     case OP_POS:
16199         /* def-ness of rval pos() is independent of the def-ness of its arg */
16200         if ( !(obase->op_flags & OPf_MOD))
16201             break;
16202
16203     case OP_SCHOMP:
16204     case OP_CHOMP:
16205         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16206             return newSVpvs_flags("${$/}", SVs_TEMP);
16207         /* FALLTHROUGH */
16208
16209     default:
16210     do_op:
16211         if (!(obase->op_flags & OPf_KIDS))
16212             break;
16213         o = cUNOPx(obase)->op_first;
16214         
16215     do_op2:
16216         if (!o)
16217             break;
16218
16219         /* This loop checks all the kid ops, skipping any that cannot pos-
16220          * sibly be responsible for the uninitialized value; i.e., defined
16221          * constants and ops that return nothing.  If there is only one op
16222          * left that is not skipped, then we *know* it is responsible for
16223          * the uninitialized value.  If there is more than one op left, we
16224          * have to look for an exact match in the while() loop below.
16225          * Note that we skip padrange, because the individual pad ops that
16226          * it replaced are still in the tree, so we work on them instead.
16227          */
16228         o2 = NULL;
16229         for (kid=o; kid; kid = OpSIBLING(kid)) {
16230             const OPCODE type = kid->op_type;
16231             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16232               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16233               || (type == OP_PUSHMARK)
16234               || (type == OP_PADRANGE)
16235             )
16236             continue;
16237
16238             if (o2) { /* more than one found */
16239                 o2 = NULL;
16240                 break;
16241             }
16242             o2 = kid;
16243         }
16244         if (o2)
16245             return find_uninit_var(o2, uninit_sv, match, desc_p);
16246
16247         /* scan all args */
16248         while (o) {
16249             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16250             if (sv)
16251                 return sv;
16252             o = OpSIBLING(o);
16253         }
16254         break;
16255     }
16256     return NULL;
16257 }
16258
16259
16260 /*
16261 =for apidoc report_uninit
16262
16263 Print appropriate "Use of uninitialized variable" warning.
16264
16265 =cut
16266 */
16267
16268 void
16269 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16270 {
16271     const char *desc = NULL;
16272     SV* varname = NULL;
16273
16274     if (PL_op) {
16275         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16276                 ? "join or string"
16277                 : OP_DESC(PL_op);
16278         if (uninit_sv && PL_curpad) {
16279             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16280             if (varname)
16281                 sv_insert(varname, 0, 0, " ", 1);
16282         }
16283     }
16284     else if (PL_curstackinfo->si_type == PERLSI_SORT
16285              &&  CxMULTICALL(&cxstack[cxstack_ix]))
16286     {
16287         /* we've reached the end of a sort block or sub,
16288          * and the uninit value is probably what that code returned */
16289         desc = "sort";
16290     }
16291
16292     /* PL_warn_uninit_sv is constant */
16293     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16294     if (desc)
16295         /* diag_listed_as: Use of uninitialized value%s */
16296         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16297                 SVfARG(varname ? varname : &PL_sv_no),
16298                 " in ", desc);
16299     else
16300         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16301                 "", "", "");
16302     GCC_DIAG_RESTORE;
16303 }
16304
16305 /*
16306  * ex: set ts=8 sts=4 sw=4 et:
16307  */