This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
lseek() SEEK_SET pos may not be negative
[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 #ifdef PERL_OLD_COPY_ON_WRITE
129 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
130 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
131 #endif
132
133 /* ============================================================================
134
135 =head1 Allocation and deallocation of SVs.
136 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
137 sv, av, hv...) contains type and reference count information, and for
138 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
139 contains fields specific to each type.  Some types store all they need
140 in the head, so don't have a body.
141
142 In all but the most memory-paranoid configurations (ex: PURIFY), heads
143 and bodies are allocated out of arenas, which by default are
144 approximately 4K chunks of memory parcelled up into N heads or bodies.
145 Sv-bodies are allocated by their sv-type, guaranteeing size
146 consistency needed to allocate safely from arrays.
147
148 For SV-heads, the first slot in each arena is reserved, and holds a
149 link to the next arena, some flags, and a note of the number of slots.
150 Snaked through each arena chain is a linked list of free items; when
151 this becomes empty, an extra arena is allocated and divided up into N
152 items which are threaded into the free list.
153
154 SV-bodies are similar, but they use arena-sets by default, which
155 separate the link and info from the arena itself, and reclaim the 1st
156 slot in the arena.  SV-bodies are further described later.
157
158 The following global variables are associated with arenas:
159
160  PL_sv_arenaroot     pointer to list of SV arenas
161  PL_sv_root          pointer to list of free SV structures
162
163  PL_body_arenas      head of linked-list of body arenas
164  PL_body_roots[]     array of pointers to list of free bodies of svtype
165                      arrays are indexed by the svtype needed
166
167 A few special SV heads are not allocated from an arena, but are
168 instead directly created in the interpreter structure, eg PL_sv_undef.
169 The size of arenas can be changed from the default by setting
170 PERL_ARENA_SIZE appropriately at compile time.
171
172 The SV arena serves the secondary purpose of allowing still-live SVs
173 to be located and destroyed during final cleanup.
174
175 At the lowest level, the macros new_SV() and del_SV() grab and free
176 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
177 to return the SV to the free list with error checking.) new_SV() calls
178 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
179 SVs in the free list have their SvTYPE field set to all ones.
180
181 At the time of very final cleanup, sv_free_arenas() is called from
182 perl_destruct() to physically free all the arenas allocated since the
183 start of the interpreter.
184
185 The function visit() scans the SV arenas list, and calls a specified
186 function for each SV it finds which is still live - ie which has an SvTYPE
187 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
188 following functions (specified as [function that calls visit()] / [function
189 called by visit() for each SV]):
190
191     sv_report_used() / do_report_used()
192                         dump all remaining SVs (debugging aid)
193
194     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
195                       do_clean_named_io_objs(),do_curse()
196                         Attempt to free all objects pointed to by RVs,
197                         try to do the same for all objects indir-
198                         ectly referenced by typeglobs too, and
199                         then do a final sweep, cursing any
200                         objects that remain.  Called once from
201                         perl_destruct(), prior to calling sv_clean_all()
202                         below.
203
204     sv_clean_all() / do_clean_all()
205                         SvREFCNT_dec(sv) each remaining SV, possibly
206                         triggering an sv_free(). It also sets the
207                         SVf_BREAK flag on the SV to indicate that the
208                         refcnt has been artificially lowered, and thus
209                         stopping sv_free() from giving spurious warnings
210                         about SVs which unexpectedly have a refcnt
211                         of zero.  called repeatedly from perl_destruct()
212                         until there are no SVs left.
213
214 =head2 Arena allocator API Summary
215
216 Private API to rest of sv.c
217
218     new_SV(),  del_SV(),
219
220     new_XPVNV(), del_XPVGV(),
221     etc
222
223 Public API:
224
225     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
226
227 =cut
228
229  * ========================================================================= */
230
231 /*
232  * "A time to plant, and a time to uproot what was planted..."
233  */
234
235 #ifdef PERL_MEM_LOG
236 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
237             Perl_mem_log_new_sv(sv, file, line, func)
238 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
239             Perl_mem_log_del_sv(sv, file, line, func)
240 #else
241 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
242 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
243 #endif
244
245 #ifdef DEBUG_LEAKING_SCALARS
246 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
247         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
248     } STMT_END
249 #  define DEBUG_SV_SERIAL(sv)                                               \
250     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
251             PTR2UV(sv), (long)(sv)->sv_debug_serial))
252 #else
253 #  define FREE_SV_DEBUG_FILE(sv)
254 #  define DEBUG_SV_SERIAL(sv)   NOOP
255 #endif
256
257 #ifdef PERL_POISON
258 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
259 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
260 /* Whilst I'd love to do this, it seems that things like to check on
261    unreferenced scalars
262 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
263 */
264 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
265                                 PoisonNew(&SvREFCNT(sv), 1, U32)
266 #else
267 #  define SvARENA_CHAIN(sv)     SvANY(sv)
268 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
269 #  define POISON_SV_HEAD(sv)
270 #endif
271
272 /* Mark an SV head as unused, and add to free list.
273  *
274  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
275  * its refcount artificially decremented during global destruction, so
276  * there may be dangling pointers to it. The last thing we want in that
277  * case is for it to be reused. */
278
279 #define plant_SV(p) \
280     STMT_START {                                        \
281         const U32 old_flags = SvFLAGS(p);                       \
282         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
283         DEBUG_SV_SERIAL(p);                             \
284         FREE_SV_DEBUG_FILE(p);                          \
285         POISON_SV_HEAD(p);                              \
286         SvFLAGS(p) = SVTYPEMASK;                        \
287         if (!(old_flags & SVf_BREAK)) {         \
288             SvARENA_CHAIN_SET(p, PL_sv_root);   \
289             PL_sv_root = (p);                           \
290         }                                               \
291         --PL_sv_count;                                  \
292     } STMT_END
293
294 #define uproot_SV(p) \
295     STMT_START {                                        \
296         (p) = PL_sv_root;                               \
297         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
298         ++PL_sv_count;                                  \
299     } STMT_END
300
301
302 /* make some more SVs by adding another arena */
303
304 STATIC SV*
305 S_more_sv(pTHX)
306 {
307     SV* sv;
308     char *chunk;                /* must use New here to match call to */
309     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
310     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
311     uproot_SV(sv);
312     return sv;
313 }
314
315 /* new_SV(): return a new, empty SV head */
316
317 #ifdef DEBUG_LEAKING_SCALARS
318 /* provide a real function for a debugger to play with */
319 STATIC SV*
320 S_new_SV(pTHX_ const char *file, int line, const char *func)
321 {
322     SV* sv;
323
324     if (PL_sv_root)
325         uproot_SV(sv);
326     else
327         sv = S_more_sv(aTHX);
328     SvANY(sv) = 0;
329     SvREFCNT(sv) = 1;
330     SvFLAGS(sv) = 0;
331     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
332     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
333                 ? PL_parser->copline
334                 :  PL_curcop
335                     ? CopLINE(PL_curcop)
336                     : 0
337             );
338     sv->sv_debug_inpad = 0;
339     sv->sv_debug_parent = NULL;
340     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
341
342     sv->sv_debug_serial = PL_sv_serial++;
343
344     MEM_LOG_NEW_SV(sv, file, line, func);
345     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
346             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
347
348     return sv;
349 }
350 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
351
352 #else
353 #  define new_SV(p) \
354     STMT_START {                                        \
355         if (PL_sv_root)                                 \
356             uproot_SV(p);                               \
357         else                                            \
358             (p) = S_more_sv(aTHX);                      \
359         SvANY(p) = 0;                                   \
360         SvREFCNT(p) = 1;                                \
361         SvFLAGS(p) = 0;                                 \
362         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
363     } STMT_END
364 #endif
365
366
367 /* del_SV(): return an empty SV head to the free list */
368
369 #ifdef DEBUGGING
370
371 #define del_SV(p) \
372     STMT_START {                                        \
373         if (DEBUG_D_TEST)                               \
374             del_sv(p);                                  \
375         else                                            \
376             plant_SV(p);                                \
377     } STMT_END
378
379 STATIC void
380 S_del_sv(pTHX_ SV *p)
381 {
382     PERL_ARGS_ASSERT_DEL_SV;
383
384     if (DEBUG_D_TEST) {
385         SV* sva;
386         bool ok = 0;
387         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
388             const SV * const sv = sva + 1;
389             const SV * const svend = &sva[SvREFCNT(sva)];
390             if (p >= sv && p < svend) {
391                 ok = 1;
392                 break;
393             }
394         }
395         if (!ok) {
396             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
397                              "Attempt to free non-arena SV: 0x%"UVxf
398                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
399             return;
400         }
401     }
402     plant_SV(p);
403 }
404
405 #else /* ! DEBUGGING */
406
407 #define del_SV(p)   plant_SV(p)
408
409 #endif /* DEBUGGING */
410
411 /*
412  * Bodyless IVs and NVs!
413  *
414  * Since 5.9.2, we can avoid allocating a body for SVt_IV-type SVs.
415  * Since the larger IV-holding variants of SVs store their integer
416  * values in their respective bodies, the family of SvIV() accessor
417  * macros would  naively have to branch on the SV type to find the
418  * integer value either in the HEAD or BODY. In order to avoid this
419  * expensive branch, a clever soul has deployed a great hack:
420  * We set up the SvANY pointer such that instead of pointing to a
421  * real body, it points into the memory before the location of the
422  * head. We compute this pointer such that the location of
423  * the integer member of the hypothetical body struct happens to
424  * be the same as the location of the integer member of the bodyless
425  * SV head. This now means that the SvIV() family of accessors can
426  * always read from the (hypothetical or real) body via SvANY.
427  *
428  * Since the 5.21 dev series, we employ the same trick for NVs
429  * if the architecture can support it (NVSIZE <= IVSIZE).
430  */
431
432 /* The following two macros compute the necessary offsets for the above
433  * trick and store them in SvANY for SvIV() (and friends) to use. */
434 #define SET_SVANY_FOR_BODYLESS_IV(sv) \
435         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv))
436
437 #define SET_SVANY_FOR_BODYLESS_NV(sv) \
438         SvANY(sv) = (XPVNV*)((char*)&(sv->sv_u.svu_nv) - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv))
439
440 /*
441 =head1 SV Manipulation Functions
442
443 =for apidoc sv_add_arena
444
445 Given a chunk of memory, link it to the head of the list of arenas,
446 and split it into a list of free SVs.
447
448 =cut
449 */
450
451 static void
452 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
453 {
454     SV *const sva = MUTABLE_SV(ptr);
455     SV* sv;
456     SV* svend;
457
458     PERL_ARGS_ASSERT_SV_ADD_ARENA;
459
460     /* The first SV in an arena isn't an SV. */
461     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
462     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
463     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
464
465     PL_sv_arenaroot = sva;
466     PL_sv_root = sva + 1;
467
468     svend = &sva[SvREFCNT(sva) - 1];
469     sv = sva + 1;
470     while (sv < svend) {
471         SvARENA_CHAIN_SET(sv, (sv + 1));
472 #ifdef DEBUGGING
473         SvREFCNT(sv) = 0;
474 #endif
475         /* Must always set typemask because it's always checked in on cleanup
476            when the arenas are walked looking for objects.  */
477         SvFLAGS(sv) = SVTYPEMASK;
478         sv++;
479     }
480     SvARENA_CHAIN_SET(sv, 0);
481 #ifdef DEBUGGING
482     SvREFCNT(sv) = 0;
483 #endif
484     SvFLAGS(sv) = SVTYPEMASK;
485 }
486
487 /* visit(): call the named function for each non-free SV in the arenas
488  * whose flags field matches the flags/mask args. */
489
490 STATIC I32
491 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
492 {
493     SV* sva;
494     I32 visited = 0;
495
496     PERL_ARGS_ASSERT_VISIT;
497
498     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
499         const SV * const svend = &sva[SvREFCNT(sva)];
500         SV* sv;
501         for (sv = sva + 1; sv < svend; ++sv) {
502             if (SvTYPE(sv) != (svtype)SVTYPEMASK
503                     && (sv->sv_flags & mask) == flags
504                     && SvREFCNT(sv))
505             {
506                 (*f)(aTHX_ sv);
507                 ++visited;
508             }
509         }
510     }
511     return visited;
512 }
513
514 #ifdef DEBUGGING
515
516 /* called by sv_report_used() for each live SV */
517
518 static void
519 do_report_used(pTHX_ SV *const sv)
520 {
521     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
522         PerlIO_printf(Perl_debug_log, "****\n");
523         sv_dump(sv);
524     }
525 }
526 #endif
527
528 /*
529 =for apidoc sv_report_used
530
531 Dump the contents of all SVs not yet freed (debugging aid).
532
533 =cut
534 */
535
536 void
537 Perl_sv_report_used(pTHX)
538 {
539 #ifdef DEBUGGING
540     visit(do_report_used, 0, 0);
541 #else
542     PERL_UNUSED_CONTEXT;
543 #endif
544 }
545
546 /* called by sv_clean_objs() for each live SV */
547
548 static void
549 do_clean_objs(pTHX_ SV *const ref)
550 {
551     assert (SvROK(ref));
552     {
553         SV * const target = SvRV(ref);
554         if (SvOBJECT(target)) {
555             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
556             if (SvWEAKREF(ref)) {
557                 sv_del_backref(target, ref);
558                 SvWEAKREF_off(ref);
559                 SvRV_set(ref, NULL);
560             } else {
561                 SvROK_off(ref);
562                 SvRV_set(ref, NULL);
563                 SvREFCNT_dec_NN(target);
564             }
565         }
566     }
567 }
568
569
570 /* clear any slots in a GV which hold objects - except IO;
571  * called by sv_clean_objs() for each live GV */
572
573 static void
574 do_clean_named_objs(pTHX_ SV *const sv)
575 {
576     SV *obj;
577     assert(SvTYPE(sv) == SVt_PVGV);
578     assert(isGV_with_GP(sv));
579     if (!GvGP(sv))
580         return;
581
582     /* freeing GP entries may indirectly free the current GV;
583      * hold onto it while we mess with the GP slots */
584     SvREFCNT_inc(sv);
585
586     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
587         DEBUG_D((PerlIO_printf(Perl_debug_log,
588                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
589         GvSV(sv) = NULL;
590         SvREFCNT_dec_NN(obj);
591     }
592     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
593         DEBUG_D((PerlIO_printf(Perl_debug_log,
594                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
595         GvAV(sv) = NULL;
596         SvREFCNT_dec_NN(obj);
597     }
598     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
599         DEBUG_D((PerlIO_printf(Perl_debug_log,
600                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
601         GvHV(sv) = NULL;
602         SvREFCNT_dec_NN(obj);
603     }
604     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
605         DEBUG_D((PerlIO_printf(Perl_debug_log,
606                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
607         GvCV_set(sv, NULL);
608         SvREFCNT_dec_NN(obj);
609     }
610     SvREFCNT_dec_NN(sv); /* undo the inc above */
611 }
612
613 /* clear any IO slots in a GV which hold objects (except stderr, defout);
614  * called by sv_clean_objs() for each live GV */
615
616 static void
617 do_clean_named_io_objs(pTHX_ SV *const sv)
618 {
619     SV *obj;
620     assert(SvTYPE(sv) == SVt_PVGV);
621     assert(isGV_with_GP(sv));
622     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
623         return;
624
625     SvREFCNT_inc(sv);
626     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
627         DEBUG_D((PerlIO_printf(Perl_debug_log,
628                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
629         GvIOp(sv) = NULL;
630         SvREFCNT_dec_NN(obj);
631     }
632     SvREFCNT_dec_NN(sv); /* undo the inc above */
633 }
634
635 /* Void wrapper to pass to visit() */
636 static void
637 do_curse(pTHX_ SV * const sv) {
638     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
639      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
640         return;
641     (void)curse(sv, 0);
642 }
643
644 /*
645 =for apidoc sv_clean_objs
646
647 Attempt to destroy all objects not yet freed.
648
649 =cut
650 */
651
652 void
653 Perl_sv_clean_objs(pTHX)
654 {
655     GV *olddef, *olderr;
656     PL_in_clean_objs = TRUE;
657     visit(do_clean_objs, SVf_ROK, SVf_ROK);
658     /* Some barnacles may yet remain, clinging to typeglobs.
659      * Run the non-IO destructors first: they may want to output
660      * error messages, close files etc */
661     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
662     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
663     /* And if there are some very tenacious barnacles clinging to arrays,
664        closures, or what have you.... */
665     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
666     olddef = PL_defoutgv;
667     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
668     if (olddef && isGV_with_GP(olddef))
669         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
670     olderr = PL_stderrgv;
671     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
672     if (olderr && isGV_with_GP(olderr))
673         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
674     SvREFCNT_dec(olddef);
675     PL_in_clean_objs = FALSE;
676 }
677
678 /* called by sv_clean_all() for each live SV */
679
680 static void
681 do_clean_all(pTHX_ SV *const sv)
682 {
683     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
684         /* don't clean pid table and strtab */
685         return;
686     }
687     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
688     SvFLAGS(sv) |= SVf_BREAK;
689     SvREFCNT_dec_NN(sv);
690 }
691
692 /*
693 =for apidoc sv_clean_all
694
695 Decrement the refcnt of each remaining SV, possibly triggering a
696 cleanup.  This function may have to be called multiple times to free
697 SVs which are in complex self-referential hierarchies.
698
699 =cut
700 */
701
702 I32
703 Perl_sv_clean_all(pTHX)
704 {
705     I32 cleaned;
706     PL_in_clean_all = TRUE;
707     cleaned = visit(do_clean_all, 0,0);
708     return cleaned;
709 }
710
711 /*
712   ARENASETS: a meta-arena implementation which separates arena-info
713   into struct arena_set, which contains an array of struct
714   arena_descs, each holding info for a single arena.  By separating
715   the meta-info from the arena, we recover the 1st slot, formerly
716   borrowed for list management.  The arena_set is about the size of an
717   arena, avoiding the needless malloc overhead of a naive linked-list.
718
719   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
720   memory in the last arena-set (1/2 on average).  In trade, we get
721   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
722   smaller types).  The recovery of the wasted space allows use of
723   small arenas for large, rare body types, by changing array* fields
724   in body_details_by_type[] below.
725 */
726 struct arena_desc {
727     char       *arena;          /* the raw storage, allocated aligned */
728     size_t      size;           /* its size ~4k typ */
729     svtype      utype;          /* bodytype stored in arena */
730 };
731
732 struct arena_set;
733
734 /* Get the maximum number of elements in set[] such that struct arena_set
735    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
736    therefore likely to be 1 aligned memory page.  */
737
738 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
739                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
740
741 struct arena_set {
742     struct arena_set* next;
743     unsigned int   set_size;    /* ie ARENAS_PER_SET */
744     unsigned int   curr;        /* index of next available arena-desc */
745     struct arena_desc set[ARENAS_PER_SET];
746 };
747
748 /*
749 =for apidoc sv_free_arenas
750
751 Deallocate the memory used by all arenas.  Note that all the individual SV
752 heads and bodies within the arenas must already have been freed.
753
754 =cut
755
756 */
757 void
758 Perl_sv_free_arenas(pTHX)
759 {
760     SV* sva;
761     SV* svanext;
762     unsigned int i;
763
764     /* Free arenas here, but be careful about fake ones.  (We assume
765        contiguity of the fake ones with the corresponding real ones.) */
766
767     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
768         svanext = MUTABLE_SV(SvANY(sva));
769         while (svanext && SvFAKE(svanext))
770             svanext = MUTABLE_SV(SvANY(svanext));
771
772         if (!SvFAKE(sva))
773             Safefree(sva);
774     }
775
776     {
777         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
778
779         while (aroot) {
780             struct arena_set *current = aroot;
781             i = aroot->curr;
782             while (i--) {
783                 assert(aroot->set[i].arena);
784                 Safefree(aroot->set[i].arena);
785             }
786             aroot = aroot->next;
787             Safefree(current);
788         }
789     }
790     PL_body_arenas = 0;
791
792     i = PERL_ARENA_ROOTS_SIZE;
793     while (i--)
794         PL_body_roots[i] = 0;
795
796     PL_sv_arenaroot = 0;
797     PL_sv_root = 0;
798 }
799
800 /*
801   Here are mid-level routines that manage the allocation of bodies out
802   of the various arenas.  There are 5 kinds of arenas:
803
804   1. SV-head arenas, which are discussed and handled above
805   2. regular body arenas
806   3. arenas for reduced-size bodies
807   4. Hash-Entry arenas
808
809   Arena types 2 & 3 are chained by body-type off an array of
810   arena-root pointers, which is indexed by svtype.  Some of the
811   larger/less used body types are malloced singly, since a large
812   unused block of them is wasteful.  Also, several svtypes dont have
813   bodies; the data fits into the sv-head itself.  The arena-root
814   pointer thus has a few unused root-pointers (which may be hijacked
815   later for arena types 4,5)
816
817   3 differs from 2 as an optimization; some body types have several
818   unused fields in the front of the structure (which are kept in-place
819   for consistency).  These bodies can be allocated in smaller chunks,
820   because the leading fields arent accessed.  Pointers to such bodies
821   are decremented to point at the unused 'ghost' memory, knowing that
822   the pointers are used with offsets to the real memory.
823
824
825 =head1 SV-Body Allocation
826
827 =cut
828
829 Allocation of SV-bodies is similar to SV-heads, differing as follows;
830 the allocation mechanism is used for many body types, so is somewhat
831 more complicated, it uses arena-sets, and has no need for still-live
832 SV detection.
833
834 At the outermost level, (new|del)_X*V macros return bodies of the
835 appropriate type.  These macros call either (new|del)_body_type or
836 (new|del)_body_allocated macro pairs, depending on specifics of the
837 type.  Most body types use the former pair, the latter pair is used to
838 allocate body types with "ghost fields".
839
840 "ghost fields" are fields that are unused in certain types, and
841 consequently don't need to actually exist.  They are declared because
842 they're part of a "base type", which allows use of functions as
843 methods.  The simplest examples are AVs and HVs, 2 aggregate types
844 which don't use the fields which support SCALAR semantics.
845
846 For these types, the arenas are carved up into appropriately sized
847 chunks, we thus avoid wasted memory for those unaccessed members.
848 When bodies are allocated, we adjust the pointer back in memory by the
849 size of the part not allocated, so it's as if we allocated the full
850 structure.  (But things will all go boom if you write to the part that
851 is "not there", because you'll be overwriting the last members of the
852 preceding structure in memory.)
853
854 We calculate the correction using the STRUCT_OFFSET macro on the first
855 member present.  If the allocated structure is smaller (no initial NV
856 actually allocated) then the net effect is to subtract the size of the NV
857 from the pointer, to return a new pointer as if an initial NV were actually
858 allocated.  (We were using structures named *_allocated for this, but
859 this turned out to be a subtle bug, because a structure without an NV
860 could have a lower alignment constraint, but the compiler is allowed to
861 optimised accesses based on the alignment constraint of the actual pointer
862 to the full structure, for example, using a single 64 bit load instruction
863 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
864
865 This is the same trick as was used for NV and IV bodies.  Ironically it
866 doesn't need to be used for NV bodies any more, because NV is now at
867 the start of the structure.  IV bodies, and also in some builds NV bodies,
868 don't need it either, because they are no longer allocated.
869
870 In turn, the new_body_* allocators call S_new_body(), which invokes
871 new_body_inline macro, which takes a lock, and takes a body off the
872 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
873 necessary to refresh an empty list.  Then the lock is released, and
874 the body is returned.
875
876 Perl_more_bodies allocates a new arena, and carves it up into an array of N
877 bodies, which it strings into a linked list.  It looks up arena-size
878 and body-size from the body_details table described below, thus
879 supporting the multiple body-types.
880
881 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
882 the (new|del)_X*V macros are mapped directly to malloc/free.
883
884 For each sv-type, struct body_details bodies_by_type[] carries
885 parameters which control these aspects of SV handling:
886
887 Arena_size determines whether arenas are used for this body type, and if
888 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
889 zero, forcing individual mallocs and frees.
890
891 Body_size determines how big a body is, and therefore how many fit into
892 each arena.  Offset carries the body-pointer adjustment needed for
893 "ghost fields", and is used in *_allocated macros.
894
895 But its main purpose is to parameterize info needed in
896 Perl_sv_upgrade().  The info here dramatically simplifies the function
897 vs the implementation in 5.8.8, making it table-driven.  All fields
898 are used for this, except for arena_size.
899
900 For the sv-types that have no bodies, arenas are not used, so those
901 PL_body_roots[sv_type] are unused, and can be overloaded.  In
902 something of a special case, SVt_NULL is borrowed for HE arenas;
903 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
904 bodies_by_type[SVt_NULL] slot is not used, as the table is not
905 available in hv.c.
906
907 */
908
909 struct body_details {
910     U8 body_size;       /* Size to allocate  */
911     U8 copy;            /* Size of structure to copy (may be shorter)  */
912     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
913     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
914     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
915     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
916     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
917     U32 arena_size;                 /* Size of arena to allocate */
918 };
919
920 #define HADNV FALSE
921 #define NONV TRUE
922
923
924 #ifdef PURIFY
925 /* With -DPURFIY we allocate everything directly, and don't use arenas.
926    This seems a rather elegant way to simplify some of the code below.  */
927 #define HASARENA FALSE
928 #else
929 #define HASARENA TRUE
930 #endif
931 #define NOARENA FALSE
932
933 /* Size the arenas to exactly fit a given number of bodies.  A count
934    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
935    simplifying the default.  If count > 0, the arena is sized to fit
936    only that many bodies, allowing arenas to be used for large, rare
937    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
938    limited by PERL_ARENA_SIZE, so we can safely oversize the
939    declarations.
940  */
941 #define FIT_ARENA0(body_size)                           \
942     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
943 #define FIT_ARENAn(count,body_size)                     \
944     ( count * body_size <= PERL_ARENA_SIZE)             \
945     ? count * body_size                                 \
946     : FIT_ARENA0 (body_size)
947 #define FIT_ARENA(count,body_size)                      \
948    (U32)(count                                          \
949     ? FIT_ARENAn (count, body_size)                     \
950     : FIT_ARENA0 (body_size))
951
952 /* Calculate the length to copy. Specifically work out the length less any
953    final padding the compiler needed to add.  See the comment in sv_upgrade
954    for why copying the padding proved to be a bug.  */
955
956 #define copy_length(type, last_member) \
957         STRUCT_OFFSET(type, last_member) \
958         + sizeof (((type*)SvANY((const SV *)0))->last_member)
959
960 static const struct body_details bodies_by_type[] = {
961     /* HEs use this offset for their arena.  */
962     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
963
964     /* IVs are in the head, so the allocation size is 0.  */
965     { 0,
966       sizeof(IV), /* This is used to copy out the IV body.  */
967       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
968       NOARENA /* IVS don't need an arena  */, 0
969     },
970
971 #if NVSIZE <= IVSIZE
972     { 0, sizeof(NV),
973       STRUCT_OFFSET(XPVNV, xnv_u),
974       SVt_NV, FALSE, HADNV, NOARENA, 0 },
975 #else
976     { sizeof(NV), sizeof(NV),
977       STRUCT_OFFSET(XPVNV, xnv_u),
978       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
979 #endif
980
981     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
982       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
983       + STRUCT_OFFSET(XPV, xpv_cur),
984       SVt_PV, FALSE, NONV, HASARENA,
985       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
986
987     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
988       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
989       + STRUCT_OFFSET(XPV, xpv_cur),
990       SVt_INVLIST, TRUE, NONV, HASARENA,
991       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
992
993     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
994       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
995       + STRUCT_OFFSET(XPV, xpv_cur),
996       SVt_PVIV, FALSE, NONV, HASARENA,
997       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
998
999     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
1000       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
1001       + STRUCT_OFFSET(XPV, xpv_cur),
1002       SVt_PVNV, FALSE, HADNV, HASARENA,
1003       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
1004
1005     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
1006       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
1007
1008     { sizeof(regexp),
1009       sizeof(regexp),
1010       0,
1011       SVt_REGEXP, TRUE, NONV, HASARENA,
1012       FIT_ARENA(0, sizeof(regexp))
1013     },
1014
1015     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
1016       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
1017     
1018     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1019       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
1020
1021     { sizeof(XPVAV),
1022       copy_length(XPVAV, xav_alloc),
1023       0,
1024       SVt_PVAV, TRUE, NONV, HASARENA,
1025       FIT_ARENA(0, sizeof(XPVAV)) },
1026
1027     { sizeof(XPVHV),
1028       copy_length(XPVHV, xhv_max),
1029       0,
1030       SVt_PVHV, TRUE, NONV, HASARENA,
1031       FIT_ARENA(0, sizeof(XPVHV)) },
1032
1033     { sizeof(XPVCV),
1034       sizeof(XPVCV),
1035       0,
1036       SVt_PVCV, TRUE, NONV, HASARENA,
1037       FIT_ARENA(0, sizeof(XPVCV)) },
1038
1039     { sizeof(XPVFM),
1040       sizeof(XPVFM),
1041       0,
1042       SVt_PVFM, TRUE, NONV, NOARENA,
1043       FIT_ARENA(20, sizeof(XPVFM)) },
1044
1045     { sizeof(XPVIO),
1046       sizeof(XPVIO),
1047       0,
1048       SVt_PVIO, TRUE, NONV, HASARENA,
1049       FIT_ARENA(24, sizeof(XPVIO)) },
1050 };
1051
1052 #define new_body_allocated(sv_type)             \
1053     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1054              - bodies_by_type[sv_type].offset)
1055
1056 /* return a thing to the free list */
1057
1058 #define del_body(thing, root)                           \
1059     STMT_START {                                        \
1060         void ** const thing_copy = (void **)thing;      \
1061         *thing_copy = *root;                            \
1062         *root = (void*)thing_copy;                      \
1063     } STMT_END
1064
1065 #ifdef PURIFY
1066 #if !(NVSIZE <= IVSIZE)
1067 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1068 #endif
1069 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1070 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1071
1072 #define del_XPVGV(p)    safefree(p)
1073
1074 #else /* !PURIFY */
1075
1076 #if !(NVSIZE <= IVSIZE)
1077 #  define new_XNV()     new_body_allocated(SVt_NV)
1078 #endif
1079 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1080 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1081
1082 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1083                                  &PL_body_roots[SVt_PVGV])
1084
1085 #endif /* PURIFY */
1086
1087 /* no arena for you! */
1088
1089 #define new_NOARENA(details) \
1090         safemalloc((details)->body_size + (details)->offset)
1091 #define new_NOARENAZ(details) \
1092         safecalloc((details)->body_size + (details)->offset, 1)
1093
1094 void *
1095 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1096                   const size_t arena_size)
1097 {
1098     void ** const root = &PL_body_roots[sv_type];
1099     struct arena_desc *adesc;
1100     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1101     unsigned int curr;
1102     char *start;
1103     const char *end;
1104     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1105 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1106     dVAR;
1107 #endif
1108 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1109     static bool done_sanity_check;
1110
1111     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1112      * variables like done_sanity_check. */
1113     if (!done_sanity_check) {
1114         unsigned int i = SVt_LAST;
1115
1116         done_sanity_check = TRUE;
1117
1118         while (i--)
1119             assert (bodies_by_type[i].type == i);
1120     }
1121 #endif
1122
1123     assert(arena_size);
1124
1125     /* may need new arena-set to hold new arena */
1126     if (!aroot || aroot->curr >= aroot->set_size) {
1127         struct arena_set *newroot;
1128         Newxz(newroot, 1, struct arena_set);
1129         newroot->set_size = ARENAS_PER_SET;
1130         newroot->next = aroot;
1131         aroot = newroot;
1132         PL_body_arenas = (void *) newroot;
1133         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1134     }
1135
1136     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1137     curr = aroot->curr++;
1138     adesc = &(aroot->set[curr]);
1139     assert(!adesc->arena);
1140     
1141     Newx(adesc->arena, good_arena_size, char);
1142     adesc->size = good_arena_size;
1143     adesc->utype = sv_type;
1144     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1145                           curr, (void*)adesc->arena, (UV)good_arena_size));
1146
1147     start = (char *) adesc->arena;
1148
1149     /* Get the address of the byte after the end of the last body we can fit.
1150        Remember, this is integer division:  */
1151     end = start + good_arena_size / body_size * body_size;
1152
1153     /* computed count doesn't reflect the 1st slot reservation */
1154 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1155     DEBUG_m(PerlIO_printf(Perl_debug_log,
1156                           "arena %p end %p arena-size %d (from %d) type %d "
1157                           "size %d ct %d\n",
1158                           (void*)start, (void*)end, (int)good_arena_size,
1159                           (int)arena_size, sv_type, (int)body_size,
1160                           (int)good_arena_size / (int)body_size));
1161 #else
1162     DEBUG_m(PerlIO_printf(Perl_debug_log,
1163                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1164                           (void*)start, (void*)end,
1165                           (int)arena_size, sv_type, (int)body_size,
1166                           (int)good_arena_size / (int)body_size));
1167 #endif
1168     *root = (void *)start;
1169
1170     while (1) {
1171         /* Where the next body would start:  */
1172         char * const next = start + body_size;
1173
1174         if (next >= end) {
1175             /* This is the last body:  */
1176             assert(next == end);
1177
1178             *(void **)start = 0;
1179             return *root;
1180         }
1181
1182         *(void**) start = (void *)next;
1183         start = next;
1184     }
1185 }
1186
1187 /* grab a new thing from the free list, allocating more if necessary.
1188    The inline version is used for speed in hot routines, and the
1189    function using it serves the rest (unless PURIFY).
1190 */
1191 #define new_body_inline(xpv, sv_type) \
1192     STMT_START { \
1193         void ** const r3wt = &PL_body_roots[sv_type]; \
1194         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1195           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1196                                              bodies_by_type[sv_type].body_size,\
1197                                              bodies_by_type[sv_type].arena_size)); \
1198         *(r3wt) = *(void**)(xpv); \
1199     } STMT_END
1200
1201 #ifndef PURIFY
1202
1203 STATIC void *
1204 S_new_body(pTHX_ const svtype sv_type)
1205 {
1206     void *xpv;
1207     new_body_inline(xpv, sv_type);
1208     return xpv;
1209 }
1210
1211 #endif
1212
1213 static const struct body_details fake_rv =
1214     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1215
1216 /*
1217 =for apidoc sv_upgrade
1218
1219 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1220 SV, then copies across as much information as possible from the old body.
1221 It croaks if the SV is already in a more complex form than requested.  You
1222 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1223 before calling C<sv_upgrade>, and hence does not croak.  See also
1224 C<svtype>.
1225
1226 =cut
1227 */
1228
1229 void
1230 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1231 {
1232     void*       old_body;
1233     void*       new_body;
1234     const svtype old_type = SvTYPE(sv);
1235     const struct body_details *new_type_details;
1236     const struct body_details *old_type_details
1237         = bodies_by_type + old_type;
1238     SV *referant = NULL;
1239
1240     PERL_ARGS_ASSERT_SV_UPGRADE;
1241
1242     if (old_type == new_type)
1243         return;
1244
1245     /* This clause was purposefully added ahead of the early return above to
1246        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1247        inference by Nick I-S that it would fix other troublesome cases. See
1248        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1249
1250        Given that shared hash key scalars are no longer PVIV, but PV, there is
1251        no longer need to unshare so as to free up the IVX slot for its proper
1252        purpose. So it's safe to move the early return earlier.  */
1253
1254     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1255         sv_force_normal_flags(sv, 0);
1256     }
1257
1258     old_body = SvANY(sv);
1259
1260     /* Copying structures onto other structures that have been neatly zeroed
1261        has a subtle gotcha. Consider XPVMG
1262
1263        +------+------+------+------+------+-------+-------+
1264        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1265        +------+------+------+------+------+-------+-------+
1266        0      4      8     12     16     20      24      28
1267
1268        where NVs are aligned to 8 bytes, so that sizeof that structure is
1269        actually 32 bytes long, with 4 bytes of padding at the end:
1270
1271        +------+------+------+------+------+-------+-------+------+
1272        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1273        +------+------+------+------+------+-------+-------+------+
1274        0      4      8     12     16     20      24      28     32
1275
1276        so what happens if you allocate memory for this structure:
1277
1278        +------+------+------+------+------+-------+-------+------+------+...
1279        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1280        +------+------+------+------+------+-------+-------+------+------+...
1281        0      4      8     12     16     20      24      28     32     36
1282
1283        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1284        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1285        started out as zero once, but it's quite possible that it isn't. So now,
1286        rather than a nicely zeroed GP, you have it pointing somewhere random.
1287        Bugs ensue.
1288
1289        (In fact, GP ends up pointing at a previous GP structure, because the
1290        principle cause of the padding in XPVMG getting garbage is a copy of
1291        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1292        this happens to be moot because XPVGV has been re-ordered, with GP
1293        no longer after STASH)
1294
1295        So we are careful and work out the size of used parts of all the
1296        structures.  */
1297
1298     switch (old_type) {
1299     case SVt_NULL:
1300         break;
1301     case SVt_IV:
1302         if (SvROK(sv)) {
1303             referant = SvRV(sv);
1304             old_type_details = &fake_rv;
1305             if (new_type == SVt_NV)
1306                 new_type = SVt_PVNV;
1307         } else {
1308             if (new_type < SVt_PVIV) {
1309                 new_type = (new_type == SVt_NV)
1310                     ? SVt_PVNV : SVt_PVIV;
1311             }
1312         }
1313         break;
1314     case SVt_NV:
1315         if (new_type < SVt_PVNV) {
1316             new_type = SVt_PVNV;
1317         }
1318         break;
1319     case SVt_PV:
1320         assert(new_type > SVt_PV);
1321         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1322         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1323         break;
1324     case SVt_PVIV:
1325         break;
1326     case SVt_PVNV:
1327         break;
1328     case SVt_PVMG:
1329         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1330            there's no way that it can be safely upgraded, because perl.c
1331            expects to Safefree(SvANY(PL_mess_sv))  */
1332         assert(sv != PL_mess_sv);
1333         break;
1334     default:
1335         if (UNLIKELY(old_type_details->cant_upgrade))
1336             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1337                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1338     }
1339
1340     if (UNLIKELY(old_type > new_type))
1341         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1342                 (int)old_type, (int)new_type);
1343
1344     new_type_details = bodies_by_type + new_type;
1345
1346     SvFLAGS(sv) &= ~SVTYPEMASK;
1347     SvFLAGS(sv) |= new_type;
1348
1349     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1350        the return statements above will have triggered.  */
1351     assert (new_type != SVt_NULL);
1352     switch (new_type) {
1353     case SVt_IV:
1354         assert(old_type == SVt_NULL);
1355         SET_SVANY_FOR_BODYLESS_IV(sv);
1356         SvIV_set(sv, 0);
1357         return;
1358     case SVt_NV:
1359         assert(old_type == SVt_NULL);
1360 #if NVSIZE <= IVSIZE
1361         SET_SVANY_FOR_BODYLESS_NV(sv);
1362 #else
1363         SvANY(sv) = new_XNV();
1364 #endif
1365         SvNV_set(sv, 0);
1366         return;
1367     case SVt_PVHV:
1368     case SVt_PVAV:
1369         assert(new_type_details->body_size);
1370
1371 #ifndef PURIFY  
1372         assert(new_type_details->arena);
1373         assert(new_type_details->arena_size);
1374         /* This points to the start of the allocated area.  */
1375         new_body_inline(new_body, new_type);
1376         Zero(new_body, new_type_details->body_size, char);
1377         new_body = ((char *)new_body) - new_type_details->offset;
1378 #else
1379         /* We always allocated the full length item with PURIFY. To do this
1380            we fake things so that arena is false for all 16 types..  */
1381         new_body = new_NOARENAZ(new_type_details);
1382 #endif
1383         SvANY(sv) = new_body;
1384         if (new_type == SVt_PVAV) {
1385             AvMAX(sv)   = -1;
1386             AvFILLp(sv) = -1;
1387             AvREAL_only(sv);
1388             if (old_type_details->body_size) {
1389                 AvALLOC(sv) = 0;
1390             } else {
1391                 /* It will have been zeroed when the new body was allocated.
1392                    Lets not write to it, in case it confuses a write-back
1393                    cache.  */
1394             }
1395         } else {
1396             assert(!SvOK(sv));
1397             SvOK_off(sv);
1398 #ifndef NODEFAULT_SHAREKEYS
1399             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1400 #endif
1401             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1402             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1403         }
1404
1405         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1406            The target created by newSVrv also is, and it can have magic.
1407            However, it never has SvPVX set.
1408         */
1409         if (old_type == SVt_IV) {
1410             assert(!SvROK(sv));
1411         } else if (old_type >= SVt_PV) {
1412             assert(SvPVX_const(sv) == 0);
1413         }
1414
1415         if (old_type >= SVt_PVMG) {
1416             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1417             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1418         } else {
1419             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1420         }
1421         break;
1422
1423     case SVt_PVIV:
1424         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1425            no route from NV to PVIV, NOK can never be true  */
1426         assert(!SvNOKp(sv));
1427         assert(!SvNOK(sv));
1428         /* FALLTHROUGH */
1429     case SVt_PVIO:
1430     case SVt_PVFM:
1431     case SVt_PVGV:
1432     case SVt_PVCV:
1433     case SVt_PVLV:
1434     case SVt_INVLIST:
1435     case SVt_REGEXP:
1436     case SVt_PVMG:
1437     case SVt_PVNV:
1438     case SVt_PV:
1439
1440         assert(new_type_details->body_size);
1441         /* We always allocated the full length item with PURIFY. To do this
1442            we fake things so that arena is false for all 16 types..  */
1443         if(new_type_details->arena) {
1444             /* This points to the start of the allocated area.  */
1445             new_body_inline(new_body, new_type);
1446             Zero(new_body, new_type_details->body_size, char);
1447             new_body = ((char *)new_body) - new_type_details->offset;
1448         } else {
1449             new_body = new_NOARENAZ(new_type_details);
1450         }
1451         SvANY(sv) = new_body;
1452
1453         if (old_type_details->copy) {
1454             /* There is now the potential for an upgrade from something without
1455                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1456             int offset = old_type_details->offset;
1457             int length = old_type_details->copy;
1458
1459             if (new_type_details->offset > old_type_details->offset) {
1460                 const int difference
1461                     = new_type_details->offset - old_type_details->offset;
1462                 offset += difference;
1463                 length -= difference;
1464             }
1465             assert (length >= 0);
1466                 
1467             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1468                  char);
1469         }
1470
1471 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1472         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1473          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1474          * NV slot, but the new one does, then we need to initialise the
1475          * freshly created NV slot with whatever the correct bit pattern is
1476          * for 0.0  */
1477         if (old_type_details->zero_nv && !new_type_details->zero_nv
1478             && !isGV_with_GP(sv))
1479             SvNV_set(sv, 0);
1480 #endif
1481
1482         if (UNLIKELY(new_type == SVt_PVIO)) {
1483             IO * const io = MUTABLE_IO(sv);
1484             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1485
1486             SvOBJECT_on(io);
1487             /* Clear the stashcache because a new IO could overrule a package
1488                name */
1489             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1490             hv_clear(PL_stashcache);
1491
1492             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1493             IoPAGE_LEN(sv) = 60;
1494         }
1495         if (UNLIKELY(new_type == SVt_REGEXP))
1496             sv->sv_u.svu_rx = (regexp *)new_body;
1497         else if (old_type < SVt_PV) {
1498             /* referant will be NULL unless the old type was SVt_IV emulating
1499                SVt_RV */
1500             sv->sv_u.svu_rv = referant;
1501         }
1502         break;
1503     default:
1504         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1505                    (unsigned long)new_type);
1506     }
1507
1508     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1509        and sometimes SVt_NV */
1510     if (old_type_details->body_size) {
1511 #ifdef PURIFY
1512         safefree(old_body);
1513 #else
1514         /* Note that there is an assumption that all bodies of types that
1515            can be upgraded came from arenas. Only the more complex non-
1516            upgradable types are allowed to be directly malloc()ed.  */
1517         assert(old_type_details->arena);
1518         del_body((void*)((char*)old_body + old_type_details->offset),
1519                  &PL_body_roots[old_type]);
1520 #endif
1521     }
1522 }
1523
1524 /*
1525 =for apidoc sv_backoff
1526
1527 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1528 wrapper instead.
1529
1530 =cut
1531 */
1532
1533 int
1534 Perl_sv_backoff(SV *const sv)
1535 {
1536     STRLEN delta;
1537     const char * const s = SvPVX_const(sv);
1538
1539     PERL_ARGS_ASSERT_SV_BACKOFF;
1540
1541     assert(SvOOK(sv));
1542     assert(SvTYPE(sv) != SVt_PVHV);
1543     assert(SvTYPE(sv) != SVt_PVAV);
1544
1545     SvOOK_offset(sv, delta);
1546     
1547     SvLEN_set(sv, SvLEN(sv) + delta);
1548     SvPV_set(sv, SvPVX(sv) - delta);
1549     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1550     SvFLAGS(sv) &= ~SVf_OOK;
1551     return 0;
1552 }
1553
1554 /*
1555 =for apidoc sv_grow
1556
1557 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1558 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1559 Use the C<SvGROW> wrapper instead.
1560
1561 =cut
1562 */
1563
1564 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1565
1566 char *
1567 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1568 {
1569     char *s;
1570
1571     PERL_ARGS_ASSERT_SV_GROW;
1572
1573     if (SvROK(sv))
1574         sv_unref(sv);
1575     if (SvTYPE(sv) < SVt_PV) {
1576         sv_upgrade(sv, SVt_PV);
1577         s = SvPVX_mutable(sv);
1578     }
1579     else if (SvOOK(sv)) {       /* pv is offset? */
1580         sv_backoff(sv);
1581         s = SvPVX_mutable(sv);
1582         if (newlen > SvLEN(sv))
1583             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1584     }
1585     else
1586     {
1587         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1588         s = SvPVX_mutable(sv);
1589     }
1590
1591 #ifdef PERL_NEW_COPY_ON_WRITE
1592     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1593      * to store the COW count. So in general, allocate one more byte than
1594      * asked for, to make it likely this byte is always spare: and thus
1595      * make more strings COW-able.
1596      * If the new size is a big power of two, don't bother: we assume the
1597      * caller wanted a nice 2^N sized block and will be annoyed at getting
1598      * 2^N+1.
1599      * Only increment if the allocation isn't MEM_SIZE_MAX,
1600      * otherwise it will wrap to 0.
1601      */
1602     if (newlen & 0xff && newlen != MEM_SIZE_MAX)
1603         newlen++;
1604 #endif
1605
1606 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1607 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1608 #endif
1609
1610     if (newlen > SvLEN(sv)) {           /* need more room? */
1611         STRLEN minlen = SvCUR(sv);
1612         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1613         if (newlen < minlen)
1614             newlen = minlen;
1615 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1616
1617         /* Don't round up on the first allocation, as odds are pretty good that
1618          * the initial request is accurate as to what is really needed */
1619         if (SvLEN(sv)) {
1620             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1621             if (rounded > newlen)
1622                 newlen = rounded;
1623         }
1624 #endif
1625         if (SvLEN(sv) && s) {
1626             s = (char*)saferealloc(s, newlen);
1627         }
1628         else {
1629             s = (char*)safemalloc(newlen);
1630             if (SvPVX_const(sv) && SvCUR(sv)) {
1631                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1632             }
1633         }
1634         SvPV_set(sv, s);
1635 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1636         /* Do this here, do it once, do it right, and then we will never get
1637            called back into sv_grow() unless there really is some growing
1638            needed.  */
1639         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1640 #else
1641         SvLEN_set(sv, newlen);
1642 #endif
1643     }
1644     return s;
1645 }
1646
1647 /*
1648 =for apidoc sv_setiv
1649
1650 Copies an integer into the given SV, upgrading first if necessary.
1651 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1652
1653 =cut
1654 */
1655
1656 void
1657 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1658 {
1659     PERL_ARGS_ASSERT_SV_SETIV;
1660
1661     SV_CHECK_THINKFIRST_COW_DROP(sv);
1662     switch (SvTYPE(sv)) {
1663     case SVt_NULL:
1664     case SVt_NV:
1665         sv_upgrade(sv, SVt_IV);
1666         break;
1667     case SVt_PV:
1668         sv_upgrade(sv, SVt_PVIV);
1669         break;
1670
1671     case SVt_PVGV:
1672         if (!isGV_with_GP(sv))
1673             break;
1674     case SVt_PVAV:
1675     case SVt_PVHV:
1676     case SVt_PVCV:
1677     case SVt_PVFM:
1678     case SVt_PVIO:
1679         /* diag_listed_as: Can't coerce %s to %s in %s */
1680         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1681                    OP_DESC(PL_op));
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<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<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     default: NOOP;
1794     }
1795     SvNV_set(sv, num);
1796     (void)SvNOK_only(sv);                       /* validate number */
1797     SvTAINT(sv);
1798 }
1799
1800 /*
1801 =for apidoc sv_setnv_mg
1802
1803 Like C<sv_setnv>, but also handles 'set' magic.
1804
1805 =cut
1806 */
1807
1808 void
1809 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1810 {
1811     PERL_ARGS_ASSERT_SV_SETNV_MG;
1812
1813     sv_setnv(sv,num);
1814     SvSETMAGIC(sv);
1815 }
1816
1817 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1818  * not incrementable warning display.
1819  * Originally part of S_not_a_number().
1820  * The return value may be != tmpbuf.
1821  */
1822
1823 STATIC const char *
1824 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1825     const char *pv;
1826
1827      PERL_ARGS_ASSERT_SV_DISPLAY;
1828
1829      if (DO_UTF8(sv)) {
1830           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1831           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1832      } else {
1833           char *d = tmpbuf;
1834           const char * const limit = tmpbuf + tmpbuf_size - 8;
1835           /* each *s can expand to 4 chars + "...\0",
1836              i.e. need room for 8 chars */
1837         
1838           const char *s = SvPVX_const(sv);
1839           const char * const end = s + SvCUR(sv);
1840           for ( ; s < end && d < limit; s++ ) {
1841                int ch = *s & 0xFF;
1842                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1843                     *d++ = 'M';
1844                     *d++ = '-';
1845
1846                     /* Map to ASCII "equivalent" of Latin1 */
1847                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1848                }
1849                if (ch == '\n') {
1850                     *d++ = '\\';
1851                     *d++ = 'n';
1852                }
1853                else if (ch == '\r') {
1854                     *d++ = '\\';
1855                     *d++ = 'r';
1856                }
1857                else if (ch == '\f') {
1858                     *d++ = '\\';
1859                     *d++ = 'f';
1860                }
1861                else if (ch == '\\') {
1862                     *d++ = '\\';
1863                     *d++ = '\\';
1864                }
1865                else if (ch == '\0') {
1866                     *d++ = '\\';
1867                     *d++ = '0';
1868                }
1869                else if (isPRINT_LC(ch))
1870                     *d++ = ch;
1871                else {
1872                     *d++ = '^';
1873                     *d++ = toCTRL(ch);
1874                }
1875           }
1876           if (s < end) {
1877                *d++ = '.';
1878                *d++ = '.';
1879                *d++ = '.';
1880           }
1881           *d = '\0';
1882           pv = tmpbuf;
1883     }
1884
1885     return pv;
1886 }
1887
1888 /* Print an "isn't numeric" warning, using a cleaned-up,
1889  * printable version of the offending string
1890  */
1891
1892 STATIC void
1893 S_not_a_number(pTHX_ SV *const sv)
1894 {
1895      char tmpbuf[64];
1896      const char *pv;
1897
1898      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1899
1900      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1901
1902     if (PL_op)
1903         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1904                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1905                     "Argument \"%s\" isn't numeric in %s", pv,
1906                     OP_DESC(PL_op));
1907     else
1908         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1909                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1910                     "Argument \"%s\" isn't numeric", pv);
1911 }
1912
1913 STATIC void
1914 S_not_incrementable(pTHX_ SV *const sv) {
1915      char tmpbuf[64];
1916      const char *pv;
1917
1918      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1919
1920      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1921
1922      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1923                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1924 }
1925
1926 /*
1927 =for apidoc looks_like_number
1928
1929 Test if the content of an SV looks like a number (or is a number).
1930 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1931 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1932 ignored.
1933
1934 =cut
1935 */
1936
1937 I32
1938 Perl_looks_like_number(pTHX_ SV *const sv)
1939 {
1940     const char *sbegin;
1941     STRLEN len;
1942     int numtype;
1943
1944     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1945
1946     if (SvPOK(sv) || SvPOKp(sv)) {
1947         sbegin = SvPV_nomg_const(sv, len);
1948     }
1949     else
1950         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1951     numtype = grok_number(sbegin, len, NULL);
1952     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1953 }
1954
1955 STATIC bool
1956 S_glob_2number(pTHX_ GV * const gv)
1957 {
1958     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1959
1960     /* We know that all GVs stringify to something that is not-a-number,
1961         so no need to test that.  */
1962     if (ckWARN(WARN_NUMERIC))
1963     {
1964         SV *const buffer = sv_newmortal();
1965         gv_efullname3(buffer, gv, "*");
1966         not_a_number(buffer);
1967     }
1968     /* We just want something true to return, so that S_sv_2iuv_common
1969         can tail call us and return true.  */
1970     return TRUE;
1971 }
1972
1973 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1974    until proven guilty, assume that things are not that bad... */
1975
1976 /*
1977    NV_PRESERVES_UV:
1978
1979    As 64 bit platforms often have an NV that doesn't preserve all bits of
1980    an IV (an assumption perl has been based on to date) it becomes necessary
1981    to remove the assumption that the NV always carries enough precision to
1982    recreate the IV whenever needed, and that the NV is the canonical form.
1983    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1984    precision as a side effect of conversion (which would lead to insanity
1985    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1986    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1987       where precision was lost, and IV/UV/NV slots that have a valid conversion
1988       which has lost no precision
1989    2) to ensure that if a numeric conversion to one form is requested that
1990       would lose precision, the precise conversion (or differently
1991       imprecise conversion) is also performed and cached, to prevent
1992       requests for different numeric formats on the same SV causing
1993       lossy conversion chains. (lossless conversion chains are perfectly
1994       acceptable (still))
1995
1996
1997    flags are used:
1998    SvIOKp is true if the IV slot contains a valid value
1999    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
2000    SvNOKp is true if the NV slot contains a valid value
2001    SvNOK  is true only if the NV value is accurate
2002
2003    so
2004    while converting from PV to NV, check to see if converting that NV to an
2005    IV(or UV) would lose accuracy over a direct conversion from PV to
2006    IV(or UV). If it would, cache both conversions, return NV, but mark
2007    SV as IOK NOKp (ie not NOK).
2008
2009    While converting from PV to IV, check to see if converting that IV to an
2010    NV would lose accuracy over a direct conversion from PV to NV. If it
2011    would, cache both conversions, flag similarly.
2012
2013    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2014    correctly because if IV & NV were set NV *always* overruled.
2015    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2016    changes - now IV and NV together means that the two are interchangeable:
2017    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2018
2019    The benefit of this is that operations such as pp_add know that if
2020    SvIOK is true for both left and right operands, then integer addition
2021    can be used instead of floating point (for cases where the result won't
2022    overflow). Before, floating point was always used, which could lead to
2023    loss of precision compared with integer addition.
2024
2025    * making IV and NV equal status should make maths accurate on 64 bit
2026      platforms
2027    * may speed up maths somewhat if pp_add and friends start to use
2028      integers when possible instead of fp. (Hopefully the overhead in
2029      looking for SvIOK and checking for overflow will not outweigh the
2030      fp to integer speedup)
2031    * will slow down integer operations (callers of SvIV) on "inaccurate"
2032      values, as the change from SvIOK to SvIOKp will cause a call into
2033      sv_2iv each time rather than a macro access direct to the IV slot
2034    * should speed up number->string conversion on integers as IV is
2035      favoured when IV and NV are equally accurate
2036
2037    ####################################################################
2038    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2039    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2040    On the other hand, SvUOK is true iff UV.
2041    ####################################################################
2042
2043    Your mileage will vary depending your CPU's relative fp to integer
2044    performance ratio.
2045 */
2046
2047 #ifndef NV_PRESERVES_UV
2048 #  define IS_NUMBER_UNDERFLOW_IV 1
2049 #  define IS_NUMBER_UNDERFLOW_UV 2
2050 #  define IS_NUMBER_IV_AND_UV    2
2051 #  define IS_NUMBER_OVERFLOW_IV  4
2052 #  define IS_NUMBER_OVERFLOW_UV  5
2053
2054 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2055
2056 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2057 STATIC int
2058 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2059 #  ifdef DEBUGGING
2060                        , I32 numtype
2061 #  endif
2062                        )
2063 {
2064     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2065     PERL_UNUSED_CONTEXT;
2066
2067     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));
2068     if (SvNVX(sv) < (NV)IV_MIN) {
2069         (void)SvIOKp_on(sv);
2070         (void)SvNOK_on(sv);
2071         SvIV_set(sv, IV_MIN);
2072         return IS_NUMBER_UNDERFLOW_IV;
2073     }
2074     if (SvNVX(sv) > (NV)UV_MAX) {
2075         (void)SvIOKp_on(sv);
2076         (void)SvNOK_on(sv);
2077         SvIsUV_on(sv);
2078         SvUV_set(sv, UV_MAX);
2079         return IS_NUMBER_OVERFLOW_UV;
2080     }
2081     (void)SvIOKp_on(sv);
2082     (void)SvNOK_on(sv);
2083     /* Can't use strtol etc to convert this string.  (See truth table in
2084        sv_2iv  */
2085     if (SvNVX(sv) <= (UV)IV_MAX) {
2086         SvIV_set(sv, I_V(SvNVX(sv)));
2087         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2088             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2089         } else {
2090             /* Integer is imprecise. NOK, IOKp */
2091         }
2092         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2093     }
2094     SvIsUV_on(sv);
2095     SvUV_set(sv, U_V(SvNVX(sv)));
2096     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2097         if (SvUVX(sv) == UV_MAX) {
2098             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2099                possibly be preserved by NV. Hence, it must be overflow.
2100                NOK, IOKp */
2101             return IS_NUMBER_OVERFLOW_UV;
2102         }
2103         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2104     } else {
2105         /* Integer is imprecise. NOK, IOKp */
2106     }
2107     return IS_NUMBER_OVERFLOW_IV;
2108 }
2109 #endif /* !NV_PRESERVES_UV*/
2110
2111 /* If numtype is infnan, set the NV of the sv accordingly.
2112  * If numtype is anything else, try setting the NV using Atof(PV). */
2113 #ifdef USING_MSVC6
2114 #  pragma warning(push)
2115 #  pragma warning(disable:4756;disable:4056)
2116 #endif
2117 static void
2118 S_sv_setnv(pTHX_ SV* sv, int numtype)
2119 {
2120     bool pok = cBOOL(SvPOK(sv));
2121     bool nok = FALSE;
2122     if ((numtype & IS_NUMBER_INFINITY)) {
2123         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2124         nok = TRUE;
2125     }
2126     else if ((numtype & IS_NUMBER_NAN)) {
2127         SvNV_set(sv, NV_NAN);
2128         nok = TRUE;
2129     }
2130     else if (pok) {
2131         SvNV_set(sv, Atof(SvPVX_const(sv)));
2132         /* Purposefully no true nok here, since we don't want to blow
2133          * away the possible IOK/UV of an existing sv. */
2134     }
2135     if (nok) {
2136         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2137         if (pok)
2138             SvPOK_on(sv); /* PV is okay, though. */
2139     }
2140 }
2141 #ifdef USING_MSVC6
2142 #  pragma warning(pop)
2143 #endif
2144
2145 STATIC bool
2146 S_sv_2iuv_common(pTHX_ SV *const sv)
2147 {
2148     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2149
2150     if (SvNOKp(sv)) {
2151         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2152          * without also getting a cached IV/UV from it at the same time
2153          * (ie PV->NV conversion should detect loss of accuracy and cache
2154          * IV or UV at same time to avoid this. */
2155         /* IV-over-UV optimisation - choose to cache IV if possible */
2156
2157         if (SvTYPE(sv) == SVt_NV)
2158             sv_upgrade(sv, SVt_PVNV);
2159
2160         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2161         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2162            certainly cast into the IV range at IV_MAX, whereas the correct
2163            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2164            cases go to UV */
2165 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2166         if (Perl_isnan(SvNVX(sv))) {
2167             SvUV_set(sv, 0);
2168             SvIsUV_on(sv);
2169             return FALSE;
2170         }
2171 #endif
2172         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2173             SvIV_set(sv, I_V(SvNVX(sv)));
2174             if (SvNVX(sv) == (NV) SvIVX(sv)
2175 #ifndef NV_PRESERVES_UV
2176                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2177                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2178                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2179                 /* Don't flag it as "accurately an integer" if the number
2180                    came from a (by definition imprecise) NV operation, and
2181                    we're outside the range of NV integer precision */
2182 #endif
2183                 ) {
2184                 if (SvNOK(sv))
2185                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2186                 else {
2187                     /* scalar has trailing garbage, eg "42a" */
2188                 }
2189                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2190                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2191                                       PTR2UV(sv),
2192                                       SvNVX(sv),
2193                                       SvIVX(sv)));
2194
2195             } else {
2196                 /* IV not precise.  No need to convert from PV, as NV
2197                    conversion would already have cached IV if it detected
2198                    that PV->IV would be better than PV->NV->IV
2199                    flags already correct - don't set public IOK.  */
2200                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2201                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2202                                       PTR2UV(sv),
2203                                       SvNVX(sv),
2204                                       SvIVX(sv)));
2205             }
2206             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2207                but the cast (NV)IV_MIN rounds to a the value less (more
2208                negative) than IV_MIN which happens to be equal to SvNVX ??
2209                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2210                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2211                (NV)UVX == NVX are both true, but the values differ. :-(
2212                Hopefully for 2s complement IV_MIN is something like
2213                0x8000000000000000 which will be exact. NWC */
2214         }
2215         else {
2216             SvUV_set(sv, U_V(SvNVX(sv)));
2217             if (
2218                 (SvNVX(sv) == (NV) SvUVX(sv))
2219 #ifndef  NV_PRESERVES_UV
2220                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2221                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2222                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2223                 /* Don't flag it as "accurately an integer" if the number
2224                    came from a (by definition imprecise) NV operation, and
2225                    we're outside the range of NV integer precision */
2226 #endif
2227                 && SvNOK(sv)
2228                 )
2229                 SvIOK_on(sv);
2230             SvIsUV_on(sv);
2231             DEBUG_c(PerlIO_printf(Perl_debug_log,
2232                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2233                                   PTR2UV(sv),
2234                                   SvUVX(sv),
2235                                   SvUVX(sv)));
2236         }
2237     }
2238     else if (SvPOKp(sv)) {
2239         UV value;
2240         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2241         /* We want to avoid a possible problem when we cache an IV/ a UV which
2242            may be later translated to an NV, and the resulting NV is not
2243            the same as the direct translation of the initial string
2244            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2245            be careful to ensure that the value with the .456 is around if the
2246            NV value is requested in the future).
2247         
2248            This means that if we cache such an IV/a UV, we need to cache the
2249            NV as well.  Moreover, we trade speed for space, and do not
2250            cache the NV if we are sure it's not needed.
2251          */
2252
2253         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2254         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2255              == IS_NUMBER_IN_UV) {
2256             /* It's definitely an integer, only upgrade to PVIV */
2257             if (SvTYPE(sv) < SVt_PVIV)
2258                 sv_upgrade(sv, SVt_PVIV);
2259             (void)SvIOK_on(sv);
2260         } else if (SvTYPE(sv) < SVt_PVNV)
2261             sv_upgrade(sv, SVt_PVNV);
2262
2263         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2264             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2265                 not_a_number(sv);
2266             S_sv_setnv(aTHX_ sv, numtype);
2267             return FALSE;
2268         }
2269
2270         /* If NVs preserve UVs then we only use the UV value if we know that
2271            we aren't going to call atof() below. If NVs don't preserve UVs
2272            then the value returned may have more precision than atof() will
2273            return, even though value isn't perfectly accurate.  */
2274         if ((numtype & (IS_NUMBER_IN_UV
2275 #ifdef NV_PRESERVES_UV
2276                         | IS_NUMBER_NOT_INT
2277 #endif
2278             )) == IS_NUMBER_IN_UV) {
2279             /* This won't turn off the public IOK flag if it was set above  */
2280             (void)SvIOKp_on(sv);
2281
2282             if (!(numtype & IS_NUMBER_NEG)) {
2283                 /* positive */;
2284                 if (value <= (UV)IV_MAX) {
2285                     SvIV_set(sv, (IV)value);
2286                 } else {
2287                     /* it didn't overflow, and it was positive. */
2288                     SvUV_set(sv, value);
2289                     SvIsUV_on(sv);
2290                 }
2291             } else {
2292                 /* 2s complement assumption  */
2293                 if (value <= (UV)IV_MIN) {
2294                     SvIV_set(sv, value == (UV)IV_MIN
2295                                     ? IV_MIN : -(IV)value);
2296                 } else {
2297                     /* Too negative for an IV.  This is a double upgrade, but
2298                        I'm assuming it will be rare.  */
2299                     if (SvTYPE(sv) < SVt_PVNV)
2300                         sv_upgrade(sv, SVt_PVNV);
2301                     SvNOK_on(sv);
2302                     SvIOK_off(sv);
2303                     SvIOKp_on(sv);
2304                     SvNV_set(sv, -(NV)value);
2305                     SvIV_set(sv, IV_MIN);
2306                 }
2307             }
2308         }
2309         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2310            will be in the previous block to set the IV slot, and the next
2311            block to set the NV slot.  So no else here.  */
2312         
2313         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2314             != IS_NUMBER_IN_UV) {
2315             /* It wasn't an (integer that doesn't overflow the UV). */
2316             S_sv_setnv(aTHX_ sv, numtype);
2317
2318             if (! numtype && ckWARN(WARN_NUMERIC))
2319                 not_a_number(sv);
2320
2321             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2322                                   PTR2UV(sv), SvNVX(sv)));
2323
2324 #ifdef NV_PRESERVES_UV
2325             (void)SvIOKp_on(sv);
2326             (void)SvNOK_on(sv);
2327 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2328             if (Perl_isnan(SvNVX(sv))) {
2329                 SvUV_set(sv, 0);
2330                 SvIsUV_on(sv);
2331                 return FALSE;
2332             }
2333 #endif
2334             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2335                 SvIV_set(sv, I_V(SvNVX(sv)));
2336                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2337                     SvIOK_on(sv);
2338                 } else {
2339                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2340                 }
2341                 /* UV will not work better than IV */
2342             } else {
2343                 if (SvNVX(sv) > (NV)UV_MAX) {
2344                     SvIsUV_on(sv);
2345                     /* Integer is inaccurate. NOK, IOKp, is UV */
2346                     SvUV_set(sv, UV_MAX);
2347                 } else {
2348                     SvUV_set(sv, U_V(SvNVX(sv)));
2349                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2350                        NV preservse UV so can do correct comparison.  */
2351                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2352                         SvIOK_on(sv);
2353                     } else {
2354                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2355                     }
2356                 }
2357                 SvIsUV_on(sv);
2358             }
2359 #else /* NV_PRESERVES_UV */
2360             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2361                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2362                 /* The IV/UV slot will have been set from value returned by
2363                    grok_number above.  The NV slot has just been set using
2364                    Atof.  */
2365                 SvNOK_on(sv);
2366                 assert (SvIOKp(sv));
2367             } else {
2368                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2369                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2370                     /* Small enough to preserve all bits. */
2371                     (void)SvIOKp_on(sv);
2372                     SvNOK_on(sv);
2373                     SvIV_set(sv, I_V(SvNVX(sv)));
2374                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2375                         SvIOK_on(sv);
2376                     /* Assumption: first non-preserved integer is < IV_MAX,
2377                        this NV is in the preserved range, therefore: */
2378                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2379                           < (UV)IV_MAX)) {
2380                         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);
2381                     }
2382                 } else {
2383                     /* IN_UV NOT_INT
2384                          0      0       already failed to read UV.
2385                          0      1       already failed to read UV.
2386                          1      0       you won't get here in this case. IV/UV
2387                                         slot set, public IOK, Atof() unneeded.
2388                          1      1       already read UV.
2389                        so there's no point in sv_2iuv_non_preserve() attempting
2390                        to use atol, strtol, strtoul etc.  */
2391 #  ifdef DEBUGGING
2392                     sv_2iuv_non_preserve (sv, numtype);
2393 #  else
2394                     sv_2iuv_non_preserve (sv);
2395 #  endif
2396                 }
2397             }
2398 #endif /* NV_PRESERVES_UV */
2399         /* It might be more code efficient to go through the entire logic above
2400            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2401            gets complex and potentially buggy, so more programmer efficient
2402            to do it this way, by turning off the public flags:  */
2403         if (!numtype)
2404             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2405         }
2406     }
2407     else  {
2408         if (isGV_with_GP(sv))
2409             return glob_2number(MUTABLE_GV(sv));
2410
2411         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2412                 report_uninit(sv);
2413         if (SvTYPE(sv) < SVt_IV)
2414             /* Typically the caller expects that sv_any is not NULL now.  */
2415             sv_upgrade(sv, SVt_IV);
2416         /* Return 0 from the caller.  */
2417         return TRUE;
2418     }
2419     return FALSE;
2420 }
2421
2422 /*
2423 =for apidoc sv_2iv_flags
2424
2425 Return the integer value of an SV, doing any necessary string
2426 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2427 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2428
2429 =cut
2430 */
2431
2432 IV
2433 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2434 {
2435     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2436
2437     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2438          && SvTYPE(sv) != SVt_PVFM);
2439
2440     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2441         mg_get(sv);
2442
2443     if (SvROK(sv)) {
2444         if (SvAMAGIC(sv)) {
2445             SV * tmpstr;
2446             if (flags & SV_SKIP_OVERLOAD)
2447                 return 0;
2448             tmpstr = AMG_CALLunary(sv, numer_amg);
2449             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2450                 return SvIV(tmpstr);
2451             }
2452         }
2453         return PTR2IV(SvRV(sv));
2454     }
2455
2456     if (SvVALID(sv) || isREGEXP(sv)) {
2457         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2458            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2459            In practice they are extremely unlikely to actually get anywhere
2460            accessible by user Perl code - the only way that I'm aware of is when
2461            a constant subroutine which is used as the second argument to index.
2462
2463            Regexps have no SvIVX and SvNVX fields.
2464         */
2465         assert(isREGEXP(sv) || SvPOKp(sv));
2466         {
2467             UV value;
2468             const char * const ptr =
2469                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2470             const int numtype
2471                 = grok_number(ptr, SvCUR(sv), &value);
2472
2473             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2474                 == IS_NUMBER_IN_UV) {
2475                 /* It's definitely an integer */
2476                 if (numtype & IS_NUMBER_NEG) {
2477                     if (value < (UV)IV_MIN)
2478                         return -(IV)value;
2479                 } else {
2480                     if (value < (UV)IV_MAX)
2481                         return (IV)value;
2482                 }
2483             }
2484
2485             /* Quite wrong but no good choices. */
2486             if ((numtype & IS_NUMBER_INFINITY)) {
2487                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2488             } else if ((numtype & IS_NUMBER_NAN)) {
2489                 return 0; /* So wrong. */
2490             }
2491
2492             if (!numtype) {
2493                 if (ckWARN(WARN_NUMERIC))
2494                     not_a_number(sv);
2495             }
2496             return I_V(Atof(ptr));
2497         }
2498     }
2499
2500     if (SvTHINKFIRST(sv)) {
2501 #ifdef PERL_OLD_COPY_ON_WRITE
2502         if (SvIsCOW(sv)) {
2503             sv_force_normal_flags(sv, 0);
2504         }
2505 #endif
2506         if (SvREADONLY(sv) && !SvOK(sv)) {
2507             if (ckWARN(WARN_UNINITIALIZED))
2508                 report_uninit(sv);
2509             return 0;
2510         }
2511     }
2512
2513     if (!SvIOKp(sv)) {
2514         if (S_sv_2iuv_common(aTHX_ sv))
2515             return 0;
2516     }
2517
2518     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2519         PTR2UV(sv),SvIVX(sv)));
2520     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2521 }
2522
2523 /*
2524 =for apidoc sv_2uv_flags
2525
2526 Return the unsigned integer value of an SV, doing any necessary string
2527 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2528 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2529
2530 =cut
2531 */
2532
2533 UV
2534 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2535 {
2536     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2537
2538     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2539         mg_get(sv);
2540
2541     if (SvROK(sv)) {
2542         if (SvAMAGIC(sv)) {
2543             SV *tmpstr;
2544             if (flags & SV_SKIP_OVERLOAD)
2545                 return 0;
2546             tmpstr = AMG_CALLunary(sv, numer_amg);
2547             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2548                 return SvUV(tmpstr);
2549             }
2550         }
2551         return PTR2UV(SvRV(sv));
2552     }
2553
2554     if (SvVALID(sv) || isREGEXP(sv)) {
2555         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2556            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2557            Regexps have no SvIVX and SvNVX fields. */
2558         assert(isREGEXP(sv) || SvPOKp(sv));
2559         {
2560             UV value;
2561             const char * const ptr =
2562                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2563             const int numtype
2564                 = grok_number(ptr, SvCUR(sv), &value);
2565
2566             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2567                 == IS_NUMBER_IN_UV) {
2568                 /* It's definitely an integer */
2569                 if (!(numtype & IS_NUMBER_NEG))
2570                     return value;
2571             }
2572
2573             /* Quite wrong but no good choices. */
2574             if ((numtype & IS_NUMBER_INFINITY)) {
2575                 return UV_MAX; /* So wrong. */
2576             } else if ((numtype & IS_NUMBER_NAN)) {
2577                 return 0; /* So wrong. */
2578             }
2579
2580             if (!numtype) {
2581                 if (ckWARN(WARN_NUMERIC))
2582                     not_a_number(sv);
2583             }
2584             return U_V(Atof(ptr));
2585         }
2586     }
2587
2588     if (SvTHINKFIRST(sv)) {
2589 #ifdef PERL_OLD_COPY_ON_WRITE
2590         if (SvIsCOW(sv)) {
2591             sv_force_normal_flags(sv, 0);
2592         }
2593 #endif
2594         if (SvREADONLY(sv) && !SvOK(sv)) {
2595             if (ckWARN(WARN_UNINITIALIZED))
2596                 report_uninit(sv);
2597             return 0;
2598         }
2599     }
2600
2601     if (!SvIOKp(sv)) {
2602         if (S_sv_2iuv_common(aTHX_ sv))
2603             return 0;
2604     }
2605
2606     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2607                           PTR2UV(sv),SvUVX(sv)));
2608     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2609 }
2610
2611 /*
2612 =for apidoc sv_2nv_flags
2613
2614 Return the num value of an SV, doing any necessary string or integer
2615 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2616 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2617
2618 =cut
2619 */
2620
2621 NV
2622 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2623 {
2624     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2625
2626     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2627          && SvTYPE(sv) != SVt_PVFM);
2628     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2629         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2630            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2631            Regexps have no SvIVX and SvNVX fields.  */
2632         const char *ptr;
2633         if (flags & SV_GMAGIC)
2634             mg_get(sv);
2635         if (SvNOKp(sv))
2636             return SvNVX(sv);
2637         if (SvPOKp(sv) && !SvIOKp(sv)) {
2638             ptr = SvPVX_const(sv);
2639           grokpv:
2640             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2641                 !grok_number(ptr, SvCUR(sv), NULL))
2642                 not_a_number(sv);
2643             return Atof(ptr);
2644         }
2645         if (SvIOKp(sv)) {
2646             if (SvIsUV(sv))
2647                 return (NV)SvUVX(sv);
2648             else
2649                 return (NV)SvIVX(sv);
2650         }
2651         if (SvROK(sv)) {
2652             goto return_rok;
2653         }
2654         if (isREGEXP(sv)) {
2655             ptr = RX_WRAPPED((REGEXP *)sv);
2656             goto grokpv;
2657         }
2658         assert(SvTYPE(sv) >= SVt_PVMG);
2659         /* This falls through to the report_uninit near the end of the
2660            function. */
2661     } else if (SvTHINKFIRST(sv)) {
2662         if (SvROK(sv)) {
2663         return_rok:
2664             if (SvAMAGIC(sv)) {
2665                 SV *tmpstr;
2666                 if (flags & SV_SKIP_OVERLOAD)
2667                     return 0;
2668                 tmpstr = AMG_CALLunary(sv, numer_amg);
2669                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2670                     return SvNV(tmpstr);
2671                 }
2672             }
2673             return PTR2NV(SvRV(sv));
2674         }
2675 #ifdef PERL_OLD_COPY_ON_WRITE
2676         if (SvIsCOW(sv)) {
2677             sv_force_normal_flags(sv, 0);
2678         }
2679 #endif
2680         if (SvREADONLY(sv) && !SvOK(sv)) {
2681             if (ckWARN(WARN_UNINITIALIZED))
2682                 report_uninit(sv);
2683             return 0.0;
2684         }
2685     }
2686     if (SvTYPE(sv) < SVt_NV) {
2687         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2688         sv_upgrade(sv, SVt_NV);
2689         DEBUG_c({
2690             STORE_NUMERIC_LOCAL_SET_STANDARD();
2691             PerlIO_printf(Perl_debug_log,
2692                           "0x%"UVxf" num(%" NVgf ")\n",
2693                           PTR2UV(sv), SvNVX(sv));
2694             RESTORE_NUMERIC_LOCAL();
2695         });
2696     }
2697     else if (SvTYPE(sv) < SVt_PVNV)
2698         sv_upgrade(sv, SVt_PVNV);
2699     if (SvNOKp(sv)) {
2700         return SvNVX(sv);
2701     }
2702     if (SvIOKp(sv)) {
2703         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2704 #ifdef NV_PRESERVES_UV
2705         if (SvIOK(sv))
2706             SvNOK_on(sv);
2707         else
2708             SvNOKp_on(sv);
2709 #else
2710         /* Only set the public NV OK flag if this NV preserves the IV  */
2711         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2712         if (SvIOK(sv) &&
2713             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2714                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2715             SvNOK_on(sv);
2716         else
2717             SvNOKp_on(sv);
2718 #endif
2719     }
2720     else if (SvPOKp(sv)) {
2721         UV value;
2722         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2723         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2724             not_a_number(sv);
2725 #ifdef NV_PRESERVES_UV
2726         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2727             == IS_NUMBER_IN_UV) {
2728             /* It's definitely an integer */
2729             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2730         } else {
2731             S_sv_setnv(aTHX_ sv, numtype);
2732         }
2733         if (numtype)
2734             SvNOK_on(sv);
2735         else
2736             SvNOKp_on(sv);
2737 #else
2738         SvNV_set(sv, Atof(SvPVX_const(sv)));
2739         /* Only set the public NV OK flag if this NV preserves the value in
2740            the PV at least as well as an IV/UV would.
2741            Not sure how to do this 100% reliably. */
2742         /* if that shift count is out of range then Configure's test is
2743            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2744            UV_BITS */
2745         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2746             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2747             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2748         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2749             /* Can't use strtol etc to convert this string, so don't try.
2750                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2751             SvNOK_on(sv);
2752         } else {
2753             /* value has been set.  It may not be precise.  */
2754             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2755                 /* 2s complement assumption for (UV)IV_MIN  */
2756                 SvNOK_on(sv); /* Integer is too negative.  */
2757             } else {
2758                 SvNOKp_on(sv);
2759                 SvIOKp_on(sv);
2760
2761                 if (numtype & IS_NUMBER_NEG) {
2762                     /* -IV_MIN is undefined, but we should never reach
2763                      * this point with both IS_NUMBER_NEG and value ==
2764                      * (UV)IV_MIN */
2765                     assert(value != (UV)IV_MIN);
2766                     SvIV_set(sv, -(IV)value);
2767                 } else if (value <= (UV)IV_MAX) {
2768                     SvIV_set(sv, (IV)value);
2769                 } else {
2770                     SvUV_set(sv, value);
2771                     SvIsUV_on(sv);
2772                 }
2773
2774                 if (numtype & IS_NUMBER_NOT_INT) {
2775                     /* I believe that even if the original PV had decimals,
2776                        they are lost beyond the limit of the FP precision.
2777                        However, neither is canonical, so both only get p
2778                        flags.  NWC, 2000/11/25 */
2779                     /* Both already have p flags, so do nothing */
2780                 } else {
2781                     const NV nv = SvNVX(sv);
2782                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2783                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2784                         if (SvIVX(sv) == I_V(nv)) {
2785                             SvNOK_on(sv);
2786                         } else {
2787                             /* It had no "." so it must be integer.  */
2788                         }
2789                         SvIOK_on(sv);
2790                     } else {
2791                         /* between IV_MAX and NV(UV_MAX).
2792                            Could be slightly > UV_MAX */
2793
2794                         if (numtype & IS_NUMBER_NOT_INT) {
2795                             /* UV and NV both imprecise.  */
2796                         } else {
2797                             const UV nv_as_uv = U_V(nv);
2798
2799                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2800                                 SvNOK_on(sv);
2801                             }
2802                             SvIOK_on(sv);
2803                         }
2804                     }
2805                 }
2806             }
2807         }
2808         /* It might be more code efficient to go through the entire logic above
2809            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2810            gets complex and potentially buggy, so more programmer efficient
2811            to do it this way, by turning off the public flags:  */
2812         if (!numtype)
2813             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2814 #endif /* NV_PRESERVES_UV */
2815     }
2816     else  {
2817         if (isGV_with_GP(sv)) {
2818             glob_2number(MUTABLE_GV(sv));
2819             return 0.0;
2820         }
2821
2822         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2823             report_uninit(sv);
2824         assert (SvTYPE(sv) >= SVt_NV);
2825         /* Typically the caller expects that sv_any is not NULL now.  */
2826         /* XXX Ilya implies that this is a bug in callers that assume this
2827            and ideally should be fixed.  */
2828         return 0.0;
2829     }
2830     DEBUG_c({
2831         STORE_NUMERIC_LOCAL_SET_STANDARD();
2832         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2833                       PTR2UV(sv), SvNVX(sv));
2834         RESTORE_NUMERIC_LOCAL();
2835     });
2836     return SvNVX(sv);
2837 }
2838
2839 /*
2840 =for apidoc sv_2num
2841
2842 Return an SV with the numeric value of the source SV, doing any necessary
2843 reference or overload conversion.  The caller is expected to have handled
2844 get-magic already.
2845
2846 =cut
2847 */
2848
2849 SV *
2850 Perl_sv_2num(pTHX_ SV *const sv)
2851 {
2852     PERL_ARGS_ASSERT_SV_2NUM;
2853
2854     if (!SvROK(sv))
2855         return sv;
2856     if (SvAMAGIC(sv)) {
2857         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2858         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2859         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2860             return sv_2num(tmpsv);
2861     }
2862     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2863 }
2864
2865 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2866  * UV as a string towards the end of buf, and return pointers to start and
2867  * end of it.
2868  *
2869  * We assume that buf is at least TYPE_CHARS(UV) long.
2870  */
2871
2872 static char *
2873 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2874 {
2875     char *ptr = buf + TYPE_CHARS(UV);
2876     char * const ebuf = ptr;
2877     int sign;
2878
2879     PERL_ARGS_ASSERT_UIV_2BUF;
2880
2881     if (is_uv)
2882         sign = 0;
2883     else if (iv >= 0) {
2884         uv = iv;
2885         sign = 0;
2886     } else {
2887         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2888         sign = 1;
2889     }
2890     do {
2891         *--ptr = '0' + (char)(uv % 10);
2892     } while (uv /= 10);
2893     if (sign)
2894         *--ptr = '-';
2895     *peob = ebuf;
2896     return ptr;
2897 }
2898
2899 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2900  * infinity or a not-a-number, writes the appropriate strings to the
2901  * buffer, including a zero byte.  On success returns the written length,
2902  * excluding the zero byte, on failure (not an infinity, not a nan)
2903  * returns zero, assert-fails on maxlen being too short.
2904  *
2905  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2906  * shared string constants we point to, instead of generating a new
2907  * string for each instance. */
2908 STATIC size_t
2909 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2910     char* s = buffer;
2911     assert(maxlen >= 4);
2912     if (Perl_isinf(nv)) {
2913         if (nv < 0) {
2914             if (maxlen < 5) /* "-Inf\0"  */
2915                 return 0;
2916             *s++ = '-';
2917         } else if (plus) {
2918             *s++ = '+';
2919         }
2920         *s++ = 'I';
2921         *s++ = 'n';
2922         *s++ = 'f';
2923     }
2924     else if (Perl_isnan(nv)) {
2925         *s++ = 'N';
2926         *s++ = 'a';
2927         *s++ = 'N';
2928         /* XXX optionally output the payload mantissa bits as
2929          * "(unsigned)" (to match the nan("...") C99 function,
2930          * or maybe as "(0xhhh...)"  would make more sense...
2931          * provide a format string so that the user can decide?
2932          * NOTE: would affect the maxlen and assert() logic.*/
2933     }
2934     else {
2935       return 0;
2936     }
2937     assert((s == buffer + 3) || (s == buffer + 4));
2938     *s++ = 0;
2939     return s - buffer - 1; /* -1: excluding the zero byte */
2940 }
2941
2942 /*
2943 =for apidoc sv_2pv_flags
2944
2945 Returns a pointer to the string value of an SV, and sets *lp to its length.
2946 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2947 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2948 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2949
2950 =cut
2951 */
2952
2953 char *
2954 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2955 {
2956     char *s;
2957
2958     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2959
2960     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2961          && SvTYPE(sv) != SVt_PVFM);
2962     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2963         mg_get(sv);
2964     if (SvROK(sv)) {
2965         if (SvAMAGIC(sv)) {
2966             SV *tmpstr;
2967             if (flags & SV_SKIP_OVERLOAD)
2968                 return NULL;
2969             tmpstr = AMG_CALLunary(sv, string_amg);
2970             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2971             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2972                 /* Unwrap this:  */
2973                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2974                  */
2975
2976                 char *pv;
2977                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2978                     if (flags & SV_CONST_RETURN) {
2979                         pv = (char *) SvPVX_const(tmpstr);
2980                     } else {
2981                         pv = (flags & SV_MUTABLE_RETURN)
2982                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2983                     }
2984                     if (lp)
2985                         *lp = SvCUR(tmpstr);
2986                 } else {
2987                     pv = sv_2pv_flags(tmpstr, lp, flags);
2988                 }
2989                 if (SvUTF8(tmpstr))
2990                     SvUTF8_on(sv);
2991                 else
2992                     SvUTF8_off(sv);
2993                 return pv;
2994             }
2995         }
2996         {
2997             STRLEN len;
2998             char *retval;
2999             char *buffer;
3000             SV *const referent = SvRV(sv);
3001
3002             if (!referent) {
3003                 len = 7;
3004                 retval = buffer = savepvn("NULLREF", len);
3005             } else if (SvTYPE(referent) == SVt_REGEXP &&
3006                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3007                         amagic_is_enabled(string_amg))) {
3008                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3009
3010                 assert(re);
3011                         
3012                 /* If the regex is UTF-8 we want the containing scalar to
3013                    have an UTF-8 flag too */
3014                 if (RX_UTF8(re))
3015                     SvUTF8_on(sv);
3016                 else
3017                     SvUTF8_off(sv);     
3018
3019                 if (lp)
3020                     *lp = RX_WRAPLEN(re);
3021  
3022                 return RX_WRAPPED(re);
3023             } else {
3024                 const char *const typestr = sv_reftype(referent, 0);
3025                 const STRLEN typelen = strlen(typestr);
3026                 UV addr = PTR2UV(referent);
3027                 const char *stashname = NULL;
3028                 STRLEN stashnamelen = 0; /* hush, gcc */
3029                 const char *buffer_end;
3030
3031                 if (SvOBJECT(referent)) {
3032                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3033
3034                     if (name) {
3035                         stashname = HEK_KEY(name);
3036                         stashnamelen = HEK_LEN(name);
3037
3038                         if (HEK_UTF8(name)) {
3039                             SvUTF8_on(sv);
3040                         } else {
3041                             SvUTF8_off(sv);
3042                         }
3043                     } else {
3044                         stashname = "__ANON__";
3045                         stashnamelen = 8;
3046                     }
3047                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3048                         + 2 * sizeof(UV) + 2 /* )\0 */;
3049                 } else {
3050                     len = typelen + 3 /* (0x */
3051                         + 2 * sizeof(UV) + 2 /* )\0 */;
3052                 }
3053
3054                 Newx(buffer, len, char);
3055                 buffer_end = retval = buffer + len;
3056
3057                 /* Working backwards  */
3058                 *--retval = '\0';
3059                 *--retval = ')';
3060                 do {
3061                     *--retval = PL_hexdigit[addr & 15];
3062                 } while (addr >>= 4);
3063                 *--retval = 'x';
3064                 *--retval = '0';
3065                 *--retval = '(';
3066
3067                 retval -= typelen;
3068                 memcpy(retval, typestr, typelen);
3069
3070                 if (stashname) {
3071                     *--retval = '=';
3072                     retval -= stashnamelen;
3073                     memcpy(retval, stashname, stashnamelen);
3074                 }
3075                 /* retval may not necessarily have reached the start of the
3076                    buffer here.  */
3077                 assert (retval >= buffer);
3078
3079                 len = buffer_end - retval - 1; /* -1 for that \0  */
3080             }
3081             if (lp)
3082                 *lp = len;
3083             SAVEFREEPV(buffer);
3084             return retval;
3085         }
3086     }
3087
3088     if (SvPOKp(sv)) {
3089         if (lp)
3090             *lp = SvCUR(sv);
3091         if (flags & SV_MUTABLE_RETURN)
3092             return SvPVX_mutable(sv);
3093         if (flags & SV_CONST_RETURN)
3094             return (char *)SvPVX_const(sv);
3095         return SvPVX(sv);
3096     }
3097
3098     if (SvIOK(sv)) {
3099         /* I'm assuming that if both IV and NV are equally valid then
3100            converting the IV is going to be more efficient */
3101         const U32 isUIOK = SvIsUV(sv);
3102         char buf[TYPE_CHARS(UV)];
3103         char *ebuf, *ptr;
3104         STRLEN len;
3105
3106         if (SvTYPE(sv) < SVt_PVIV)
3107             sv_upgrade(sv, SVt_PVIV);
3108         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3109         len = ebuf - ptr;
3110         /* inlined from sv_setpvn */
3111         s = SvGROW_mutable(sv, len + 1);
3112         Move(ptr, s, len, char);
3113         s += len;
3114         *s = '\0';
3115         SvPOK_on(sv);
3116     }
3117     else if (SvNOK(sv)) {
3118         if (SvTYPE(sv) < SVt_PVNV)
3119             sv_upgrade(sv, SVt_PVNV);
3120         if (SvNVX(sv) == 0.0
3121 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3122             && !Perl_isnan(SvNVX(sv))
3123 #endif
3124         ) {
3125             s = SvGROW_mutable(sv, 2);
3126             *s++ = '0';
3127             *s = '\0';
3128         } else {
3129             STRLEN len;
3130             STRLEN size = 5; /* "-Inf\0" */
3131
3132             s = SvGROW_mutable(sv, size);
3133             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3134             if (len > 0) {
3135                 s += len;
3136                 SvPOK_on(sv);
3137             }
3138             else {
3139                 /* some Xenix systems wipe out errno here */
3140                 dSAVE_ERRNO;
3141
3142                 size =
3143                     1 + /* sign */
3144                     1 + /* "." */
3145                     NV_DIG +
3146                     1 + /* "e" */
3147                     1 + /* sign */
3148                     5 + /* exponent digits */
3149                     1 + /* \0 */
3150                     2; /* paranoia */
3151
3152                 s = SvGROW_mutable(sv, size);
3153 #ifndef USE_LOCALE_NUMERIC
3154                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3155
3156                 SvPOK_on(sv);
3157 #else
3158                 {
3159                     bool local_radix;
3160                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3161                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3162
3163                     local_radix =
3164                         PL_numeric_local &&
3165                         PL_numeric_radix_sv &&
3166                         SvUTF8(PL_numeric_radix_sv);
3167                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3168                         size += SvLEN(PL_numeric_radix_sv) - 1;
3169                         s = SvGROW_mutable(sv, size);
3170                     }
3171
3172                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3173
3174                     /* If the radix character is UTF-8, and actually is in the
3175                      * output, turn on the UTF-8 flag for the scalar */
3176                     if (local_radix &&
3177                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3178                         SvUTF8_on(sv);
3179                     }
3180
3181                     RESTORE_LC_NUMERIC();
3182                 }
3183
3184                 /* We don't call SvPOK_on(), because it may come to
3185                  * pass that the locale changes so that the
3186                  * stringification we just did is no longer correct.  We
3187                  * will have to re-stringify every time it is needed */
3188 #endif
3189                 RESTORE_ERRNO;
3190             }
3191             while (*s) s++;
3192         }
3193     }
3194     else if (isGV_with_GP(sv)) {
3195         GV *const gv = MUTABLE_GV(sv);
3196         SV *const buffer = sv_newmortal();
3197
3198         gv_efullname3(buffer, gv, "*");
3199
3200         assert(SvPOK(buffer));
3201         if (SvUTF8(buffer))
3202             SvUTF8_on(sv);
3203         if (lp)
3204             *lp = SvCUR(buffer);
3205         return SvPVX(buffer);
3206     }
3207     else if (isREGEXP(sv)) {
3208         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3209         return RX_WRAPPED((REGEXP *)sv);
3210     }
3211     else {
3212         if (lp)
3213             *lp = 0;
3214         if (flags & SV_UNDEF_RETURNS_NULL)
3215             return NULL;
3216         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3217             report_uninit(sv);
3218         /* Typically the caller expects that sv_any is not NULL now.  */
3219         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3220             sv_upgrade(sv, SVt_PV);
3221         return (char *)"";
3222     }
3223
3224     {
3225         const STRLEN len = s - SvPVX_const(sv);
3226         if (lp) 
3227             *lp = len;
3228         SvCUR_set(sv, len);
3229     }
3230     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3231                           PTR2UV(sv),SvPVX_const(sv)));
3232     if (flags & SV_CONST_RETURN)
3233         return (char *)SvPVX_const(sv);
3234     if (flags & SV_MUTABLE_RETURN)
3235         return SvPVX_mutable(sv);
3236     return SvPVX(sv);
3237 }
3238
3239 /*
3240 =for apidoc sv_copypv
3241
3242 Copies a stringified representation of the source SV into the
3243 destination SV.  Automatically performs any necessary mg_get and
3244 coercion of numeric values into strings.  Guaranteed to preserve
3245 UTF8 flag even from overloaded objects.  Similar in nature to
3246 sv_2pv[_flags] but operates directly on an SV instead of just the
3247 string.  Mostly uses sv_2pv_flags to do its work, except when that
3248 would lose the UTF-8'ness of the PV.
3249
3250 =for apidoc sv_copypv_nomg
3251
3252 Like sv_copypv, but doesn't invoke get magic first.
3253
3254 =for apidoc sv_copypv_flags
3255
3256 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3257 include SV_GMAGIC.
3258
3259 =cut
3260 */
3261
3262 void
3263 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3264 {
3265     STRLEN len;
3266     const char *s;
3267
3268     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3269
3270     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3271     sv_setpvn(dsv,s,len);
3272     if (SvUTF8(ssv))
3273         SvUTF8_on(dsv);
3274     else
3275         SvUTF8_off(dsv);
3276 }
3277
3278 /*
3279 =for apidoc sv_2pvbyte
3280
3281 Return a pointer to the byte-encoded representation of the SV, and set *lp
3282 to its length.  May cause the SV to be downgraded from UTF-8 as a
3283 side-effect.
3284
3285 Usually accessed via the C<SvPVbyte> macro.
3286
3287 =cut
3288 */
3289
3290 char *
3291 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3292 {
3293     PERL_ARGS_ASSERT_SV_2PVBYTE;
3294
3295     SvGETMAGIC(sv);
3296     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3297      || isGV_with_GP(sv) || SvROK(sv)) {
3298         SV *sv2 = sv_newmortal();
3299         sv_copypv_nomg(sv2,sv);
3300         sv = sv2;
3301     }
3302     sv_utf8_downgrade(sv,0);
3303     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3304 }
3305
3306 /*
3307 =for apidoc sv_2pvutf8
3308
3309 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3310 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3311
3312 Usually accessed via the C<SvPVutf8> macro.
3313
3314 =cut
3315 */
3316
3317 char *
3318 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3319 {
3320     PERL_ARGS_ASSERT_SV_2PVUTF8;
3321
3322     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3323      || isGV_with_GP(sv) || SvROK(sv))
3324         sv = sv_mortalcopy(sv);
3325     else
3326         SvGETMAGIC(sv);
3327     sv_utf8_upgrade_nomg(sv);
3328     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3329 }
3330
3331
3332 /*
3333 =for apidoc sv_2bool
3334
3335 This macro is only used by sv_true() or its macro equivalent, and only if
3336 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3337 It calls sv_2bool_flags with the SV_GMAGIC flag.
3338
3339 =for apidoc sv_2bool_flags
3340
3341 This function is only used by sv_true() and friends,  and only if
3342 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3343 contain SV_GMAGIC, then it does an mg_get() first.
3344
3345
3346 =cut
3347 */
3348
3349 bool
3350 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3351 {
3352     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3353
3354     restart:
3355     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3356
3357     if (!SvOK(sv))
3358         return 0;
3359     if (SvROK(sv)) {
3360         if (SvAMAGIC(sv)) {
3361             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3362             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3363                 bool svb;
3364                 sv = tmpsv;
3365                 if(SvGMAGICAL(sv)) {
3366                     flags = SV_GMAGIC;
3367                     goto restart; /* call sv_2bool */
3368                 }
3369                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3370                 else if(!SvOK(sv)) {
3371                     svb = 0;
3372                 }
3373                 else if(SvPOK(sv)) {
3374                     svb = SvPVXtrue(sv);
3375                 }
3376                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3377                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3378                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3379                 }
3380                 else {
3381                     flags = 0;
3382                     goto restart; /* call sv_2bool_nomg */
3383                 }
3384                 return cBOOL(svb);
3385             }
3386         }
3387         return SvRV(sv) != 0;
3388     }
3389     if (isREGEXP(sv))
3390         return
3391           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3392     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3393 }
3394
3395 /*
3396 =for apidoc sv_utf8_upgrade
3397
3398 Converts the PV of an SV to its UTF-8-encoded form.
3399 Forces the SV to string form if it is not already.
3400 Will C<mg_get> on C<sv> if appropriate.
3401 Always sets the SvUTF8 flag to avoid future validity checks even
3402 if the whole string is the same in UTF-8 as not.
3403 Returns the number of bytes in the converted string
3404
3405 This is not a general purpose byte encoding to Unicode interface:
3406 use the Encode extension for that.
3407
3408 =for apidoc sv_utf8_upgrade_nomg
3409
3410 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3411
3412 =for apidoc sv_utf8_upgrade_flags
3413
3414 Converts the PV of an SV to its UTF-8-encoded form.
3415 Forces the SV to string form if it is not already.
3416 Always sets the SvUTF8 flag to avoid future validity checks even
3417 if all the bytes are invariant in UTF-8.
3418 If C<flags> has C<SV_GMAGIC> bit set,
3419 will C<mg_get> on C<sv> if appropriate, else not.
3420
3421 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3422 will expand when converted to UTF-8, and skips the extra work of checking for
3423 that.  Typically this flag is used by a routine that has already parsed the
3424 string and found such characters, and passes this information on so that the
3425 work doesn't have to be repeated.
3426
3427 Returns the number of bytes in the converted string.
3428
3429 This is not a general purpose byte encoding to Unicode interface:
3430 use the Encode extension for that.
3431
3432 =for apidoc sv_utf8_upgrade_flags_grow
3433
3434 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3435 the number of unused bytes the string of 'sv' is guaranteed to have free after
3436 it upon return.  This allows the caller to reserve extra space that it intends
3437 to fill, to avoid extra grows.
3438
3439 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3440 are implemented in terms of this function.
3441
3442 Returns the number of bytes in the converted string (not including the spares).
3443
3444 =cut
3445
3446 (One might think that the calling routine could pass in the position of the
3447 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3448 have to be found again.  But that is not the case, because typically when the
3449 caller is likely to use this flag, it won't be calling this routine unless it
3450 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3451 and just use bytes.  But some things that do fit into a byte are variants in
3452 utf8, and the caller may not have been keeping track of these.)
3453
3454 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3455 C<NUL> isn't guaranteed due to having other routines do the work in some input
3456 cases, or if the input is already flagged as being in utf8.
3457
3458 The speed of this could perhaps be improved for many cases if someone wanted to
3459 write a fast function that counts the number of variant characters in a string,
3460 especially if it could return the position of the first one.
3461
3462 */
3463
3464 STRLEN
3465 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3466 {
3467     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3468
3469     if (sv == &PL_sv_undef)
3470         return 0;
3471     if (!SvPOK_nog(sv)) {
3472         STRLEN len = 0;
3473         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3474             (void) sv_2pv_flags(sv,&len, flags);
3475             if (SvUTF8(sv)) {
3476                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3477                 return len;
3478             }
3479         } else {
3480             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3481         }
3482     }
3483
3484     if (SvUTF8(sv)) {
3485         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3486         return SvCUR(sv);
3487     }
3488
3489     if (SvIsCOW(sv)) {
3490         S_sv_uncow(aTHX_ sv, 0);
3491     }
3492
3493     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3494         sv_recode_to_utf8(sv, _get_encoding());
3495         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3496         return SvCUR(sv);
3497     }
3498
3499     if (SvCUR(sv) == 0) {
3500         if (extra) SvGROW(sv, extra);
3501     } else { /* Assume Latin-1/EBCDIC */
3502         /* This function could be much more efficient if we
3503          * had a FLAG in SVs to signal if there are any variant
3504          * chars in the PV.  Given that there isn't such a flag
3505          * make the loop as fast as possible (although there are certainly ways
3506          * to speed this up, eg. through vectorization) */
3507         U8 * s = (U8 *) SvPVX_const(sv);
3508         U8 * e = (U8 *) SvEND(sv);
3509         U8 *t = s;
3510         STRLEN two_byte_count = 0;
3511         
3512         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3513
3514         /* See if really will need to convert to utf8.  We mustn't rely on our
3515          * incoming SV being well formed and having a trailing '\0', as certain
3516          * code in pp_formline can send us partially built SVs. */
3517
3518         while (t < e) {
3519             const U8 ch = *t++;
3520             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3521
3522             t--;    /* t already incremented; re-point to first variant */
3523             two_byte_count = 1;
3524             goto must_be_utf8;
3525         }
3526
3527         /* utf8 conversion not needed because all are invariants.  Mark as
3528          * UTF-8 even if no variant - saves scanning loop */
3529         SvUTF8_on(sv);
3530         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3531         return SvCUR(sv);
3532
3533       must_be_utf8:
3534
3535         /* Here, the string should be converted to utf8, either because of an
3536          * input flag (two_byte_count = 0), or because a character that
3537          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3538          * the beginning of the string (if we didn't examine anything), or to
3539          * the first variant.  In either case, everything from s to t - 1 will
3540          * occupy only 1 byte each on output.
3541          *
3542          * There are two main ways to convert.  One is to create a new string
3543          * and go through the input starting from the beginning, appending each
3544          * converted value onto the new string as we go along.  It's probably
3545          * best to allocate enough space in the string for the worst possible
3546          * case rather than possibly running out of space and having to
3547          * reallocate and then copy what we've done so far.  Since everything
3548          * from s to t - 1 is invariant, the destination can be initialized
3549          * with these using a fast memory copy
3550          *
3551          * The other way is to figure out exactly how big the string should be
3552          * by parsing the entire input.  Then you don't have to make it big
3553          * enough to handle the worst possible case, and more importantly, if
3554          * the string you already have is large enough, you don't have to
3555          * allocate a new string, you can copy the last character in the input
3556          * string to the final position(s) that will be occupied by the
3557          * converted string and go backwards, stopping at t, since everything
3558          * before that is invariant.
3559          *
3560          * There are advantages and disadvantages to each method.
3561          *
3562          * In the first method, we can allocate a new string, do the memory
3563          * copy from the s to t - 1, and then proceed through the rest of the
3564          * string byte-by-byte.
3565          *
3566          * In the second method, we proceed through the rest of the input
3567          * string just calculating how big the converted string will be.  Then
3568          * there are two cases:
3569          *  1)  if the string has enough extra space to handle the converted
3570          *      value.  We go backwards through the string, converting until we
3571          *      get to the position we are at now, and then stop.  If this
3572          *      position is far enough along in the string, this method is
3573          *      faster than the other method.  If the memory copy were the same
3574          *      speed as the byte-by-byte loop, that position would be about
3575          *      half-way, as at the half-way mark, parsing to the end and back
3576          *      is one complete string's parse, the same amount as starting
3577          *      over and going all the way through.  Actually, it would be
3578          *      somewhat less than half-way, as it's faster to just count bytes
3579          *      than to also copy, and we don't have the overhead of allocating
3580          *      a new string, changing the scalar to use it, and freeing the
3581          *      existing one.  But if the memory copy is fast, the break-even
3582          *      point is somewhere after half way.  The counting loop could be
3583          *      sped up by vectorization, etc, to move the break-even point
3584          *      further towards the beginning.
3585          *  2)  if the string doesn't have enough space to handle the converted
3586          *      value.  A new string will have to be allocated, and one might
3587          *      as well, given that, start from the beginning doing the first
3588          *      method.  We've spent extra time parsing the string and in
3589          *      exchange all we've gotten is that we know precisely how big to
3590          *      make the new one.  Perl is more optimized for time than space,
3591          *      so this case is a loser.
3592          * So what I've decided to do is not use the 2nd method unless it is
3593          * guaranteed that a new string won't have to be allocated, assuming
3594          * the worst case.  I also decided not to put any more conditions on it
3595          * than this, for now.  It seems likely that, since the worst case is
3596          * twice as big as the unknown portion of the string (plus 1), we won't
3597          * be guaranteed enough space, causing us to go to the first method,
3598          * unless the string is short, or the first variant character is near
3599          * the end of it.  In either of these cases, it seems best to use the
3600          * 2nd method.  The only circumstance I can think of where this would
3601          * be really slower is if the string had once had much more data in it
3602          * than it does now, but there is still a substantial amount in it  */
3603
3604         {
3605             STRLEN invariant_head = t - s;
3606             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3607             if (SvLEN(sv) < size) {
3608
3609                 /* Here, have decided to allocate a new string */
3610
3611                 U8 *dst;
3612                 U8 *d;
3613
3614                 Newx(dst, size, U8);
3615
3616                 /* If no known invariants at the beginning of the input string,
3617                  * set so starts from there.  Otherwise, can use memory copy to
3618                  * get up to where we are now, and then start from here */
3619
3620                 if (invariant_head == 0) {
3621                     d = dst;
3622                 } else {
3623                     Copy(s, dst, invariant_head, char);
3624                     d = dst + invariant_head;
3625                 }
3626
3627                 while (t < e) {
3628                     append_utf8_from_native_byte(*t, &d);
3629                     t++;
3630                 }
3631                 *d = '\0';
3632                 SvPV_free(sv); /* No longer using pre-existing string */
3633                 SvPV_set(sv, (char*)dst);
3634                 SvCUR_set(sv, d - dst);
3635                 SvLEN_set(sv, size);
3636             } else {
3637
3638                 /* Here, have decided to get the exact size of the string.
3639                  * Currently this happens only when we know that there is
3640                  * guaranteed enough space to fit the converted string, so
3641                  * don't have to worry about growing.  If two_byte_count is 0,
3642                  * then t points to the first byte of the string which hasn't
3643                  * been examined yet.  Otherwise two_byte_count is 1, and t
3644                  * points to the first byte in the string that will expand to
3645                  * two.  Depending on this, start examining at t or 1 after t.
3646                  * */
3647
3648                 U8 *d = t + two_byte_count;
3649
3650
3651                 /* Count up the remaining bytes that expand to two */
3652
3653                 while (d < e) {
3654                     const U8 chr = *d++;
3655                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3656                 }
3657
3658                 /* The string will expand by just the number of bytes that
3659                  * occupy two positions.  But we are one afterwards because of
3660                  * the increment just above.  This is the place to put the
3661                  * trailing NUL, and to set the length before we decrement */
3662
3663                 d += two_byte_count;
3664                 SvCUR_set(sv, d - s);
3665                 *d-- = '\0';
3666
3667
3668                 /* Having decremented d, it points to the position to put the
3669                  * very last byte of the expanded string.  Go backwards through
3670                  * the string, copying and expanding as we go, stopping when we
3671                  * get to the part that is invariant the rest of the way down */
3672
3673                 e--;
3674                 while (e >= t) {
3675                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3676                         *d-- = *e;
3677                     } else {
3678                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3679                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3680                     }
3681                     e--;
3682                 }
3683             }
3684
3685             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3686                 /* Update pos. We do it at the end rather than during
3687                  * the upgrade, to avoid slowing down the common case
3688                  * (upgrade without pos).
3689                  * pos can be stored as either bytes or characters.  Since
3690                  * this was previously a byte string we can just turn off
3691                  * the bytes flag. */
3692                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3693                 if (mg) {
3694                     mg->mg_flags &= ~MGf_BYTES;
3695                 }
3696                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3697                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3698             }
3699         }
3700     }
3701
3702     /* Mark as UTF-8 even if no variant - saves scanning loop */
3703     SvUTF8_on(sv);
3704     return SvCUR(sv);
3705 }
3706
3707 /*
3708 =for apidoc sv_utf8_downgrade
3709
3710 Attempts to convert the PV of an SV from characters to bytes.
3711 If the PV contains a character that cannot fit
3712 in a byte, this conversion will fail;
3713 in this case, either returns false or, if C<fail_ok> is not
3714 true, croaks.
3715
3716 This is not a general purpose Unicode to byte encoding interface:
3717 use the Encode extension for that.
3718
3719 =cut
3720 */
3721
3722 bool
3723 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3724 {
3725     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3726
3727     if (SvPOKp(sv) && SvUTF8(sv)) {
3728         if (SvCUR(sv)) {
3729             U8 *s;
3730             STRLEN len;
3731             int mg_flags = SV_GMAGIC;
3732
3733             if (SvIsCOW(sv)) {
3734                 S_sv_uncow(aTHX_ sv, 0);
3735             }
3736             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3737                 /* update pos */
3738                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3739                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3740                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3741                                                 SV_GMAGIC|SV_CONST_RETURN);
3742                         mg_flags = 0; /* sv_pos_b2u does get magic */
3743                 }
3744                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3745                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3746
3747             }
3748             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3749
3750             if (!utf8_to_bytes(s, &len)) {
3751                 if (fail_ok)
3752                     return FALSE;
3753                 else {
3754                     if (PL_op)
3755                         Perl_croak(aTHX_ "Wide character in %s",
3756                                    OP_DESC(PL_op));
3757                     else
3758                         Perl_croak(aTHX_ "Wide character");
3759                 }
3760             }
3761             SvCUR_set(sv, len);
3762         }
3763     }
3764     SvUTF8_off(sv);
3765     return TRUE;
3766 }
3767
3768 /*
3769 =for apidoc sv_utf8_encode
3770
3771 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3772 flag off so that it looks like octets again.
3773
3774 =cut
3775 */
3776
3777 void
3778 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3779 {
3780     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3781
3782     if (SvREADONLY(sv)) {
3783         sv_force_normal_flags(sv, 0);
3784     }
3785     (void) sv_utf8_upgrade(sv);
3786     SvUTF8_off(sv);
3787 }
3788
3789 /*
3790 =for apidoc sv_utf8_decode
3791
3792 If the PV of the SV is an octet sequence in UTF-8
3793 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3794 so that it looks like a character.  If the PV contains only single-byte
3795 characters, the C<SvUTF8> flag stays off.
3796 Scans PV for validity and returns false if the PV is invalid UTF-8.
3797
3798 =cut
3799 */
3800
3801 bool
3802 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3803 {
3804     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3805
3806     if (SvPOKp(sv)) {
3807         const U8 *start, *c;
3808         const U8 *e;
3809
3810         /* The octets may have got themselves encoded - get them back as
3811          * bytes
3812          */
3813         if (!sv_utf8_downgrade(sv, TRUE))
3814             return FALSE;
3815
3816         /* it is actually just a matter of turning the utf8 flag on, but
3817          * we want to make sure everything inside is valid utf8 first.
3818          */
3819         c = start = (const U8 *) SvPVX_const(sv);
3820         if (!is_utf8_string(c, SvCUR(sv)))
3821             return FALSE;
3822         e = (const U8 *) SvEND(sv);
3823         while (c < e) {
3824             const U8 ch = *c++;
3825             if (!UTF8_IS_INVARIANT(ch)) {
3826                 SvUTF8_on(sv);
3827                 break;
3828             }
3829         }
3830         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3831             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3832                    after this, clearing pos.  Does anything on CPAN
3833                    need this? */
3834             /* adjust pos to the start of a UTF8 char sequence */
3835             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3836             if (mg) {
3837                 I32 pos = mg->mg_len;
3838                 if (pos > 0) {
3839                     for (c = start + pos; c > start; c--) {
3840                         if (UTF8_IS_START(*c))
3841                             break;
3842                     }
3843                     mg->mg_len  = c - start;
3844                 }
3845             }
3846             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3847                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3848         }
3849     }
3850     return TRUE;
3851 }
3852
3853 /*
3854 =for apidoc sv_setsv
3855
3856 Copies the contents of the source SV C<ssv> into the destination SV
3857 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3858 function if the source SV needs to be reused.  Does not handle 'set' magic on
3859 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3860 performs a copy-by-value, obliterating any previous content of the
3861 destination.
3862
3863 You probably want to use one of the assortment of wrappers, such as
3864 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3865 C<SvSetMagicSV_nosteal>.
3866
3867 =for apidoc sv_setsv_flags
3868
3869 Copies the contents of the source SV C<ssv> into the destination SV
3870 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3871 function if the source SV needs to be reused.  Does not handle 'set' magic.
3872 Loosely speaking, it performs a copy-by-value, obliterating any previous
3873 content of the destination.
3874 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3875 C<ssv> if appropriate, else not.  If the C<flags>
3876 parameter has the C<SV_NOSTEAL> bit set then the
3877 buffers of temps will not be stolen.  <sv_setsv>
3878 and C<sv_setsv_nomg> are implemented in terms of this function.
3879
3880 You probably want to use one of the assortment of wrappers, such as
3881 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3882 C<SvSetMagicSV_nosteal>.
3883
3884 This is the primary function for copying scalars, and most other
3885 copy-ish functions and macros use this underneath.
3886
3887 =cut
3888 */
3889
3890 static void
3891 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3892 {
3893     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3894     HV *old_stash = NULL;
3895
3896     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3897
3898     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3899         const char * const name = GvNAME(sstr);
3900         const STRLEN len = GvNAMELEN(sstr);
3901         {
3902             if (dtype >= SVt_PV) {
3903                 SvPV_free(dstr);
3904                 SvPV_set(dstr, 0);
3905                 SvLEN_set(dstr, 0);
3906                 SvCUR_set(dstr, 0);
3907             }
3908             SvUPGRADE(dstr, SVt_PVGV);
3909             (void)SvOK_off(dstr);
3910             isGV_with_GP_on(dstr);
3911         }
3912         GvSTASH(dstr) = GvSTASH(sstr);
3913         if (GvSTASH(dstr))
3914             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3915         gv_name_set(MUTABLE_GV(dstr), name, len,
3916                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3917         SvFAKE_on(dstr);        /* can coerce to non-glob */
3918     }
3919
3920     if(GvGP(MUTABLE_GV(sstr))) {
3921         /* If source has method cache entry, clear it */
3922         if(GvCVGEN(sstr)) {
3923             SvREFCNT_dec(GvCV(sstr));
3924             GvCV_set(sstr, NULL);
3925             GvCVGEN(sstr) = 0;
3926         }
3927         /* If source has a real method, then a method is
3928            going to change */
3929         else if(
3930          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3931         ) {
3932             mro_changes = 1;
3933         }
3934     }
3935
3936     /* If dest already had a real method, that's a change as well */
3937     if(
3938         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3939      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3940     ) {
3941         mro_changes = 1;
3942     }
3943
3944     /* We don't need to check the name of the destination if it was not a
3945        glob to begin with. */
3946     if(dtype == SVt_PVGV) {
3947         const char * const name = GvNAME((const GV *)dstr);
3948         if(
3949             strEQ(name,"ISA")
3950          /* The stash may have been detached from the symbol table, so
3951             check its name. */
3952          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3953         )
3954             mro_changes = 2;
3955         else {
3956             const STRLEN len = GvNAMELEN(dstr);
3957             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3958              || (len == 1 && name[0] == ':')) {
3959                 mro_changes = 3;
3960
3961                 /* Set aside the old stash, so we can reset isa caches on
3962                    its subclasses. */
3963                 if((old_stash = GvHV(dstr)))
3964                     /* Make sure we do not lose it early. */
3965                     SvREFCNT_inc_simple_void_NN(
3966                      sv_2mortal((SV *)old_stash)
3967                     );
3968             }
3969         }
3970
3971         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3972     }
3973
3974     gp_free(MUTABLE_GV(dstr));
3975     GvINTRO_off(dstr);          /* one-shot flag */
3976     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3977     if (SvTAINTED(sstr))
3978         SvTAINT(dstr);
3979     if (GvIMPORTED(dstr) != GVf_IMPORTED
3980         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3981         {
3982             GvIMPORTED_on(dstr);
3983         }
3984     GvMULTI_on(dstr);
3985     if(mro_changes == 2) {
3986       if (GvAV((const GV *)sstr)) {
3987         MAGIC *mg;
3988         SV * const sref = (SV *)GvAV((const GV *)dstr);
3989         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3990             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3991                 AV * const ary = newAV();
3992                 av_push(ary, mg->mg_obj); /* takes the refcount */
3993                 mg->mg_obj = (SV *)ary;
3994             }
3995             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3996         }
3997         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3998       }
3999       mro_isa_changed_in(GvSTASH(dstr));
4000     }
4001     else if(mro_changes == 3) {
4002         HV * const stash = GvHV(dstr);
4003         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
4004             mro_package_moved(
4005                 stash, old_stash,
4006                 (GV *)dstr, 0
4007             );
4008     }
4009     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
4010     if (GvIO(dstr) && dtype == SVt_PVGV) {
4011         DEBUG_o(Perl_deb(aTHX_
4012                         "glob_assign_glob clearing PL_stashcache\n"));
4013         /* It's a cache. It will rebuild itself quite happily.
4014            It's a lot of effort to work out exactly which key (or keys)
4015            might be invalidated by the creation of the this file handle.
4016          */
4017         hv_clear(PL_stashcache);
4018     }
4019     return;
4020 }
4021
4022 void
4023 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4024 {
4025     SV * const sref = SvRV(sstr);
4026     SV *dref;
4027     const int intro = GvINTRO(dstr);
4028     SV **location;
4029     U8 import_flag = 0;
4030     const U32 stype = SvTYPE(sref);
4031
4032     PERL_ARGS_ASSERT_GV_SETREF;
4033
4034     if (intro) {
4035         GvINTRO_off(dstr);      /* one-shot flag */
4036         GvLINE(dstr) = CopLINE(PL_curcop);
4037         GvEGV(dstr) = MUTABLE_GV(dstr);
4038     }
4039     GvMULTI_on(dstr);
4040     switch (stype) {
4041     case SVt_PVCV:
4042         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4043         import_flag = GVf_IMPORTED_CV;
4044         goto common;
4045     case SVt_PVHV:
4046         location = (SV **) &GvHV(dstr);
4047         import_flag = GVf_IMPORTED_HV;
4048         goto common;
4049     case SVt_PVAV:
4050         location = (SV **) &GvAV(dstr);
4051         import_flag = GVf_IMPORTED_AV;
4052         goto common;
4053     case SVt_PVIO:
4054         location = (SV **) &GvIOp(dstr);
4055         goto common;
4056     case SVt_PVFM:
4057         location = (SV **) &GvFORM(dstr);
4058         goto common;
4059     default:
4060         location = &GvSV(dstr);
4061         import_flag = GVf_IMPORTED_SV;
4062     common:
4063         if (intro) {
4064             if (stype == SVt_PVCV) {
4065                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4066                 if (GvCVGEN(dstr)) {
4067                     SvREFCNT_dec(GvCV(dstr));
4068                     GvCV_set(dstr, NULL);
4069                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4070                 }
4071             }
4072             /* SAVEt_GVSLOT takes more room on the savestack and has more
4073                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4074                leave_scope needs access to the GV so it can reset method
4075                caches.  We must use SAVEt_GVSLOT whenever the type is
4076                SVt_PVCV, even if the stash is anonymous, as the stash may
4077                gain a name somehow before leave_scope. */
4078             if (stype == SVt_PVCV) {
4079                 /* There is no save_pushptrptrptr.  Creating it for this
4080                    one call site would be overkill.  So inline the ss add
4081                    routines here. */
4082                 dSS_ADD;
4083                 SS_ADD_PTR(dstr);
4084                 SS_ADD_PTR(location);
4085                 SS_ADD_PTR(SvREFCNT_inc(*location));
4086                 SS_ADD_UV(SAVEt_GVSLOT);
4087                 SS_ADD_END(4);
4088             }
4089             else SAVEGENERICSV(*location);
4090         }
4091         dref = *location;
4092         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4093             CV* const cv = MUTABLE_CV(*location);
4094             if (cv) {
4095                 if (!GvCVGEN((const GV *)dstr) &&
4096                     (CvROOT(cv) || CvXSUB(cv)) &&
4097                     /* redundant check that avoids creating the extra SV
4098                        most of the time: */
4099                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4100                     {
4101                         SV * const new_const_sv =
4102                             CvCONST((const CV *)sref)
4103                                  ? cv_const_sv((const CV *)sref)
4104                                  : NULL;
4105                         report_redefined_cv(
4106                            sv_2mortal(Perl_newSVpvf(aTHX_
4107                                 "%"HEKf"::%"HEKf,
4108                                 HEKfARG(
4109                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4110                                 ),
4111                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4112                            )),
4113                            cv,
4114                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4115                         );
4116                     }
4117                 if (!intro)
4118                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4119                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4120                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4121                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4122             }
4123             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4124             GvASSUMECV_on(dstr);
4125             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4126                 if (intro && GvREFCNT(dstr) > 1) {
4127                     /* temporary remove extra savestack's ref */
4128                     --GvREFCNT(dstr);
4129                     gv_method_changed(dstr);
4130                     ++GvREFCNT(dstr);
4131                 }
4132                 else gv_method_changed(dstr);
4133             }
4134         }
4135         *location = SvREFCNT_inc_simple_NN(sref);
4136         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4137             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4138             GvFLAGS(dstr) |= import_flag;
4139         }
4140         if (import_flag == GVf_IMPORTED_SV) {
4141             if (intro) {
4142                 save_aliased_sv((GV *)dstr);
4143             }
4144             /* Turn off the flag if sref is not referenced elsewhere,
4145                even by weak refs.  (SvRMAGICAL is a pessimistic check for
4146                back refs.)  */
4147             if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
4148                 GvALIASED_SV_off(dstr);
4149             else
4150                 GvALIASED_SV_on(dstr);
4151         }
4152         if (stype == SVt_PVHV) {
4153             const char * const name = GvNAME((GV*)dstr);
4154             const STRLEN len = GvNAMELEN(dstr);
4155             if (
4156                 (
4157                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4158                 || (len == 1 && name[0] == ':')
4159                 )
4160              && (!dref || HvENAME_get(dref))
4161             ) {
4162                 mro_package_moved(
4163                     (HV *)sref, (HV *)dref,
4164                     (GV *)dstr, 0
4165                 );
4166             }
4167         }
4168         else if (
4169             stype == SVt_PVAV && sref != dref
4170          && strEQ(GvNAME((GV*)dstr), "ISA")
4171          /* The stash may have been detached from the symbol table, so
4172             check its name before doing anything. */
4173          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4174         ) {
4175             MAGIC *mg;
4176             MAGIC * const omg = dref && SvSMAGICAL(dref)
4177                                  ? mg_find(dref, PERL_MAGIC_isa)
4178                                  : NULL;
4179             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4180                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4181                     AV * const ary = newAV();
4182                     av_push(ary, mg->mg_obj); /* takes the refcount */
4183                     mg->mg_obj = (SV *)ary;
4184                 }
4185                 if (omg) {
4186                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4187                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4188                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4189                         while (items--)
4190                             av_push(
4191                              (AV *)mg->mg_obj,
4192                              SvREFCNT_inc_simple_NN(*svp++)
4193                             );
4194                     }
4195                     else
4196                         av_push(
4197                          (AV *)mg->mg_obj,
4198                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4199                         );
4200                 }
4201                 else
4202                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4203             }
4204             else
4205             {
4206                 sv_magic(
4207                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4208                 );
4209                 mg = mg_find(sref, PERL_MAGIC_isa);
4210             }
4211             /* Since the *ISA assignment could have affected more than
4212                one stash, don't call mro_isa_changed_in directly, but let
4213                magic_clearisa do it for us, as it already has the logic for
4214                dealing with globs vs arrays of globs. */
4215             assert(mg);
4216             Perl_magic_clearisa(aTHX_ NULL, mg);
4217         }
4218         else if (stype == SVt_PVIO) {
4219             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4220             /* It's a cache. It will rebuild itself quite happily.
4221                It's a lot of effort to work out exactly which key (or keys)
4222                might be invalidated by the creation of the this file handle.
4223             */
4224             hv_clear(PL_stashcache);
4225         }
4226         break;
4227     }
4228     if (!intro) SvREFCNT_dec(dref);
4229     if (SvTAINTED(sstr))
4230         SvTAINT(dstr);
4231     return;
4232 }
4233
4234
4235
4236
4237 #ifdef PERL_DEBUG_READONLY_COW
4238 # include <sys/mman.h>
4239
4240 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4241 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4242 # endif
4243
4244 void
4245 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4246 {
4247     struct perl_memory_debug_header * const header =
4248         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4249     const MEM_SIZE len = header->size;
4250     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4251 # ifdef PERL_TRACK_MEMPOOL
4252     if (!header->readonly) header->readonly = 1;
4253 # endif
4254     if (mprotect(header, len, PROT_READ))
4255         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4256                          header, len, errno);
4257 }
4258
4259 static void
4260 S_sv_buf_to_rw(pTHX_ SV *sv)
4261 {
4262     struct perl_memory_debug_header * const header =
4263         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4264     const MEM_SIZE len = header->size;
4265     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4266     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4267         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4268                          header, len, errno);
4269 # ifdef PERL_TRACK_MEMPOOL
4270     header->readonly = 0;
4271 # endif
4272 }
4273
4274 #else
4275 # define sv_buf_to_ro(sv)       NOOP
4276 # define sv_buf_to_rw(sv)       NOOP
4277 #endif
4278
4279 void
4280 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4281 {
4282     U32 sflags;
4283     int dtype;
4284     svtype stype;
4285
4286     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4287
4288     if (UNLIKELY( sstr == dstr ))
4289         return;
4290
4291     if (SvIS_FREED(dstr)) {
4292         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4293                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4294     }
4295     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4296     if (UNLIKELY( !sstr ))
4297         sstr = &PL_sv_undef;
4298     if (SvIS_FREED(sstr)) {
4299         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4300                    (void*)sstr, (void*)dstr);
4301     }
4302     stype = SvTYPE(sstr);
4303     dtype = SvTYPE(dstr);
4304
4305     /* There's a lot of redundancy below but we're going for speed here */
4306
4307     switch (stype) {
4308     case SVt_NULL:
4309       undef_sstr:
4310         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4311             (void)SvOK_off(dstr);
4312             return;
4313         }
4314         break;
4315     case SVt_IV:
4316         if (SvIOK(sstr)) {
4317             switch (dtype) {
4318             case SVt_NULL:
4319                 /* For performance, we inline promoting to type SVt_IV. */
4320                 /* We're starting from SVt_NULL, so provided that define is
4321                  * actual 0, we don't have to unset any SV type flags
4322                  * to promote to SVt_IV. */
4323                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4324                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4325                 SvFLAGS(dstr) |= SVt_IV;
4326                 break;
4327             case SVt_NV:
4328             case SVt_PV:
4329                 sv_upgrade(dstr, SVt_PVIV);
4330                 break;
4331             case SVt_PVGV:
4332             case SVt_PVLV:
4333                 goto end_of_first_switch;
4334             }
4335             (void)SvIOK_only(dstr);
4336             SvIV_set(dstr,  SvIVX(sstr));
4337             if (SvIsUV(sstr))
4338                 SvIsUV_on(dstr);
4339             /* SvTAINTED can only be true if the SV has taint magic, which in
4340                turn means that the SV type is PVMG (or greater). This is the
4341                case statement for SVt_IV, so this cannot be true (whatever gcov
4342                may say).  */
4343             assert(!SvTAINTED(sstr));
4344             return;
4345         }
4346         if (!SvROK(sstr))
4347             goto undef_sstr;
4348         if (dtype < SVt_PV && dtype != SVt_IV)
4349             sv_upgrade(dstr, SVt_IV);
4350         break;
4351
4352     case SVt_NV:
4353         if (LIKELY( SvNOK(sstr) )) {
4354             switch (dtype) {
4355             case SVt_NULL:
4356             case SVt_IV:
4357                 sv_upgrade(dstr, SVt_NV);
4358                 break;
4359             case SVt_PV:
4360             case SVt_PVIV:
4361                 sv_upgrade(dstr, SVt_PVNV);
4362                 break;
4363             case SVt_PVGV:
4364             case SVt_PVLV:
4365                 goto end_of_first_switch;
4366             }
4367             SvNV_set(dstr, SvNVX(sstr));
4368             (void)SvNOK_only(dstr);
4369             /* SvTAINTED can only be true if the SV has taint magic, which in
4370                turn means that the SV type is PVMG (or greater). This is the
4371                case statement for SVt_NV, so this cannot be true (whatever gcov
4372                may say).  */
4373             assert(!SvTAINTED(sstr));
4374             return;
4375         }
4376         goto undef_sstr;
4377
4378     case SVt_PV:
4379         if (dtype < SVt_PV)
4380             sv_upgrade(dstr, SVt_PV);
4381         break;
4382     case SVt_PVIV:
4383         if (dtype < SVt_PVIV)
4384             sv_upgrade(dstr, SVt_PVIV);
4385         break;
4386     case SVt_PVNV:
4387         if (dtype < SVt_PVNV)
4388             sv_upgrade(dstr, SVt_PVNV);
4389         break;
4390     default:
4391         {
4392         const char * const type = sv_reftype(sstr,0);
4393         if (PL_op)
4394             /* diag_listed_as: Bizarre copy of %s */
4395             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4396         else
4397             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4398         }
4399         NOT_REACHED; /* NOTREACHED */
4400
4401     case SVt_REGEXP:
4402       upgregexp:
4403         if (dtype < SVt_REGEXP)
4404         {
4405             if (dtype >= SVt_PV) {
4406                 SvPV_free(dstr);
4407                 SvPV_set(dstr, 0);
4408                 SvLEN_set(dstr, 0);
4409                 SvCUR_set(dstr, 0);
4410             }
4411             sv_upgrade(dstr, SVt_REGEXP);
4412         }
4413         break;
4414
4415         case SVt_INVLIST:
4416     case SVt_PVLV:
4417     case SVt_PVGV:
4418     case SVt_PVMG:
4419         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4420             mg_get(sstr);
4421             if (SvTYPE(sstr) != stype)
4422                 stype = SvTYPE(sstr);
4423         }
4424         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4425                     glob_assign_glob(dstr, sstr, dtype);
4426                     return;
4427         }
4428         if (stype == SVt_PVLV)
4429         {
4430             if (isREGEXP(sstr)) goto upgregexp;
4431             SvUPGRADE(dstr, SVt_PVNV);
4432         }
4433         else
4434             SvUPGRADE(dstr, (svtype)stype);
4435     }
4436  end_of_first_switch:
4437
4438     /* dstr may have been upgraded.  */
4439     dtype = SvTYPE(dstr);
4440     sflags = SvFLAGS(sstr);
4441
4442     if (UNLIKELY( dtype == SVt_PVCV )) {
4443         /* Assigning to a subroutine sets the prototype.  */
4444         if (SvOK(sstr)) {
4445             STRLEN len;
4446             const char *const ptr = SvPV_const(sstr, len);
4447
4448             SvGROW(dstr, len + 1);
4449             Copy(ptr, SvPVX(dstr), len + 1, char);
4450             SvCUR_set(dstr, len);
4451             SvPOK_only(dstr);
4452             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4453             CvAUTOLOAD_off(dstr);
4454         } else {
4455             SvOK_off(dstr);
4456         }
4457     }
4458     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4459              || dtype == SVt_PVFM))
4460     {
4461         const char * const type = sv_reftype(dstr,0);
4462         if (PL_op)
4463             /* diag_listed_as: Cannot copy to %s */
4464             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4465         else
4466             Perl_croak(aTHX_ "Cannot copy to %s", type);
4467     } else if (sflags & SVf_ROK) {
4468         if (isGV_with_GP(dstr)
4469             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4470             sstr = SvRV(sstr);
4471             if (sstr == dstr) {
4472                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4473                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4474                 {
4475                     GvIMPORTED_on(dstr);
4476                 }
4477                 GvMULTI_on(dstr);
4478                 return;
4479             }
4480             glob_assign_glob(dstr, sstr, dtype);
4481             return;
4482         }
4483
4484         if (dtype >= SVt_PV) {
4485             if (isGV_with_GP(dstr)) {
4486                 gv_setref(dstr, sstr);
4487                 return;
4488             }
4489             if (SvPVX_const(dstr)) {
4490                 SvPV_free(dstr);
4491                 SvLEN_set(dstr, 0);
4492                 SvCUR_set(dstr, 0);
4493             }
4494         }
4495         (void)SvOK_off(dstr);
4496         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4497         SvFLAGS(dstr) |= sflags & SVf_ROK;
4498         assert(!(sflags & SVp_NOK));
4499         assert(!(sflags & SVp_IOK));
4500         assert(!(sflags & SVf_NOK));
4501         assert(!(sflags & SVf_IOK));
4502     }
4503     else if (isGV_with_GP(dstr)) {
4504         if (!(sflags & SVf_OK)) {
4505             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4506                            "Undefined value assigned to typeglob");
4507         }
4508         else {
4509             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4510             if (dstr != (const SV *)gv) {
4511                 const char * const name = GvNAME((const GV *)dstr);
4512                 const STRLEN len = GvNAMELEN(dstr);
4513                 HV *old_stash = NULL;
4514                 bool reset_isa = FALSE;
4515                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4516                  || (len == 1 && name[0] == ':')) {
4517                     /* Set aside the old stash, so we can reset isa caches
4518                        on its subclasses. */
4519                     if((old_stash = GvHV(dstr))) {
4520                         /* Make sure we do not lose it early. */
4521                         SvREFCNT_inc_simple_void_NN(
4522                          sv_2mortal((SV *)old_stash)
4523                         );
4524                     }
4525                     reset_isa = TRUE;
4526                 }
4527
4528                 if (GvGP(dstr)) {
4529                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4530                     gp_free(MUTABLE_GV(dstr));
4531                 }
4532                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4533
4534                 if (reset_isa) {
4535                     HV * const stash = GvHV(dstr);
4536                     if(
4537                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4538                     )
4539                         mro_package_moved(
4540                          stash, old_stash,
4541                          (GV *)dstr, 0
4542                         );
4543                 }
4544             }
4545         }
4546     }
4547     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4548           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4549         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4550     }
4551     else if (sflags & SVp_POK) {
4552         const STRLEN cur = SvCUR(sstr);
4553         const STRLEN len = SvLEN(sstr);
4554
4555         /*
4556          * We have three basic ways to copy the string:
4557          *
4558          *  1. Swipe
4559          *  2. Copy-on-write
4560          *  3. Actual copy
4561          * 
4562          * Which we choose is based on various factors.  The following
4563          * things are listed in order of speed, fastest to slowest:
4564          *  - Swipe
4565          *  - Copying a short string
4566          *  - Copy-on-write bookkeeping
4567          *  - malloc
4568          *  - Copying a long string
4569          * 
4570          * We swipe the string (steal the string buffer) if the SV on the
4571          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4572          * big win on long strings.  It should be a win on short strings if
4573          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4574          * slow things down, as SvPVX_const(sstr) would have been freed
4575          * soon anyway.
4576          * 
4577          * We also steal the buffer from a PADTMP (operator target) if it
4578          * is â€˜long enough’.  For short strings, a swipe does not help
4579          * here, as it causes more malloc calls the next time the target
4580          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4581          * be allocated it is still not worth swiping PADTMPs for short
4582          * strings, as the savings here are small.
4583          * 
4584          * If swiping is not an option, then we see whether it is
4585          * worth using copy-on-write.  If the lhs already has a buf-
4586          * fer big enough and the string is short, we skip it and fall back
4587          * to method 3, since memcpy is faster for short strings than the
4588          * later bookkeeping overhead that copy-on-write entails.
4589
4590          * If the rhs is not a copy-on-write string yet, then we also
4591          * consider whether the buffer is too large relative to the string
4592          * it holds.  Some operations such as readline allocate a large
4593          * buffer in the expectation of reusing it.  But turning such into
4594          * a COW buffer is counter-productive because it increases memory
4595          * usage by making readline allocate a new large buffer the sec-
4596          * ond time round.  So, if the buffer is too large, again, we use
4597          * method 3 (copy).
4598          * 
4599          * Finally, if there is no buffer on the left, or the buffer is too 
4600          * small, then we use copy-on-write and make both SVs share the
4601          * string buffer.
4602          *
4603          */
4604
4605         /* Whichever path we take through the next code, we want this true,
4606            and doing it now facilitates the COW check.  */
4607         (void)SvPOK_only(dstr);
4608
4609         if (
4610                  (              /* Either ... */
4611                                 /* slated for free anyway (and not COW)? */
4612                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4613                                 /* or a swipable TARG */
4614                  || ((sflags &
4615                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4616                        == SVs_PADTMP
4617                                 /* whose buffer is worth stealing */
4618                      && CHECK_COWBUF_THRESHOLD(cur,len)
4619                     )
4620                  ) &&
4621                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4622                  (!(flags & SV_NOSTEAL)) &&
4623                                         /* and we're allowed to steal temps */
4624                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4625                  len)             /* and really is a string */
4626         {       /* Passes the swipe test.  */
4627             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4628                 SvPV_free(dstr);
4629             SvPV_set(dstr, SvPVX_mutable(sstr));
4630             SvLEN_set(dstr, SvLEN(sstr));
4631             SvCUR_set(dstr, SvCUR(sstr));
4632
4633             SvTEMP_off(dstr);
4634             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4635             SvPV_set(sstr, NULL);
4636             SvLEN_set(sstr, 0);
4637             SvCUR_set(sstr, 0);
4638             SvTEMP_off(sstr);
4639         }
4640         else if (flags & SV_COW_SHARED_HASH_KEYS
4641               &&
4642 #ifdef PERL_OLD_COPY_ON_WRITE
4643                  (  sflags & SVf_IsCOW
4644                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4645                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4646                      && SvTYPE(sstr) >= SVt_PVIV && len
4647                     )
4648                  )
4649 #elif defined(PERL_NEW_COPY_ON_WRITE)
4650                  (sflags & SVf_IsCOW
4651                    ? (!len ||
4652                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4653                           /* If this is a regular (non-hek) COW, only so
4654                              many COW "copies" are possible. */
4655                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4656                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4657                      && !(SvFLAGS(dstr) & SVf_BREAK)
4658                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4659                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4660                     ))
4661 #else
4662                  sflags & SVf_IsCOW
4663               && !(SvFLAGS(dstr) & SVf_BREAK)
4664 #endif
4665             ) {
4666             /* Either it's a shared hash key, or it's suitable for
4667                copy-on-write.  */
4668             if (DEBUG_C_TEST) {
4669                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4670                 sv_dump(sstr);
4671                 sv_dump(dstr);
4672             }
4673 #ifdef PERL_ANY_COW
4674             if (!(sflags & SVf_IsCOW)) {
4675                     SvIsCOW_on(sstr);
4676 # ifdef PERL_OLD_COPY_ON_WRITE
4677                     /* Make the source SV into a loop of 1.
4678                        (about to become 2) */
4679                     SV_COW_NEXT_SV_SET(sstr, sstr);
4680 # else
4681                     CowREFCNT(sstr) = 0;
4682 # endif
4683             }
4684 #endif
4685             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4686                 SvPV_free(dstr);
4687             }
4688
4689 #ifdef PERL_ANY_COW
4690             if (len) {
4691 # ifdef PERL_OLD_COPY_ON_WRITE
4692                     assert (SvTYPE(dstr) >= SVt_PVIV);
4693                     /* SvIsCOW_normal */
4694                     /* splice us in between source and next-after-source.  */
4695                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4696                     SV_COW_NEXT_SV_SET(sstr, dstr);
4697 # else
4698                     if (sflags & SVf_IsCOW) {
4699                         sv_buf_to_rw(sstr);
4700                     }
4701                     CowREFCNT(sstr)++;
4702 # endif
4703                     SvPV_set(dstr, SvPVX_mutable(sstr));
4704                     sv_buf_to_ro(sstr);
4705             } else
4706 #endif
4707             {
4708                     /* SvIsCOW_shared_hash */
4709                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4710                                           "Copy on write: Sharing hash\n"));
4711
4712                     assert (SvTYPE(dstr) >= SVt_PV);
4713                     SvPV_set(dstr,
4714                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4715             }
4716             SvLEN_set(dstr, len);
4717             SvCUR_set(dstr, cur);
4718             SvIsCOW_on(dstr);
4719         } else {
4720             /* Failed the swipe test, and we cannot do copy-on-write either.
4721                Have to copy the string.  */
4722             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4723             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4724             SvCUR_set(dstr, cur);
4725             *SvEND(dstr) = '\0';
4726         }
4727         if (sflags & SVp_NOK) {
4728             SvNV_set(dstr, SvNVX(sstr));
4729         }
4730         if (sflags & SVp_IOK) {
4731             SvIV_set(dstr, SvIVX(sstr));
4732             /* Must do this otherwise some other overloaded use of 0x80000000
4733                gets confused. I guess SVpbm_VALID */
4734             if (sflags & SVf_IVisUV)
4735                 SvIsUV_on(dstr);
4736         }
4737         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4738         {
4739             const MAGIC * const smg = SvVSTRING_mg(sstr);
4740             if (smg) {
4741                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4742                          smg->mg_ptr, smg->mg_len);
4743                 SvRMAGICAL_on(dstr);
4744             }
4745         }
4746     }
4747     else if (sflags & (SVp_IOK|SVp_NOK)) {
4748         (void)SvOK_off(dstr);
4749         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4750         if (sflags & SVp_IOK) {
4751             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4752             SvIV_set(dstr, SvIVX(sstr));
4753         }
4754         if (sflags & SVp_NOK) {
4755             SvNV_set(dstr, SvNVX(sstr));
4756         }
4757     }
4758     else {
4759         if (isGV_with_GP(sstr)) {
4760             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4761         }
4762         else
4763             (void)SvOK_off(dstr);
4764     }
4765     if (SvTAINTED(sstr))
4766         SvTAINT(dstr);
4767 }
4768
4769 /*
4770 =for apidoc sv_setsv_mg
4771
4772 Like C<sv_setsv>, but also handles 'set' magic.
4773
4774 =cut
4775 */
4776
4777 void
4778 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4779 {
4780     PERL_ARGS_ASSERT_SV_SETSV_MG;
4781
4782     sv_setsv(dstr,sstr);
4783     SvSETMAGIC(dstr);
4784 }
4785
4786 #ifdef PERL_ANY_COW
4787 # ifdef PERL_OLD_COPY_ON_WRITE
4788 #  define SVt_COW SVt_PVIV
4789 # else
4790 #  define SVt_COW SVt_PV
4791 # endif
4792 SV *
4793 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4794 {
4795     STRLEN cur = SvCUR(sstr);
4796     STRLEN len = SvLEN(sstr);
4797     char *new_pv;
4798 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4799     const bool already = cBOOL(SvIsCOW(sstr));
4800 #endif
4801
4802     PERL_ARGS_ASSERT_SV_SETSV_COW;
4803
4804     if (DEBUG_C_TEST) {
4805         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4806                       (void*)sstr, (void*)dstr);
4807         sv_dump(sstr);
4808         if (dstr)
4809                     sv_dump(dstr);
4810     }
4811
4812     if (dstr) {
4813         if (SvTHINKFIRST(dstr))
4814             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4815         else if (SvPVX_const(dstr))
4816             Safefree(SvPVX_mutable(dstr));
4817     }
4818     else
4819         new_SV(dstr);
4820     SvUPGRADE(dstr, SVt_COW);
4821
4822     assert (SvPOK(sstr));
4823     assert (SvPOKp(sstr));
4824 # ifdef PERL_OLD_COPY_ON_WRITE
4825     assert (!SvIOK(sstr));
4826     assert (!SvIOKp(sstr));
4827     assert (!SvNOK(sstr));
4828     assert (!SvNOKp(sstr));
4829 # endif
4830
4831     if (SvIsCOW(sstr)) {
4832
4833         if (SvLEN(sstr) == 0) {
4834             /* source is a COW shared hash key.  */
4835             DEBUG_C(PerlIO_printf(Perl_debug_log,
4836                                   "Fast copy on write: Sharing hash\n"));
4837             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4838             goto common_exit;
4839         }
4840 # ifdef PERL_OLD_COPY_ON_WRITE
4841         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4842 # else
4843         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4844         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4845 # endif
4846     } else {
4847         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4848         SvUPGRADE(sstr, SVt_COW);
4849         SvIsCOW_on(sstr);
4850         DEBUG_C(PerlIO_printf(Perl_debug_log,
4851                               "Fast copy on write: Converting sstr to COW\n"));
4852 # ifdef PERL_OLD_COPY_ON_WRITE
4853         SV_COW_NEXT_SV_SET(dstr, sstr);
4854 # else
4855         CowREFCNT(sstr) = 0;    
4856 # endif
4857     }
4858 # ifdef PERL_OLD_COPY_ON_WRITE
4859     SV_COW_NEXT_SV_SET(sstr, dstr);
4860 # else
4861 #  ifdef PERL_DEBUG_READONLY_COW
4862     if (already) sv_buf_to_rw(sstr);
4863 #  endif
4864     CowREFCNT(sstr)++;  
4865 # endif
4866     new_pv = SvPVX_mutable(sstr);
4867     sv_buf_to_ro(sstr);
4868
4869   common_exit:
4870     SvPV_set(dstr, new_pv);
4871     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4872     if (SvUTF8(sstr))
4873         SvUTF8_on(dstr);
4874     SvLEN_set(dstr, len);
4875     SvCUR_set(dstr, cur);
4876     if (DEBUG_C_TEST) {
4877         sv_dump(dstr);
4878     }
4879     return dstr;
4880 }
4881 #endif
4882
4883 /*
4884 =for apidoc sv_setpvn
4885
4886 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4887 The C<len> parameter indicates the number of
4888 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4889 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4890
4891 =cut
4892 */
4893
4894 void
4895 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4896 {
4897     char *dptr;
4898
4899     PERL_ARGS_ASSERT_SV_SETPVN;
4900
4901     SV_CHECK_THINKFIRST_COW_DROP(sv);
4902     if (!ptr) {
4903         (void)SvOK_off(sv);
4904         return;
4905     }
4906     else {
4907         /* len is STRLEN which is unsigned, need to copy to signed */
4908         const IV iv = len;
4909         if (iv < 0)
4910             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4911                        IVdf, iv);
4912     }
4913     SvUPGRADE(sv, SVt_PV);
4914
4915     dptr = SvGROW(sv, len + 1);
4916     Move(ptr,dptr,len,char);
4917     dptr[len] = '\0';
4918     SvCUR_set(sv, len);
4919     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4920     SvTAINT(sv);
4921     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4922 }
4923
4924 /*
4925 =for apidoc sv_setpvn_mg
4926
4927 Like C<sv_setpvn>, but also handles 'set' magic.
4928
4929 =cut
4930 */
4931
4932 void
4933 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4934 {
4935     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4936
4937     sv_setpvn(sv,ptr,len);
4938     SvSETMAGIC(sv);
4939 }
4940
4941 /*
4942 =for apidoc sv_setpv
4943
4944 Copies a string into an SV.  The string must be terminated with a C<NUL>
4945 character.
4946 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4947
4948 =cut
4949 */
4950
4951 void
4952 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4953 {
4954     STRLEN len;
4955
4956     PERL_ARGS_ASSERT_SV_SETPV;
4957
4958     SV_CHECK_THINKFIRST_COW_DROP(sv);
4959     if (!ptr) {
4960         (void)SvOK_off(sv);
4961         return;
4962     }
4963     len = strlen(ptr);
4964     SvUPGRADE(sv, SVt_PV);
4965
4966     SvGROW(sv, len + 1);
4967     Move(ptr,SvPVX(sv),len+1,char);
4968     SvCUR_set(sv, len);
4969     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4970     SvTAINT(sv);
4971     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4972 }
4973
4974 /*
4975 =for apidoc sv_setpv_mg
4976
4977 Like C<sv_setpv>, but also handles 'set' magic.
4978
4979 =cut
4980 */
4981
4982 void
4983 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4984 {
4985     PERL_ARGS_ASSERT_SV_SETPV_MG;
4986
4987     sv_setpv(sv,ptr);
4988     SvSETMAGIC(sv);
4989 }
4990
4991 void
4992 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4993 {
4994     PERL_ARGS_ASSERT_SV_SETHEK;
4995
4996     if (!hek) {
4997         return;
4998     }
4999
5000     if (HEK_LEN(hek) == HEf_SVKEY) {
5001         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5002         return;
5003     } else {
5004         const int flags = HEK_FLAGS(hek);
5005         if (flags & HVhek_WASUTF8) {
5006             STRLEN utf8_len = HEK_LEN(hek);
5007             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5008             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5009             SvUTF8_on(sv);
5010             return;
5011         } else if (flags & HVhek_UNSHARED) {
5012             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5013             if (HEK_UTF8(hek))
5014                 SvUTF8_on(sv);
5015             else SvUTF8_off(sv);
5016             return;
5017         }
5018         {
5019             SV_CHECK_THINKFIRST_COW_DROP(sv);
5020             SvUPGRADE(sv, SVt_PV);
5021             SvPV_free(sv);
5022             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5023             SvCUR_set(sv, HEK_LEN(hek));
5024             SvLEN_set(sv, 0);
5025             SvIsCOW_on(sv);
5026             SvPOK_on(sv);
5027             if (HEK_UTF8(hek))
5028                 SvUTF8_on(sv);
5029             else SvUTF8_off(sv);
5030             return;
5031         }
5032     }
5033 }
5034
5035
5036 /*
5037 =for apidoc sv_usepvn_flags
5038
5039 Tells an SV to use C<ptr> to find its string value.  Normally the
5040 string is stored inside the SV, but sv_usepvn allows the SV to use an
5041 outside string.  The C<ptr> should point to memory that was allocated
5042 by L<Newx|perlclib/Memory Management and String Handling>.  It must be
5043 the start of a Newx-ed block of memory, and not a pointer to the
5044 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
5045 and not be from a non-Newx memory allocator like C<malloc>.  The
5046 string length, C<len>, must be supplied.  By default this function
5047 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5048 so that pointer should not be freed or used by the programmer after
5049 giving it to sv_usepvn, and neither should any pointers from "behind"
5050 that pointer (e.g. ptr + 1) be used.
5051
5052 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
5053 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
5054 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5055 C<len>, and already meets the requirements for storing in C<SvPVX>).
5056
5057 =cut
5058 */
5059
5060 void
5061 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5062 {
5063     STRLEN allocate;
5064
5065     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5066
5067     SV_CHECK_THINKFIRST_COW_DROP(sv);
5068     SvUPGRADE(sv, SVt_PV);
5069     if (!ptr) {
5070         (void)SvOK_off(sv);
5071         if (flags & SV_SMAGIC)
5072             SvSETMAGIC(sv);
5073         return;
5074     }
5075     if (SvPVX_const(sv))
5076         SvPV_free(sv);
5077
5078 #ifdef DEBUGGING
5079     if (flags & SV_HAS_TRAILING_NUL)
5080         assert(ptr[len] == '\0');
5081 #endif
5082
5083     allocate = (flags & SV_HAS_TRAILING_NUL)
5084         ? len + 1 :
5085 #ifdef Perl_safesysmalloc_size
5086         len + 1;
5087 #else 
5088         PERL_STRLEN_ROUNDUP(len + 1);
5089 #endif
5090     if (flags & SV_HAS_TRAILING_NUL) {
5091         /* It's long enough - do nothing.
5092            Specifically Perl_newCONSTSUB is relying on this.  */
5093     } else {
5094 #ifdef DEBUGGING
5095         /* Force a move to shake out bugs in callers.  */
5096         char *new_ptr = (char*)safemalloc(allocate);
5097         Copy(ptr, new_ptr, len, char);
5098         PoisonFree(ptr,len,char);
5099         Safefree(ptr);
5100         ptr = new_ptr;
5101 #else
5102         ptr = (char*) saferealloc (ptr, allocate);
5103 #endif
5104     }
5105 #ifdef Perl_safesysmalloc_size
5106     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5107 #else
5108     SvLEN_set(sv, allocate);
5109 #endif
5110     SvCUR_set(sv, len);
5111     SvPV_set(sv, ptr);
5112     if (!(flags & SV_HAS_TRAILING_NUL)) {
5113         ptr[len] = '\0';
5114     }
5115     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5116     SvTAINT(sv);
5117     if (flags & SV_SMAGIC)
5118         SvSETMAGIC(sv);
5119 }
5120
5121 #ifdef PERL_OLD_COPY_ON_WRITE
5122 /* Need to do this *after* making the SV normal, as we need the buffer
5123    pointer to remain valid until after we've copied it.  If we let go too early,
5124    another thread could invalidate it by unsharing last of the same hash key
5125    (which it can do by means other than releasing copy-on-write Svs)
5126    or by changing the other copy-on-write SVs in the loop.  */
5127 STATIC void
5128 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
5129 {
5130     PERL_ARGS_ASSERT_SV_RELEASE_COW;
5131
5132     { /* this SV was SvIsCOW_normal(sv) */
5133          /* we need to find the SV pointing to us.  */
5134         SV *current = SV_COW_NEXT_SV(after);
5135
5136         if (current == sv) {
5137             /* The SV we point to points back to us (there were only two of us
5138                in the loop.)
5139                Hence other SV is no longer copy on write either.  */
5140             SvIsCOW_off(after);
5141             sv_buf_to_rw(after);
5142         } else {
5143             /* We need to follow the pointers around the loop.  */
5144             SV *next;
5145             while ((next = SV_COW_NEXT_SV(current)) != sv) {
5146                 assert (next);
5147                 current = next;
5148                  /* don't loop forever if the structure is bust, and we have
5149                     a pointer into a closed loop.  */
5150                 assert (current != after);
5151                 assert (SvPVX_const(current) == pvx);
5152             }
5153             /* Make the SV before us point to the SV after us.  */
5154             SV_COW_NEXT_SV_SET(current, after);
5155         }
5156     }
5157 }
5158 #endif
5159 /*
5160 =for apidoc sv_force_normal_flags
5161
5162 Undo various types of fakery on an SV, where fakery means
5163 "more than" a string: if the PV is a shared string, make
5164 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5165 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5166 we do the copy, and is also used locally; if this is a
5167 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5168 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5169 SvPOK_off rather than making a copy.  (Used where this
5170 scalar is about to be set to some other value.)  In addition,
5171 the C<flags> parameter gets passed to C<sv_unref_flags()>
5172 when unreffing.  C<sv_force_normal> calls this function
5173 with flags set to 0.
5174
5175 This function is expected to be used to signal to perl that this SV is
5176 about to be written to, and any extra book-keeping needs to be taken care
5177 of.  Hence, it croaks on read-only values.
5178
5179 =cut
5180 */
5181
5182 static void
5183 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5184 {
5185     assert(SvIsCOW(sv));
5186     {
5187 #ifdef PERL_ANY_COW
5188         const char * const pvx = SvPVX_const(sv);
5189         const STRLEN len = SvLEN(sv);
5190         const STRLEN cur = SvCUR(sv);
5191 # ifdef PERL_OLD_COPY_ON_WRITE
5192         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5193            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5194            we'll fail an assertion.  */
5195         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5196 # endif
5197
5198         if (DEBUG_C_TEST) {
5199                 PerlIO_printf(Perl_debug_log,
5200                               "Copy on write: Force normal %ld\n",
5201                               (long) flags);
5202                 sv_dump(sv);
5203         }
5204         SvIsCOW_off(sv);
5205 # ifdef PERL_NEW_COPY_ON_WRITE
5206         if (len) {
5207             /* Must do this first, since the CowREFCNT uses SvPVX and
5208             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5209             the only owner left of the buffer. */
5210             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5211             {
5212                 U8 cowrefcnt = CowREFCNT(sv);
5213                 if(cowrefcnt != 0) {
5214                     cowrefcnt--;
5215                     CowREFCNT(sv) = cowrefcnt;
5216                     sv_buf_to_ro(sv);
5217                     goto copy_over;
5218                 }
5219             }
5220             /* Else we are the only owner of the buffer. */
5221         }
5222         else
5223 # endif
5224         {
5225             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5226             copy_over:
5227             SvPV_set(sv, NULL);
5228             SvCUR_set(sv, 0);
5229             SvLEN_set(sv, 0);
5230             if (flags & SV_COW_DROP_PV) {
5231                 /* OK, so we don't need to copy our buffer.  */
5232                 SvPOK_off(sv);
5233             } else {
5234                 SvGROW(sv, cur + 1);
5235                 Move(pvx,SvPVX(sv),cur,char);
5236                 SvCUR_set(sv, cur);
5237                 *SvEND(sv) = '\0';
5238             }
5239             if (len) {
5240 # ifdef PERL_OLD_COPY_ON_WRITE
5241                 sv_release_COW(sv, pvx, next);
5242 # endif
5243             } else {
5244                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5245             }
5246             if (DEBUG_C_TEST) {
5247                 sv_dump(sv);
5248             }
5249         }
5250 #else
5251             const char * const pvx = SvPVX_const(sv);
5252             const STRLEN len = SvCUR(sv);
5253             SvIsCOW_off(sv);
5254             SvPV_set(sv, NULL);
5255             SvLEN_set(sv, 0);
5256             if (flags & SV_COW_DROP_PV) {
5257                 /* OK, so we don't need to copy our buffer.  */
5258                 SvPOK_off(sv);
5259             } else {
5260                 SvGROW(sv, len + 1);
5261                 Move(pvx,SvPVX(sv),len,char);
5262                 *SvEND(sv) = '\0';
5263             }
5264             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5265 #endif
5266     }
5267 }
5268
5269 void
5270 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5271 {
5272     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5273
5274     if (SvREADONLY(sv))
5275         Perl_croak_no_modify();
5276     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5277         S_sv_uncow(aTHX_ sv, flags);
5278     if (SvROK(sv))
5279         sv_unref_flags(sv, flags);
5280     else if (SvFAKE(sv) && isGV_with_GP(sv))
5281         sv_unglob(sv, flags);
5282     else if (SvFAKE(sv) && isREGEXP(sv)) {
5283         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5284            to sv_unglob. We only need it here, so inline it.  */
5285         const bool islv = SvTYPE(sv) == SVt_PVLV;
5286         const svtype new_type =
5287           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5288         SV *const temp = newSV_type(new_type);
5289         regexp *const temp_p = ReANY((REGEXP *)sv);
5290
5291         if (new_type == SVt_PVMG) {
5292             SvMAGIC_set(temp, SvMAGIC(sv));
5293             SvMAGIC_set(sv, NULL);
5294             SvSTASH_set(temp, SvSTASH(sv));
5295             SvSTASH_set(sv, NULL);
5296         }
5297         if (!islv) SvCUR_set(temp, SvCUR(sv));
5298         /* Remember that SvPVX is in the head, not the body.  But
5299            RX_WRAPPED is in the body. */
5300         assert(ReANY((REGEXP *)sv)->mother_re);
5301         /* Their buffer is already owned by someone else. */
5302         if (flags & SV_COW_DROP_PV) {
5303             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5304                zeroed body.  For SVt_PVLV, it should have been set to 0
5305                before turning into a regexp. */
5306             assert(!SvLEN(islv ? sv : temp));
5307             sv->sv_u.svu_pv = 0;
5308         }
5309         else {
5310             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5311             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5312             SvPOK_on(sv);
5313         }
5314
5315         /* Now swap the rest of the bodies. */
5316
5317         SvFAKE_off(sv);
5318         if (!islv) {
5319             SvFLAGS(sv) &= ~SVTYPEMASK;
5320             SvFLAGS(sv) |= new_type;
5321             SvANY(sv) = SvANY(temp);
5322         }
5323
5324         SvFLAGS(temp) &= ~(SVTYPEMASK);
5325         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5326         SvANY(temp) = temp_p;
5327         temp->sv_u.svu_rx = (regexp *)temp_p;
5328
5329         SvREFCNT_dec_NN(temp);
5330     }
5331     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5332 }
5333
5334 /*
5335 =for apidoc sv_chop
5336
5337 Efficient removal of characters from the beginning of the string buffer.
5338 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5339 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5340 character of the adjusted string.  Uses the "OOK hack".  On return, only
5341 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5342
5343 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5344 refer to the same chunk of data.
5345
5346 The unfortunate similarity of this function's name to that of Perl's C<chop>
5347 operator is strictly coincidental.  This function works from the left;
5348 C<chop> works from the right.
5349
5350 =cut
5351 */
5352
5353 void
5354 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5355 {
5356     STRLEN delta;
5357     STRLEN old_delta;
5358     U8 *p;
5359 #ifdef DEBUGGING
5360     const U8 *evacp;
5361     STRLEN evacn;
5362 #endif
5363     STRLEN max_delta;
5364
5365     PERL_ARGS_ASSERT_SV_CHOP;
5366
5367     if (!ptr || !SvPOKp(sv))
5368         return;
5369     delta = ptr - SvPVX_const(sv);
5370     if (!delta) {
5371         /* Nothing to do.  */
5372         return;
5373     }
5374     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5375     if (delta > max_delta)
5376         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5377                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5378     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5379     SV_CHECK_THINKFIRST(sv);
5380     SvPOK_only_UTF8(sv);
5381
5382     if (!SvOOK(sv)) {
5383         if (!SvLEN(sv)) { /* make copy of shared string */
5384             const char *pvx = SvPVX_const(sv);
5385             const STRLEN len = SvCUR(sv);
5386             SvGROW(sv, len + 1);
5387             Move(pvx,SvPVX(sv),len,char);
5388             *SvEND(sv) = '\0';
5389         }
5390         SvOOK_on(sv);
5391         old_delta = 0;
5392     } else {
5393         SvOOK_offset(sv, old_delta);
5394     }
5395     SvLEN_set(sv, SvLEN(sv) - delta);
5396     SvCUR_set(sv, SvCUR(sv) - delta);
5397     SvPV_set(sv, SvPVX(sv) + delta);
5398
5399     p = (U8 *)SvPVX_const(sv);
5400
5401 #ifdef DEBUGGING
5402     /* how many bytes were evacuated?  we will fill them with sentinel
5403        bytes, except for the part holding the new offset of course. */
5404     evacn = delta;
5405     if (old_delta)
5406         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5407     assert(evacn);
5408     assert(evacn <= delta + old_delta);
5409     evacp = p - evacn;
5410 #endif
5411
5412     /* This sets 'delta' to the accumulated value of all deltas so far */
5413     delta += old_delta;
5414     assert(delta);
5415
5416     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5417      * the string; otherwise store a 0 byte there and store 'delta' just prior
5418      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5419      * portion of the chopped part of the string */
5420     if (delta < 0x100) {
5421         *--p = (U8) delta;
5422     } else {
5423         *--p = 0;
5424         p -= sizeof(STRLEN);
5425         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5426     }
5427
5428 #ifdef DEBUGGING
5429     /* Fill the preceding buffer with sentinals to verify that no-one is
5430        using it.  */
5431     while (p > evacp) {
5432         --p;
5433         *p = (U8)PTR2UV(p);
5434     }
5435 #endif
5436 }
5437
5438 /*
5439 =for apidoc sv_catpvn
5440
5441 Concatenates the string onto the end of the string which is in the SV.  The
5442 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5443 status set, then the bytes appended should be valid UTF-8.
5444 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5445
5446 =for apidoc sv_catpvn_flags
5447
5448 Concatenates the string onto the end of the string which is in the SV.  The
5449 C<len> indicates number of bytes to copy.
5450
5451 By default, the string appended is assumed to be valid UTF-8 if the SV has
5452 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5453 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5454 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5455 string appended will be upgraded to UTF-8 if necessary.
5456
5457 If C<flags> has the C<SV_SMAGIC> bit set, will
5458 C<mg_set> on C<dsv> afterwards if appropriate.
5459 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5460 in terms of this function.
5461
5462 =cut
5463 */
5464
5465 void
5466 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5467 {
5468     STRLEN dlen;
5469     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5470
5471     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5472     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5473
5474     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5475       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5476          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5477          dlen = SvCUR(dsv);
5478       }
5479       else SvGROW(dsv, dlen + slen + 1);
5480       if (sstr == dstr)
5481         sstr = SvPVX_const(dsv);
5482       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5483       SvCUR_set(dsv, SvCUR(dsv) + slen);
5484     }
5485     else {
5486         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5487         const char * const send = sstr + slen;
5488         U8 *d;
5489
5490         /* Something this code does not account for, which I think is
5491            impossible; it would require the same pv to be treated as
5492            bytes *and* utf8, which would indicate a bug elsewhere. */
5493         assert(sstr != dstr);
5494
5495         SvGROW(dsv, dlen + slen * 2 + 1);
5496         d = (U8 *)SvPVX(dsv) + dlen;
5497
5498         while (sstr < send) {
5499             append_utf8_from_native_byte(*sstr, &d);
5500             sstr++;
5501         }
5502         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5503     }
5504     *SvEND(dsv) = '\0';
5505     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5506     SvTAINT(dsv);
5507     if (flags & SV_SMAGIC)
5508         SvSETMAGIC(dsv);
5509 }
5510
5511 /*
5512 =for apidoc sv_catsv
5513
5514 Concatenates the string from SV C<ssv> onto the end of the string in SV
5515 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5516 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5517 C<sv_catsv_nomg>.
5518
5519 =for apidoc sv_catsv_flags
5520
5521 Concatenates the string from SV C<ssv> onto the end of the string in SV
5522 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5523 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5524 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5525 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5526 and C<sv_catsv_mg> are implemented in terms of this function.
5527
5528 =cut */
5529
5530 void
5531 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5532 {
5533     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5534
5535     if (ssv) {
5536         STRLEN slen;
5537         const char *spv = SvPV_flags_const(ssv, slen, flags);
5538         if (flags & SV_GMAGIC)
5539                 SvGETMAGIC(dsv);
5540         sv_catpvn_flags(dsv, spv, slen,
5541                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5542         if (flags & SV_SMAGIC)
5543                 SvSETMAGIC(dsv);
5544     }
5545 }
5546
5547 /*
5548 =for apidoc sv_catpv
5549
5550 Concatenates the C<NUL>-terminated string onto the end of the string which is
5551 in the SV.
5552 If the SV has the UTF-8 status set, then the bytes appended should be
5553 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5554
5555 =cut */
5556
5557 void
5558 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5559 {
5560     STRLEN len;
5561     STRLEN tlen;
5562     char *junk;
5563
5564     PERL_ARGS_ASSERT_SV_CATPV;
5565
5566     if (!ptr)
5567         return;
5568     junk = SvPV_force(sv, tlen);
5569     len = strlen(ptr);
5570     SvGROW(sv, tlen + len + 1);
5571     if (ptr == junk)
5572         ptr = SvPVX_const(sv);
5573     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5574     SvCUR_set(sv, SvCUR(sv) + len);
5575     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5576     SvTAINT(sv);
5577 }
5578
5579 /*
5580 =for apidoc sv_catpv_flags
5581
5582 Concatenates the C<NUL>-terminated string onto the end of the string which is
5583 in the SV.
5584 If the SV has the UTF-8 status set, then the bytes appended should
5585 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5586 on the modified SV if appropriate.
5587
5588 =cut
5589 */
5590
5591 void
5592 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5593 {
5594     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5595     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5596 }
5597
5598 /*
5599 =for apidoc sv_catpv_mg
5600
5601 Like C<sv_catpv>, but also handles 'set' magic.
5602
5603 =cut
5604 */
5605
5606 void
5607 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5608 {
5609     PERL_ARGS_ASSERT_SV_CATPV_MG;
5610
5611     sv_catpv(sv,ptr);
5612     SvSETMAGIC(sv);
5613 }
5614
5615 /*
5616 =for apidoc newSV
5617
5618 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5619 bytes of preallocated string space the SV should have.  An extra byte for a
5620 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5621 space is allocated.)  The reference count for the new SV is set to 1.
5622
5623 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5624 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5625 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5626 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5627 modules supporting older perls.
5628
5629 =cut
5630 */
5631
5632 SV *
5633 Perl_newSV(pTHX_ const STRLEN len)
5634 {
5635     SV *sv;
5636
5637     new_SV(sv);
5638     if (len) {
5639         sv_grow(sv, len + 1);
5640     }
5641     return sv;
5642 }
5643 /*
5644 =for apidoc sv_magicext
5645
5646 Adds magic to an SV, upgrading it if necessary.  Applies the
5647 supplied vtable and returns a pointer to the magic added.
5648
5649 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5650 In particular, you can add magic to SvREADONLY SVs, and add more than
5651 one instance of the same 'how'.
5652
5653 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5654 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5655 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5656 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5657
5658 (This is now used as a subroutine by C<sv_magic>.)
5659
5660 =cut
5661 */
5662 MAGIC * 
5663 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5664                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5665 {
5666     MAGIC* mg;
5667
5668     PERL_ARGS_ASSERT_SV_MAGICEXT;
5669
5670     SvUPGRADE(sv, SVt_PVMG);
5671     Newxz(mg, 1, MAGIC);
5672     mg->mg_moremagic = SvMAGIC(sv);
5673     SvMAGIC_set(sv, mg);
5674
5675     /* Sometimes a magic contains a reference loop, where the sv and
5676        object refer to each other.  To prevent a reference loop that
5677        would prevent such objects being freed, we look for such loops
5678        and if we find one we avoid incrementing the object refcount.
5679
5680        Note we cannot do this to avoid self-tie loops as intervening RV must
5681        have its REFCNT incremented to keep it in existence.
5682
5683     */
5684     if (!obj || obj == sv ||
5685         how == PERL_MAGIC_arylen ||
5686         how == PERL_MAGIC_symtab ||
5687         (SvTYPE(obj) == SVt_PVGV &&
5688             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5689              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5690              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5691     {
5692         mg->mg_obj = obj;
5693     }
5694     else {
5695         mg->mg_obj = SvREFCNT_inc_simple(obj);
5696         mg->mg_flags |= MGf_REFCOUNTED;
5697     }
5698
5699     /* Normal self-ties simply pass a null object, and instead of
5700        using mg_obj directly, use the SvTIED_obj macro to produce a
5701        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5702        with an RV obj pointing to the glob containing the PVIO.  In
5703        this case, to avoid a reference loop, we need to weaken the
5704        reference.
5705     */
5706
5707     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5708         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5709     {
5710       sv_rvweaken(obj);
5711     }
5712
5713     mg->mg_type = how;
5714     mg->mg_len = namlen;
5715     if (name) {
5716         if (namlen > 0)
5717             mg->mg_ptr = savepvn(name, namlen);
5718         else if (namlen == HEf_SVKEY) {
5719             /* Yes, this is casting away const. This is only for the case of
5720                HEf_SVKEY. I think we need to document this aberation of the
5721                constness of the API, rather than making name non-const, as
5722                that change propagating outwards a long way.  */
5723             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5724         } else
5725             mg->mg_ptr = (char *) name;
5726     }
5727     mg->mg_virtual = (MGVTBL *) vtable;
5728
5729     mg_magical(sv);
5730     return mg;
5731 }
5732
5733 MAGIC *
5734 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5735 {
5736     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5737     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5738         /* This sv is only a delegate.  //g magic must be attached to
5739            its target. */
5740         vivify_defelem(sv);
5741         sv = LvTARG(sv);
5742     }
5743 #ifdef PERL_OLD_COPY_ON_WRITE
5744     if (SvIsCOW(sv))
5745         sv_force_normal_flags(sv, 0);
5746 #endif
5747     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5748                        &PL_vtbl_mglob, 0, 0);
5749 }
5750
5751 /*
5752 =for apidoc sv_magic
5753
5754 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5755 necessary, then adds a new magic item of type C<how> to the head of the
5756 magic list.
5757
5758 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5759 handling of the C<name> and C<namlen> arguments.
5760
5761 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5762 to add more than one instance of the same 'how'.
5763
5764 =cut
5765 */
5766
5767 void
5768 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5769              const char *const name, const I32 namlen)
5770 {
5771     const MGVTBL *vtable;
5772     MAGIC* mg;
5773     unsigned int flags;
5774     unsigned int vtable_index;
5775
5776     PERL_ARGS_ASSERT_SV_MAGIC;
5777
5778     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5779         || ((flags = PL_magic_data[how]),
5780             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5781             > magic_vtable_max))
5782         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5783
5784     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5785        Useful for attaching extension internal data to perl vars.
5786        Note that multiple extensions may clash if magical scalars
5787        etc holding private data from one are passed to another. */
5788
5789     vtable = (vtable_index == magic_vtable_max)
5790         ? NULL : PL_magic_vtables + vtable_index;
5791
5792 #ifdef PERL_OLD_COPY_ON_WRITE
5793     if (SvIsCOW(sv))
5794         sv_force_normal_flags(sv, 0);
5795 #endif
5796     if (SvREADONLY(sv)) {
5797         if (
5798             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5799            )
5800         {
5801             Perl_croak_no_modify();
5802         }
5803     }
5804     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5805         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5806             /* sv_magic() refuses to add a magic of the same 'how' as an
5807                existing one
5808              */
5809             if (how == PERL_MAGIC_taint)
5810                 mg->mg_len |= 1;
5811             return;
5812         }
5813     }
5814
5815     /* Force pos to be stored as characters, not bytes. */
5816     if (SvMAGICAL(sv) && DO_UTF8(sv)
5817       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5818       && mg->mg_len != -1
5819       && mg->mg_flags & MGf_BYTES) {
5820         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5821                                                SV_CONST_RETURN);
5822         mg->mg_flags &= ~MGf_BYTES;
5823     }
5824
5825     /* Rest of work is done else where */
5826     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5827
5828     switch (how) {
5829     case PERL_MAGIC_taint:
5830         mg->mg_len = 1;
5831         break;
5832     case PERL_MAGIC_ext:
5833     case PERL_MAGIC_dbfile:
5834         SvRMAGICAL_on(sv);
5835         break;
5836     }
5837 }
5838
5839 static int
5840 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5841 {
5842     MAGIC* mg;
5843     MAGIC** mgp;
5844
5845     assert(flags <= 1);
5846
5847     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5848         return 0;
5849     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5850     for (mg = *mgp; mg; mg = *mgp) {
5851         const MGVTBL* const virt = mg->mg_virtual;
5852         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5853             *mgp = mg->mg_moremagic;
5854             if (virt && virt->svt_free)
5855                 virt->svt_free(aTHX_ sv, mg);
5856             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5857                 if (mg->mg_len > 0)
5858                     Safefree(mg->mg_ptr);
5859                 else if (mg->mg_len == HEf_SVKEY)
5860                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5861                 else if (mg->mg_type == PERL_MAGIC_utf8)
5862                     Safefree(mg->mg_ptr);
5863             }
5864             if (mg->mg_flags & MGf_REFCOUNTED)
5865                 SvREFCNT_dec(mg->mg_obj);
5866             Safefree(mg);
5867         }
5868         else
5869             mgp = &mg->mg_moremagic;
5870     }
5871     if (SvMAGIC(sv)) {
5872         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5873             mg_magical(sv);     /*    else fix the flags now */
5874     }
5875     else {
5876         SvMAGICAL_off(sv);
5877         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5878     }
5879     return 0;
5880 }
5881
5882 /*
5883 =for apidoc sv_unmagic
5884
5885 Removes all magic of type C<type> from an SV.
5886
5887 =cut
5888 */
5889
5890 int
5891 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5892 {
5893     PERL_ARGS_ASSERT_SV_UNMAGIC;
5894     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5895 }
5896
5897 /*
5898 =for apidoc sv_unmagicext
5899
5900 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5901
5902 =cut
5903 */
5904
5905 int
5906 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5907 {
5908     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5909     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5910 }
5911
5912 /*
5913 =for apidoc sv_rvweaken
5914
5915 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5916 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5917 push a back-reference to this RV onto the array of backreferences
5918 associated with that magic.  If the RV is magical, set magic will be
5919 called after the RV is cleared.
5920
5921 =cut
5922 */
5923
5924 SV *
5925 Perl_sv_rvweaken(pTHX_ SV *const sv)
5926 {
5927     SV *tsv;
5928
5929     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5930
5931     if (!SvOK(sv))  /* let undefs pass */
5932         return sv;
5933     if (!SvROK(sv))
5934         Perl_croak(aTHX_ "Can't weaken a nonreference");
5935     else if (SvWEAKREF(sv)) {
5936         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5937         return sv;
5938     }
5939     else if (SvREADONLY(sv)) croak_no_modify();
5940     tsv = SvRV(sv);
5941     Perl_sv_add_backref(aTHX_ tsv, sv);
5942     SvWEAKREF_on(sv);
5943     SvREFCNT_dec_NN(tsv);
5944     return sv;
5945 }
5946
5947 /*
5948 =for apidoc sv_get_backrefs
5949
5950 If the sv is the target of a weak reference then it returns the back
5951 references structure associated with the sv; otherwise return NULL.
5952
5953 When returning a non-null result the type of the return is relevant. If it
5954 is an AV then the elements of the AV are the weak reference RVs which
5955 point at this item. If it is any other type then the item itself is the
5956 weak reference.
5957
5958 See also Perl_sv_add_backref(), Perl_sv_del_backref(),
5959 Perl_sv_kill_backrefs()
5960
5961 =cut
5962 */
5963
5964 SV *
5965 Perl_sv_get_backrefs(SV *const sv)
5966 {
5967     SV *backrefs= NULL;
5968
5969     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5970
5971     /* find slot to store array or singleton backref */
5972
5973     if (SvTYPE(sv) == SVt_PVHV) {
5974         if (SvOOK(sv)) {
5975             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5976             backrefs = (SV *)iter->xhv_backreferences;
5977         }
5978     } else if (SvMAGICAL(sv)) {
5979         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5980         if (mg)
5981             backrefs = mg->mg_obj;
5982     }
5983     return backrefs;
5984 }
5985
5986 /* Give tsv backref magic if it hasn't already got it, then push a
5987  * back-reference to sv onto the array associated with the backref magic.
5988  *
5989  * As an optimisation, if there's only one backref and it's not an AV,
5990  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5991  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5992  * active.)
5993  */
5994
5995 /* A discussion about the backreferences array and its refcount:
5996  *
5997  * The AV holding the backreferences is pointed to either as the mg_obj of
5998  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5999  * xhv_backreferences field. The array is created with a refcount
6000  * of 2. This means that if during global destruction the array gets
6001  * picked on before its parent to have its refcount decremented by the
6002  * random zapper, it won't actually be freed, meaning it's still there for
6003  * when its parent gets freed.
6004  *
6005  * When the parent SV is freed, the extra ref is killed by
6006  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6007  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6008  *
6009  * When a single backref SV is stored directly, it is not reference
6010  * counted.
6011  */
6012
6013 void
6014 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6015 {
6016     SV **svp;
6017     AV *av = NULL;
6018     MAGIC *mg = NULL;
6019
6020     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6021
6022     /* find slot to store array or singleton backref */
6023
6024     if (SvTYPE(tsv) == SVt_PVHV) {
6025         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6026     } else {
6027         if (SvMAGICAL(tsv))
6028             mg = mg_find(tsv, PERL_MAGIC_backref);
6029         if (!mg)
6030             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6031         svp = &(mg->mg_obj);
6032     }
6033
6034     /* create or retrieve the array */
6035
6036     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6037         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6038     ) {
6039         /* create array */
6040         if (mg)
6041             mg->mg_flags |= MGf_REFCOUNTED;
6042         av = newAV();
6043         AvREAL_off(av);
6044         SvREFCNT_inc_simple_void_NN(av);
6045         /* av now has a refcnt of 2; see discussion above */
6046         av_extend(av, *svp ? 2 : 1);
6047         if (*svp) {
6048             /* move single existing backref to the array */
6049             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6050         }
6051         *svp = (SV*)av;
6052     }
6053     else {
6054         av = MUTABLE_AV(*svp);
6055         if (!av) {
6056             /* optimisation: store single backref directly in HvAUX or mg_obj */
6057             *svp = sv;
6058             return;
6059         }
6060         assert(SvTYPE(av) == SVt_PVAV);
6061         if (AvFILLp(av) >= AvMAX(av)) {
6062             av_extend(av, AvFILLp(av)+1);
6063         }
6064     }
6065     /* push new backref */
6066     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6067 }
6068
6069 /* delete a back-reference to ourselves from the backref magic associated
6070  * with the SV we point to.
6071  */
6072
6073 void
6074 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6075 {
6076     SV **svp = NULL;
6077
6078     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6079
6080     if (SvTYPE(tsv) == SVt_PVHV) {
6081         if (SvOOK(tsv))
6082             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6083     }
6084     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6085         /* It's possible for the the last (strong) reference to tsv to have
6086            become freed *before* the last thing holding a weak reference.
6087            If both survive longer than the backreferences array, then when
6088            the referent's reference count drops to 0 and it is freed, it's
6089            not able to chase the backreferences, so they aren't NULLed.
6090
6091            For example, a CV holds a weak reference to its stash. If both the
6092            CV and the stash survive longer than the backreferences array,
6093            and the CV gets picked for the SvBREAK() treatment first,
6094            *and* it turns out that the stash is only being kept alive because
6095            of an our variable in the pad of the CV, then midway during CV
6096            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6097            It ends up pointing to the freed HV. Hence it's chased in here, and
6098            if this block wasn't here, it would hit the !svp panic just below.
6099
6100            I don't believe that "better" destruction ordering is going to help
6101            here - during global destruction there's always going to be the
6102            chance that something goes out of order. We've tried to make it
6103            foolproof before, and it only resulted in evolutionary pressure on
6104            fools. Which made us look foolish for our hubris. :-(
6105         */
6106         return;
6107     }
6108     else {
6109         MAGIC *const mg
6110             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6111         svp =  mg ? &(mg->mg_obj) : NULL;
6112     }
6113
6114     if (!svp)
6115         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6116     if (!*svp) {
6117         /* It's possible that sv is being freed recursively part way through the
6118            freeing of tsv. If this happens, the backreferences array of tsv has
6119            already been freed, and so svp will be NULL. If this is the case,
6120            we should not panic. Instead, nothing needs doing, so return.  */
6121         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6122             return;
6123         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6124                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6125     }
6126
6127     if (SvTYPE(*svp) == SVt_PVAV) {
6128 #ifdef DEBUGGING
6129         int count = 1;
6130 #endif
6131         AV * const av = (AV*)*svp;
6132         SSize_t fill;
6133         assert(!SvIS_FREED(av));
6134         fill = AvFILLp(av);
6135         assert(fill > -1);
6136         svp = AvARRAY(av);
6137         /* for an SV with N weak references to it, if all those
6138          * weak refs are deleted, then sv_del_backref will be called
6139          * N times and O(N^2) compares will be done within the backref
6140          * array. To ameliorate this potential slowness, we:
6141          * 1) make sure this code is as tight as possible;
6142          * 2) when looking for SV, look for it at both the head and tail of the
6143          *    array first before searching the rest, since some create/destroy
6144          *    patterns will cause the backrefs to be freed in order.
6145          */
6146         if (*svp == sv) {
6147             AvARRAY(av)++;
6148             AvMAX(av)--;
6149         }
6150         else {
6151             SV **p = &svp[fill];
6152             SV *const topsv = *p;
6153             if (topsv != sv) {
6154 #ifdef DEBUGGING
6155                 count = 0;
6156 #endif
6157                 while (--p > svp) {
6158                     if (*p == sv) {
6159                         /* We weren't the last entry.
6160                            An unordered list has this property that you
6161                            can take the last element off the end to fill
6162                            the hole, and it's still an unordered list :-)
6163                         */
6164                         *p = topsv;
6165 #ifdef DEBUGGING
6166                         count++;
6167 #else
6168                         break; /* should only be one */
6169 #endif
6170                     }
6171                 }
6172             }
6173         }
6174         assert(count ==1);
6175         AvFILLp(av) = fill-1;
6176     }
6177     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6178         /* freed AV; skip */
6179     }
6180     else {
6181         /* optimisation: only a single backref, stored directly */
6182         if (*svp != sv)
6183             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6184                        (void*)*svp, (void*)sv);
6185         *svp = NULL;
6186     }
6187
6188 }
6189
6190 void
6191 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6192 {
6193     SV **svp;
6194     SV **last;
6195     bool is_array;
6196
6197     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6198
6199     if (!av)
6200         return;
6201
6202     /* after multiple passes through Perl_sv_clean_all() for a thingy
6203      * that has badly leaked, the backref array may have gotten freed,
6204      * since we only protect it against 1 round of cleanup */
6205     if (SvIS_FREED(av)) {
6206         if (PL_in_clean_all) /* All is fair */
6207             return;
6208         Perl_croak(aTHX_
6209                    "panic: magic_killbackrefs (freed backref AV/SV)");
6210     }
6211
6212
6213     is_array = (SvTYPE(av) == SVt_PVAV);
6214     if (is_array) {
6215         assert(!SvIS_FREED(av));
6216         svp = AvARRAY(av);
6217         if (svp)
6218             last = svp + AvFILLp(av);
6219     }
6220     else {
6221         /* optimisation: only a single backref, stored directly */
6222         svp = (SV**)&av;
6223         last = svp;
6224     }
6225
6226     if (svp) {
6227         while (svp <= last) {
6228             if (*svp) {
6229                 SV *const referrer = *svp;
6230                 if (SvWEAKREF(referrer)) {
6231                     /* XXX Should we check that it hasn't changed? */
6232                     assert(SvROK(referrer));
6233                     SvRV_set(referrer, 0);
6234                     SvOK_off(referrer);
6235                     SvWEAKREF_off(referrer);
6236                     SvSETMAGIC(referrer);
6237                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6238                            SvTYPE(referrer) == SVt_PVLV) {
6239                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6240                     /* You lookin' at me?  */
6241                     assert(GvSTASH(referrer));
6242                     assert(GvSTASH(referrer) == (const HV *)sv);
6243                     GvSTASH(referrer) = 0;
6244                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6245                            SvTYPE(referrer) == SVt_PVFM) {
6246                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6247                         /* You lookin' at me?  */
6248                         assert(CvSTASH(referrer));
6249                         assert(CvSTASH(referrer) == (const HV *)sv);
6250                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6251                     }
6252                     else {
6253                         assert(SvTYPE(sv) == SVt_PVGV);
6254                         /* You lookin' at me?  */
6255                         assert(CvGV(referrer));
6256                         assert(CvGV(referrer) == (const GV *)sv);
6257                         anonymise_cv_maybe(MUTABLE_GV(sv),
6258                                                 MUTABLE_CV(referrer));
6259                     }
6260
6261                 } else {
6262                     Perl_croak(aTHX_
6263                                "panic: magic_killbackrefs (flags=%"UVxf")",
6264                                (UV)SvFLAGS(referrer));
6265                 }
6266
6267                 if (is_array)
6268                     *svp = NULL;
6269             }
6270             svp++;
6271         }
6272     }
6273     if (is_array) {
6274         AvFILLp(av) = -1;
6275         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6276     }
6277     return;
6278 }
6279
6280 /*
6281 =for apidoc sv_insert
6282
6283 Inserts a string at the specified offset/length within the SV.  Similar to
6284 the Perl substr() function.  Handles get magic.
6285
6286 =for apidoc sv_insert_flags
6287
6288 Same as C<sv_insert>, but the extra C<flags> are passed to the
6289 C<SvPV_force_flags> that applies to C<bigstr>.
6290
6291 =cut
6292 */
6293
6294 void
6295 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6296 {
6297     char *big;
6298     char *mid;
6299     char *midend;
6300     char *bigend;
6301     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6302     STRLEN curlen;
6303
6304     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6305
6306     SvPV_force_flags(bigstr, curlen, flags);
6307     (void)SvPOK_only_UTF8(bigstr);
6308     if (offset + len > curlen) {
6309         SvGROW(bigstr, offset+len+1);
6310         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6311         SvCUR_set(bigstr, offset+len);
6312     }
6313
6314     SvTAINT(bigstr);
6315     i = littlelen - len;
6316     if (i > 0) {                        /* string might grow */
6317         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6318         mid = big + offset + len;
6319         midend = bigend = big + SvCUR(bigstr);
6320         bigend += i;
6321         *bigend = '\0';
6322         while (midend > mid)            /* shove everything down */
6323             *--bigend = *--midend;
6324         Move(little,big+offset,littlelen,char);
6325         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6326         SvSETMAGIC(bigstr);
6327         return;
6328     }
6329     else if (i == 0) {
6330         Move(little,SvPVX(bigstr)+offset,len,char);
6331         SvSETMAGIC(bigstr);
6332         return;
6333     }
6334
6335     big = SvPVX(bigstr);
6336     mid = big + offset;
6337     midend = mid + len;
6338     bigend = big + SvCUR(bigstr);
6339
6340     if (midend > bigend)
6341         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6342                    midend, bigend);
6343
6344     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6345         if (littlelen) {
6346             Move(little, mid, littlelen,char);
6347             mid += littlelen;
6348         }
6349         i = bigend - midend;
6350         if (i > 0) {
6351             Move(midend, mid, i,char);
6352             mid += i;
6353         }
6354         *mid = '\0';
6355         SvCUR_set(bigstr, mid - big);
6356     }
6357     else if ((i = mid - big)) { /* faster from front */
6358         midend -= littlelen;
6359         mid = midend;
6360         Move(big, midend - i, i, char);
6361         sv_chop(bigstr,midend-i);
6362         if (littlelen)
6363             Move(little, mid, littlelen,char);
6364     }
6365     else if (littlelen) {
6366         midend -= littlelen;
6367         sv_chop(bigstr,midend);
6368         Move(little,midend,littlelen,char);
6369     }
6370     else {
6371         sv_chop(bigstr,midend);
6372     }
6373     SvSETMAGIC(bigstr);
6374 }
6375
6376 /*
6377 =for apidoc sv_replace
6378
6379 Make the first argument a copy of the second, then delete the original.
6380 The target SV physically takes over ownership of the body of the source SV
6381 and inherits its flags; however, the target keeps any magic it owns,
6382 and any magic in the source is discarded.
6383 Note that this is a rather specialist SV copying operation; most of the
6384 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6385
6386 =cut
6387 */
6388
6389 void
6390 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6391 {
6392     const U32 refcnt = SvREFCNT(sv);
6393
6394     PERL_ARGS_ASSERT_SV_REPLACE;
6395
6396     SV_CHECK_THINKFIRST_COW_DROP(sv);
6397     if (SvREFCNT(nsv) != 1) {
6398         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6399                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6400     }
6401     if (SvMAGICAL(sv)) {
6402         if (SvMAGICAL(nsv))
6403             mg_free(nsv);
6404         else
6405             sv_upgrade(nsv, SVt_PVMG);
6406         SvMAGIC_set(nsv, SvMAGIC(sv));
6407         SvFLAGS(nsv) |= SvMAGICAL(sv);
6408         SvMAGICAL_off(sv);
6409         SvMAGIC_set(sv, NULL);
6410     }
6411     SvREFCNT(sv) = 0;
6412     sv_clear(sv);
6413     assert(!SvREFCNT(sv));
6414 #ifdef DEBUG_LEAKING_SCALARS
6415     sv->sv_flags  = nsv->sv_flags;
6416     sv->sv_any    = nsv->sv_any;
6417     sv->sv_refcnt = nsv->sv_refcnt;
6418     sv->sv_u      = nsv->sv_u;
6419 #else
6420     StructCopy(nsv,sv,SV);
6421 #endif
6422     if(SvTYPE(sv) == SVt_IV) {
6423         SET_SVANY_FOR_BODYLESS_IV(sv);
6424     }
6425         
6426
6427 #ifdef PERL_OLD_COPY_ON_WRITE
6428     if (SvIsCOW_normal(nsv)) {
6429         /* We need to follow the pointers around the loop to make the
6430            previous SV point to sv, rather than nsv.  */
6431         SV *next;
6432         SV *current = nsv;
6433         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6434             assert(next);
6435             current = next;
6436             assert(SvPVX_const(current) == SvPVX_const(nsv));
6437         }
6438         /* Make the SV before us point to the SV after us.  */
6439         if (DEBUG_C_TEST) {
6440             PerlIO_printf(Perl_debug_log, "previous is\n");
6441             sv_dump(current);
6442             PerlIO_printf(Perl_debug_log,
6443                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6444                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6445         }
6446         SV_COW_NEXT_SV_SET(current, sv);
6447     }
6448 #endif
6449     SvREFCNT(sv) = refcnt;
6450     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6451     SvREFCNT(nsv) = 0;
6452     del_SV(nsv);
6453 }
6454
6455 /* We're about to free a GV which has a CV that refers back to us.
6456  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6457  * field) */
6458
6459 STATIC void
6460 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6461 {
6462     SV *gvname;
6463     GV *anongv;
6464
6465     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6466
6467     /* be assertive! */
6468     assert(SvREFCNT(gv) == 0);
6469     assert(isGV(gv) && isGV_with_GP(gv));
6470     assert(GvGP(gv));
6471     assert(!CvANON(cv));
6472     assert(CvGV(cv) == gv);
6473     assert(!CvNAMED(cv));
6474
6475     /* will the CV shortly be freed by gp_free() ? */
6476     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6477         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6478         return;
6479     }
6480
6481     /* if not, anonymise: */
6482     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6483                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6484                     : newSVpvn_flags( "__ANON__", 8, 0 );
6485     sv_catpvs(gvname, "::__ANON__");
6486     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6487     SvREFCNT_dec_NN(gvname);
6488
6489     CvANON_on(cv);
6490     CvCVGV_RC_on(cv);
6491     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6492 }
6493
6494
6495 /*
6496 =for apidoc sv_clear
6497
6498 Clear an SV: call any destructors, free up any memory used by the body,
6499 and free the body itself.  The SV's head is I<not> freed, although
6500 its type is set to all 1's so that it won't inadvertently be assumed
6501 to be live during global destruction etc.
6502 This function should only be called when REFCNT is zero.  Most of the time
6503 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6504 instead.
6505
6506 =cut
6507 */
6508
6509 void
6510 Perl_sv_clear(pTHX_ SV *const orig_sv)
6511 {
6512     dVAR;
6513     HV *stash;
6514     U32 type;
6515     const struct body_details *sv_type_details;
6516     SV* iter_sv = NULL;
6517     SV* next_sv = NULL;
6518     SV *sv = orig_sv;
6519     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6520                               Not strictly necessary */
6521
6522     PERL_ARGS_ASSERT_SV_CLEAR;
6523
6524     /* within this loop, sv is the SV currently being freed, and
6525      * iter_sv is the most recent AV or whatever that's being iterated
6526      * over to provide more SVs */
6527
6528     while (sv) {
6529
6530         type = SvTYPE(sv);
6531
6532         assert(SvREFCNT(sv) == 0);
6533         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6534
6535         if (type <= SVt_IV) {
6536             /* See the comment in sv.h about the collusion between this
6537              * early return and the overloading of the NULL slots in the
6538              * size table.  */
6539             if (SvROK(sv))
6540                 goto free_rv;
6541             SvFLAGS(sv) &= SVf_BREAK;
6542             SvFLAGS(sv) |= SVTYPEMASK;
6543             goto free_head;
6544         }
6545
6546         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6547            for another purpose  */
6548         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6549
6550         if (type >= SVt_PVMG) {
6551             if (SvOBJECT(sv)) {
6552                 if (!curse(sv, 1)) goto get_next_sv;
6553                 type = SvTYPE(sv); /* destructor may have changed it */
6554             }
6555             /* Free back-references before magic, in case the magic calls
6556              * Perl code that has weak references to sv. */
6557             if (type == SVt_PVHV) {
6558                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6559                 if (SvMAGIC(sv))
6560                     mg_free(sv);
6561             }
6562             else if (SvMAGIC(sv)) {
6563                 /* Free back-references before other types of magic. */
6564                 sv_unmagic(sv, PERL_MAGIC_backref);
6565                 mg_free(sv);
6566             }
6567             SvMAGICAL_off(sv);
6568         }
6569         switch (type) {
6570             /* case SVt_INVLIST: */
6571         case SVt_PVIO:
6572             if (IoIFP(sv) &&
6573                 IoIFP(sv) != PerlIO_stdin() &&
6574                 IoIFP(sv) != PerlIO_stdout() &&
6575                 IoIFP(sv) != PerlIO_stderr() &&
6576                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6577             {
6578                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6579                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6580                           IoTYPE(sv) == IoTYPE_RDWR   ||
6581                           IoTYPE(sv) == IoTYPE_APPEND));
6582             }
6583             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6584                 PerlDir_close(IoDIRP(sv));
6585             IoDIRP(sv) = (DIR*)NULL;
6586             Safefree(IoTOP_NAME(sv));
6587             Safefree(IoFMT_NAME(sv));
6588             Safefree(IoBOTTOM_NAME(sv));
6589             if ((const GV *)sv == PL_statgv)
6590                 PL_statgv = NULL;
6591             goto freescalar;
6592         case SVt_REGEXP:
6593             /* FIXME for plugins */
6594           freeregexp:
6595             pregfree2((REGEXP*) sv);
6596             goto freescalar;
6597         case SVt_PVCV:
6598         case SVt_PVFM:
6599             cv_undef(MUTABLE_CV(sv));
6600             /* If we're in a stash, we don't own a reference to it.
6601              * However it does have a back reference to us, which needs to
6602              * be cleared.  */
6603             if ((stash = CvSTASH(sv)))
6604                 sv_del_backref(MUTABLE_SV(stash), sv);
6605             goto freescalar;
6606         case SVt_PVHV:
6607             if (PL_last_swash_hv == (const HV *)sv) {
6608                 PL_last_swash_hv = NULL;
6609             }
6610             if (HvTOTALKEYS((HV*)sv) > 0) {
6611                 const HEK *hek;
6612                 /* this statement should match the one at the beginning of
6613                  * hv_undef_flags() */
6614                 if (   PL_phase != PERL_PHASE_DESTRUCT
6615                     && (hek = HvNAME_HEK((HV*)sv)))
6616                 {
6617                     if (PL_stashcache) {
6618                         DEBUG_o(Perl_deb(aTHX_
6619                             "sv_clear clearing PL_stashcache for '%"HEKf
6620                             "'\n",
6621                              HEKfARG(hek)));
6622                         (void)hv_deletehek(PL_stashcache,
6623                                            hek, G_DISCARD);
6624                     }
6625                     hv_name_set((HV*)sv, NULL, 0, 0);
6626                 }
6627
6628                 /* save old iter_sv in unused SvSTASH field */
6629                 assert(!SvOBJECT(sv));
6630                 SvSTASH(sv) = (HV*)iter_sv;
6631                 iter_sv = sv;
6632
6633                 /* save old hash_index in unused SvMAGIC field */
6634                 assert(!SvMAGICAL(sv));
6635                 assert(!SvMAGIC(sv));
6636                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6637                 hash_index = 0;
6638
6639                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6640                 goto get_next_sv; /* process this new sv */
6641             }
6642             /* free empty hash */
6643             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6644             assert(!HvARRAY((HV*)sv));
6645             break;
6646         case SVt_PVAV:
6647             {
6648                 AV* av = MUTABLE_AV(sv);
6649                 if (PL_comppad == av) {
6650                     PL_comppad = NULL;
6651                     PL_curpad = NULL;
6652                 }
6653                 if (AvREAL(av) && AvFILLp(av) > -1) {
6654                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6655                     /* save old iter_sv in top-most slot of AV,
6656                      * and pray that it doesn't get wiped in the meantime */
6657                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6658                     iter_sv = sv;
6659                     goto get_next_sv; /* process this new sv */
6660                 }
6661                 Safefree(AvALLOC(av));
6662             }
6663
6664             break;
6665         case SVt_PVLV:
6666             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6667                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6668                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6669                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6670             }
6671             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6672                 SvREFCNT_dec(LvTARG(sv));
6673             if (isREGEXP(sv)) goto freeregexp;
6674             /* FALLTHROUGH */
6675         case SVt_PVGV:
6676             if (isGV_with_GP(sv)) {
6677                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6678                    && HvENAME_get(stash))
6679                     mro_method_changed_in(stash);
6680                 gp_free(MUTABLE_GV(sv));
6681                 if (GvNAME_HEK(sv))
6682                     unshare_hek(GvNAME_HEK(sv));
6683                 /* If we're in a stash, we don't own a reference to it.
6684                  * However it does have a back reference to us, which
6685                  * needs to be cleared.  */
6686                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6687                         sv_del_backref(MUTABLE_SV(stash), sv);
6688             }
6689             /* FIXME. There are probably more unreferenced pointers to SVs
6690              * in the interpreter struct that we should check and tidy in
6691              * a similar fashion to this:  */
6692             /* See also S_sv_unglob, which does the same thing. */
6693             if ((const GV *)sv == PL_last_in_gv)
6694                 PL_last_in_gv = NULL;
6695             else if ((const GV *)sv == PL_statgv)
6696                 PL_statgv = NULL;
6697             else if ((const GV *)sv == PL_stderrgv)
6698                 PL_stderrgv = NULL;
6699             /* FALLTHROUGH */
6700         case SVt_PVMG:
6701         case SVt_PVNV:
6702         case SVt_PVIV:
6703         case SVt_INVLIST:
6704         case SVt_PV:
6705           freescalar:
6706             /* Don't bother with SvOOK_off(sv); as we're only going to
6707              * free it.  */
6708             if (SvOOK(sv)) {
6709                 STRLEN offset;
6710                 SvOOK_offset(sv, offset);
6711                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6712                 /* Don't even bother with turning off the OOK flag.  */
6713             }
6714             if (SvROK(sv)) {
6715             free_rv:
6716                 {
6717                     SV * const target = SvRV(sv);
6718                     if (SvWEAKREF(sv))
6719                         sv_del_backref(target, sv);
6720                     else
6721                         next_sv = target;
6722                 }
6723             }
6724 #ifdef PERL_ANY_COW
6725             else if (SvPVX_const(sv)
6726                      && !(SvTYPE(sv) == SVt_PVIO
6727                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6728             {
6729                 if (SvIsCOW(sv)) {
6730                     if (DEBUG_C_TEST) {
6731                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6732                         sv_dump(sv);
6733                     }
6734                     if (SvLEN(sv)) {
6735 # ifdef PERL_OLD_COPY_ON_WRITE
6736                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6737 # else
6738                         if (CowREFCNT(sv)) {
6739                             sv_buf_to_rw(sv);
6740                             CowREFCNT(sv)--;
6741                             sv_buf_to_ro(sv);
6742                             SvLEN_set(sv, 0);
6743                         }
6744 # endif
6745                     } else {
6746                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6747                     }
6748
6749                 }
6750 # ifdef PERL_OLD_COPY_ON_WRITE
6751                 else
6752 # endif
6753                 if (SvLEN(sv)) {
6754                     Safefree(SvPVX_mutable(sv));
6755                 }
6756             }
6757 #else
6758             else if (SvPVX_const(sv) && SvLEN(sv)
6759                      && !(SvTYPE(sv) == SVt_PVIO
6760                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6761                 Safefree(SvPVX_mutable(sv));
6762             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6763                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6764             }
6765 #endif
6766             break;
6767         case SVt_NV:
6768             break;
6769         }
6770
6771       free_body:
6772
6773         SvFLAGS(sv) &= SVf_BREAK;
6774         SvFLAGS(sv) |= SVTYPEMASK;
6775
6776         sv_type_details = bodies_by_type + type;
6777         if (sv_type_details->arena) {
6778             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6779                      &PL_body_roots[type]);
6780         }
6781         else if (sv_type_details->body_size) {
6782             safefree(SvANY(sv));
6783         }
6784
6785       free_head:
6786         /* caller is responsible for freeing the head of the original sv */
6787         if (sv != orig_sv && !SvREFCNT(sv))
6788             del_SV(sv);
6789
6790         /* grab and free next sv, if any */
6791       get_next_sv:
6792         while (1) {
6793             sv = NULL;
6794             if (next_sv) {
6795                 sv = next_sv;
6796                 next_sv = NULL;
6797             }
6798             else if (!iter_sv) {
6799                 break;
6800             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6801                 AV *const av = (AV*)iter_sv;
6802                 if (AvFILLp(av) > -1) {
6803                     sv = AvARRAY(av)[AvFILLp(av)--];
6804                 }
6805                 else { /* no more elements of current AV to free */
6806                     sv = iter_sv;
6807                     type = SvTYPE(sv);
6808                     /* restore previous value, squirrelled away */
6809                     iter_sv = AvARRAY(av)[AvMAX(av)];
6810                     Safefree(AvALLOC(av));
6811                     goto free_body;
6812                 }
6813             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6814                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6815                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6816                     /* no more elements of current HV to free */
6817                     sv = iter_sv;
6818                     type = SvTYPE(sv);
6819                     /* Restore previous values of iter_sv and hash_index,
6820                      * squirrelled away */
6821                     assert(!SvOBJECT(sv));
6822                     iter_sv = (SV*)SvSTASH(sv);
6823                     assert(!SvMAGICAL(sv));
6824                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6825 #ifdef DEBUGGING
6826                     /* perl -DA does not like rubbish in SvMAGIC. */
6827                     SvMAGIC_set(sv, 0);
6828 #endif
6829
6830                     /* free any remaining detritus from the hash struct */
6831                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6832                     assert(!HvARRAY((HV*)sv));
6833                     goto free_body;
6834                 }
6835             }
6836
6837             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6838
6839             if (!sv)
6840                 continue;
6841             if (!SvREFCNT(sv)) {
6842                 sv_free(sv);
6843                 continue;
6844             }
6845             if (--(SvREFCNT(sv)))
6846                 continue;
6847 #ifdef DEBUGGING
6848             if (SvTEMP(sv)) {
6849                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6850                          "Attempt to free temp prematurely: SV 0x%"UVxf
6851                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6852                 continue;
6853             }
6854 #endif
6855             if (SvIMMORTAL(sv)) {
6856                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6857                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6858                 continue;
6859             }
6860             break;
6861         } /* while 1 */
6862
6863     } /* while sv */
6864 }
6865
6866 /* This routine curses the sv itself, not the object referenced by sv. So
6867    sv does not have to be ROK. */
6868
6869 static bool
6870 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6871     PERL_ARGS_ASSERT_CURSE;
6872     assert(SvOBJECT(sv));
6873
6874     if (PL_defstash &&  /* Still have a symbol table? */
6875         SvDESTROYABLE(sv))
6876     {
6877         dSP;
6878         HV* stash;
6879         do {
6880           stash = SvSTASH(sv);
6881           assert(SvTYPE(stash) == SVt_PVHV);
6882           if (HvNAME(stash)) {
6883             CV* destructor = NULL;
6884             assert (SvOOK(stash));
6885             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6886             if (!destructor || HvMROMETA(stash)->destroy_gen
6887                                 != PL_sub_generation)
6888             {
6889                 GV * const gv =
6890                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6891                 if (gv) destructor = GvCV(gv);
6892                 if (!SvOBJECT(stash))
6893                 {
6894                     SvSTASH(stash) =
6895                         destructor ? (HV *)destructor : ((HV *)0)+1;
6896                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6897                         PL_sub_generation;
6898                 }
6899             }
6900             assert(!destructor || destructor == ((CV *)0)+1
6901                 || SvTYPE(destructor) == SVt_PVCV);
6902             if (destructor && destructor != ((CV *)0)+1
6903                 /* A constant subroutine can have no side effects, so
6904                    don't bother calling it.  */
6905                 && !CvCONST(destructor)
6906                 /* Don't bother calling an empty destructor or one that
6907                    returns immediately. */
6908                 && (CvISXSUB(destructor)
6909                 || (CvSTART(destructor)
6910                     && (CvSTART(destructor)->op_next->op_type
6911                                         != OP_LEAVESUB)
6912                     && (CvSTART(destructor)->op_next->op_type
6913                                         != OP_PUSHMARK
6914                         || CvSTART(destructor)->op_next->op_next->op_type
6915                                         != OP_RETURN
6916                        )
6917                    ))
6918                )
6919             {
6920                 SV* const tmpref = newRV(sv);
6921                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6922                 ENTER;
6923                 PUSHSTACKi(PERLSI_DESTROY);
6924                 EXTEND(SP, 2);
6925                 PUSHMARK(SP);
6926                 PUSHs(tmpref);
6927                 PUTBACK;
6928                 call_sv(MUTABLE_SV(destructor),
6929                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6930                 POPSTACK;
6931                 SPAGAIN;
6932                 LEAVE;
6933                 if(SvREFCNT(tmpref) < 2) {
6934                     /* tmpref is not kept alive! */
6935                     SvREFCNT(sv)--;
6936                     SvRV_set(tmpref, NULL);
6937                     SvROK_off(tmpref);
6938                 }
6939                 SvREFCNT_dec_NN(tmpref);
6940             }
6941           }
6942         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6943
6944
6945         if (check_refcnt && SvREFCNT(sv)) {
6946             if (PL_in_clean_objs)
6947                 Perl_croak(aTHX_
6948                   "DESTROY created new reference to dead object '%"HEKf"'",
6949                    HEKfARG(HvNAME_HEK(stash)));
6950             /* DESTROY gave object new lease on life */
6951             return FALSE;
6952         }
6953     }
6954
6955     if (SvOBJECT(sv)) {
6956         HV * const stash = SvSTASH(sv);
6957         /* Curse before freeing the stash, as freeing the stash could cause
6958            a recursive call into S_curse. */
6959         SvOBJECT_off(sv);       /* Curse the object. */
6960         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6961         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6962     }
6963     return TRUE;
6964 }
6965
6966 /*
6967 =for apidoc sv_newref
6968
6969 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6970 instead.
6971
6972 =cut
6973 */
6974
6975 SV *
6976 Perl_sv_newref(pTHX_ SV *const sv)
6977 {
6978     PERL_UNUSED_CONTEXT;
6979     if (sv)
6980         (SvREFCNT(sv))++;
6981     return sv;
6982 }
6983
6984 /*
6985 =for apidoc sv_free
6986
6987 Decrement an SV's reference count, and if it drops to zero, call
6988 C<sv_clear> to invoke destructors and free up any memory used by
6989 the body; finally, deallocate the SV's head itself.
6990 Normally called via a wrapper macro C<SvREFCNT_dec>.
6991
6992 =cut
6993 */
6994
6995 void
6996 Perl_sv_free(pTHX_ SV *const sv)
6997 {
6998     SvREFCNT_dec(sv);
6999 }
7000
7001
7002 /* Private helper function for SvREFCNT_dec().
7003  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7004
7005 void
7006 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7007 {
7008     dVAR;
7009
7010     PERL_ARGS_ASSERT_SV_FREE2;
7011
7012     if (LIKELY( rc == 1 )) {
7013         /* normal case */
7014         SvREFCNT(sv) = 0;
7015
7016 #ifdef DEBUGGING
7017         if (SvTEMP(sv)) {
7018             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7019                              "Attempt to free temp prematurely: SV 0x%"UVxf
7020                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7021             return;
7022         }
7023 #endif
7024         if (SvIMMORTAL(sv)) {
7025             /* make sure SvREFCNT(sv)==0 happens very seldom */
7026             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7027             return;
7028         }
7029         sv_clear(sv);
7030         if (! SvREFCNT(sv)) /* may have have been resurrected */
7031             del_SV(sv);
7032         return;
7033     }
7034
7035     /* handle exceptional cases */
7036
7037     assert(rc == 0);
7038
7039     if (SvFLAGS(sv) & SVf_BREAK)
7040         /* this SV's refcnt has been artificially decremented to
7041          * trigger cleanup */
7042         return;
7043     if (PL_in_clean_all) /* All is fair */
7044         return;
7045     if (SvIMMORTAL(sv)) {
7046         /* make sure SvREFCNT(sv)==0 happens very seldom */
7047         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7048         return;
7049     }
7050     if (ckWARN_d(WARN_INTERNAL)) {
7051 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7052         Perl_dump_sv_child(aTHX_ sv);
7053 #else
7054     #ifdef DEBUG_LEAKING_SCALARS
7055         sv_dump(sv);
7056     #endif
7057 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7058         if (PL_warnhook == PERL_WARNHOOK_FATAL
7059             || ckDEAD(packWARN(WARN_INTERNAL))) {
7060             /* Don't let Perl_warner cause us to escape our fate:  */
7061             abort();
7062         }
7063 #endif
7064         /* This may not return:  */
7065         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7066                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
7067                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7068 #endif
7069     }
7070 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7071     abort();
7072 #endif
7073
7074 }
7075
7076
7077 /*
7078 =for apidoc sv_len
7079
7080 Returns the length of the string in the SV.  Handles magic and type
7081 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
7082 gives raw access to the xpv_cur slot.
7083
7084 =cut
7085 */
7086
7087 STRLEN
7088 Perl_sv_len(pTHX_ SV *const sv)
7089 {
7090     STRLEN len;
7091
7092     if (!sv)
7093         return 0;
7094
7095     (void)SvPV_const(sv, len);
7096     return len;
7097 }
7098
7099 /*
7100 =for apidoc sv_len_utf8
7101
7102 Returns the number of characters in the string in an SV, counting wide
7103 UTF-8 bytes as a single character.  Handles magic and type coercion.
7104
7105 =cut
7106 */
7107
7108 /*
7109  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7110  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7111  * (Note that the mg_len is not the length of the mg_ptr field.
7112  * This allows the cache to store the character length of the string without
7113  * needing to malloc() extra storage to attach to the mg_ptr.)
7114  *
7115  */
7116
7117 STRLEN
7118 Perl_sv_len_utf8(pTHX_ SV *const sv)
7119 {
7120     if (!sv)
7121         return 0;
7122
7123     SvGETMAGIC(sv);
7124     return sv_len_utf8_nomg(sv);
7125 }
7126
7127 STRLEN
7128 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7129 {
7130     STRLEN len;
7131     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7132
7133     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7134
7135     if (PL_utf8cache && SvUTF8(sv)) {
7136             STRLEN ulen;
7137             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7138
7139             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7140                 if (mg->mg_len != -1)
7141                     ulen = mg->mg_len;
7142                 else {
7143                     /* We can use the offset cache for a headstart.
7144                        The longer value is stored in the first pair.  */
7145                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7146
7147                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7148                                                        s + len);
7149                 }
7150                 
7151                 if (PL_utf8cache < 0) {
7152                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7153                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7154                 }
7155             }
7156             else {
7157                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7158                 utf8_mg_len_cache_update(sv, &mg, ulen);
7159             }
7160             return ulen;
7161     }
7162     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7163 }
7164
7165 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7166    offset.  */
7167 static STRLEN
7168 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7169                       STRLEN *const uoffset_p, bool *const at_end)
7170 {
7171     const U8 *s = start;
7172     STRLEN uoffset = *uoffset_p;
7173
7174     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7175
7176     while (s < send && uoffset) {
7177         --uoffset;
7178         s += UTF8SKIP(s);
7179     }
7180     if (s == send) {
7181         *at_end = TRUE;
7182     }
7183     else if (s > send) {
7184         *at_end = TRUE;
7185         /* This is the existing behaviour. Possibly it should be a croak, as
7186            it's actually a bounds error  */
7187         s = send;
7188     }
7189     *uoffset_p -= uoffset;
7190     return s - start;
7191 }
7192
7193 /* Given the length of the string in both bytes and UTF-8 characters, decide
7194    whether to walk forwards or backwards to find the byte corresponding to
7195    the passed in UTF-8 offset.  */
7196 static STRLEN
7197 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7198                     STRLEN uoffset, const STRLEN uend)
7199 {
7200     STRLEN backw = uend - uoffset;
7201
7202     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7203
7204     if (uoffset < 2 * backw) {
7205         /* The assumption is that going forwards is twice the speed of going
7206            forward (that's where the 2 * backw comes from).
7207            (The real figure of course depends on the UTF-8 data.)  */
7208         const U8 *s = start;
7209
7210         while (s < send && uoffset--)
7211             s += UTF8SKIP(s);
7212         assert (s <= send);
7213         if (s > send)
7214             s = send;
7215         return s - start;
7216     }
7217
7218     while (backw--) {
7219         send--;
7220         while (UTF8_IS_CONTINUATION(*send))
7221             send--;
7222     }
7223     return send - start;
7224 }
7225
7226 /* For the string representation of the given scalar, find the byte
7227    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7228    give another position in the string, *before* the sought offset, which
7229    (which is always true, as 0, 0 is a valid pair of positions), which should
7230    help reduce the amount of linear searching.
7231    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7232    will be used to reduce the amount of linear searching. The cache will be
7233    created if necessary, and the found value offered to it for update.  */
7234 static STRLEN
7235 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7236                     const U8 *const send, STRLEN uoffset,
7237                     STRLEN uoffset0, STRLEN boffset0)
7238 {
7239     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7240     bool found = FALSE;
7241     bool at_end = FALSE;
7242
7243     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7244
7245     assert (uoffset >= uoffset0);
7246
7247     if (!uoffset)
7248         return 0;
7249
7250     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7251         && PL_utf8cache
7252         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7253                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7254         if ((*mgp)->mg_ptr) {
7255             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7256             if (cache[0] == uoffset) {
7257                 /* An exact match. */
7258                 return cache[1];
7259             }
7260             if (cache[2] == uoffset) {
7261                 /* An exact match. */
7262                 return cache[3];
7263             }
7264
7265             if (cache[0] < uoffset) {
7266                 /* The cache already knows part of the way.   */
7267                 if (cache[0] > uoffset0) {
7268                     /* The cache knows more than the passed in pair  */
7269                     uoffset0 = cache[0];
7270                     boffset0 = cache[1];
7271                 }
7272                 if ((*mgp)->mg_len != -1) {
7273                     /* And we know the end too.  */
7274                     boffset = boffset0
7275                         + sv_pos_u2b_midway(start + boffset0, send,
7276                                               uoffset - uoffset0,
7277                                               (*mgp)->mg_len - uoffset0);
7278                 } else {
7279                     uoffset -= uoffset0;
7280                     boffset = boffset0
7281                         + sv_pos_u2b_forwards(start + boffset0,
7282                                               send, &uoffset, &at_end);
7283                     uoffset += uoffset0;
7284                 }
7285             }
7286             else if (cache[2] < uoffset) {
7287                 /* We're between the two cache entries.  */
7288                 if (cache[2] > uoffset0) {
7289                     /* and the cache knows more than the passed in pair  */
7290                     uoffset0 = cache[2];
7291                     boffset0 = cache[3];
7292                 }
7293
7294                 boffset = boffset0
7295                     + sv_pos_u2b_midway(start + boffset0,
7296                                           start + cache[1],
7297                                           uoffset - uoffset0,
7298                                           cache[0] - uoffset0);
7299             } else {
7300                 boffset = boffset0
7301                     + sv_pos_u2b_midway(start + boffset0,
7302                                           start + cache[3],
7303                                           uoffset - uoffset0,
7304                                           cache[2] - uoffset0);
7305             }
7306             found = TRUE;
7307         }
7308         else if ((*mgp)->mg_len != -1) {
7309             /* If we can take advantage of a passed in offset, do so.  */
7310             /* In fact, offset0 is either 0, or less than offset, so don't
7311                need to worry about the other possibility.  */
7312             boffset = boffset0
7313                 + sv_pos_u2b_midway(start + boffset0, send,
7314                                       uoffset - uoffset0,
7315                                       (*mgp)->mg_len - uoffset0);
7316             found = TRUE;
7317         }
7318     }
7319
7320     if (!found || PL_utf8cache < 0) {
7321         STRLEN real_boffset;
7322         uoffset -= uoffset0;
7323         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7324                                                       send, &uoffset, &at_end);
7325         uoffset += uoffset0;
7326
7327         if (found && PL_utf8cache < 0)
7328             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7329                                        real_boffset, sv);
7330         boffset = real_boffset;
7331     }
7332
7333     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7334         if (at_end)
7335             utf8_mg_len_cache_update(sv, mgp, uoffset);
7336         else
7337             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7338     }
7339     return boffset;
7340 }
7341
7342
7343 /*
7344 =for apidoc sv_pos_u2b_flags
7345
7346 Converts the offset from a count of UTF-8 chars from
7347 the start of the string, to a count of the equivalent number of bytes; if
7348 lenp is non-zero, it does the same to lenp, but this time starting from
7349 the offset, rather than from the start
7350 of the string.  Handles type coercion.
7351 I<flags> is passed to C<SvPV_flags>, and usually should be
7352 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7353
7354 =cut
7355 */
7356
7357 /*
7358  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7359  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7360  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7361  *
7362  */
7363
7364 STRLEN
7365 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7366                       U32 flags)
7367 {
7368     const U8 *start;
7369     STRLEN len;
7370     STRLEN boffset;
7371
7372     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7373
7374     start = (U8*)SvPV_flags(sv, len, flags);
7375     if (len) {
7376         const U8 * const send = start + len;
7377         MAGIC *mg = NULL;
7378         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7379
7380         if (lenp
7381             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7382                         is 0, and *lenp is already set to that.  */) {
7383             /* Convert the relative offset to absolute.  */
7384             const STRLEN uoffset2 = uoffset + *lenp;
7385             const STRLEN boffset2
7386                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7387                                       uoffset, boffset) - boffset;
7388
7389             *lenp = boffset2;
7390         }
7391     } else {
7392         if (lenp)
7393             *lenp = 0;
7394         boffset = 0;
7395     }
7396
7397     return boffset;
7398 }
7399
7400 /*
7401 =for apidoc sv_pos_u2b
7402
7403 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7404 the start of the string, to a count of the equivalent number of bytes; if
7405 lenp is non-zero, it does the same to lenp, but this time starting from
7406 the offset, rather than from the start of the string.  Handles magic and
7407 type coercion.
7408
7409 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7410 than 2Gb.
7411
7412 =cut
7413 */
7414
7415 /*
7416  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7417  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7418  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7419  *
7420  */
7421
7422 /* This function is subject to size and sign problems */
7423
7424 void
7425 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7426 {
7427     PERL_ARGS_ASSERT_SV_POS_U2B;
7428
7429     if (lenp) {
7430         STRLEN ulen = (STRLEN)*lenp;
7431         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7432                                          SV_GMAGIC|SV_CONST_RETURN);
7433         *lenp = (I32)ulen;
7434     } else {
7435         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7436                                          SV_GMAGIC|SV_CONST_RETURN);
7437     }
7438 }
7439
7440 static void
7441 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7442                            const STRLEN ulen)
7443 {
7444     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7445     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7446         return;
7447
7448     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7449                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7450         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7451     }
7452     assert(*mgp);
7453
7454     (*mgp)->mg_len = ulen;
7455 }
7456
7457 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7458    byte length pairing. The (byte) length of the total SV is passed in too,
7459    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7460    may not have updated SvCUR, so we can't rely on reading it directly.
7461
7462    The proffered utf8/byte length pairing isn't used if the cache already has
7463    two pairs, and swapping either for the proffered pair would increase the
7464    RMS of the intervals between known byte offsets.
7465
7466    The cache itself consists of 4 STRLEN values
7467    0: larger UTF-8 offset
7468    1: corresponding byte offset
7469    2: smaller UTF-8 offset
7470    3: corresponding byte offset
7471
7472    Unused cache pairs have the value 0, 0.
7473    Keeping the cache "backwards" means that the invariant of
7474    cache[0] >= cache[2] is maintained even with empty slots, which means that
7475    the code that uses it doesn't need to worry if only 1 entry has actually
7476    been set to non-zero.  It also makes the "position beyond the end of the
7477    cache" logic much simpler, as the first slot is always the one to start
7478    from.   
7479 */
7480 static void
7481 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7482                            const STRLEN utf8, const STRLEN blen)
7483 {
7484     STRLEN *cache;
7485
7486     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7487
7488     if (SvREADONLY(sv))
7489         return;
7490
7491     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7492                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7493         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7494                            0);
7495         (*mgp)->mg_len = -1;
7496     }
7497     assert(*mgp);
7498
7499     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7500         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7501         (*mgp)->mg_ptr = (char *) cache;
7502     }
7503     assert(cache);
7504
7505     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7506         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7507            a pointer.  Note that we no longer cache utf8 offsets on refer-
7508            ences, but this check is still a good idea, for robustness.  */
7509         const U8 *start = (const U8 *) SvPVX_const(sv);
7510         const STRLEN realutf8 = utf8_length(start, start + byte);
7511
7512         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7513                                    sv);
7514     }
7515
7516     /* Cache is held with the later position first, to simplify the code
7517        that deals with unbounded ends.  */
7518        
7519     ASSERT_UTF8_CACHE(cache);
7520     if (cache[1] == 0) {
7521         /* Cache is totally empty  */
7522         cache[0] = utf8;
7523         cache[1] = byte;
7524     } else if (cache[3] == 0) {
7525         if (byte > cache[1]) {
7526             /* New one is larger, so goes first.  */
7527             cache[2] = cache[0];
7528             cache[3] = cache[1];
7529             cache[0] = utf8;
7530             cache[1] = byte;
7531         } else {
7532             cache[2] = utf8;
7533             cache[3] = byte;
7534         }
7535     } else {
7536 /* float casts necessary? XXX */
7537 #define THREEWAY_SQUARE(a,b,c,d) \
7538             ((float)((d) - (c))) * ((float)((d) - (c))) \
7539             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7540                + ((float)((b) - (a))) * ((float)((b) - (a)))
7541
7542         /* Cache has 2 slots in use, and we know three potential pairs.
7543            Keep the two that give the lowest RMS distance. Do the
7544            calculation in bytes simply because we always know the byte
7545            length.  squareroot has the same ordering as the positive value,
7546            so don't bother with the actual square root.  */
7547         if (byte > cache[1]) {
7548             /* New position is after the existing pair of pairs.  */
7549             const float keep_earlier
7550                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7551             const float keep_later
7552                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7553
7554             if (keep_later < keep_earlier) {
7555                 cache[2] = cache[0];
7556                 cache[3] = cache[1];
7557             }
7558             cache[0] = utf8;
7559             cache[1] = byte;
7560         }
7561         else {
7562             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7563             float b, c, keep_earlier;
7564             if (byte > cache[3]) {
7565                 /* New position is between the existing pair of pairs.  */
7566                 b = (float)cache[3];
7567                 c = (float)byte;
7568             } else {
7569                 /* New position is before the existing pair of pairs.  */
7570                 b = (float)byte;
7571                 c = (float)cache[3];
7572             }
7573             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7574             if (byte > cache[3]) {
7575                 if (keep_later < keep_earlier) {
7576                     cache[2] = utf8;
7577                     cache[3] = byte;
7578                 }
7579                 else {
7580                     cache[0] = utf8;
7581                     cache[1] = byte;
7582                 }
7583             }
7584             else {
7585                 if (! (keep_later < keep_earlier)) {
7586                     cache[0] = cache[2];
7587                     cache[1] = cache[3];
7588                 }
7589                 cache[2] = utf8;
7590                 cache[3] = byte;
7591             }
7592         }
7593     }
7594     ASSERT_UTF8_CACHE(cache);
7595 }
7596
7597 /* We already know all of the way, now we may be able to walk back.  The same
7598    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7599    backward is half the speed of walking forward. */
7600 static STRLEN
7601 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7602                     const U8 *end, STRLEN endu)
7603 {
7604     const STRLEN forw = target - s;
7605     STRLEN backw = end - target;
7606
7607     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7608
7609     if (forw < 2 * backw) {
7610         return utf8_length(s, target);
7611     }
7612
7613     while (end > target) {
7614         end--;
7615         while (UTF8_IS_CONTINUATION(*end)) {
7616             end--;
7617         }
7618         endu--;
7619     }
7620     return endu;
7621 }
7622
7623 /*
7624 =for apidoc sv_pos_b2u_flags
7625
7626 Converts the offset from a count of bytes from the start of the string, to
7627 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7628 I<flags> is passed to C<SvPV_flags>, and usually should be
7629 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7630
7631 =cut
7632 */
7633
7634 /*
7635  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7636  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7637  * and byte offsets.
7638  *
7639  */
7640 STRLEN
7641 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7642 {
7643     const U8* s;
7644     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7645     STRLEN blen;
7646     MAGIC* mg = NULL;
7647     const U8* send;
7648     bool found = FALSE;
7649
7650     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7651
7652     s = (const U8*)SvPV_flags(sv, blen, flags);
7653
7654     if (blen < offset)
7655         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7656                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7657
7658     send = s + offset;
7659
7660     if (!SvREADONLY(sv)
7661         && PL_utf8cache
7662         && SvTYPE(sv) >= SVt_PVMG
7663         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7664     {
7665         if (mg->mg_ptr) {
7666             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7667             if (cache[1] == offset) {
7668                 /* An exact match. */
7669                 return cache[0];
7670             }
7671             if (cache[3] == offset) {
7672                 /* An exact match. */
7673                 return cache[2];
7674             }
7675
7676             if (cache[1] < offset) {
7677                 /* We already know part of the way. */
7678                 if (mg->mg_len != -1) {
7679                     /* Actually, we know the end too.  */
7680                     len = cache[0]
7681                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7682                                               s + blen, mg->mg_len - cache[0]);
7683                 } else {
7684                     len = cache[0] + utf8_length(s + cache[1], send);
7685                 }
7686             }
7687             else if (cache[3] < offset) {
7688                 /* We're between the two cached pairs, so we do the calculation
7689                    offset by the byte/utf-8 positions for the earlier pair,
7690                    then add the utf-8 characters from the string start to
7691                    there.  */
7692                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7693                                           s + cache[1], cache[0] - cache[2])
7694                     + cache[2];
7695
7696             }
7697             else { /* cache[3] > offset */
7698                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7699                                           cache[2]);
7700
7701             }
7702             ASSERT_UTF8_CACHE(cache);
7703             found = TRUE;
7704         } else if (mg->mg_len != -1) {
7705             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7706             found = TRUE;
7707         }
7708     }
7709     if (!found || PL_utf8cache < 0) {
7710         const STRLEN real_len = utf8_length(s, send);
7711
7712         if (found && PL_utf8cache < 0)
7713             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7714         len = real_len;
7715     }
7716
7717     if (PL_utf8cache) {
7718         if (blen == offset)
7719             utf8_mg_len_cache_update(sv, &mg, len);
7720         else
7721             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7722     }
7723
7724     return len;
7725 }
7726
7727 /*
7728 =for apidoc sv_pos_b2u
7729
7730 Converts the value pointed to by offsetp from a count of bytes from the
7731 start of the string, to a count of the equivalent number of UTF-8 chars.
7732 Handles magic and type coercion.
7733
7734 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7735 longer than 2Gb.
7736
7737 =cut
7738 */
7739
7740 /*
7741  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7742  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7743  * byte offsets.
7744  *
7745  */
7746 void
7747 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7748 {
7749     PERL_ARGS_ASSERT_SV_POS_B2U;
7750
7751     if (!sv)
7752         return;
7753
7754     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7755                                      SV_GMAGIC|SV_CONST_RETURN);
7756 }
7757
7758 static void
7759 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7760                              STRLEN real, SV *const sv)
7761 {
7762     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7763
7764     /* As this is debugging only code, save space by keeping this test here,
7765        rather than inlining it in all the callers.  */
7766     if (from_cache == real)
7767         return;
7768
7769     /* Need to turn the assertions off otherwise we may recurse infinitely
7770        while printing error messages.  */
7771     SAVEI8(PL_utf8cache);
7772     PL_utf8cache = 0;
7773     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7774                func, (UV) from_cache, (UV) real, SVfARG(sv));
7775 }
7776
7777 /*
7778 =for apidoc sv_eq
7779
7780 Returns a boolean indicating whether the strings in the two SVs are
7781 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7782 coerce its args to strings if necessary.
7783
7784 =for apidoc sv_eq_flags
7785
7786 Returns a boolean indicating whether the strings in the two SVs are
7787 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7788 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7789
7790 =cut
7791 */
7792
7793 I32
7794 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7795 {
7796     const char *pv1;
7797     STRLEN cur1;
7798     const char *pv2;
7799     STRLEN cur2;
7800     I32  eq     = 0;
7801     SV* svrecode = NULL;
7802
7803     if (!sv1) {
7804         pv1 = "";
7805         cur1 = 0;
7806     }
7807     else {
7808         /* if pv1 and pv2 are the same, second SvPV_const call may
7809          * invalidate pv1 (if we are handling magic), so we may need to
7810          * make a copy */
7811         if (sv1 == sv2 && flags & SV_GMAGIC
7812          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7813             pv1 = SvPV_const(sv1, cur1);
7814             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7815         }
7816         pv1 = SvPV_flags_const(sv1, cur1, flags);
7817     }
7818
7819     if (!sv2){
7820         pv2 = "";
7821         cur2 = 0;
7822     }
7823     else
7824         pv2 = SvPV_flags_const(sv2, cur2, flags);
7825
7826     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7827         /* Differing utf8ness.
7828          * Do not UTF8size the comparands as a side-effect. */
7829          if (IN_ENCODING) {
7830               if (SvUTF8(sv1)) {
7831                    svrecode = newSVpvn(pv2, cur2);
7832                    sv_recode_to_utf8(svrecode, _get_encoding());
7833                    pv2 = SvPV_const(svrecode, cur2);
7834               }
7835               else {
7836                    svrecode = newSVpvn(pv1, cur1);
7837                    sv_recode_to_utf8(svrecode, _get_encoding());
7838                    pv1 = SvPV_const(svrecode, cur1);
7839               }
7840               /* Now both are in UTF-8. */
7841               if (cur1 != cur2) {
7842                    SvREFCNT_dec_NN(svrecode);
7843                    return FALSE;
7844               }
7845          }
7846          else {
7847               if (SvUTF8(sv1)) {
7848                   /* sv1 is the UTF-8 one  */
7849                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7850                                         (const U8*)pv1, cur1) == 0;
7851               }
7852               else {
7853                   /* sv2 is the UTF-8 one  */
7854                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7855                                         (const U8*)pv2, cur2) == 0;
7856               }
7857          }
7858     }
7859
7860     if (cur1 == cur2)
7861         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7862         
7863     SvREFCNT_dec(svrecode);
7864
7865     return eq;
7866 }
7867
7868 /*
7869 =for apidoc sv_cmp
7870
7871 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7872 string in C<sv1> is less than, equal to, or greater than the string in
7873 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7874 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7875
7876 =for apidoc sv_cmp_flags
7877
7878 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7879 string in C<sv1> is less than, equal to, or greater than the string in
7880 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7881 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7882 also C<sv_cmp_locale_flags>.
7883
7884 =cut
7885 */
7886
7887 I32
7888 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7889 {
7890     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7891 }
7892
7893 I32
7894 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7895                   const U32 flags)
7896 {
7897     STRLEN cur1, cur2;
7898     const char *pv1, *pv2;
7899     I32  cmp;
7900     SV *svrecode = NULL;
7901
7902     if (!sv1) {
7903         pv1 = "";
7904         cur1 = 0;
7905     }
7906     else
7907         pv1 = SvPV_flags_const(sv1, cur1, flags);
7908
7909     if (!sv2) {
7910         pv2 = "";
7911         cur2 = 0;
7912     }
7913     else
7914         pv2 = SvPV_flags_const(sv2, cur2, flags);
7915
7916     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7917         /* Differing utf8ness.
7918          * Do not UTF8size the comparands as a side-effect. */
7919         if (SvUTF8(sv1)) {
7920             if (IN_ENCODING) {
7921                  svrecode = newSVpvn(pv2, cur2);
7922                  sv_recode_to_utf8(svrecode, _get_encoding());
7923                  pv2 = SvPV_const(svrecode, cur2);
7924             }
7925             else {
7926                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7927                                                    (const U8*)pv1, cur1);
7928                 return retval ? retval < 0 ? -1 : +1 : 0;
7929             }
7930         }
7931         else {
7932             if (IN_ENCODING) {
7933                  svrecode = newSVpvn(pv1, cur1);
7934                  sv_recode_to_utf8(svrecode, _get_encoding());
7935                  pv1 = SvPV_const(svrecode, cur1);
7936             }
7937             else {
7938                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7939                                                   (const U8*)pv2, cur2);
7940                 return retval ? retval < 0 ? -1 : +1 : 0;
7941             }
7942         }
7943     }
7944
7945     if (!cur1) {
7946         cmp = cur2 ? -1 : 0;
7947     } else if (!cur2) {
7948         cmp = 1;
7949     } else {
7950         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7951
7952         if (retval) {
7953             cmp = retval < 0 ? -1 : 1;
7954         } else if (cur1 == cur2) {
7955             cmp = 0;
7956         } else {
7957             cmp = cur1 < cur2 ? -1 : 1;
7958         }
7959     }
7960
7961     SvREFCNT_dec(svrecode);
7962
7963     return cmp;
7964 }
7965
7966 /*
7967 =for apidoc sv_cmp_locale
7968
7969 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7970 'use bytes' aware, handles get magic, and will coerce its args to strings
7971 if necessary.  See also C<sv_cmp>.
7972
7973 =for apidoc sv_cmp_locale_flags
7974
7975 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7976 'use bytes' aware and will coerce its args to strings if necessary.  If the
7977 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7978
7979 =cut
7980 */
7981
7982 I32
7983 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7984 {
7985     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7986 }
7987
7988 I32
7989 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7990                          const U32 flags)
7991 {
7992 #ifdef USE_LOCALE_COLLATE
7993
7994     char *pv1, *pv2;
7995     STRLEN len1, len2;
7996     I32 retval;
7997
7998     if (PL_collation_standard)
7999         goto raw_compare;
8000
8001     len1 = 0;
8002     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8003     len2 = 0;
8004     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8005
8006     if (!pv1 || !len1) {
8007         if (pv2 && len2)
8008             return -1;
8009         else
8010             goto raw_compare;
8011     }
8012     else {
8013         if (!pv2 || !len2)
8014             return 1;
8015     }
8016
8017     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8018
8019     if (retval)
8020         return retval < 0 ? -1 : 1;
8021
8022     /*
8023      * When the result of collation is equality, that doesn't mean
8024      * that there are no differences -- some locales exclude some
8025      * characters from consideration.  So to avoid false equalities,
8026      * we use the raw string as a tiebreaker.
8027      */
8028
8029   raw_compare:
8030     /* FALLTHROUGH */
8031
8032 #else
8033     PERL_UNUSED_ARG(flags);
8034 #endif /* USE_LOCALE_COLLATE */
8035
8036     return sv_cmp(sv1, sv2);
8037 }
8038
8039
8040 #ifdef USE_LOCALE_COLLATE
8041
8042 /*
8043 =for apidoc sv_collxfrm
8044
8045 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8046 C<sv_collxfrm_flags>.
8047
8048 =for apidoc sv_collxfrm_flags
8049
8050 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8051 flags contain SV_GMAGIC, it handles get-magic.
8052
8053 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
8054 scalar data of the variable, but transformed to such a format that a normal
8055 memory comparison can be used to compare the data according to the locale
8056 settings.
8057
8058 =cut
8059 */
8060
8061 char *
8062 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8063 {
8064     MAGIC *mg;
8065
8066     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8067
8068     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8069     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8070         const char *s;
8071         char *xf;
8072         STRLEN len, xlen;
8073
8074         if (mg)
8075             Safefree(mg->mg_ptr);
8076         s = SvPV_flags_const(sv, len, flags);
8077         if ((xf = mem_collxfrm(s, len, &xlen))) {
8078             if (! mg) {
8079 #ifdef PERL_OLD_COPY_ON_WRITE
8080                 if (SvIsCOW(sv))
8081                     sv_force_normal_flags(sv, 0);
8082 #endif
8083                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8084                                  0, 0);
8085                 assert(mg);
8086             }
8087             mg->mg_ptr = xf;
8088             mg->mg_len = xlen;
8089         }
8090         else {
8091             if (mg) {
8092                 mg->mg_ptr = NULL;
8093                 mg->mg_len = -1;
8094             }
8095         }
8096     }
8097     if (mg && mg->mg_ptr) {
8098         *nxp = mg->mg_len;
8099         return mg->mg_ptr + sizeof(PL_collation_ix);
8100     }
8101     else {
8102         *nxp = 0;
8103         return NULL;
8104     }
8105 }
8106
8107 #endif /* USE_LOCALE_COLLATE */
8108
8109 static char *
8110 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8111 {
8112     SV * const tsv = newSV(0);
8113     ENTER;
8114     SAVEFREESV(tsv);
8115     sv_gets(tsv, fp, 0);
8116     sv_utf8_upgrade_nomg(tsv);
8117     SvCUR_set(sv,append);
8118     sv_catsv(sv,tsv);
8119     LEAVE;
8120     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8121 }
8122
8123 static char *
8124 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8125 {
8126     SSize_t bytesread;
8127     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8128       /* Grab the size of the record we're getting */
8129     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8130     
8131     /* Go yank in */
8132 #ifdef __VMS
8133     int fd;
8134     Stat_t st;
8135
8136     /* With a true, record-oriented file on VMS, we need to use read directly
8137      * to ensure that we respect RMS record boundaries.  The user is responsible
8138      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8139      * record size) field.  N.B. This is likely to produce invalid results on
8140      * varying-width character data when a record ends mid-character.
8141      */
8142     fd = PerlIO_fileno(fp);
8143     if (fd != -1
8144         && PerlLIO_fstat(fd, &st) == 0
8145         && (st.st_fab_rfm == FAB$C_VAR
8146             || st.st_fab_rfm == FAB$C_VFC
8147             || st.st_fab_rfm == FAB$C_FIX)) {
8148
8149         bytesread = PerlLIO_read(fd, buffer, recsize);
8150     }
8151     else /* in-memory file from PerlIO::Scalar
8152           * or not a record-oriented file
8153           */
8154 #endif
8155     {
8156         bytesread = PerlIO_read(fp, buffer, recsize);
8157
8158         /* At this point, the logic in sv_get() means that sv will
8159            be treated as utf-8 if the handle is utf8.
8160         */
8161         if (PerlIO_isutf8(fp) && bytesread > 0) {
8162             char *bend = buffer + bytesread;
8163             char *bufp = buffer;
8164             size_t charcount = 0;
8165             bool charstart = TRUE;
8166             STRLEN skip = 0;
8167
8168             while (charcount < recsize) {
8169                 /* count accumulated characters */
8170                 while (bufp < bend) {
8171                     if (charstart) {
8172                         skip = UTF8SKIP(bufp);
8173                     }
8174                     if (bufp + skip > bend) {
8175                         /* partial at the end */
8176                         charstart = FALSE;
8177                         break;
8178                     }
8179                     else {
8180                         ++charcount;
8181                         bufp += skip;
8182                         charstart = TRUE;
8183                     }
8184                 }
8185
8186                 if (charcount < recsize) {
8187                     STRLEN readsize;
8188                     STRLEN bufp_offset = bufp - buffer;
8189                     SSize_t morebytesread;
8190
8191                     /* originally I read enough to fill any incomplete
8192                        character and the first byte of the next
8193                        character if needed, but if there's many
8194                        multi-byte encoded characters we're going to be
8195                        making a read call for every character beyond
8196                        the original read size.
8197
8198                        So instead, read the rest of the character if
8199                        any, and enough bytes to match at least the
8200                        start bytes for each character we're going to
8201                        read.
8202                     */
8203                     if (charstart)
8204                         readsize = recsize - charcount;
8205                     else 
8206                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8207                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8208                     bend = buffer + bytesread;
8209                     morebytesread = PerlIO_read(fp, bend, readsize);
8210                     if (morebytesread <= 0) {
8211                         /* we're done, if we still have incomplete
8212                            characters the check code in sv_gets() will
8213                            warn about them.
8214
8215                            I'd originally considered doing
8216                            PerlIO_ungetc() on all but the lead
8217                            character of the incomplete character, but
8218                            read() doesn't do that, so I don't.
8219                         */
8220                         break;
8221                     }
8222
8223                     /* prepare to scan some more */
8224                     bytesread += morebytesread;
8225                     bend = buffer + bytesread;
8226                     bufp = buffer + bufp_offset;
8227                 }
8228             }
8229         }
8230     }
8231
8232     if (bytesread < 0)
8233         bytesread = 0;
8234     SvCUR_set(sv, bytesread + append);
8235     buffer[bytesread] = '\0';
8236     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8237 }
8238
8239 /*
8240 =for apidoc sv_gets
8241
8242 Get a line from the filehandle and store it into the SV, optionally
8243 appending to the currently-stored string.  If C<append> is not 0, the
8244 line is appended to the SV instead of overwriting it.  C<append> should
8245 be set to the byte offset that the appended string should start at
8246 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8247
8248 =cut
8249 */
8250
8251 char *
8252 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8253 {
8254     const char *rsptr;
8255     STRLEN rslen;
8256     STDCHAR rslast;
8257     STDCHAR *bp;
8258     SSize_t cnt;
8259     int i = 0;
8260     int rspara = 0;
8261
8262     PERL_ARGS_ASSERT_SV_GETS;
8263
8264     if (SvTHINKFIRST(sv))
8265         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8266     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8267        from <>.
8268        However, perlbench says it's slower, because the existing swipe code
8269        is faster than copy on write.
8270        Swings and roundabouts.  */
8271     SvUPGRADE(sv, SVt_PV);
8272
8273     if (append) {
8274         /* line is going to be appended to the existing buffer in the sv */
8275         if (PerlIO_isutf8(fp)) {
8276             if (!SvUTF8(sv)) {
8277                 sv_utf8_upgrade_nomg(sv);
8278                 sv_pos_u2b(sv,&append,0);
8279             }
8280         } else if (SvUTF8(sv)) {
8281             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8282         }
8283     }
8284
8285     SvPOK_only(sv);
8286     if (!append) {
8287         /* not appending - "clear" the string by setting SvCUR to 0,
8288          * the pv is still avaiable. */
8289         SvCUR_set(sv,0);
8290     }
8291     if (PerlIO_isutf8(fp))
8292         SvUTF8_on(sv);
8293
8294     if (IN_PERL_COMPILETIME) {
8295         /* we always read code in line mode */
8296         rsptr = "\n";
8297         rslen = 1;
8298     }
8299     else if (RsSNARF(PL_rs)) {
8300         /* If it is a regular disk file use size from stat() as estimate
8301            of amount we are going to read -- may result in mallocing
8302            more memory than we really need if the layers below reduce
8303            the size we read (e.g. CRLF or a gzip layer).
8304          */
8305         Stat_t st;
8306         int fd = PerlIO_fileno(fp);
8307         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8308             const Off_t offset = PerlIO_tell(fp);
8309             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8310 #ifdef PERL_NEW_COPY_ON_WRITE
8311                 /* Add an extra byte for the sake of copy-on-write's
8312                  * buffer reference count. */
8313                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8314 #else
8315                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8316 #endif
8317             }
8318         }
8319         rsptr = NULL;
8320         rslen = 0;
8321     }
8322     else if (RsRECORD(PL_rs)) {
8323         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8324     }
8325     else if (RsPARA(PL_rs)) {
8326         rsptr = "\n\n";
8327         rslen = 2;
8328         rspara = 1;
8329     }
8330     else {
8331         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8332         if (PerlIO_isutf8(fp)) {
8333             rsptr = SvPVutf8(PL_rs, rslen);
8334         }
8335         else {
8336             if (SvUTF8(PL_rs)) {
8337                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8338                     Perl_croak(aTHX_ "Wide character in $/");
8339                 }
8340             }
8341             /* extract the raw pointer to the record separator */
8342             rsptr = SvPV_const(PL_rs, rslen);
8343         }
8344     }
8345
8346     /* rslast is the last character in the record separator
8347      * note we don't use rslast except when rslen is true, so the
8348      * null assign is a placeholder. */
8349     rslast = rslen ? rsptr[rslen - 1] : '\0';
8350
8351     if (rspara) {               /* have to do this both before and after */
8352         do {                    /* to make sure file boundaries work right */
8353             if (PerlIO_eof(fp))
8354                 return 0;
8355             i = PerlIO_getc(fp);
8356             if (i != '\n') {
8357                 if (i == -1)
8358                     return 0;
8359                 PerlIO_ungetc(fp,i);
8360                 break;
8361             }
8362         } while (i != EOF);
8363     }
8364
8365     /* See if we know enough about I/O mechanism to cheat it ! */
8366
8367     /* This used to be #ifdef test - it is made run-time test for ease
8368        of abstracting out stdio interface. One call should be cheap
8369        enough here - and may even be a macro allowing compile
8370        time optimization.
8371      */
8372
8373     if (PerlIO_fast_gets(fp)) {
8374     /*
8375      * We can do buffer based IO operations on this filehandle.
8376      *
8377      * This means we can bypass a lot of subcalls and process
8378      * the buffer directly, it also means we know the upper bound
8379      * on the amount of data we might read of the current buffer
8380      * into our sv. Knowing this allows us to preallocate the pv
8381      * to be able to hold that maximum, which allows us to simplify
8382      * a lot of logic. */
8383
8384     /*
8385      * We're going to steal some values from the stdio struct
8386      * and put EVERYTHING in the innermost loop into registers.
8387      */
8388     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8389     STRLEN bpx;         /* length of the data in the target sv
8390                            used to fix pointers after a SvGROW */
8391     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8392                            of data left in the read-ahead buffer.
8393                            If 0 then the pv buffer can hold the full
8394                            amount left, otherwise this is the amount it
8395                            can hold. */
8396
8397 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8398     /* An ungetc()d char is handled separately from the regular
8399      * buffer, so we getc() it back out and stuff it in the buffer.
8400      */
8401     i = PerlIO_getc(fp);
8402     if (i == EOF) return 0;
8403     *(--((*fp)->_ptr)) = (unsigned char) i;
8404     (*fp)->_cnt++;
8405 #endif
8406
8407     /* Here is some breathtakingly efficient cheating */
8408
8409     /* When you read the following logic resist the urge to think
8410      * of record separators that are 1 byte long. They are an
8411      * uninteresting special (simple) case.
8412      *
8413      * Instead think of record separators which are at least 2 bytes
8414      * long, and keep in mind that we need to deal with such
8415      * separators when they cross a read-ahead buffer boundary.
8416      *
8417      * Also consider that we need to gracefully deal with separators
8418      * that may be longer than a single read ahead buffer.
8419      *
8420      * Lastly do not forget we want to copy the delimiter as well. We
8421      * are copying all data in the file _up_to_and_including_ the separator
8422      * itself.
8423      *
8424      * Now that you have all that in mind here is what is happening below:
8425      *
8426      * 1. When we first enter the loop we do some memory book keeping to see
8427      * how much free space there is in the target SV. (This sub assumes that
8428      * it is operating on the same SV most of the time via $_ and that it is
8429      * going to be able to reuse the same pv buffer each call.) If there is
8430      * "enough" room then we set "shortbuffered" to how much space there is
8431      * and start reading forward.
8432      *
8433      * 2. When we scan forward we copy from the read-ahead buffer to the target
8434      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8435      * and the end of the of pv, as well as for the "rslast", which is the last
8436      * char of the separator.
8437      *
8438      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8439      * (which has a "complete" record up to the point we saw rslast) and check
8440      * it to see if it matches the separator. If it does we are done. If it doesn't
8441      * we continue on with the scan/copy.
8442      *
8443      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8444      * the IO system to read the next buffer. We do this by doing a getc(), which
8445      * returns a single char read (or EOF), and prefills the buffer, and also
8446      * allows us to find out how full the buffer is.  We use this information to
8447      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8448      * the returned single char into the target sv, and then go back into scan
8449      * forward mode.
8450      *
8451      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8452      * remaining space in the read-buffer.
8453      *
8454      * Note that this code despite its twisty-turny nature is pretty darn slick.
8455      * It manages single byte separators, multi-byte cross boundary separators,
8456      * and cross-read-buffer separators cleanly and efficiently at the cost
8457      * of potentially greatly overallocating the target SV.
8458      *
8459      * Yves
8460      */
8461
8462
8463     /* get the number of bytes remaining in the read-ahead buffer
8464      * on first call on a given fp this will return 0.*/
8465     cnt = PerlIO_get_cnt(fp);
8466
8467     /* make sure we have the room */
8468     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8469         /* Not room for all of it
8470            if we are looking for a separator and room for some
8471          */
8472         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8473             /* just process what we have room for */
8474             shortbuffered = cnt - SvLEN(sv) + append + 1;
8475             cnt -= shortbuffered;
8476         }
8477         else {
8478             /* ensure that the target sv has enough room to hold
8479              * the rest of the read-ahead buffer */
8480             shortbuffered = 0;
8481             /* remember that cnt can be negative */
8482             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8483         }
8484     }
8485     else {
8486         /* we have enough room to hold the full buffer, lets scream */
8487         shortbuffered = 0;
8488     }
8489
8490     /* extract the pointer to sv's string buffer, offset by append as necessary */
8491     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8492     /* extract the point to the read-ahead buffer */
8493     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8494
8495     /* some trace debug output */
8496     DEBUG_P(PerlIO_printf(Perl_debug_log,
8497         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8498     DEBUG_P(PerlIO_printf(Perl_debug_log,
8499         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8500          UVuf"\n",
8501                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8502                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8503
8504     for (;;) {
8505       screamer:
8506         /* if there is stuff left in the read-ahead buffer */
8507         if (cnt > 0) {
8508             /* if there is a separator */
8509             if (rslen) {
8510                 /* loop until we hit the end of the read-ahead buffer */
8511                 while (cnt > 0) {                    /* this     |  eat */
8512                     /* scan forward copying and searching for rslast as we go */
8513                     cnt--;
8514                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8515                         goto thats_all_folks;        /* screams  |  sed :-) */
8516                 }
8517             }
8518             else {
8519                 /* no separator, slurp the full buffer */
8520                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8521                 bp += cnt;                           /* screams  |  dust */
8522                 ptr += cnt;                          /* louder   |  sed :-) */
8523                 cnt = 0;
8524                 assert (!shortbuffered);
8525                 goto cannot_be_shortbuffered;
8526             }
8527         }
8528         
8529         if (shortbuffered) {            /* oh well, must extend */
8530             /* we didnt have enough room to fit the line into the target buffer
8531              * so we must extend the target buffer and keep going */
8532             cnt = shortbuffered;
8533             shortbuffered = 0;
8534             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8535             SvCUR_set(sv, bpx);
8536             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8537             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8538             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8539             continue;
8540         }
8541
8542     cannot_be_shortbuffered:
8543         /* we need to refill the read-ahead buffer if possible */
8544
8545         DEBUG_P(PerlIO_printf(Perl_debug_log,
8546                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8547                               PTR2UV(ptr),(IV)cnt));
8548         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8549
8550         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8551            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8552             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8553             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8554
8555         /*
8556             call PerlIO_getc() to let it prefill the lookahead buffer
8557
8558             This used to call 'filbuf' in stdio form, but as that behaves like
8559             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8560             another abstraction.
8561
8562             Note we have to deal with the char in 'i' if we are not at EOF
8563         */
8564         i   = PerlIO_getc(fp);          /* get more characters */
8565
8566         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8567            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8568             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8569             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8570
8571         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8572         cnt = PerlIO_get_cnt(fp);
8573         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8574         DEBUG_P(PerlIO_printf(Perl_debug_log,
8575             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8576             PTR2UV(ptr),(IV)cnt));
8577
8578         if (i == EOF)                   /* all done for ever? */
8579             goto thats_really_all_folks;
8580
8581         /* make sure we have enough space in the target sv */
8582         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8583         SvCUR_set(sv, bpx);
8584         SvGROW(sv, bpx + cnt + 2);
8585         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8586
8587         /* copy of the char we got from getc() */
8588         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8589
8590         /* make sure we deal with the i being the last character of a separator */
8591         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8592             goto thats_all_folks;
8593     }
8594
8595   thats_all_folks:
8596     /* check if we have actually found the separator - only really applies
8597      * when rslen > 1 */
8598     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8599           memNE((char*)bp - rslen, rsptr, rslen))
8600         goto screamer;                          /* go back to the fray */
8601   thats_really_all_folks:
8602     if (shortbuffered)
8603         cnt += shortbuffered;
8604         DEBUG_P(PerlIO_printf(Perl_debug_log,
8605              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8606     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8607     DEBUG_P(PerlIO_printf(Perl_debug_log,
8608         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8609         "\n",
8610         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8611         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8612     *bp = '\0';
8613     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8614     DEBUG_P(PerlIO_printf(Perl_debug_log,
8615         "Screamer: done, len=%ld, string=|%.*s|\n",
8616         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8617     }
8618    else
8619     {
8620        /*The big, slow, and stupid way. */
8621 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8622         STDCHAR *buf = NULL;
8623         Newx(buf, 8192, STDCHAR);
8624         assert(buf);
8625 #else
8626         STDCHAR buf[8192];
8627 #endif
8628
8629       screamer2:
8630         if (rslen) {
8631             const STDCHAR * const bpe = buf + sizeof(buf);
8632             bp = buf;
8633             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8634                 ; /* keep reading */
8635             cnt = bp - buf;
8636         }
8637         else {
8638             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8639             /* Accommodate broken VAXC compiler, which applies U8 cast to
8640              * both args of ?: operator, causing EOF to change into 255
8641              */
8642             if (cnt > 0)
8643                  i = (U8)buf[cnt - 1];
8644             else
8645                  i = EOF;
8646         }
8647
8648         if (cnt < 0)
8649             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8650         if (append)
8651             sv_catpvn_nomg(sv, (char *) buf, cnt);
8652         else
8653             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8654
8655         if (i != EOF &&                 /* joy */
8656             (!rslen ||
8657              SvCUR(sv) < rslen ||
8658              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8659         {
8660             append = -1;
8661             /*
8662              * If we're reading from a TTY and we get a short read,
8663              * indicating that the user hit his EOF character, we need
8664              * to notice it now, because if we try to read from the TTY
8665              * again, the EOF condition will disappear.
8666              *
8667              * The comparison of cnt to sizeof(buf) is an optimization
8668              * that prevents unnecessary calls to feof().
8669              *
8670              * - jik 9/25/96
8671              */
8672             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8673                 goto screamer2;
8674         }
8675
8676 #ifdef USE_HEAP_INSTEAD_OF_STACK
8677         Safefree(buf);
8678 #endif
8679     }
8680
8681     if (rspara) {               /* have to do this both before and after */
8682         while (i != EOF) {      /* to make sure file boundaries work right */
8683             i = PerlIO_getc(fp);
8684             if (i != '\n') {
8685                 PerlIO_ungetc(fp,i);
8686                 break;
8687             }
8688         }
8689     }
8690
8691     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8692 }
8693
8694 /*
8695 =for apidoc sv_inc
8696
8697 Auto-increment of the value in the SV, doing string to numeric conversion
8698 if necessary.  Handles 'get' magic and operator overloading.
8699
8700 =cut
8701 */
8702
8703 void
8704 Perl_sv_inc(pTHX_ SV *const sv)
8705 {
8706     if (!sv)
8707         return;
8708     SvGETMAGIC(sv);
8709     sv_inc_nomg(sv);
8710 }
8711
8712 /*
8713 =for apidoc sv_inc_nomg
8714
8715 Auto-increment of the value in the SV, doing string to numeric conversion
8716 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8717
8718 =cut
8719 */
8720
8721 void
8722 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8723 {
8724     char *d;
8725     int flags;
8726
8727     if (!sv)
8728         return;
8729     if (SvTHINKFIRST(sv)) {
8730         if (SvREADONLY(sv)) {
8731                 Perl_croak_no_modify();
8732         }
8733         if (SvROK(sv)) {
8734             IV i;
8735             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8736                 return;
8737             i = PTR2IV(SvRV(sv));
8738             sv_unref(sv);
8739             sv_setiv(sv, i);
8740         }
8741         else sv_force_normal_flags(sv, 0);
8742     }
8743     flags = SvFLAGS(sv);
8744     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8745         /* It's (privately or publicly) a float, but not tested as an
8746            integer, so test it to see. */
8747         (void) SvIV(sv);
8748         flags = SvFLAGS(sv);
8749     }
8750     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8751         /* It's publicly an integer, or privately an integer-not-float */
8752 #ifdef PERL_PRESERVE_IVUV
8753       oops_its_int:
8754 #endif
8755         if (SvIsUV(sv)) {
8756             if (SvUVX(sv) == UV_MAX)
8757                 sv_setnv(sv, UV_MAX_P1);
8758             else
8759                 (void)SvIOK_only_UV(sv);
8760                 SvUV_set(sv, SvUVX(sv) + 1);
8761         } else {
8762             if (SvIVX(sv) == IV_MAX)
8763                 sv_setuv(sv, (UV)IV_MAX + 1);
8764             else {
8765                 (void)SvIOK_only(sv);
8766                 SvIV_set(sv, SvIVX(sv) + 1);
8767             }   
8768         }
8769         return;
8770     }
8771     if (flags & SVp_NOK) {
8772         const NV was = SvNVX(sv);
8773         if (LIKELY(!Perl_isinfnan(was)) &&
8774             NV_OVERFLOWS_INTEGERS_AT &&
8775             was >= NV_OVERFLOWS_INTEGERS_AT) {
8776             /* diag_listed_as: Lost precision when %s %f by 1 */
8777             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8778                            "Lost precision when incrementing %" NVff " by 1",
8779                            was);
8780         }
8781         (void)SvNOK_only(sv);
8782         SvNV_set(sv, was + 1.0);
8783         return;
8784     }
8785
8786     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8787         if ((flags & SVTYPEMASK) < SVt_PVIV)
8788             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8789         (void)SvIOK_only(sv);
8790         SvIV_set(sv, 1);
8791         return;
8792     }
8793     d = SvPVX(sv);
8794     while (isALPHA(*d)) d++;
8795     while (isDIGIT(*d)) d++;
8796     if (d < SvEND(sv)) {
8797         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8798 #ifdef PERL_PRESERVE_IVUV
8799         /* Got to punt this as an integer if needs be, but we don't issue
8800            warnings. Probably ought to make the sv_iv_please() that does
8801            the conversion if possible, and silently.  */
8802         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8803             /* Need to try really hard to see if it's an integer.
8804                9.22337203685478e+18 is an integer.
8805                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8806                so $a="9.22337203685478e+18"; $a+0; $a++
8807                needs to be the same as $a="9.22337203685478e+18"; $a++
8808                or we go insane. */
8809         
8810             (void) sv_2iv(sv);
8811             if (SvIOK(sv))
8812                 goto oops_its_int;
8813
8814             /* sv_2iv *should* have made this an NV */
8815             if (flags & SVp_NOK) {
8816                 (void)SvNOK_only(sv);
8817                 SvNV_set(sv, SvNVX(sv) + 1.0);
8818                 return;
8819             }
8820             /* I don't think we can get here. Maybe I should assert this
8821                And if we do get here I suspect that sv_setnv will croak. NWC
8822                Fall through. */
8823             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8824                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8825         }
8826 #endif /* PERL_PRESERVE_IVUV */
8827         if (!numtype && ckWARN(WARN_NUMERIC))
8828             not_incrementable(sv);
8829         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8830         return;
8831     }
8832     d--;
8833     while (d >= SvPVX_const(sv)) {
8834         if (isDIGIT(*d)) {
8835             if (++*d <= '9')
8836                 return;
8837             *(d--) = '0';
8838         }
8839         else {
8840 #ifdef EBCDIC
8841             /* MKS: The original code here died if letters weren't consecutive.
8842              * at least it didn't have to worry about non-C locales.  The
8843              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8844              * arranged in order (although not consecutively) and that only
8845              * [A-Za-z] are accepted by isALPHA in the C locale.
8846              */
8847             if (isALPHA_FOLD_NE(*d, 'z')) {
8848                 do { ++*d; } while (!isALPHA(*d));
8849                 return;
8850             }
8851             *(d--) -= 'z' - 'a';
8852 #else
8853             ++*d;
8854             if (isALPHA(*d))
8855                 return;
8856             *(d--) -= 'z' - 'a' + 1;
8857 #endif
8858         }
8859     }
8860     /* oh,oh, the number grew */
8861     SvGROW(sv, SvCUR(sv) + 2);
8862     SvCUR_set(sv, SvCUR(sv) + 1);
8863     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8864         *d = d[-1];
8865     if (isDIGIT(d[1]))
8866         *d = '1';
8867     else
8868         *d = d[1];
8869 }
8870
8871 /*
8872 =for apidoc sv_dec
8873
8874 Auto-decrement of the value in the SV, doing string to numeric conversion
8875 if necessary.  Handles 'get' magic and operator overloading.
8876
8877 =cut
8878 */
8879
8880 void
8881 Perl_sv_dec(pTHX_ SV *const sv)
8882 {
8883     if (!sv)
8884         return;
8885     SvGETMAGIC(sv);
8886     sv_dec_nomg(sv);
8887 }
8888
8889 /*
8890 =for apidoc sv_dec_nomg
8891
8892 Auto-decrement of the value in the SV, doing string to numeric conversion
8893 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8894
8895 =cut
8896 */
8897
8898 void
8899 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8900 {
8901     int flags;
8902
8903     if (!sv)
8904         return;
8905     if (SvTHINKFIRST(sv)) {
8906         if (SvREADONLY(sv)) {
8907                 Perl_croak_no_modify();
8908         }
8909         if (SvROK(sv)) {
8910             IV i;
8911             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8912                 return;
8913             i = PTR2IV(SvRV(sv));
8914             sv_unref(sv);
8915             sv_setiv(sv, i);
8916         }
8917         else sv_force_normal_flags(sv, 0);
8918     }
8919     /* Unlike sv_inc we don't have to worry about string-never-numbers
8920        and keeping them magic. But we mustn't warn on punting */
8921     flags = SvFLAGS(sv);
8922     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8923         /* It's publicly an integer, or privately an integer-not-float */
8924 #ifdef PERL_PRESERVE_IVUV
8925       oops_its_int:
8926 #endif
8927         if (SvIsUV(sv)) {
8928             if (SvUVX(sv) == 0) {
8929                 (void)SvIOK_only(sv);
8930                 SvIV_set(sv, -1);
8931             }
8932             else {
8933                 (void)SvIOK_only_UV(sv);
8934                 SvUV_set(sv, SvUVX(sv) - 1);
8935             }   
8936         } else {
8937             if (SvIVX(sv) == IV_MIN) {
8938                 sv_setnv(sv, (NV)IV_MIN);
8939                 goto oops_its_num;
8940             }
8941             else {
8942                 (void)SvIOK_only(sv);
8943                 SvIV_set(sv, SvIVX(sv) - 1);
8944             }   
8945         }
8946         return;
8947     }
8948     if (flags & SVp_NOK) {
8949     oops_its_num:
8950         {
8951             const NV was = SvNVX(sv);
8952             if (LIKELY(!Perl_isinfnan(was)) &&
8953                 NV_OVERFLOWS_INTEGERS_AT &&
8954                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8955                 /* diag_listed_as: Lost precision when %s %f by 1 */
8956                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8957                                "Lost precision when decrementing %" NVff " by 1",
8958                                was);
8959             }
8960             (void)SvNOK_only(sv);
8961             SvNV_set(sv, was - 1.0);
8962             return;
8963         }
8964     }
8965     if (!(flags & SVp_POK)) {
8966         if ((flags & SVTYPEMASK) < SVt_PVIV)
8967             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8968         SvIV_set(sv, -1);
8969         (void)SvIOK_only(sv);
8970         return;
8971     }
8972 #ifdef PERL_PRESERVE_IVUV
8973     {
8974         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8975         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8976             /* Need to try really hard to see if it's an integer.
8977                9.22337203685478e+18 is an integer.
8978                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8979                so $a="9.22337203685478e+18"; $a+0; $a--
8980                needs to be the same as $a="9.22337203685478e+18"; $a--
8981                or we go insane. */
8982         
8983             (void) sv_2iv(sv);
8984             if (SvIOK(sv))
8985                 goto oops_its_int;
8986
8987             /* sv_2iv *should* have made this an NV */
8988             if (flags & SVp_NOK) {
8989                 (void)SvNOK_only(sv);
8990                 SvNV_set(sv, SvNVX(sv) - 1.0);
8991                 return;
8992             }
8993             /* I don't think we can get here. Maybe I should assert this
8994                And if we do get here I suspect that sv_setnv will croak. NWC
8995                Fall through. */
8996             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8997                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8998         }
8999     }
9000 #endif /* PERL_PRESERVE_IVUV */
9001     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9002 }
9003
9004 /* this define is used to eliminate a chunk of duplicated but shared logic
9005  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9006  * used anywhere but here - yves
9007  */
9008 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9009     STMT_START {      \
9010         SSize_t ix = ++PL_tmps_ix;              \
9011         if (UNLIKELY(ix >= PL_tmps_max))        \
9012             ix = tmps_grow_p(ix);                       \
9013         PL_tmps_stack[ix] = (AnSv); \
9014     } STMT_END
9015
9016 /*
9017 =for apidoc sv_mortalcopy
9018
9019 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9020 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9021 explicit call to FREETMPS, or by an implicit call at places such as
9022 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
9023
9024 =cut
9025 */
9026
9027 /* Make a string that will exist for the duration of the expression
9028  * evaluation.  Actually, it may have to last longer than that, but
9029  * hopefully we won't free it until it has been assigned to a
9030  * permanent location. */
9031
9032 SV *
9033 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9034 {
9035     SV *sv;
9036
9037     if (flags & SV_GMAGIC)
9038         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9039     new_SV(sv);
9040     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9041     PUSH_EXTEND_MORTAL__SV_C(sv);
9042     SvTEMP_on(sv);
9043     return sv;
9044 }
9045
9046 /*
9047 =for apidoc sv_newmortal
9048
9049 Creates a new null SV which is mortal.  The reference count of the SV is
9050 set to 1.  It will be destroyed "soon", either by an explicit call to
9051 FREETMPS, or by an implicit call at places such as statement boundaries.
9052 See also C<sv_mortalcopy> and C<sv_2mortal>.
9053
9054 =cut
9055 */
9056
9057 SV *
9058 Perl_sv_newmortal(pTHX)
9059 {
9060     SV *sv;
9061
9062     new_SV(sv);
9063     SvFLAGS(sv) = SVs_TEMP;
9064     PUSH_EXTEND_MORTAL__SV_C(sv);
9065     return sv;
9066 }
9067
9068
9069 /*
9070 =for apidoc newSVpvn_flags
9071
9072 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9073 characters) into it.  The reference count for the
9074 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9075 string.  You are responsible for ensuring that the source string is at least
9076 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9077 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9078 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9079 returning.  If C<SVf_UTF8> is set, C<s>
9080 is considered to be in UTF-8 and the
9081 C<SVf_UTF8> flag will be set on the new SV.
9082 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9083
9084     #define newSVpvn_utf8(s, len, u)                    \
9085         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9086
9087 =cut
9088 */
9089
9090 SV *
9091 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9092 {
9093     SV *sv;
9094
9095     /* All the flags we don't support must be zero.
9096        And we're new code so I'm going to assert this from the start.  */
9097     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9098     new_SV(sv);
9099     sv_setpvn(sv,s,len);
9100
9101     /* This code used to do a sv_2mortal(), however we now unroll the call to
9102      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9103      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9104      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9105      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9106      * means that we eliminate quite a few steps than it looks - Yves
9107      * (explaining patch by gfx) */
9108
9109     SvFLAGS(sv) |= flags;
9110
9111     if(flags & SVs_TEMP){
9112         PUSH_EXTEND_MORTAL__SV_C(sv);
9113     }
9114
9115     return sv;
9116 }
9117
9118 /*
9119 =for apidoc sv_2mortal
9120
9121 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9122 by an explicit call to FREETMPS, or by an implicit call at places such as
9123 statement boundaries.  SvTEMP() is turned on which means that the SV's
9124 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
9125 and C<sv_mortalcopy>.
9126
9127 =cut
9128 */
9129
9130 SV *
9131 Perl_sv_2mortal(pTHX_ SV *const sv)
9132 {
9133     dVAR;
9134     if (!sv)
9135         return sv;
9136     if (SvIMMORTAL(sv))
9137         return sv;
9138     PUSH_EXTEND_MORTAL__SV_C(sv);
9139     SvTEMP_on(sv);
9140     return sv;
9141 }
9142
9143 /*
9144 =for apidoc newSVpv
9145
9146 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9147 characters) into it.  The reference count for the
9148 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9149 strlen(), (which means if you use this option, that C<s> can't have embedded
9150 C<NUL> characters and has to have a terminating C<NUL> byte).
9151
9152 For efficiency, consider using C<newSVpvn> instead.
9153
9154 =cut
9155 */
9156
9157 SV *
9158 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9159 {
9160     SV *sv;
9161
9162     new_SV(sv);
9163     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9164     return sv;
9165 }
9166
9167 /*
9168 =for apidoc newSVpvn
9169
9170 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9171 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9172 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9173 are responsible for ensuring that the source buffer is at least
9174 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9175 undefined.
9176
9177 =cut
9178 */
9179
9180 SV *
9181 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9182 {
9183     SV *sv;
9184     new_SV(sv);
9185     sv_setpvn(sv,buffer,len);
9186     return sv;
9187 }
9188
9189 /*
9190 =for apidoc newSVhek
9191
9192 Creates a new SV from the hash key structure.  It will generate scalars that
9193 point to the shared string table where possible.  Returns a new (undefined)
9194 SV if the hek is NULL.
9195
9196 =cut
9197 */
9198
9199 SV *
9200 Perl_newSVhek(pTHX_ const HEK *const hek)
9201 {
9202     if (!hek) {
9203         SV *sv;
9204
9205         new_SV(sv);
9206         return sv;
9207     }
9208
9209     if (HEK_LEN(hek) == HEf_SVKEY) {
9210         return newSVsv(*(SV**)HEK_KEY(hek));
9211     } else {
9212         const int flags = HEK_FLAGS(hek);
9213         if (flags & HVhek_WASUTF8) {
9214             /* Trouble :-)
9215                Andreas would like keys he put in as utf8 to come back as utf8
9216             */
9217             STRLEN utf8_len = HEK_LEN(hek);
9218             SV * const sv = newSV_type(SVt_PV);
9219             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9220             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9221             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9222             SvUTF8_on (sv);
9223             return sv;
9224         } else if (flags & HVhek_UNSHARED) {
9225             /* A hash that isn't using shared hash keys has to have
9226                the flag in every key so that we know not to try to call
9227                share_hek_hek on it.  */
9228
9229             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9230             if (HEK_UTF8(hek))
9231                 SvUTF8_on (sv);
9232             return sv;
9233         }
9234         /* This will be overwhelminly the most common case.  */
9235         {
9236             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9237                more efficient than sharepvn().  */
9238             SV *sv;
9239
9240             new_SV(sv);
9241             sv_upgrade(sv, SVt_PV);
9242             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9243             SvCUR_set(sv, HEK_LEN(hek));
9244             SvLEN_set(sv, 0);
9245             SvIsCOW_on(sv);
9246             SvPOK_on(sv);
9247             if (HEK_UTF8(hek))
9248                 SvUTF8_on(sv);
9249             return sv;
9250         }
9251     }
9252 }
9253
9254 /*
9255 =for apidoc newSVpvn_share
9256
9257 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9258 table.  If the string does not already exist in the table, it is
9259 created first.  Turns on the SvIsCOW flag (or READONLY
9260 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9261 is non-zero, that value is used; otherwise the hash is computed.
9262 The string's hash can later be retrieved from the SV
9263 with the C<SvSHARED_HASH()> macro.  The idea here is
9264 that as the string table is used for shared hash keys these strings will have
9265 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9266
9267 =cut
9268 */
9269
9270 SV *
9271 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9272 {
9273     dVAR;
9274     SV *sv;
9275     bool is_utf8 = FALSE;
9276     const char *const orig_src = src;
9277
9278     if (len < 0) {
9279         STRLEN tmplen = -len;
9280         is_utf8 = TRUE;
9281         /* See the note in hv.c:hv_fetch() --jhi */
9282         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9283         len = tmplen;
9284     }
9285     if (!hash)
9286         PERL_HASH(hash, src, len);
9287     new_SV(sv);
9288     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9289        changes here, update it there too.  */
9290     sv_upgrade(sv, SVt_PV);
9291     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9292     SvCUR_set(sv, len);
9293     SvLEN_set(sv, 0);
9294     SvIsCOW_on(sv);
9295     SvPOK_on(sv);
9296     if (is_utf8)
9297         SvUTF8_on(sv);
9298     if (src != orig_src)
9299         Safefree(src);
9300     return sv;
9301 }
9302
9303 /*
9304 =for apidoc newSVpv_share
9305
9306 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9307 string/length pair.
9308
9309 =cut
9310 */
9311
9312 SV *
9313 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9314 {
9315     return newSVpvn_share(src, strlen(src), hash);
9316 }
9317
9318 #if defined(PERL_IMPLICIT_CONTEXT)
9319
9320 /* pTHX_ magic can't cope with varargs, so this is a no-context
9321  * version of the main function, (which may itself be aliased to us).
9322  * Don't access this version directly.
9323  */
9324
9325 SV *
9326 Perl_newSVpvf_nocontext(const char *const pat, ...)
9327 {
9328     dTHX;
9329     SV *sv;
9330     va_list args;
9331
9332     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9333
9334     va_start(args, pat);
9335     sv = vnewSVpvf(pat, &args);
9336     va_end(args);
9337     return sv;
9338 }
9339 #endif
9340
9341 /*
9342 =for apidoc newSVpvf
9343
9344 Creates a new SV and initializes it with the string formatted like
9345 C<sprintf>.
9346
9347 =cut
9348 */
9349
9350 SV *
9351 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9352 {
9353     SV *sv;
9354     va_list args;
9355
9356     PERL_ARGS_ASSERT_NEWSVPVF;
9357
9358     va_start(args, pat);
9359     sv = vnewSVpvf(pat, &args);
9360     va_end(args);
9361     return sv;
9362 }
9363
9364 /* backend for newSVpvf() and newSVpvf_nocontext() */
9365
9366 SV *
9367 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9368 {
9369     SV *sv;
9370
9371     PERL_ARGS_ASSERT_VNEWSVPVF;
9372
9373     new_SV(sv);
9374     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9375     return sv;
9376 }
9377
9378 /*
9379 =for apidoc newSVnv
9380
9381 Creates a new SV and copies a floating point value into it.
9382 The reference count for the SV is set to 1.
9383
9384 =cut
9385 */
9386
9387 SV *
9388 Perl_newSVnv(pTHX_ const NV n)
9389 {
9390     SV *sv;
9391
9392     new_SV(sv);
9393     sv_setnv(sv,n);
9394     return sv;
9395 }
9396
9397 /*
9398 =for apidoc newSViv
9399
9400 Creates a new SV and copies an integer into it.  The reference count for the
9401 SV is set to 1.
9402
9403 =cut
9404 */
9405
9406 SV *
9407 Perl_newSViv(pTHX_ const IV i)
9408 {
9409     SV *sv;
9410
9411     new_SV(sv);
9412
9413     /* Inlining ONLY the small relevant subset of sv_setiv here
9414      * for performance. Makes a significant difference. */
9415
9416     /* We're starting from SVt_FIRST, so provided that's
9417      * actual 0, we don't have to unset any SV type flags
9418      * to promote to SVt_IV. */
9419     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9420
9421     SET_SVANY_FOR_BODYLESS_IV(sv);
9422     SvFLAGS(sv) |= SVt_IV;
9423     (void)SvIOK_on(sv);
9424
9425     SvIV_set(sv, i);
9426     SvTAINT(sv);
9427
9428     return sv;
9429 }
9430
9431 /*
9432 =for apidoc newSVuv
9433
9434 Creates a new SV and copies an unsigned integer into it.
9435 The reference count for the SV is set to 1.
9436
9437 =cut
9438 */
9439
9440 SV *
9441 Perl_newSVuv(pTHX_ const UV u)
9442 {
9443     SV *sv;
9444
9445     /* Inlining ONLY the small relevant subset of sv_setuv here
9446      * for performance. Makes a significant difference. */
9447
9448     /* Using ivs is more efficient than using uvs - see sv_setuv */
9449     if (u <= (UV)IV_MAX) {
9450         return newSViv((IV)u);
9451     }
9452
9453     new_SV(sv);
9454
9455     /* We're starting from SVt_FIRST, so provided that's
9456      * actual 0, we don't have to unset any SV type flags
9457      * to promote to SVt_IV. */
9458     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9459
9460     SET_SVANY_FOR_BODYLESS_IV(sv);
9461     SvFLAGS(sv) |= SVt_IV;
9462     (void)SvIOK_on(sv);
9463     (void)SvIsUV_on(sv);
9464
9465     SvUV_set(sv, u);
9466     SvTAINT(sv);
9467
9468     return sv;
9469 }
9470
9471 /*
9472 =for apidoc newSV_type
9473
9474 Creates a new SV, of the type specified.  The reference count for the new SV
9475 is set to 1.
9476
9477 =cut
9478 */
9479
9480 SV *
9481 Perl_newSV_type(pTHX_ const svtype type)
9482 {
9483     SV *sv;
9484
9485     new_SV(sv);
9486     ASSUME(SvTYPE(sv) == SVt_FIRST);
9487     if(type != SVt_FIRST)
9488         sv_upgrade(sv, type);
9489     return sv;
9490 }
9491
9492 /*
9493 =for apidoc newRV_noinc
9494
9495 Creates an RV wrapper for an SV.  The reference count for the original
9496 SV is B<not> incremented.
9497
9498 =cut
9499 */
9500
9501 SV *
9502 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9503 {
9504     SV *sv;
9505
9506     PERL_ARGS_ASSERT_NEWRV_NOINC;
9507
9508     new_SV(sv);
9509
9510     /* We're starting from SVt_FIRST, so provided that's
9511      * actual 0, we don't have to unset any SV type flags
9512      * to promote to SVt_IV. */
9513     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9514
9515     SET_SVANY_FOR_BODYLESS_IV(sv);
9516     SvFLAGS(sv) |= SVt_IV;
9517     SvROK_on(sv);
9518     SvIV_set(sv, 0);
9519
9520     SvTEMP_off(tmpRef);
9521     SvRV_set(sv, tmpRef);
9522
9523     return sv;
9524 }
9525
9526 /* newRV_inc is the official function name to use now.
9527  * newRV_inc is in fact #defined to newRV in sv.h
9528  */
9529
9530 SV *
9531 Perl_newRV(pTHX_ SV *const sv)
9532 {
9533     PERL_ARGS_ASSERT_NEWRV;
9534
9535     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9536 }
9537
9538 /*
9539 =for apidoc newSVsv
9540
9541 Creates a new SV which is an exact duplicate of the original SV.
9542 (Uses C<sv_setsv>.)
9543
9544 =cut
9545 */
9546
9547 SV *
9548 Perl_newSVsv(pTHX_ SV *const old)
9549 {
9550     SV *sv;
9551
9552     if (!old)
9553         return NULL;
9554     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9555         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9556         return NULL;
9557     }
9558     /* Do this here, otherwise we leak the new SV if this croaks. */
9559     SvGETMAGIC(old);
9560     new_SV(sv);
9561     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9562        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9563     sv_setsv_flags(sv, old, SV_NOSTEAL);
9564     return sv;
9565 }
9566
9567 /*
9568 =for apidoc sv_reset
9569
9570 Underlying implementation for the C<reset> Perl function.
9571 Note that the perl-level function is vaguely deprecated.
9572
9573 =cut
9574 */
9575
9576 void
9577 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9578 {
9579     PERL_ARGS_ASSERT_SV_RESET;
9580
9581     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9582 }
9583
9584 void
9585 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9586 {
9587     char todo[PERL_UCHAR_MAX+1];
9588     const char *send;
9589
9590     if (!stash || SvTYPE(stash) != SVt_PVHV)
9591         return;
9592
9593     if (!s) {           /* reset ?? searches */
9594         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9595         if (mg) {
9596             const U32 count = mg->mg_len / sizeof(PMOP**);
9597             PMOP **pmp = (PMOP**) mg->mg_ptr;
9598             PMOP *const *const end = pmp + count;
9599
9600             while (pmp < end) {
9601 #ifdef USE_ITHREADS
9602                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9603 #else
9604                 (*pmp)->op_pmflags &= ~PMf_USED;
9605 #endif
9606                 ++pmp;
9607             }
9608         }
9609         return;
9610     }
9611
9612     /* reset variables */
9613
9614     if (!HvARRAY(stash))
9615         return;
9616
9617     Zero(todo, 256, char);
9618     send = s + len;
9619     while (s < send) {
9620         I32 max;
9621         I32 i = (unsigned char)*s;
9622         if (s[1] == '-') {
9623             s += 2;
9624         }
9625         max = (unsigned char)*s++;
9626         for ( ; i <= max; i++) {
9627             todo[i] = 1;
9628         }
9629         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9630             HE *entry;
9631             for (entry = HvARRAY(stash)[i];
9632                  entry;
9633                  entry = HeNEXT(entry))
9634             {
9635                 GV *gv;
9636                 SV *sv;
9637
9638                 if (!todo[(U8)*HeKEY(entry)])
9639                     continue;
9640                 gv = MUTABLE_GV(HeVAL(entry));
9641                 sv = GvSV(gv);
9642                 if (sv && !SvREADONLY(sv)) {
9643                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9644                     if (!isGV(sv)) SvOK_off(sv);
9645                 }
9646                 if (GvAV(gv)) {
9647                     av_clear(GvAV(gv));
9648                 }
9649                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9650                     hv_clear(GvHV(gv));
9651                 }
9652             }
9653         }
9654     }
9655 }
9656
9657 /*
9658 =for apidoc sv_2io
9659
9660 Using various gambits, try to get an IO from an SV: the IO slot if its a
9661 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9662 named after the PV if we're a string.
9663
9664 'Get' magic is ignored on the sv passed in, but will be called on
9665 C<SvRV(sv)> if sv is an RV.
9666
9667 =cut
9668 */
9669
9670 IO*
9671 Perl_sv_2io(pTHX_ SV *const sv)
9672 {
9673     IO* io;
9674     GV* gv;
9675
9676     PERL_ARGS_ASSERT_SV_2IO;
9677
9678     switch (SvTYPE(sv)) {
9679     case SVt_PVIO:
9680         io = MUTABLE_IO(sv);
9681         break;
9682     case SVt_PVGV:
9683     case SVt_PVLV:
9684         if (isGV_with_GP(sv)) {
9685             gv = MUTABLE_GV(sv);
9686             io = GvIO(gv);
9687             if (!io)
9688                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9689                                     HEKfARG(GvNAME_HEK(gv)));
9690             break;
9691         }
9692         /* FALLTHROUGH */
9693     default:
9694         if (!SvOK(sv))
9695             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9696         if (SvROK(sv)) {
9697             SvGETMAGIC(SvRV(sv));
9698             return sv_2io(SvRV(sv));
9699         }
9700         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9701         if (gv)
9702             io = GvIO(gv);
9703         else
9704             io = 0;
9705         if (!io) {
9706             SV *newsv = sv;
9707             if (SvGMAGICAL(sv)) {
9708                 newsv = sv_newmortal();
9709                 sv_setsv_nomg(newsv, sv);
9710             }
9711             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9712         }
9713         break;
9714     }
9715     return io;
9716 }
9717
9718 /*
9719 =for apidoc sv_2cv
9720
9721 Using various gambits, try to get a CV from an SV; in addition, try if
9722 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9723 The flags in C<lref> are passed to gv_fetchsv.
9724
9725 =cut
9726 */
9727
9728 CV *
9729 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9730 {
9731     GV *gv = NULL;
9732     CV *cv = NULL;
9733
9734     PERL_ARGS_ASSERT_SV_2CV;
9735
9736     if (!sv) {
9737         *st = NULL;
9738         *gvp = NULL;
9739         return NULL;
9740     }
9741     switch (SvTYPE(sv)) {
9742     case SVt_PVCV:
9743         *st = CvSTASH(sv);
9744         *gvp = NULL;
9745         return MUTABLE_CV(sv);
9746     case SVt_PVHV:
9747     case SVt_PVAV:
9748         *st = NULL;
9749         *gvp = NULL;
9750         return NULL;
9751     default:
9752         SvGETMAGIC(sv);
9753         if (SvROK(sv)) {
9754             if (SvAMAGIC(sv))
9755                 sv = amagic_deref_call(sv, to_cv_amg);
9756
9757             sv = SvRV(sv);
9758             if (SvTYPE(sv) == SVt_PVCV) {
9759                 cv = MUTABLE_CV(sv);
9760                 *gvp = NULL;
9761                 *st = CvSTASH(cv);
9762                 return cv;
9763             }
9764             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9765                 gv = MUTABLE_GV(sv);
9766             else
9767                 Perl_croak(aTHX_ "Not a subroutine reference");
9768         }
9769         else if (isGV_with_GP(sv)) {
9770             gv = MUTABLE_GV(sv);
9771         }
9772         else {
9773             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9774         }
9775         *gvp = gv;
9776         if (!gv) {
9777             *st = NULL;
9778             return NULL;
9779         }
9780         /* Some flags to gv_fetchsv mean don't really create the GV  */
9781         if (!isGV_with_GP(gv)) {
9782             *st = NULL;
9783             return NULL;
9784         }
9785         *st = GvESTASH(gv);
9786         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9787             /* XXX this is probably not what they think they're getting.
9788              * It has the same effect as "sub name;", i.e. just a forward
9789              * declaration! */
9790             newSTUB(gv,0);
9791         }
9792         return GvCVu(gv);
9793     }
9794 }
9795
9796 /*
9797 =for apidoc sv_true
9798
9799 Returns true if the SV has a true value by Perl's rules.
9800 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9801 instead use an in-line version.
9802
9803 =cut
9804 */
9805
9806 I32
9807 Perl_sv_true(pTHX_ SV *const sv)
9808 {
9809     if (!sv)
9810         return 0;
9811     if (SvPOK(sv)) {
9812         const XPV* const tXpv = (XPV*)SvANY(sv);
9813         if (tXpv &&
9814                 (tXpv->xpv_cur > 1 ||
9815                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9816             return 1;
9817         else
9818             return 0;
9819     }
9820     else {
9821         if (SvIOK(sv))
9822             return SvIVX(sv) != 0;
9823         else {
9824             if (SvNOK(sv))
9825                 return SvNVX(sv) != 0.0;
9826             else
9827                 return sv_2bool(sv);
9828         }
9829     }
9830 }
9831
9832 /*
9833 =for apidoc sv_pvn_force
9834
9835 Get a sensible string out of the SV somehow.
9836 A private implementation of the C<SvPV_force> macro for compilers which
9837 can't cope with complex macro expressions.  Always use the macro instead.
9838
9839 =for apidoc sv_pvn_force_flags
9840
9841 Get a sensible string out of the SV somehow.
9842 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9843 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9844 implemented in terms of this function.
9845 You normally want to use the various wrapper macros instead: see
9846 C<SvPV_force> and C<SvPV_force_nomg>
9847
9848 =cut
9849 */
9850
9851 char *
9852 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9853 {
9854     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9855
9856     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9857     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9858         sv_force_normal_flags(sv, 0);
9859
9860     if (SvPOK(sv)) {
9861         if (lp)
9862             *lp = SvCUR(sv);
9863     }
9864     else {
9865         char *s;
9866         STRLEN len;
9867  
9868         if (SvTYPE(sv) > SVt_PVLV
9869             || isGV_with_GP(sv))
9870             /* diag_listed_as: Can't coerce %s to %s in %s */
9871             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9872                 OP_DESC(PL_op));
9873         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9874         if (!s) {
9875           s = (char *)"";
9876         }
9877         if (lp)
9878             *lp = len;
9879
9880         if (SvTYPE(sv) < SVt_PV ||
9881             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9882             if (SvROK(sv))
9883                 sv_unref(sv);
9884             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9885             SvGROW(sv, len + 1);
9886             Move(s,SvPVX(sv),len,char);
9887             SvCUR_set(sv, len);
9888             SvPVX(sv)[len] = '\0';
9889         }
9890         if (!SvPOK(sv)) {
9891             SvPOK_on(sv);               /* validate pointer */
9892             SvTAINT(sv);
9893             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9894                                   PTR2UV(sv),SvPVX_const(sv)));
9895         }
9896     }
9897     (void)SvPOK_only_UTF8(sv);
9898     return SvPVX_mutable(sv);
9899 }
9900
9901 /*
9902 =for apidoc sv_pvbyten_force
9903
9904 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9905 instead.
9906
9907 =cut
9908 */
9909
9910 char *
9911 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9912 {
9913     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9914
9915     sv_pvn_force(sv,lp);
9916     sv_utf8_downgrade(sv,0);
9917     *lp = SvCUR(sv);
9918     return SvPVX(sv);
9919 }
9920
9921 /*
9922 =for apidoc sv_pvutf8n_force
9923
9924 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9925 instead.
9926
9927 =cut
9928 */
9929
9930 char *
9931 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9932 {
9933     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9934
9935     sv_pvn_force(sv,0);
9936     sv_utf8_upgrade_nomg(sv);
9937     *lp = SvCUR(sv);
9938     return SvPVX(sv);
9939 }
9940
9941 /*
9942 =for apidoc sv_reftype
9943
9944 Returns a string describing what the SV is a reference to.
9945
9946 =cut
9947 */
9948
9949 const char *
9950 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9951 {
9952     PERL_ARGS_ASSERT_SV_REFTYPE;
9953     if (ob && SvOBJECT(sv)) {
9954         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9955     }
9956     else {
9957         /* WARNING - There is code, for instance in mg.c, that assumes that
9958          * the only reason that sv_reftype(sv,0) would return a string starting
9959          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9960          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9961          * this routine inside other subs, and it saves time.
9962          * Do not change this assumption without searching for "dodgy type check" in
9963          * the code.
9964          * - Yves */
9965         switch (SvTYPE(sv)) {
9966         case SVt_NULL:
9967         case SVt_IV:
9968         case SVt_NV:
9969         case SVt_PV:
9970         case SVt_PVIV:
9971         case SVt_PVNV:
9972         case SVt_PVMG:
9973                                 if (SvVOK(sv))
9974                                     return "VSTRING";
9975                                 if (SvROK(sv))
9976                                     return "REF";
9977                                 else
9978                                     return "SCALAR";
9979
9980         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9981                                 /* tied lvalues should appear to be
9982                                  * scalars for backwards compatibility */
9983                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9984                                     ? "SCALAR" : "LVALUE");
9985         case SVt_PVAV:          return "ARRAY";
9986         case SVt_PVHV:          return "HASH";
9987         case SVt_PVCV:          return "CODE";
9988         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9989                                     ? "GLOB" : "SCALAR");
9990         case SVt_PVFM:          return "FORMAT";
9991         case SVt_PVIO:          return "IO";
9992         case SVt_INVLIST:       return "INVLIST";
9993         case SVt_REGEXP:        return "REGEXP";
9994         default:                return "UNKNOWN";
9995         }
9996     }
9997 }
9998
9999 /*
10000 =for apidoc sv_ref
10001
10002 Returns a SV describing what the SV passed in is a reference to.
10003
10004 =cut
10005 */
10006
10007 SV *
10008 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10009 {
10010     PERL_ARGS_ASSERT_SV_REF;
10011
10012     if (!dst)
10013         dst = sv_newmortal();
10014
10015     if (ob && SvOBJECT(sv)) {
10016         HvNAME_get(SvSTASH(sv))
10017                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10018                     : sv_setpvn(dst, "__ANON__", 8);
10019     }
10020     else {
10021         const char * reftype = sv_reftype(sv, 0);
10022         sv_setpv(dst, reftype);
10023     }
10024     return dst;
10025 }
10026
10027 /*
10028 =for apidoc sv_isobject
10029
10030 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10031 object.  If the SV is not an RV, or if the object is not blessed, then this
10032 will return false.
10033
10034 =cut
10035 */
10036
10037 int
10038 Perl_sv_isobject(pTHX_ SV *sv)
10039 {
10040     if (!sv)
10041         return 0;
10042     SvGETMAGIC(sv);
10043     if (!SvROK(sv))
10044         return 0;
10045     sv = SvRV(sv);
10046     if (!SvOBJECT(sv))
10047         return 0;
10048     return 1;
10049 }
10050
10051 /*
10052 =for apidoc sv_isa
10053
10054 Returns a boolean indicating whether the SV is blessed into the specified
10055 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10056 an inheritance relationship.
10057
10058 =cut
10059 */
10060
10061 int
10062 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10063 {
10064     const char *hvname;
10065
10066     PERL_ARGS_ASSERT_SV_ISA;
10067
10068     if (!sv)
10069         return 0;
10070     SvGETMAGIC(sv);
10071     if (!SvROK(sv))
10072         return 0;
10073     sv = SvRV(sv);
10074     if (!SvOBJECT(sv))
10075         return 0;
10076     hvname = HvNAME_get(SvSTASH(sv));
10077     if (!hvname)
10078         return 0;
10079
10080     return strEQ(hvname, name);
10081 }
10082
10083 /*
10084 =for apidoc newSVrv
10085
10086 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10087 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10088 SV will be blessed in the specified package.  The new SV is returned and its
10089 reference count is 1.  The reference count 1 is owned by C<rv>.
10090
10091 =cut
10092 */
10093
10094 SV*
10095 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10096 {
10097     SV *sv;
10098
10099     PERL_ARGS_ASSERT_NEWSVRV;
10100
10101     new_SV(sv);
10102
10103     SV_CHECK_THINKFIRST_COW_DROP(rv);
10104
10105     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10106         const U32 refcnt = SvREFCNT(rv);
10107         SvREFCNT(rv) = 0;
10108         sv_clear(rv);
10109         SvFLAGS(rv) = 0;
10110         SvREFCNT(rv) = refcnt;
10111
10112         sv_upgrade(rv, SVt_IV);
10113     } else if (SvROK(rv)) {
10114         SvREFCNT_dec(SvRV(rv));
10115     } else {
10116         prepare_SV_for_RV(rv);
10117     }
10118
10119     SvOK_off(rv);
10120     SvRV_set(rv, sv);
10121     SvROK_on(rv);
10122
10123     if (classname) {
10124         HV* const stash = gv_stashpv(classname, GV_ADD);
10125         (void)sv_bless(rv, stash);
10126     }
10127     return sv;
10128 }
10129
10130 SV *
10131 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10132 {
10133     SV * const lv = newSV_type(SVt_PVLV);
10134     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10135     LvTYPE(lv) = 'y';
10136     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10137     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10138     LvSTARGOFF(lv) = ix;
10139     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10140     return lv;
10141 }
10142
10143 /*
10144 =for apidoc sv_setref_pv
10145
10146 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10147 argument will be upgraded to an RV.  That RV will be modified to point to
10148 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
10149 into the SV.  The C<classname> argument indicates the package for the
10150 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10151 will have a reference count of 1, and the RV will be returned.
10152
10153 Do not use with other Perl types such as HV, AV, SV, CV, because those
10154 objects will become corrupted by the pointer copy process.
10155
10156 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10157
10158 =cut
10159 */
10160
10161 SV*
10162 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10163 {
10164     PERL_ARGS_ASSERT_SV_SETREF_PV;
10165
10166     if (!pv) {
10167         sv_setsv(rv, &PL_sv_undef);
10168         SvSETMAGIC(rv);
10169     }
10170     else
10171         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10172     return rv;
10173 }
10174
10175 /*
10176 =for apidoc sv_setref_iv
10177
10178 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10179 argument will be upgraded to an RV.  That RV will be modified to point to
10180 the new SV.  The C<classname> argument indicates the package for the
10181 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10182 will have a reference count of 1, and the RV will be returned.
10183
10184 =cut
10185 */
10186
10187 SV*
10188 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10189 {
10190     PERL_ARGS_ASSERT_SV_SETREF_IV;
10191
10192     sv_setiv(newSVrv(rv,classname), iv);
10193     return rv;
10194 }
10195
10196 /*
10197 =for apidoc sv_setref_uv
10198
10199 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10200 argument will be upgraded to an RV.  That RV will be modified to point to
10201 the new SV.  The C<classname> argument indicates the package for the
10202 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10203 will have a reference count of 1, and the RV will be returned.
10204
10205 =cut
10206 */
10207
10208 SV*
10209 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10210 {
10211     PERL_ARGS_ASSERT_SV_SETREF_UV;
10212
10213     sv_setuv(newSVrv(rv,classname), uv);
10214     return rv;
10215 }
10216
10217 /*
10218 =for apidoc sv_setref_nv
10219
10220 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10221 argument will be upgraded to an RV.  That RV will be modified to point to
10222 the new SV.  The C<classname> argument indicates the package for the
10223 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10224 will have a reference count of 1, and the RV will be returned.
10225
10226 =cut
10227 */
10228
10229 SV*
10230 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10231 {
10232     PERL_ARGS_ASSERT_SV_SETREF_NV;
10233
10234     sv_setnv(newSVrv(rv,classname), nv);
10235     return rv;
10236 }
10237
10238 /*
10239 =for apidoc sv_setref_pvn
10240
10241 Copies a string into a new SV, optionally blessing the SV.  The length of the
10242 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10243 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10244 argument indicates the package for the blessing.  Set C<classname> to
10245 C<NULL> to avoid the blessing.  The new SV will have a reference count
10246 of 1, and the RV will be returned.
10247
10248 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10249
10250 =cut
10251 */
10252
10253 SV*
10254 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10255                    const char *const pv, const STRLEN n)
10256 {
10257     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10258
10259     sv_setpvn(newSVrv(rv,classname), pv, n);
10260     return rv;
10261 }
10262
10263 /*
10264 =for apidoc sv_bless
10265
10266 Blesses an SV into a specified package.  The SV must be an RV.  The package
10267 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10268 of the SV is unaffected.
10269
10270 =cut
10271 */
10272
10273 SV*
10274 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10275 {
10276     SV *tmpRef;
10277     HV *oldstash = NULL;
10278
10279     PERL_ARGS_ASSERT_SV_BLESS;
10280
10281     SvGETMAGIC(sv);
10282     if (!SvROK(sv))
10283         Perl_croak(aTHX_ "Can't bless non-reference value");
10284     tmpRef = SvRV(sv);
10285     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10286         if (SvREADONLY(tmpRef))
10287             Perl_croak_no_modify();
10288         if (SvOBJECT(tmpRef)) {
10289             oldstash = SvSTASH(tmpRef);
10290         }
10291     }
10292     SvOBJECT_on(tmpRef);
10293     SvUPGRADE(tmpRef, SVt_PVMG);
10294     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10295     SvREFCNT_dec(oldstash);
10296
10297     if(SvSMAGICAL(tmpRef))
10298         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10299             mg_set(tmpRef);
10300
10301
10302
10303     return sv;
10304 }
10305
10306 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10307  * as it is after unglobbing it.
10308  */
10309
10310 PERL_STATIC_INLINE void
10311 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10312 {
10313     void *xpvmg;
10314     HV *stash;
10315     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10316
10317     PERL_ARGS_ASSERT_SV_UNGLOB;
10318
10319     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10320     SvFAKE_off(sv);
10321     if (!(flags & SV_COW_DROP_PV))
10322         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10323
10324     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10325     if (GvGP(sv)) {
10326         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10327            && HvNAME_get(stash))
10328             mro_method_changed_in(stash);
10329         gp_free(MUTABLE_GV(sv));
10330     }
10331     if (GvSTASH(sv)) {
10332         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10333         GvSTASH(sv) = NULL;
10334     }
10335     GvMULTI_off(sv);
10336     if (GvNAME_HEK(sv)) {
10337         unshare_hek(GvNAME_HEK(sv));
10338     }
10339     isGV_with_GP_off(sv);
10340
10341     if(SvTYPE(sv) == SVt_PVGV) {
10342         /* need to keep SvANY(sv) in the right arena */
10343         xpvmg = new_XPVMG();
10344         StructCopy(SvANY(sv), xpvmg, XPVMG);
10345         del_XPVGV(SvANY(sv));
10346         SvANY(sv) = xpvmg;
10347
10348         SvFLAGS(sv) &= ~SVTYPEMASK;
10349         SvFLAGS(sv) |= SVt_PVMG;
10350     }
10351
10352     /* Intentionally not calling any local SET magic, as this isn't so much a
10353        set operation as merely an internal storage change.  */
10354     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10355     else sv_setsv_flags(sv, temp, 0);
10356
10357     if ((const GV *)sv == PL_last_in_gv)
10358         PL_last_in_gv = NULL;
10359     else if ((const GV *)sv == PL_statgv)
10360         PL_statgv = NULL;
10361 }
10362
10363 /*
10364 =for apidoc sv_unref_flags
10365
10366 Unsets the RV status of the SV, and decrements the reference count of
10367 whatever was being referenced by the RV.  This can almost be thought of
10368 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10369 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10370 (otherwise the decrementing is conditional on the reference count being
10371 different from one or the reference being a readonly SV).
10372 See C<SvROK_off>.
10373
10374 =cut
10375 */
10376
10377 void
10378 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10379 {
10380     SV* const target = SvRV(ref);
10381
10382     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10383
10384     if (SvWEAKREF(ref)) {
10385         sv_del_backref(target, ref);
10386         SvWEAKREF_off(ref);
10387         SvRV_set(ref, NULL);
10388         return;
10389     }
10390     SvRV_set(ref, NULL);
10391     SvROK_off(ref);
10392     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10393        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10394     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10395         SvREFCNT_dec_NN(target);
10396     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10397         sv_2mortal(target);     /* Schedule for freeing later */
10398 }
10399
10400 /*
10401 =for apidoc sv_untaint
10402
10403 Untaint an SV.  Use C<SvTAINTED_off> instead.
10404
10405 =cut
10406 */
10407
10408 void
10409 Perl_sv_untaint(pTHX_ SV *const sv)
10410 {
10411     PERL_ARGS_ASSERT_SV_UNTAINT;
10412     PERL_UNUSED_CONTEXT;
10413
10414     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10415         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10416         if (mg)
10417             mg->mg_len &= ~1;
10418     }
10419 }
10420
10421 /*
10422 =for apidoc sv_tainted
10423
10424 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10425
10426 =cut
10427 */
10428
10429 bool
10430 Perl_sv_tainted(pTHX_ SV *const sv)
10431 {
10432     PERL_ARGS_ASSERT_SV_TAINTED;
10433     PERL_UNUSED_CONTEXT;
10434
10435     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10436         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10437         if (mg && (mg->mg_len & 1) )
10438             return TRUE;
10439     }
10440     return FALSE;
10441 }
10442
10443 /*
10444 =for apidoc sv_setpviv
10445
10446 Copies an integer into the given SV, also updating its string value.
10447 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10448
10449 =cut
10450 */
10451
10452 void
10453 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10454 {
10455     char buf[TYPE_CHARS(UV)];
10456     char *ebuf;
10457     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10458
10459     PERL_ARGS_ASSERT_SV_SETPVIV;
10460
10461     sv_setpvn(sv, ptr, ebuf - ptr);
10462 }
10463
10464 /*
10465 =for apidoc sv_setpviv_mg
10466
10467 Like C<sv_setpviv>, but also handles 'set' magic.
10468
10469 =cut
10470 */
10471
10472 void
10473 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10474 {
10475     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10476
10477     sv_setpviv(sv, iv);
10478     SvSETMAGIC(sv);
10479 }
10480
10481 #if defined(PERL_IMPLICIT_CONTEXT)
10482
10483 /* pTHX_ magic can't cope with varargs, so this is a no-context
10484  * version of the main function, (which may itself be aliased to us).
10485  * Don't access this version directly.
10486  */
10487
10488 void
10489 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10490 {
10491     dTHX;
10492     va_list args;
10493
10494     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10495
10496     va_start(args, pat);
10497     sv_vsetpvf(sv, pat, &args);
10498     va_end(args);
10499 }
10500
10501 /* pTHX_ magic can't cope with varargs, so this is a no-context
10502  * version of the main function, (which may itself be aliased to us).
10503  * Don't access this version directly.
10504  */
10505
10506 void
10507 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10508 {
10509     dTHX;
10510     va_list args;
10511
10512     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10513
10514     va_start(args, pat);
10515     sv_vsetpvf_mg(sv, pat, &args);
10516     va_end(args);
10517 }
10518 #endif
10519
10520 /*
10521 =for apidoc sv_setpvf
10522
10523 Works like C<sv_catpvf> but copies the text into the SV instead of
10524 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10525
10526 =cut
10527 */
10528
10529 void
10530 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10531 {
10532     va_list args;
10533
10534     PERL_ARGS_ASSERT_SV_SETPVF;
10535
10536     va_start(args, pat);
10537     sv_vsetpvf(sv, pat, &args);
10538     va_end(args);
10539 }
10540
10541 /*
10542 =for apidoc sv_vsetpvf
10543
10544 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10545 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10546
10547 Usually used via its frontend C<sv_setpvf>.
10548
10549 =cut
10550 */
10551
10552 void
10553 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10554 {
10555     PERL_ARGS_ASSERT_SV_VSETPVF;
10556
10557     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10558 }
10559
10560 /*
10561 =for apidoc sv_setpvf_mg
10562
10563 Like C<sv_setpvf>, but also handles 'set' magic.
10564
10565 =cut
10566 */
10567
10568 void
10569 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10570 {
10571     va_list args;
10572
10573     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10574
10575     va_start(args, pat);
10576     sv_vsetpvf_mg(sv, pat, &args);
10577     va_end(args);
10578 }
10579
10580 /*
10581 =for apidoc sv_vsetpvf_mg
10582
10583 Like C<sv_vsetpvf>, but also handles 'set' magic.
10584
10585 Usually used via its frontend C<sv_setpvf_mg>.
10586
10587 =cut
10588 */
10589
10590 void
10591 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10592 {
10593     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10594
10595     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10596     SvSETMAGIC(sv);
10597 }
10598
10599 #if defined(PERL_IMPLICIT_CONTEXT)
10600
10601 /* pTHX_ magic can't cope with varargs, so this is a no-context
10602  * version of the main function, (which may itself be aliased to us).
10603  * Don't access this version directly.
10604  */
10605
10606 void
10607 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10608 {
10609     dTHX;
10610     va_list args;
10611
10612     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10613
10614     va_start(args, pat);
10615     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10616     va_end(args);
10617 }
10618
10619 /* pTHX_ magic can't cope with varargs, so this is a no-context
10620  * version of the main function, (which may itself be aliased to us).
10621  * Don't access this version directly.
10622  */
10623
10624 void
10625 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10626 {
10627     dTHX;
10628     va_list args;
10629
10630     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10631
10632     va_start(args, pat);
10633     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10634     SvSETMAGIC(sv);
10635     va_end(args);
10636 }
10637 #endif
10638
10639 /*
10640 =for apidoc sv_catpvf
10641
10642 Processes its arguments like C<sprintf> and appends the formatted
10643 output to an SV.  If the appended data contains "wide" characters
10644 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10645 and characters >255 formatted with %c), the original SV might get
10646 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10647 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10648 valid UTF-8; if the original SV was bytes, the pattern should be too.
10649
10650 =cut */
10651
10652 void
10653 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10654 {
10655     va_list args;
10656
10657     PERL_ARGS_ASSERT_SV_CATPVF;
10658
10659     va_start(args, pat);
10660     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10661     va_end(args);
10662 }
10663
10664 /*
10665 =for apidoc sv_vcatpvf
10666
10667 Processes its arguments like C<vsprintf> and appends the formatted output
10668 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10669
10670 Usually used via its frontend C<sv_catpvf>.
10671
10672 =cut
10673 */
10674
10675 void
10676 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10677 {
10678     PERL_ARGS_ASSERT_SV_VCATPVF;
10679
10680     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10681 }
10682
10683 /*
10684 =for apidoc sv_catpvf_mg
10685
10686 Like C<sv_catpvf>, but also handles 'set' magic.
10687
10688 =cut
10689 */
10690
10691 void
10692 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10693 {
10694     va_list args;
10695
10696     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10697
10698     va_start(args, pat);
10699     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10700     SvSETMAGIC(sv);
10701     va_end(args);
10702 }
10703
10704 /*
10705 =for apidoc sv_vcatpvf_mg
10706
10707 Like C<sv_vcatpvf>, but also handles 'set' magic.
10708
10709 Usually used via its frontend C<sv_catpvf_mg>.
10710
10711 =cut
10712 */
10713
10714 void
10715 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10716 {
10717     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10718
10719     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10720     SvSETMAGIC(sv);
10721 }
10722
10723 /*
10724 =for apidoc sv_vsetpvfn
10725
10726 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10727 appending it.
10728
10729 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10730
10731 =cut
10732 */
10733
10734 void
10735 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10736                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10737 {
10738     PERL_ARGS_ASSERT_SV_VSETPVFN;
10739
10740     sv_setpvs(sv, "");
10741     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10742 }
10743
10744
10745 /*
10746  * Warn of missing argument to sprintf, and then return a defined value
10747  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10748  */
10749 STATIC SV*
10750 S_vcatpvfn_missing_argument(pTHX) {
10751     if (ckWARN(WARN_MISSING)) {
10752         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10753                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10754     }
10755     return &PL_sv_no;
10756 }
10757
10758
10759 STATIC I32
10760 S_expect_number(pTHX_ char **const pattern)
10761 {
10762     I32 var = 0;
10763
10764     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10765
10766     switch (**pattern) {
10767     case '1': case '2': case '3':
10768     case '4': case '5': case '6':
10769     case '7': case '8': case '9':
10770         var = *(*pattern)++ - '0';
10771         while (isDIGIT(**pattern)) {
10772             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10773             if (tmp < var)
10774                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10775             var = tmp;
10776         }
10777     }
10778     return var;
10779 }
10780
10781 STATIC char *
10782 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10783 {
10784     const int neg = nv < 0;
10785     UV uv;
10786
10787     PERL_ARGS_ASSERT_F0CONVERT;
10788
10789     if (UNLIKELY(Perl_isinfnan(nv))) {
10790         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10791         *len = n;
10792         return endbuf - n;
10793     }
10794     if (neg)
10795         nv = -nv;
10796     if (nv < UV_MAX) {
10797         char *p = endbuf;
10798         nv += 0.5;
10799         uv = (UV)nv;
10800         if (uv & 1 && uv == nv)
10801             uv--;                       /* Round to even */
10802         do {
10803             const unsigned dig = uv % 10;
10804             *--p = '0' + dig;
10805         } while (uv /= 10);
10806         if (neg)
10807             *--p = '-';
10808         *len = endbuf - p;
10809         return p;
10810     }
10811     return NULL;
10812 }
10813
10814
10815 /*
10816 =for apidoc sv_vcatpvfn
10817
10818 =for apidoc sv_vcatpvfn_flags
10819
10820 Processes its arguments like C<vsprintf> and appends the formatted output
10821 to an SV.  Uses an array of SVs if the C style variable argument list is
10822 missing (NULL).  When running with taint checks enabled, indicates via
10823 C<maybe_tainted> if results are untrustworthy (often due to the use of
10824 locales).
10825
10826 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10827
10828 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10829
10830 =cut
10831 */
10832
10833 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10834                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10835                         vec_utf8 = DO_UTF8(vecsv);
10836
10837 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10838
10839 void
10840 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10841                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10842 {
10843     PERL_ARGS_ASSERT_SV_VCATPVFN;
10844
10845     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10846 }
10847
10848 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10849 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10850  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10851  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10852  * after the first 1023 zero bits.
10853  *
10854  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10855  * of dynamically growing buffer might be better, start at just 16 bytes
10856  * (for example) and grow only when necessary.  Or maybe just by looking
10857  * at the exponents of the two doubles? */
10858 #  define DOUBLEDOUBLE_MAXBITS 2098
10859 #endif
10860
10861 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10862  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10863  * per xdigit.  For the double-double case, this can be rather many.
10864  * The non-double-double-long-double overshoots since all bits of NV
10865  * are not mantissa bits, there are also exponent bits. */
10866 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10867 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
10868 #else
10869 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10870 #endif
10871
10872 /* If we do not have a known long double format, (including not using
10873  * long doubles, or long doubles being equal to doubles) then we will
10874  * fall back to the ldexp/frexp route, with which we can retrieve at
10875  * most as many bits as our widest unsigned integer type is.  We try
10876  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10877  *
10878  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10879  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10880  */
10881 #if defined(HAS_QUAD) && defined(Uquad_t)
10882 #  define MANTISSATYPE Uquad_t
10883 #  define MANTISSASIZE 8
10884 #else
10885 #  define MANTISSATYPE UV
10886 #  define MANTISSASIZE UVSIZE
10887 #endif
10888
10889 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10890 #  define HEXTRACT_LITTLE_ENDIAN
10891 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10892 #  define HEXTRACT_BIG_ENDIAN
10893 #else
10894 #  define HEXTRACT_MIX_ENDIAN
10895 #endif
10896
10897 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10898  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10899  * are being extracted from (either directly from the long double in-memory
10900  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10901  * is used to update the exponent.  vhex is the pointer to the beginning
10902  * of the output buffer (of VHEX_SIZE).
10903  *
10904  * The tricky part is that S_hextract() needs to be called twice:
10905  * the first time with vend as NULL, and the second time with vend as
10906  * the pointer returned by the first call.  What happens is that on
10907  * the first round the output size is computed, and the intended
10908  * extraction sanity checked.  On the second round the actual output
10909  * (the extraction of the hexadecimal values) takes place.
10910  * Sanity failures cause fatal failures during both rounds. */
10911 STATIC U8*
10912 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10913 {
10914     U8* v = vhex;
10915     int ix;
10916     int ixmin = 0, ixmax = 0;
10917
10918     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10919      * and elsewhere. */
10920
10921     /* These macros are just to reduce typos, they have multiple
10922      * repetitions below, but usually only one (or sometimes two)
10923      * of them is really being used. */
10924     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10925 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10926 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10927 #define HEXTRACT_OUTPUT(ix) \
10928     STMT_START { \
10929       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10930    } STMT_END
10931 #define HEXTRACT_COUNT(ix, c) \
10932     STMT_START { \
10933       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10934    } STMT_END
10935 #define HEXTRACT_BYTE(ix) \
10936     STMT_START { \
10937       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10938    } STMT_END
10939 #define HEXTRACT_LO_NYBBLE(ix) \
10940     STMT_START { \
10941       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10942    } STMT_END
10943     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10944      * to make it look less odd when the top bits of a NV
10945      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10946      * order bits can be in the "low nybble" of a byte. */
10947 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10948 #define HEXTRACT_BYTES_LE(a, b) \
10949     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10950 #define HEXTRACT_BYTES_BE(a, b) \
10951     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10952 #define HEXTRACT_IMPLICIT_BIT(nv) \
10953     STMT_START { \
10954         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10955    } STMT_END
10956
10957 /* Most formats do.  Those which don't should undef this. */
10958 #define HEXTRACT_HAS_IMPLICIT_BIT
10959 /* Many formats do.  Those which don't should undef this. */
10960 #define HEXTRACT_HAS_TOP_NYBBLE
10961
10962     /* HEXTRACTSIZE is the maximum number of xdigits. */
10963 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10964 #  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/4)
10965 #else
10966 #  define HEXTRACTSIZE 2 * NVSIZE
10967 #endif
10968
10969     const U8* vmaxend = vhex + HEXTRACTSIZE;
10970     PERL_UNUSED_VAR(ix); /* might happen */
10971     (void)Perl_frexp(PERL_ABS(nv), exponent);
10972     if (vend && (vend <= vhex || vend > vmaxend))
10973         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10974     {
10975         /* First check if using long doubles. */
10976 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
10977 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10978         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10979          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10980         /* The bytes 13..0 are the mantissa/fraction,
10981          * the 15,14 are the sign+exponent. */
10982         const U8* nvp = (const U8*)(&nv);
10983         HEXTRACT_IMPLICIT_BIT(nv);
10984 #   undef HEXTRACT_HAS_TOP_NYBBLE
10985         HEXTRACT_BYTES_LE(13, 0);
10986 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10987         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10988          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10989         /* The bytes 2..15 are the mantissa/fraction,
10990          * the 0,1 are the sign+exponent. */
10991         const U8* nvp = (const U8*)(&nv);
10992         HEXTRACT_IMPLICIT_BIT(nv);
10993 #   undef HEXTRACT_HAS_TOP_NYBBLE
10994         HEXTRACT_BYTES_BE(2, 15);
10995 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10996         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10997          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10998          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10999          * meaning that 2 or 6 bytes are empty padding. */
11000         /* The bytes 7..0 are the mantissa/fraction */
11001         const U8* nvp = (const U8*)(&nv);
11002 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11003 #    undef HEXTRACT_HAS_TOP_NYBBLE
11004         HEXTRACT_BYTES_LE(7, 0);
11005 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11006         /* Does this format ever happen? (Wikipedia says the Motorola
11007          * 6888x math coprocessors used format _like_ this but padded
11008          * to 96 bits with 16 unused bits between the exponent and the
11009          * mantissa.) */
11010         const U8* nvp = (const U8*)(&nv);
11011 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11012 #    undef HEXTRACT_HAS_TOP_NYBBLE
11013         HEXTRACT_BYTES_BE(0, 7);
11014 #  else
11015 #    define HEXTRACT_FALLBACK
11016         /* Double-double format: two doubles next to each other.
11017          * The first double is the high-order one, exactly like
11018          * it would be for a "lone" double.  The second double
11019          * is shifted down using the exponent so that that there
11020          * are no common bits.  The tricky part is that the value
11021          * of the double-double is the SUM of the two doubles and
11022          * the second one can be also NEGATIVE.
11023          *
11024          * Because of this tricky construction the bytewise extraction we
11025          * use for the other long double formats doesn't work, we must
11026          * extract the values bit by bit.
11027          *
11028          * The little-endian double-double is used .. somewhere?
11029          *
11030          * The big endian double-double is used in e.g. PPC/Power (AIX)
11031          * and MIPS (SGI).
11032          *
11033          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11034          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11035          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11036          */
11037 #  endif
11038 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11039         /* Using normal doubles, not long doubles.
11040          *
11041          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11042          * bytes, since we might need to handle printf precision, and
11043          * also need to insert the radix. */
11044 #  if NVSIZE == 8
11045 #    ifdef HEXTRACT_LITTLE_ENDIAN
11046         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11047         const U8* nvp = (const U8*)(&nv);
11048         HEXTRACT_IMPLICIT_BIT(nv);
11049         HEXTRACT_TOP_NYBBLE(6);
11050         HEXTRACT_BYTES_LE(5, 0);
11051 #    elif defined(HEXTRACT_BIG_ENDIAN)
11052         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11053         const U8* nvp = (const U8*)(&nv);
11054         HEXTRACT_IMPLICIT_BIT(nv);
11055         HEXTRACT_TOP_NYBBLE(1);
11056         HEXTRACT_BYTES_BE(2, 7);
11057 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11058         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11059         const U8* nvp = (const U8*)(&nv);
11060         HEXTRACT_IMPLICIT_BIT(nv);
11061         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11062         HEXTRACT_BYTE(1); /* 5 */
11063         HEXTRACT_BYTE(0); /* 4 */
11064         HEXTRACT_BYTE(7); /* 3 */
11065         HEXTRACT_BYTE(6); /* 2 */
11066         HEXTRACT_BYTE(5); /* 1 */
11067         HEXTRACT_BYTE(4); /* 0 */
11068 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11069         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11070         const U8* nvp = (const U8*)(&nv);
11071         HEXTRACT_IMPLICIT_BIT(nv);
11072         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11073         HEXTRACT_BYTE(6); /* 5 */
11074         HEXTRACT_BYTE(7); /* 4 */
11075         HEXTRACT_BYTE(0); /* 3 */
11076         HEXTRACT_BYTE(1); /* 2 */
11077         HEXTRACT_BYTE(2); /* 1 */
11078         HEXTRACT_BYTE(3); /* 0 */
11079 #    else
11080 #      define HEXTRACT_FALLBACK
11081 #    endif
11082 #  else
11083 #    define HEXTRACT_FALLBACK
11084 #  endif
11085 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11086 #  ifdef HEXTRACT_FALLBACK
11087 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11088         /* The fallback is used for the double-double format, and
11089          * for unknown long double formats, and for unknown double
11090          * formats, or in general unknown NV formats. */
11091         if (nv == (NV)0.0) {
11092             if (vend)
11093                 *v++ = 0;
11094             else
11095                 v++;
11096             *exponent = 0;
11097         }
11098         else {
11099             NV d = nv < 0 ? -nv : nv;
11100             NV e = (NV)1.0;
11101             U8 ha = 0x0; /* hexvalue accumulator */
11102             U8 hd = 0x8; /* hexvalue digit */
11103
11104             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11105              * this is essentially manual frexp(). Multiplying by 0.5 and
11106              * doubling should be lossless in binary floating point. */
11107
11108             *exponent = 1;
11109
11110             while (e > d) {
11111                 e *= (NV)0.5;
11112                 (*exponent)--;
11113             }
11114             /* Now d >= e */
11115
11116             while (d >= e + e) {
11117                 e += e;
11118                 (*exponent)++;
11119             }
11120             /* Now e <= d < 2*e */
11121
11122             /* First extract the leading hexdigit (the implicit bit). */
11123             if (d >= e) {
11124                 d -= e;
11125                 if (vend)
11126                     *v++ = 1;
11127                 else
11128                     v++;
11129             }
11130             else {
11131                 if (vend)
11132                     *v++ = 0;
11133                 else
11134                     v++;
11135             }
11136             e *= (NV)0.5;
11137
11138             /* Then extract the remaining hexdigits. */
11139             while (d > (NV)0.0) {
11140                 if (d >= e) {
11141                     ha |= hd;
11142                     d -= e;
11143                 }
11144                 if (hd == 1) {
11145                     /* Output or count in groups of four bits,
11146                      * that is, when the hexdigit is down to one. */
11147                     if (vend)
11148                         *v++ = ha;
11149                     else
11150                         v++;
11151                     /* Reset the hexvalue. */
11152                     ha = 0x0;
11153                     hd = 0x8;
11154                 }
11155                 else
11156                     hd >>= 1;
11157                 e *= (NV)0.5;
11158             }
11159
11160             /* Flush possible pending hexvalue. */
11161             if (ha) {
11162                 if (vend)
11163                     *v++ = ha;
11164                 else
11165                     v++;
11166             }
11167         }
11168 #  endif
11169     }
11170     /* Croak for various reasons: if the output pointer escaped the
11171      * output buffer, if the extraction index escaped the extraction
11172      * buffer, or if the ending output pointer didn't match the
11173      * previously computed value. */
11174     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11175         /* For double-double the ixmin and ixmax stay at zero,
11176          * which is convenient since the HEXTRACTSIZE is tricky
11177          * for double-double. */
11178         ixmin < 0 || ixmax >= NVSIZE ||
11179         (vend && v != vend))
11180         Perl_croak(aTHX_ "Hexadecimal float: internal error");
11181     return v;
11182 }
11183
11184 void
11185 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11186                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11187                        const U32 flags)
11188 {
11189     char *p;
11190     char *q;
11191     const char *patend;
11192     STRLEN origlen;
11193     I32 svix = 0;
11194     static const char nullstr[] = "(null)";
11195     SV *argsv = NULL;
11196     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11197     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11198     SV *nsv = NULL;
11199     /* Times 4: a decimal digit takes more than 3 binary digits.
11200      * NV_DIG: mantissa takes than many decimal digits.
11201      * Plus 32: Playing safe. */
11202     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11203     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11204     bool hexfp = FALSE; /* hexadecimal floating point? */
11205
11206     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11207
11208     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11209     PERL_UNUSED_ARG(maybe_tainted);
11210
11211     if (flags & SV_GMAGIC)
11212         SvGETMAGIC(sv);
11213
11214     /* no matter what, this is a string now */
11215     (void)SvPV_force_nomg(sv, origlen);
11216
11217     /* special-case "", "%s", and "%-p" (SVf - see below) */
11218     if (patlen == 0) {
11219         if (svmax && ckWARN(WARN_REDUNDANT))
11220             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11221                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11222         return;
11223     }
11224     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11225         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11226             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11227                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11228
11229         if (args) {
11230             const char * const s = va_arg(*args, char*);
11231             sv_catpv_nomg(sv, s ? s : nullstr);
11232         }
11233         else if (svix < svmax) {
11234             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11235             SvGETMAGIC(*svargs);
11236             sv_catsv_nomg(sv, *svargs);
11237         }
11238         else
11239             S_vcatpvfn_missing_argument(aTHX);
11240         return;
11241     }
11242     if (args && patlen == 3 && pat[0] == '%' &&
11243                 pat[1] == '-' && pat[2] == 'p') {
11244         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11245             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11246                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11247         argsv = MUTABLE_SV(va_arg(*args, void*));
11248         sv_catsv_nomg(sv, argsv);
11249         return;
11250     }
11251
11252 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11253     /* special-case "%.<number>[gf]" */
11254     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11255          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11256         unsigned digits = 0;
11257         const char *pp;
11258
11259         pp = pat + 2;
11260         while (*pp >= '0' && *pp <= '9')
11261             digits = 10 * digits + (*pp++ - '0');
11262
11263         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11264            format the first argument and WARN_REDUNDANT if svmax > 1?
11265            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11266         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11267             const NV nv = SvNV(*svargs);
11268             if (LIKELY(!Perl_isinfnan(nv))) {
11269                 if (*pp == 'g') {
11270                     /* Add check for digits != 0 because it seems that some
11271                        gconverts are buggy in this case, and we don't yet have
11272                        a Configure test for this.  */
11273                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11274                         /* 0, point, slack */
11275                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11276                         SNPRINTF_G(nv, ebuf, size, digits);
11277                         sv_catpv_nomg(sv, ebuf);
11278                         if (*ebuf)      /* May return an empty string for digits==0 */
11279                             return;
11280                     }
11281                 } else if (!digits) {
11282                     STRLEN l;
11283
11284                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11285                         sv_catpvn_nomg(sv, p, l);
11286                         return;
11287                     }
11288                 }
11289             }
11290         }
11291     }
11292 #endif /* !USE_LONG_DOUBLE */
11293
11294     if (!args && svix < svmax && DO_UTF8(*svargs))
11295         has_utf8 = TRUE;
11296
11297     patend = (char*)pat + patlen;
11298     for (p = (char*)pat; p < patend; p = q) {
11299         bool alt = FALSE;
11300         bool left = FALSE;
11301         bool vectorize = FALSE;
11302         bool vectorarg = FALSE;
11303         bool vec_utf8 = FALSE;
11304         char fill = ' ';
11305         char plus = 0;
11306         char intsize = 0;
11307         STRLEN width = 0;
11308         STRLEN zeros = 0;
11309         bool has_precis = FALSE;
11310         STRLEN precis = 0;
11311         const I32 osvix = svix;
11312         bool is_utf8 = FALSE;  /* is this item utf8?   */
11313 #ifdef HAS_LDBL_SPRINTF_BUG
11314         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11315            with sfio - Allen <allens@cpan.org> */
11316         bool fix_ldbl_sprintf_bug = FALSE;
11317 #endif
11318
11319         char esignbuf[4];
11320         U8 utf8buf[UTF8_MAXBYTES+1];
11321         STRLEN esignlen = 0;
11322
11323         const char *eptr = NULL;
11324         const char *fmtstart;
11325         STRLEN elen = 0;
11326         SV *vecsv = NULL;
11327         const U8 *vecstr = NULL;
11328         STRLEN veclen = 0;
11329         char c = 0;
11330         int i;
11331         unsigned base = 0;
11332         IV iv = 0;
11333         UV uv = 0;
11334         /* We need a long double target in case HAS_LONG_DOUBLE,
11335          * even without USE_LONG_DOUBLE, so that we can printf with
11336          * long double formats, even without NV being long double.
11337          * But we call the target 'fv' instead of 'nv', since most of
11338          * the time it is not (most compilers these days recognize
11339          * "long double", even if only as a synonym for "double").
11340         */
11341 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11342         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11343         long double fv;
11344 #  ifdef Perl_isfinitel
11345 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11346 #  endif
11347 #  define FV_GF PERL_PRIgldbl
11348 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11349        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11350 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11351                                            double _dv = nv;  \
11352                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11353                               } STMT_END
11354 #    else
11355 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11356 #    endif
11357 #else
11358         NV fv;
11359 #  define FV_GF NVgf
11360 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11361 #endif
11362 #ifndef FV_ISFINITE
11363 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11364 #endif
11365         NV nv;
11366         STRLEN have;
11367         STRLEN need;
11368         STRLEN gap;
11369         const char *dotstr = ".";
11370         STRLEN dotstrlen = 1;
11371         I32 efix = 0; /* explicit format parameter index */
11372         I32 ewix = 0; /* explicit width index */
11373         I32 epix = 0; /* explicit precision index */
11374         I32 evix = 0; /* explicit vector index */
11375         bool asterisk = FALSE;
11376         bool infnan = FALSE;
11377
11378         /* echo everything up to the next format specification */
11379         for (q = p; q < patend && *q != '%'; ++q) ;
11380         if (q > p) {
11381             if (has_utf8 && !pat_utf8)
11382                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11383             else
11384                 sv_catpvn_nomg(sv, p, q - p);
11385             p = q;
11386         }
11387         if (q++ >= patend)
11388             break;
11389
11390         fmtstart = q;
11391
11392 /*
11393     We allow format specification elements in this order:
11394         \d+\$              explicit format parameter index
11395         [-+ 0#]+           flags
11396         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11397         0                  flag (as above): repeated to allow "v02"     
11398         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11399         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11400         [hlqLV]            size
11401     [%bcdefginopsuxDFOUX] format (mandatory)
11402 */
11403
11404         if (args) {
11405 /*  
11406         As of perl5.9.3, printf format checking is on by default.
11407         Internally, perl uses %p formats to provide an escape to
11408         some extended formatting.  This block deals with those
11409         extensions: if it does not match, (char*)q is reset and
11410         the normal format processing code is used.
11411
11412         Currently defined extensions are:
11413                 %p              include pointer address (standard)      
11414                 %-p     (SVf)   include an SV (previously %_)
11415                 %-<num>p        include an SV with precision <num>      
11416                 %2p             include a HEK
11417                 %3p             include a HEK with precision of 256
11418                 %4p             char* preceded by utf8 flag and length
11419                 %<num>p         (where num is 1 or > 4) reserved for future
11420                                 extensions
11421
11422         Robin Barker 2005-07-14 (but modified since)
11423
11424                 %1p     (VDf)   removed.  RMB 2007-10-19
11425 */
11426             char* r = q; 
11427             bool sv = FALSE;    
11428             STRLEN n = 0;
11429             if (*q == '-')
11430                 sv = *q++;
11431             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11432                 /* The argument has already gone through cBOOL, so the cast
11433                    is safe. */
11434                 is_utf8 = (bool)va_arg(*args, int);
11435                 elen = va_arg(*args, UV);
11436                 if ((IV)elen < 0) {
11437                     /* check if utf8 length is larger than 0 when cast to IV */
11438                     assert( (IV)elen >= 0 ); /* in DEBUGGING build we want to crash */
11439                     elen= 0; /* otherwise we want to treat this as an empty string */
11440                 }
11441                 eptr = va_arg(*args, char *);
11442                 q += sizeof(UTF8f)-1;
11443                 goto string;
11444             }
11445             n = expect_number(&q);
11446             if (*q++ == 'p') {
11447                 if (sv) {                       /* SVf */
11448                     if (n) {
11449                         precis = n;
11450                         has_precis = TRUE;
11451                     }
11452                     argsv = MUTABLE_SV(va_arg(*args, void*));
11453                     eptr = SvPV_const(argsv, elen);
11454                     if (DO_UTF8(argsv))
11455                         is_utf8 = TRUE;
11456                     goto string;
11457                 }
11458                 else if (n==2 || n==3) {        /* HEKf */
11459                     HEK * const hek = va_arg(*args, HEK *);
11460                     eptr = HEK_KEY(hek);
11461                     elen = HEK_LEN(hek);
11462                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11463                     if (n==3) precis = 256, has_precis = TRUE;
11464                     goto string;
11465                 }
11466                 else if (n) {
11467                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11468                                      "internal %%<num>p might conflict with future printf extensions");
11469                 }
11470             }
11471             q = r; 
11472         }
11473
11474         if ( (width = expect_number(&q)) ) {
11475             if (*q == '$') {
11476                 ++q;
11477                 efix = width;
11478                 if (!no_redundant_warning)
11479                     /* I've forgotten if it's a better
11480                        micro-optimization to always set this or to
11481                        only set it if it's unset */
11482                     no_redundant_warning = TRUE;
11483             } else {
11484                 goto gotwidth;
11485             }
11486         }
11487
11488         /* FLAGS */
11489
11490         while (*q) {
11491             switch (*q) {
11492             case ' ':
11493             case '+':
11494                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11495                     q++;
11496                 else
11497                     plus = *q++;
11498                 continue;
11499
11500             case '-':
11501                 left = TRUE;
11502                 q++;
11503                 continue;
11504
11505             case '0':
11506                 fill = *q++;
11507                 continue;
11508
11509             case '#':
11510                 alt = TRUE;
11511                 q++;
11512                 continue;
11513
11514             default:
11515                 break;
11516             }
11517             break;
11518         }
11519
11520       tryasterisk:
11521         if (*q == '*') {
11522             q++;
11523             if ( (ewix = expect_number(&q)) )
11524                 if (*q++ != '$')
11525                     goto unknown;
11526             asterisk = TRUE;
11527         }
11528         if (*q == 'v') {
11529             q++;
11530             if (vectorize)
11531                 goto unknown;
11532             if ((vectorarg = asterisk)) {
11533                 evix = ewix;
11534                 ewix = 0;
11535                 asterisk = FALSE;
11536             }
11537             vectorize = TRUE;
11538             goto tryasterisk;
11539         }
11540
11541         if (!asterisk)
11542         {
11543             if( *q == '0' )
11544                 fill = *q++;
11545             width = expect_number(&q);
11546         }
11547
11548         if (vectorize && vectorarg) {
11549             /* vectorizing, but not with the default "." */
11550             if (args)
11551                 vecsv = va_arg(*args, SV*);
11552             else if (evix) {
11553                 vecsv = (evix > 0 && evix <= svmax)
11554                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11555             } else {
11556                 vecsv = svix < svmax
11557                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11558             }
11559             dotstr = SvPV_const(vecsv, dotstrlen);
11560             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11561                bad with tied or overloaded values that return UTF8.  */
11562             if (DO_UTF8(vecsv))
11563                 is_utf8 = TRUE;
11564             else if (has_utf8) {
11565                 vecsv = sv_mortalcopy(vecsv);
11566                 sv_utf8_upgrade(vecsv);
11567                 dotstr = SvPV_const(vecsv, dotstrlen);
11568                 is_utf8 = TRUE;
11569             }               
11570         }
11571
11572         if (asterisk) {
11573             if (args)
11574                 i = va_arg(*args, int);
11575             else
11576                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11577                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11578             left |= (i < 0);
11579             width = (i < 0) ? -i : i;
11580         }
11581       gotwidth:
11582
11583         /* PRECISION */
11584
11585         if (*q == '.') {
11586             q++;
11587             if (*q == '*') {
11588                 q++;
11589                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11590                     goto unknown;
11591                 /* XXX: todo, support specified precision parameter */
11592                 if (epix)
11593                     goto unknown;
11594                 if (args)
11595                     i = va_arg(*args, int);
11596                 else
11597                     i = (ewix ? ewix <= svmax : svix < svmax)
11598                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11599                 precis = i;
11600                 has_precis = !(i < 0);
11601             }
11602             else {
11603                 precis = 0;
11604                 while (isDIGIT(*q))
11605                     precis = precis * 10 + (*q++ - '0');
11606                 has_precis = TRUE;
11607             }
11608         }
11609
11610         if (vectorize) {
11611             if (args) {
11612                 VECTORIZE_ARGS
11613             }
11614             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11615                 vecsv = svargs[efix ? efix-1 : svix++];
11616                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11617                 vec_utf8 = DO_UTF8(vecsv);
11618
11619                 /* if this is a version object, we need to convert
11620                  * back into v-string notation and then let the
11621                  * vectorize happen normally
11622                  */
11623                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11624                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11625                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11626                         "vector argument not supported with alpha versions");
11627                         goto vdblank;
11628                     }
11629                     vecsv = sv_newmortal();
11630                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11631                                  vecsv);
11632                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11633                     vec_utf8 = DO_UTF8(vecsv);
11634                 }
11635             }
11636             else {
11637               vdblank:
11638                 vecstr = (U8*)"";
11639                 veclen = 0;
11640             }
11641         }
11642
11643         /* SIZE */
11644
11645         switch (*q) {
11646 #ifdef WIN32
11647         case 'I':                       /* Ix, I32x, and I64x */
11648 #  ifdef USE_64_BIT_INT
11649             if (q[1] == '6' && q[2] == '4') {
11650                 q += 3;
11651                 intsize = 'q';
11652                 break;
11653             }
11654 #  endif
11655             if (q[1] == '3' && q[2] == '2') {
11656                 q += 3;
11657                 break;
11658             }
11659 #  ifdef USE_64_BIT_INT
11660             intsize = 'q';
11661 #  endif
11662             q++;
11663             break;
11664 #endif
11665 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11666     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11667         case 'L':                       /* Ld */
11668             /* FALLTHROUGH */
11669 #  ifdef USE_QUADMATH
11670         case 'Q':
11671             /* FALLTHROUGH */
11672 #  endif
11673 #  if IVSIZE >= 8
11674         case 'q':                       /* qd */
11675 #  endif
11676             intsize = 'q';
11677             q++;
11678             break;
11679 #endif
11680         case 'l':
11681             ++q;
11682 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11683     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11684             if (*q == 'l') {    /* lld, llf */
11685                 intsize = 'q';
11686                 ++q;
11687             }
11688             else
11689 #endif
11690                 intsize = 'l';
11691             break;
11692         case 'h':
11693             if (*++q == 'h') {  /* hhd, hhu */
11694                 intsize = 'c';
11695                 ++q;
11696             }
11697             else
11698                 intsize = 'h';
11699             break;
11700         case 'V':
11701         case 'z':
11702         case 't':
11703 #ifdef I_STDINT
11704         case 'j':
11705 #endif
11706             intsize = *q++;
11707             break;
11708         }
11709
11710         /* CONVERSION */
11711
11712         if (*q == '%') {
11713             eptr = q++;
11714             elen = 1;
11715             if (vectorize) {
11716                 c = '%';
11717                 goto unknown;
11718             }
11719             goto string;
11720         }
11721
11722         if (!vectorize && !args) {
11723             if (efix) {
11724                 const I32 i = efix-1;
11725                 argsv = (i >= 0 && i < svmax)
11726                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11727             } else {
11728                 argsv = (svix >= 0 && svix < svmax)
11729                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11730             }
11731         }
11732
11733         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11734             /* XXX va_arg(*args) case? need peek, use va_copy? */
11735             SvGETMAGIC(argsv);
11736             if (UNLIKELY(SvAMAGIC(argsv)))
11737                 argsv = sv_2num(argsv);
11738             infnan = UNLIKELY(isinfnansv(argsv));
11739         }
11740
11741         switch (c = *q++) {
11742
11743             /* STRINGS */
11744
11745         case 'c':
11746             if (vectorize)
11747                 goto unknown;
11748             if (infnan)
11749                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11750                            /* no va_arg() case */
11751                            SvNV_nomg(argsv), (int)c);
11752             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11753             if ((uv > 255 ||
11754                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11755                 && !IN_BYTES) {
11756                 eptr = (char*)utf8buf;
11757                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11758                 is_utf8 = TRUE;
11759             }
11760             else {
11761                 c = (char)uv;
11762                 eptr = &c;
11763                 elen = 1;
11764             }
11765             goto string;
11766
11767         case 's':
11768             if (vectorize)
11769                 goto unknown;
11770             if (args) {
11771                 eptr = va_arg(*args, char*);
11772                 if (eptr)
11773                     elen = strlen(eptr);
11774                 else {
11775                     eptr = (char *)nullstr;
11776                     elen = sizeof nullstr - 1;
11777                 }
11778             }
11779             else {
11780                 eptr = SvPV_const(argsv, elen);
11781                 if (DO_UTF8(argsv)) {
11782                     STRLEN old_precis = precis;
11783                     if (has_precis && precis < elen) {
11784                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11785                         STRLEN p = precis > ulen ? ulen : precis;
11786                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11787                                                         /* sticks at end */
11788                     }
11789                     if (width) { /* fudge width (can't fudge elen) */
11790                         if (has_precis && precis < elen)
11791                             width += precis - old_precis;
11792                         else
11793                             width +=
11794                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11795                     }
11796                     is_utf8 = TRUE;
11797                 }
11798             }
11799
11800         string:
11801             if (has_precis && precis < elen)
11802                 elen = precis;
11803             break;
11804
11805             /* INTEGERS */
11806
11807         case 'p':
11808             if (infnan) {
11809                 goto floating_point;
11810             }
11811             if (alt || vectorize)
11812                 goto unknown;
11813             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11814             base = 16;
11815             goto integer;
11816
11817         case 'D':
11818 #ifdef IV_IS_QUAD
11819             intsize = 'q';
11820 #else
11821             intsize = 'l';
11822 #endif
11823             /* FALLTHROUGH */
11824         case 'd':
11825         case 'i':
11826             if (infnan) {
11827                 goto floating_point;
11828             }
11829             if (vectorize) {
11830                 STRLEN ulen;
11831                 if (!veclen)
11832                     continue;
11833                 if (vec_utf8)
11834                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11835                                         UTF8_ALLOW_ANYUV);
11836                 else {
11837                     uv = *vecstr;
11838                     ulen = 1;
11839                 }
11840                 vecstr += ulen;
11841                 veclen -= ulen;
11842                 if (plus)
11843                      esignbuf[esignlen++] = plus;
11844             }
11845             else if (args) {
11846                 switch (intsize) {
11847                 case 'c':       iv = (char)va_arg(*args, int); break;
11848                 case 'h':       iv = (short)va_arg(*args, int); break;
11849                 case 'l':       iv = va_arg(*args, long); break;
11850                 case 'V':       iv = va_arg(*args, IV); break;
11851                 case 'z':       iv = va_arg(*args, SSize_t); break;
11852 #ifdef HAS_PTRDIFF_T
11853                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11854 #endif
11855                 default:        iv = va_arg(*args, int); break;
11856 #ifdef I_STDINT
11857                 case 'j':       iv = va_arg(*args, intmax_t); break;
11858 #endif
11859                 case 'q':
11860 #if IVSIZE >= 8
11861                                 iv = va_arg(*args, Quad_t); break;
11862 #else
11863                                 goto unknown;
11864 #endif
11865                 }
11866             }
11867             else {
11868                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11869                 switch (intsize) {
11870                 case 'c':       iv = (char)tiv; break;
11871                 case 'h':       iv = (short)tiv; break;
11872                 case 'l':       iv = (long)tiv; break;
11873                 case 'V':
11874                 default:        iv = tiv; break;
11875                 case 'q':
11876 #if IVSIZE >= 8
11877                                 iv = (Quad_t)tiv; break;
11878 #else
11879                                 goto unknown;
11880 #endif
11881                 }
11882             }
11883             if ( !vectorize )   /* we already set uv above */
11884             {
11885                 if (iv >= 0) {
11886                     uv = iv;
11887                     if (plus)
11888                         esignbuf[esignlen++] = plus;
11889                 }
11890                 else {
11891                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11892                     esignbuf[esignlen++] = '-';
11893                 }
11894             }
11895             base = 10;
11896             goto integer;
11897
11898         case 'U':
11899 #ifdef IV_IS_QUAD
11900             intsize = 'q';
11901 #else
11902             intsize = 'l';
11903 #endif
11904             /* FALLTHROUGH */
11905         case 'u':
11906             base = 10;
11907             goto uns_integer;
11908
11909         case 'B':
11910         case 'b':
11911             base = 2;
11912             goto uns_integer;
11913
11914         case 'O':
11915 #ifdef IV_IS_QUAD
11916             intsize = 'q';
11917 #else
11918             intsize = 'l';
11919 #endif
11920             /* FALLTHROUGH */
11921         case 'o':
11922             base = 8;
11923             goto uns_integer;
11924
11925         case 'X':
11926         case 'x':
11927             base = 16;
11928
11929         uns_integer:
11930             if (infnan) {
11931                 goto floating_point;
11932             }
11933             if (vectorize) {
11934                 STRLEN ulen;
11935         vector:
11936                 if (!veclen)
11937                     continue;
11938                 if (vec_utf8)
11939                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11940                                         UTF8_ALLOW_ANYUV);
11941                 else {
11942                     uv = *vecstr;
11943                     ulen = 1;
11944                 }
11945                 vecstr += ulen;
11946                 veclen -= ulen;
11947             }
11948             else if (args) {
11949                 switch (intsize) {
11950                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11951                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11952                 case 'l':  uv = va_arg(*args, unsigned long); break;
11953                 case 'V':  uv = va_arg(*args, UV); break;
11954                 case 'z':  uv = va_arg(*args, Size_t); break;
11955 #ifdef HAS_PTRDIFF_T
11956                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11957 #endif
11958 #ifdef I_STDINT
11959                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11960 #endif
11961                 default:   uv = va_arg(*args, unsigned); break;
11962                 case 'q':
11963 #if IVSIZE >= 8
11964                            uv = va_arg(*args, Uquad_t); break;
11965 #else
11966                            goto unknown;
11967 #endif
11968                 }
11969             }
11970             else {
11971                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
11972                 switch (intsize) {
11973                 case 'c':       uv = (unsigned char)tuv; break;
11974                 case 'h':       uv = (unsigned short)tuv; break;
11975                 case 'l':       uv = (unsigned long)tuv; break;
11976                 case 'V':
11977                 default:        uv = tuv; break;
11978                 case 'q':
11979 #if IVSIZE >= 8
11980                                 uv = (Uquad_t)tuv; break;
11981 #else
11982                                 goto unknown;
11983 #endif
11984                 }
11985             }
11986
11987         integer:
11988             {
11989                 char *ptr = ebuf + sizeof ebuf;
11990                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11991                 unsigned dig;
11992                 zeros = 0;
11993
11994                 switch (base) {
11995                 case 16:
11996                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11997                     do {
11998                         dig = uv & 15;
11999                         *--ptr = p[dig];
12000                     } while (uv >>= 4);
12001                     if (tempalt) {
12002                         esignbuf[esignlen++] = '0';
12003                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12004                     }
12005                     break;
12006                 case 8:
12007                     do {
12008                         dig = uv & 7;
12009                         *--ptr = '0' + dig;
12010                     } while (uv >>= 3);
12011                     if (alt && *ptr != '0')
12012                         *--ptr = '0';
12013                     break;
12014                 case 2:
12015                     do {
12016                         dig = uv & 1;
12017                         *--ptr = '0' + dig;
12018                     } while (uv >>= 1);
12019                     if (tempalt) {
12020                         esignbuf[esignlen++] = '0';
12021                         esignbuf[esignlen++] = c;
12022                     }
12023                     break;
12024                 default:                /* it had better be ten or less */
12025                     do {
12026                         dig = uv % base;
12027                         *--ptr = '0' + dig;
12028                     } while (uv /= base);
12029                     break;
12030                 }
12031                 elen = (ebuf + sizeof ebuf) - ptr;
12032                 eptr = ptr;
12033                 if (has_precis) {
12034                     if (precis > elen)
12035                         zeros = precis - elen;
12036                     else if (precis == 0 && elen == 1 && *eptr == '0'
12037                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12038                         elen = 0;
12039
12040                 /* a precision nullifies the 0 flag. */
12041                     if (fill == '0')
12042                         fill = ' ';
12043                 }
12044             }
12045             break;
12046
12047             /* FLOATING POINT */
12048
12049         floating_point:
12050
12051         case 'F':
12052             c = 'f';            /* maybe %F isn't supported here */
12053             /* FALLTHROUGH */
12054         case 'e': case 'E':
12055         case 'f':
12056         case 'g': case 'G':
12057         case 'a': case 'A':
12058             if (vectorize)
12059                 goto unknown;
12060
12061             /* This is evil, but floating point is even more evil */
12062
12063             /* for SV-style calling, we can only get NV
12064                for C-style calling, we assume %f is double;
12065                for simplicity we allow any of %Lf, %llf, %qf for long double
12066             */
12067             switch (intsize) {
12068             case 'V':
12069 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12070                 intsize = 'q';
12071 #endif
12072                 break;
12073 /* [perl #20339] - we should accept and ignore %lf rather than die */
12074             case 'l':
12075                 /* FALLTHROUGH */
12076             default:
12077 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12078                 intsize = args ? 0 : 'q';
12079 #endif
12080                 break;
12081             case 'q':
12082 #if defined(HAS_LONG_DOUBLE)
12083                 break;
12084 #else
12085                 /* FALLTHROUGH */
12086 #endif
12087             case 'c':
12088             case 'h':
12089             case 'z':
12090             case 't':
12091             case 'j':
12092                 goto unknown;
12093             }
12094
12095             /* Now we need (long double) if intsize == 'q', else (double). */
12096             if (args) {
12097                 /* Note: do not pull NVs off the va_list with va_arg()
12098                  * (pull doubles instead) because if you have a build
12099                  * with long doubles, you would always be pulling long
12100                  * doubles, which would badly break anyone using only
12101                  * doubles (i.e. the majority of builds). In other
12102                  * words, you cannot mix doubles and long doubles.
12103                  * The only case where you can pull off long doubles
12104                  * is when the format specifier explicitly asks so with
12105                  * e.g. "%Lg". */
12106 #ifdef USE_QUADMATH
12107                 fv = intsize == 'q' ?
12108                     va_arg(*args, NV) : va_arg(*args, double);
12109                 nv = fv;
12110 #elif LONG_DOUBLESIZE > DOUBLESIZE
12111                 if (intsize == 'q') {
12112                     fv = va_arg(*args, long double);
12113                     nv = fv;
12114                 } else {
12115                     nv = va_arg(*args, double);
12116                     NV_TO_FV(nv, fv);
12117                 }
12118 #else
12119                 nv = va_arg(*args, double);
12120                 fv = nv;
12121 #endif
12122             }
12123             else
12124             {
12125                 if (!infnan) SvGETMAGIC(argsv);
12126                 nv = SvNV_nomg(argsv);
12127                 NV_TO_FV(nv, fv);
12128             }
12129
12130             need = 0;
12131             /* frexp() (or frexpl) has some unspecified behaviour for
12132              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12133             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12134                 i = PERL_INT_MIN;
12135                 (void)Perl_frexp((NV)fv, &i);
12136                 if (i == PERL_INT_MIN)
12137                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12138                 /* Do not set hexfp earlier since we want to printf
12139                  * Inf/NaN for Inf/NaN, not their hexfp. */
12140                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12141                 if (UNLIKELY(hexfp)) {
12142                     /* This seriously overshoots in most cases, but
12143                      * better the undershooting.  Firstly, all bytes
12144                      * of the NV are not mantissa, some of them are
12145                      * exponent.  Secondly, for the reasonably common
12146                      * long doubles case, the "80-bit extended", two
12147                      * or six bytes of the NV are unused. */
12148                     need +=
12149                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12150                         2 + /* "0x" */
12151                         1 + /* the very unlikely carry */
12152                         1 + /* "1" */
12153                         1 + /* "." */
12154                         2 * NVSIZE + /* 2 hexdigits for each byte */
12155                         2 + /* "p+" */
12156                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12157                         1;   /* \0 */
12158 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12159                     /* However, for the "double double", we need more.
12160                      * Since each double has their own exponent, the
12161                      * doubles may float (haha) rather far from each
12162                      * other, and the number of required bits is much
12163                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12164                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12165                      *
12166                      * Need 2 hexdigits for each byte. */
12167                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12168                     /* the size for the exponent already added */
12169 #endif
12170 #ifdef USE_LOCALE_NUMERIC
12171                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12172                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12173                             need += SvLEN(PL_numeric_radix_sv);
12174                         RESTORE_LC_NUMERIC();
12175 #endif
12176                 }
12177                 else if (i > 0) {
12178                     need = BIT_DIGITS(i);
12179                 } /* if i < 0, the number of digits is hard to predict. */
12180             }
12181             need += has_precis ? precis : 6; /* known default */
12182
12183             if (need < width)
12184                 need = width;
12185
12186 #ifdef HAS_LDBL_SPRINTF_BUG
12187             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12188                with sfio - Allen <allens@cpan.org> */
12189
12190 #  ifdef DBL_MAX
12191 #    define MY_DBL_MAX DBL_MAX
12192 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12193 #    if DOUBLESIZE >= 8
12194 #      define MY_DBL_MAX 1.7976931348623157E+308L
12195 #    else
12196 #      define MY_DBL_MAX 3.40282347E+38L
12197 #    endif
12198 #  endif
12199
12200 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12201 #    define MY_DBL_MAX_BUG 1L
12202 #  else
12203 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12204 #  endif
12205
12206 #  ifdef DBL_MIN
12207 #    define MY_DBL_MIN DBL_MIN
12208 #  else  /* XXX guessing! -Allen */
12209 #    if DOUBLESIZE >= 8
12210 #      define MY_DBL_MIN 2.2250738585072014E-308L
12211 #    else
12212 #      define MY_DBL_MIN 1.17549435E-38L
12213 #    endif
12214 #  endif
12215
12216             if ((intsize == 'q') && (c == 'f') &&
12217                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12218                 (need < DBL_DIG)) {
12219                 /* it's going to be short enough that
12220                  * long double precision is not needed */
12221
12222                 if ((fv <= 0L) && (fv >= -0L))
12223                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12224                 else {
12225                     /* would use Perl_fp_class as a double-check but not
12226                      * functional on IRIX - see perl.h comments */
12227
12228                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12229                         /* It's within the range that a double can represent */
12230 #if defined(DBL_MAX) && !defined(DBL_MIN)
12231                         if ((fv >= ((long double)1/DBL_MAX)) ||
12232                             (fv <= (-(long double)1/DBL_MAX)))
12233 #endif
12234                         fix_ldbl_sprintf_bug = TRUE;
12235                     }
12236                 }
12237                 if (fix_ldbl_sprintf_bug == TRUE) {
12238                     double temp;
12239
12240                     intsize = 0;
12241                     temp = (double)fv;
12242                     fv = (NV)temp;
12243                 }
12244             }
12245
12246 #  undef MY_DBL_MAX
12247 #  undef MY_DBL_MAX_BUG
12248 #  undef MY_DBL_MIN
12249
12250 #endif /* HAS_LDBL_SPRINTF_BUG */
12251
12252             need += 20; /* fudge factor */
12253             if (PL_efloatsize < need) {
12254                 Safefree(PL_efloatbuf);
12255                 PL_efloatsize = need + 20; /* more fudge */
12256                 Newx(PL_efloatbuf, PL_efloatsize, char);
12257                 PL_efloatbuf[0] = '\0';
12258             }
12259
12260             if ( !(width || left || plus || alt) && fill != '0'
12261                  && has_precis && intsize != 'q'        /* Shortcuts */
12262                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12263                 /* See earlier comment about buggy Gconvert when digits,
12264                    aka precis is 0  */
12265                 if ( c == 'g' && precis ) {
12266                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12267                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12268                     /* May return an empty string for digits==0 */
12269                     if (*PL_efloatbuf) {
12270                         elen = strlen(PL_efloatbuf);
12271                         goto float_converted;
12272                     }
12273                 } else if ( c == 'f' && !precis ) {
12274                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12275                         break;
12276                 }
12277             }
12278
12279             if (UNLIKELY(hexfp)) {
12280                 /* Hexadecimal floating point. */
12281                 char* p = PL_efloatbuf;
12282                 U8 vhex[VHEX_SIZE];
12283                 U8* v = vhex; /* working pointer to vhex */
12284                 U8* vend; /* pointer to one beyond last digit of vhex */
12285                 U8* vfnz = NULL; /* first non-zero */
12286                 const bool lower = (c == 'a');
12287                 /* At output the values of vhex (up to vend) will
12288                  * be mapped through the xdig to get the actual
12289                  * human-readable xdigits. */
12290                 const char* xdig = PL_hexdigit;
12291                 int zerotail = 0; /* how many extra zeros to append */
12292                 int exponent = 0; /* exponent of the floating point input */
12293
12294                 /* XXX: denormals, NaN, Inf.
12295                  *
12296                  * For example with denormals, (assuming the vanilla
12297                  * 64-bit double): the exponent is zero. 1xp-1074 is
12298                  * the smallest denormal and the smallest double, it
12299                  * should be output as 0x0.0000000000001p-1022 to
12300                  * match its internal structure. */
12301
12302                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12303                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12304
12305 #if NVSIZE > DOUBLESIZE
12306 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12307                 /* In this case there is an implicit bit,
12308                  * and therefore the exponent is shifted shift by one. */
12309                 exponent--;
12310 #  else
12311                 /* In this case there is no implicit bit,
12312                  * and the exponent is shifted by the first xdigit. */
12313                 exponent -= 4;
12314 #  endif
12315 #endif
12316
12317                 if (fv < 0)
12318                     *p++ = '-';
12319                 else if (plus)
12320                     *p++ = plus;
12321                 *p++ = '0';
12322                 if (lower) {
12323                     *p++ = 'x';
12324                 }
12325                 else {
12326                     *p++ = 'X';
12327                     xdig += 16; /* Use uppercase hex. */
12328                 }
12329
12330                 /* Find the first non-zero xdigit. */
12331                 for (v = vhex; v < vend; v++) {
12332                     if (*v) {
12333                         vfnz = v;
12334                         break;
12335                     }
12336                 }
12337
12338                 if (vfnz) {
12339                     U8* vlnz = NULL; /* The last non-zero. */
12340
12341                     /* Find the last non-zero xdigit. */
12342                     for (v = vend - 1; v >= vhex; v--) {
12343                         if (*v) {
12344                             vlnz = v;
12345                             break;
12346                         }
12347                     }
12348
12349 #if NVSIZE == DOUBLESIZE
12350                     if (fv != 0.0)
12351                         exponent--;
12352 #endif
12353
12354                     if (precis > 0) {
12355                         if ((SSize_t)(precis + 1) < vend - vhex) {
12356                             bool round;
12357
12358                             v = vhex + precis + 1;
12359                             /* Round away from zero: if the tail
12360                              * beyond the precis xdigits is equal to
12361                              * or greater than 0x8000... */
12362                             round = *v > 0x8;
12363                             if (!round && *v == 0x8) {
12364                                 for (v++; v < vend; v++) {
12365                                     if (*v) {
12366                                         round = TRUE;
12367                                         break;
12368                                     }
12369                                 }
12370                             }
12371                             if (round) {
12372                                 for (v = vhex + precis; v >= vhex; v--) {
12373                                     if (*v < 0xF) {
12374                                         (*v)++;
12375                                         break;
12376                                     }
12377                                     *v = 0;
12378                                     if (v == vhex) {
12379                                         /* If the carry goes all the way to
12380                                          * the front, we need to output
12381                                          * a single '1'. This goes against
12382                                          * the "xdigit and then radix"
12383                                          * but since this is "cannot happen"
12384                                          * category, that is probably good. */
12385                                         *p++ = xdig[1];
12386                                     }
12387                                 }
12388                             }
12389                             /* The new effective "last non zero". */
12390                             vlnz = vhex + precis;
12391                         }
12392                         else {
12393                             zerotail = precis - (vlnz - vhex);
12394                         }
12395                     }
12396
12397                     v = vhex;
12398                     *p++ = xdig[*v++];
12399
12400                     /* The radix is always output after the first
12401                      * non-zero xdigit, or if alt.  */
12402                     if (vfnz < vlnz || alt) {
12403 #ifndef USE_LOCALE_NUMERIC
12404                         *p++ = '.';
12405 #else
12406                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12407                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12408                             STRLEN n;
12409                             const char* r = SvPV(PL_numeric_radix_sv, n);
12410                             Copy(r, p, n, char);
12411                             p += n;
12412                         }
12413                         else {
12414                             *p++ = '.';
12415                         }
12416                         RESTORE_LC_NUMERIC();
12417 #endif
12418                     }
12419
12420                     while (v <= vlnz)
12421                         *p++ = xdig[*v++];
12422
12423                     while (zerotail--)
12424                         *p++ = '0';
12425                 }
12426                 else {
12427                     *p++ = '0';
12428                     exponent = 0;
12429                 }
12430
12431                 elen = p - PL_efloatbuf;
12432                 elen += my_snprintf(p, PL_efloatsize - elen,
12433                                     "%c%+d", lower ? 'p' : 'P',
12434                                     exponent);
12435
12436                 if (elen < width) {
12437                     if (left) {
12438                         /* Pad the back with spaces. */
12439                         memset(PL_efloatbuf + elen, ' ', width - elen);
12440                     }
12441                     else if (fill == '0') {
12442                         /* Insert the zeros between the "0x" and
12443                          * the digits, otherwise we end up with
12444                          * "0000xHHH..." */
12445                         STRLEN nzero = width - elen;
12446                         char* zerox = PL_efloatbuf + 2;
12447                         Move(zerox, zerox + nzero,  elen - 2, char);
12448                         memset(zerox, fill, nzero);
12449                     }
12450                     else {
12451                         /* Move it to the right. */
12452                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12453                              elen, char);
12454                         /* Pad the front with spaces. */
12455                         memset(PL_efloatbuf, ' ', width - elen);
12456                     }
12457                     elen = width;
12458                 }
12459             }
12460             else {
12461                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12462                 if (elen) {
12463                     /* Not affecting infnan output: precision, alt, fill. */
12464                     if (elen < width) {
12465                         if (left) {
12466                             /* Pack the back with spaces. */
12467                             memset(PL_efloatbuf + elen, ' ', width - elen);
12468                         } else {
12469                             /* Move it to the right. */
12470                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12471                                  elen, char);
12472                             /* Pad the front with spaces. */
12473                             memset(PL_efloatbuf, ' ', width - elen);
12474                         }
12475                         elen = width;
12476                     }
12477                 }
12478             }
12479
12480             if (elen == 0) {
12481                 char *ptr = ebuf + sizeof ebuf;
12482                 *--ptr = '\0';
12483                 *--ptr = c;
12484 #if defined(USE_QUADMATH)
12485                 if (intsize == 'q') {
12486                     /* "g" -> "Qg" */
12487                     *--ptr = 'Q';
12488                 }
12489                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12490 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12491                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12492                  * not USE_LONG_DOUBLE and NVff.  In other words,
12493                  * this needs to work without USE_LONG_DOUBLE. */
12494                 if (intsize == 'q') {
12495                     /* Copy the one or more characters in a long double
12496                      * format before the 'base' ([efgEFG]) character to
12497                      * the format string. */
12498                     static char const ldblf[] = PERL_PRIfldbl;
12499                     char const *p = ldblf + sizeof(ldblf) - 3;
12500                     while (p >= ldblf) { *--ptr = *p--; }
12501                 }
12502 #endif
12503                 if (has_precis) {
12504                     base = precis;
12505                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12506                     *--ptr = '.';
12507                 }
12508                 if (width) {
12509                     base = width;
12510                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12511                 }
12512                 if (fill == '0')
12513                     *--ptr = fill;
12514                 if (left)
12515                     *--ptr = '-';
12516                 if (plus)
12517                     *--ptr = plus;
12518                 if (alt)
12519                     *--ptr = '#';
12520                 *--ptr = '%';
12521
12522                 /* No taint.  Otherwise we are in the strange situation
12523                  * where printf() taints but print($float) doesn't.
12524                  * --jhi */
12525
12526                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12527
12528                 /* hopefully the above makes ptr a very constrained format
12529                  * that is safe to use, even though it's not literal */
12530                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12531 #ifdef USE_QUADMATH
12532                 {
12533                     const char* qfmt = quadmath_format_single(ptr);
12534                     if (!qfmt)
12535                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12536                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12537                                              qfmt, nv);
12538                     if ((IV)elen == -1)
12539                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s|'", qfmt);
12540                     if (qfmt != ptr)
12541                         Safefree(qfmt);
12542                 }
12543 #elif defined(HAS_LONG_DOUBLE)
12544                 elen = ((intsize == 'q')
12545                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12546                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12547 #else
12548                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12549 #endif
12550                 GCC_DIAG_RESTORE;
12551             }
12552
12553         float_converted:
12554             eptr = PL_efloatbuf;
12555             assert((IV)elen > 0); /* here zero elen is bad */
12556
12557 #ifdef USE_LOCALE_NUMERIC
12558             /* If the decimal point character in the string is UTF-8, make the
12559              * output utf8 */
12560             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12561                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12562             {
12563                 is_utf8 = TRUE;
12564             }
12565 #endif
12566
12567             break;
12568
12569             /* SPECIAL */
12570
12571         case 'n':
12572             if (vectorize)
12573                 goto unknown;
12574             i = SvCUR(sv) - origlen;
12575             if (args) {
12576                 switch (intsize) {
12577                 case 'c':       *(va_arg(*args, char*)) = i; break;
12578                 case 'h':       *(va_arg(*args, short*)) = i; break;
12579                 default:        *(va_arg(*args, int*)) = i; break;
12580                 case 'l':       *(va_arg(*args, long*)) = i; break;
12581                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12582                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12583 #ifdef HAS_PTRDIFF_T
12584                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12585 #endif
12586 #ifdef I_STDINT
12587                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12588 #endif
12589                 case 'q':
12590 #if IVSIZE >= 8
12591                                 *(va_arg(*args, Quad_t*)) = i; break;
12592 #else
12593                                 goto unknown;
12594 #endif
12595                 }
12596             }
12597             else
12598                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12599             continue;   /* not "break" */
12600
12601             /* UNKNOWN */
12602
12603         default:
12604       unknown:
12605             if (!args
12606                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12607                 && ckWARN(WARN_PRINTF))
12608             {
12609                 SV * const msg = sv_newmortal();
12610                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12611                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12612                 if (fmtstart < patend) {
12613                     const char * const fmtend = q < patend ? q : patend;
12614                     const char * f;
12615                     sv_catpvs(msg, "\"%");
12616                     for (f = fmtstart; f < fmtend; f++) {
12617                         if (isPRINT(*f)) {
12618                             sv_catpvn_nomg(msg, f, 1);
12619                         } else {
12620                             Perl_sv_catpvf(aTHX_ msg,
12621                                            "\\%03"UVof, (UV)*f & 0xFF);
12622                         }
12623                     }
12624                     sv_catpvs(msg, "\"");
12625                 } else {
12626                     sv_catpvs(msg, "end of string");
12627                 }
12628                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12629             }
12630
12631             /* output mangled stuff ... */
12632             if (c == '\0')
12633                 --q;
12634             eptr = p;
12635             elen = q - p;
12636
12637             /* ... right here, because formatting flags should not apply */
12638             SvGROW(sv, SvCUR(sv) + elen + 1);
12639             p = SvEND(sv);
12640             Copy(eptr, p, elen, char);
12641             p += elen;
12642             *p = '\0';
12643             SvCUR_set(sv, p - SvPVX_const(sv));
12644             svix = osvix;
12645             continue;   /* not "break" */
12646         }
12647
12648         if (is_utf8 != has_utf8) {
12649             if (is_utf8) {
12650                 if (SvCUR(sv))
12651                     sv_utf8_upgrade(sv);
12652             }
12653             else {
12654                 const STRLEN old_elen = elen;
12655                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12656                 sv_utf8_upgrade(nsv);
12657                 eptr = SvPVX_const(nsv);
12658                 elen = SvCUR(nsv);
12659
12660                 if (width) { /* fudge width (can't fudge elen) */
12661                     width += elen - old_elen;
12662                 }
12663                 is_utf8 = TRUE;
12664             }
12665         }
12666
12667         assert((IV)elen >= 0); /* here zero elen is fine */
12668         have = esignlen + zeros + elen;
12669         if (have < zeros)
12670             croak_memory_wrap();
12671
12672         need = (have > width ? have : width);
12673         gap = need - have;
12674
12675         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12676             croak_memory_wrap();
12677         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12678         p = SvEND(sv);
12679         if (esignlen && fill == '0') {
12680             int i;
12681             for (i = 0; i < (int)esignlen; i++)
12682                 *p++ = esignbuf[i];
12683         }
12684         if (gap && !left) {
12685             memset(p, fill, gap);
12686             p += gap;
12687         }
12688         if (esignlen && fill != '0') {
12689             int i;
12690             for (i = 0; i < (int)esignlen; i++)
12691                 *p++ = esignbuf[i];
12692         }
12693         if (zeros) {
12694             int i;
12695             for (i = zeros; i; i--)
12696                 *p++ = '0';
12697         }
12698         if (elen) {
12699             Copy(eptr, p, elen, char);
12700             p += elen;
12701         }
12702         if (gap && left) {
12703             memset(p, ' ', gap);
12704             p += gap;
12705         }
12706         if (vectorize) {
12707             if (veclen) {
12708                 Copy(dotstr, p, dotstrlen, char);
12709                 p += dotstrlen;
12710             }
12711             else
12712                 vectorize = FALSE;              /* done iterating over vecstr */
12713         }
12714         if (is_utf8)
12715             has_utf8 = TRUE;
12716         if (has_utf8)
12717             SvUTF8_on(sv);
12718         *p = '\0';
12719         SvCUR_set(sv, p - SvPVX_const(sv));
12720         if (vectorize) {
12721             esignlen = 0;
12722             goto vector;
12723         }
12724     }
12725
12726     /* Now that we've consumed all our printf format arguments (svix)
12727      * do we have things left on the stack that we didn't use?
12728      */
12729     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12730         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12731                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12732     }
12733
12734     SvTAINT(sv);
12735
12736     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12737                                each iteration. */
12738 }
12739
12740 /* =========================================================================
12741
12742 =head1 Cloning an interpreter
12743
12744 =cut
12745
12746 All the macros and functions in this section are for the private use of
12747 the main function, perl_clone().
12748
12749 The foo_dup() functions make an exact copy of an existing foo thingy.
12750 During the course of a cloning, a hash table is used to map old addresses
12751 to new addresses.  The table is created and manipulated with the
12752 ptr_table_* functions.
12753
12754  * =========================================================================*/
12755
12756
12757 #if defined(USE_ITHREADS)
12758
12759 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12760 #ifndef GpREFCNT_inc
12761 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12762 #endif
12763
12764
12765 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12766    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12767    If this changes, please unmerge ss_dup.
12768    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12769 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12770 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12771 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12772 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12773 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12774 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12775 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12776 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12777 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12778 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12779 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12780 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12781 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12782
12783 /* clone a parser */
12784
12785 yy_parser *
12786 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12787 {
12788     yy_parser *parser;
12789
12790     PERL_ARGS_ASSERT_PARSER_DUP;
12791
12792     if (!proto)
12793         return NULL;
12794
12795     /* look for it in the table first */
12796     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12797     if (parser)
12798         return parser;
12799
12800     /* create anew and remember what it is */
12801     Newxz(parser, 1, yy_parser);
12802     ptr_table_store(PL_ptr_table, proto, parser);
12803
12804     /* XXX these not yet duped */
12805     parser->old_parser = NULL;
12806     parser->stack = NULL;
12807     parser->ps = NULL;
12808     parser->stack_size = 0;
12809     /* XXX parser->stack->state = 0; */
12810
12811     /* XXX eventually, just Copy() most of the parser struct ? */
12812
12813     parser->lex_brackets = proto->lex_brackets;
12814     parser->lex_casemods = proto->lex_casemods;
12815     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12816                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12817     parser->lex_casestack = savepvn(proto->lex_casestack,
12818                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12819     parser->lex_defer   = proto->lex_defer;
12820     parser->lex_dojoin  = proto->lex_dojoin;
12821     parser->lex_formbrack = proto->lex_formbrack;
12822     parser->lex_inpat   = proto->lex_inpat;
12823     parser->lex_inwhat  = proto->lex_inwhat;
12824     parser->lex_op      = proto->lex_op;
12825     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12826     parser->lex_starts  = proto->lex_starts;
12827     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12828     parser->multi_close = proto->multi_close;
12829     parser->multi_open  = proto->multi_open;
12830     parser->multi_start = proto->multi_start;
12831     parser->multi_end   = proto->multi_end;
12832     parser->preambled   = proto->preambled;
12833     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12834     parser->linestr     = sv_dup_inc(proto->linestr, param);
12835     parser->expect      = proto->expect;
12836     parser->copline     = proto->copline;
12837     parser->last_lop_op = proto->last_lop_op;
12838     parser->lex_state   = proto->lex_state;
12839     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12840     /* rsfp_filters entries have fake IoDIRP() */
12841     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12842     parser->in_my       = proto->in_my;
12843     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12844     parser->error_count = proto->error_count;
12845
12846
12847     parser->linestr     = sv_dup_inc(proto->linestr, param);
12848
12849     {
12850         char * const ols = SvPVX(proto->linestr);
12851         char * const ls  = SvPVX(parser->linestr);
12852
12853         parser->bufptr      = ls + (proto->bufptr >= ols ?
12854                                     proto->bufptr -  ols : 0);
12855         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12856                                     proto->oldbufptr -  ols : 0);
12857         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12858                                     proto->oldoldbufptr -  ols : 0);
12859         parser->linestart   = ls + (proto->linestart >= ols ?
12860                                     proto->linestart -  ols : 0);
12861         parser->last_uni    = ls + (proto->last_uni >= ols ?
12862                                     proto->last_uni -  ols : 0);
12863         parser->last_lop    = ls + (proto->last_lop >= ols ?
12864                                     proto->last_lop -  ols : 0);
12865
12866         parser->bufend      = ls + SvCUR(parser->linestr);
12867     }
12868
12869     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12870
12871
12872     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12873     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12874     parser->nexttoke    = proto->nexttoke;
12875
12876     /* XXX should clone saved_curcop here, but we aren't passed
12877      * proto_perl; so do it in perl_clone_using instead */
12878
12879     return parser;
12880 }
12881
12882
12883 /* duplicate a file handle */
12884
12885 PerlIO *
12886 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12887 {
12888     PerlIO *ret;
12889
12890     PERL_ARGS_ASSERT_FP_DUP;
12891     PERL_UNUSED_ARG(type);
12892
12893     if (!fp)
12894         return (PerlIO*)NULL;
12895
12896     /* look for it in the table first */
12897     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12898     if (ret)
12899         return ret;
12900
12901     /* create anew and remember what it is */
12902     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12903     ptr_table_store(PL_ptr_table, fp, ret);
12904     return ret;
12905 }
12906
12907 /* duplicate a directory handle */
12908
12909 DIR *
12910 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12911 {
12912     DIR *ret;
12913
12914 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12915     DIR *pwd;
12916     const Direntry_t *dirent;
12917     char smallbuf[256];
12918     char *name = NULL;
12919     STRLEN len = 0;
12920     long pos;
12921 #endif
12922
12923     PERL_UNUSED_CONTEXT;
12924     PERL_ARGS_ASSERT_DIRP_DUP;
12925
12926     if (!dp)
12927         return (DIR*)NULL;
12928
12929     /* look for it in the table first */
12930     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12931     if (ret)
12932         return ret;
12933
12934 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12935
12936     PERL_UNUSED_ARG(param);
12937
12938     /* create anew */
12939
12940     /* open the current directory (so we can switch back) */
12941     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12942
12943     /* chdir to our dir handle and open the present working directory */
12944     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12945         PerlDir_close(pwd);
12946         return (DIR *)NULL;
12947     }
12948     /* Now we should have two dir handles pointing to the same dir. */
12949
12950     /* Be nice to the calling code and chdir back to where we were. */
12951     /* XXX If this fails, then what? */
12952     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12953
12954     /* We have no need of the pwd handle any more. */
12955     PerlDir_close(pwd);
12956
12957 #ifdef DIRNAMLEN
12958 # define d_namlen(d) (d)->d_namlen
12959 #else
12960 # define d_namlen(d) strlen((d)->d_name)
12961 #endif
12962     /* Iterate once through dp, to get the file name at the current posi-
12963        tion. Then step back. */
12964     pos = PerlDir_tell(dp);
12965     if ((dirent = PerlDir_read(dp))) {
12966         len = d_namlen(dirent);
12967         if (len <= sizeof smallbuf) name = smallbuf;
12968         else Newx(name, len, char);
12969         Move(dirent->d_name, name, len, char);
12970     }
12971     PerlDir_seek(dp, pos);
12972
12973     /* Iterate through the new dir handle, till we find a file with the
12974        right name. */
12975     if (!dirent) /* just before the end */
12976         for(;;) {
12977             pos = PerlDir_tell(ret);
12978             if (PerlDir_read(ret)) continue; /* not there yet */
12979             PerlDir_seek(ret, pos); /* step back */
12980             break;
12981         }
12982     else {
12983         const long pos0 = PerlDir_tell(ret);
12984         for(;;) {
12985             pos = PerlDir_tell(ret);
12986             if ((dirent = PerlDir_read(ret))) {
12987                 if (len == (STRLEN)d_namlen(dirent)
12988                     && memEQ(name, dirent->d_name, len)) {
12989                     /* found it */
12990                     PerlDir_seek(ret, pos); /* step back */
12991                     break;
12992                 }
12993                 /* else we are not there yet; keep iterating */
12994             }
12995             else { /* This is not meant to happen. The best we can do is
12996                       reset the iterator to the beginning. */
12997                 PerlDir_seek(ret, pos0);
12998                 break;
12999             }
13000         }
13001     }
13002 #undef d_namlen
13003
13004     if (name && name != smallbuf)
13005         Safefree(name);
13006 #endif
13007
13008 #ifdef WIN32
13009     ret = win32_dirp_dup(dp, param);
13010 #endif
13011
13012     /* pop it in the pointer table */
13013     if (ret)
13014         ptr_table_store(PL_ptr_table, dp, ret);
13015
13016     return ret;
13017 }
13018
13019 /* duplicate a typeglob */
13020
13021 GP *
13022 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13023 {
13024     GP *ret;
13025
13026     PERL_ARGS_ASSERT_GP_DUP;
13027
13028     if (!gp)
13029         return (GP*)NULL;
13030     /* look for it in the table first */
13031     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13032     if (ret)
13033         return ret;
13034
13035     /* create anew and remember what it is */
13036     Newxz(ret, 1, GP);
13037     ptr_table_store(PL_ptr_table, gp, ret);
13038
13039     /* clone */
13040     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13041        on Newxz() to do this for us.  */
13042     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13043     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13044     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13045     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13046     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13047     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13048     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13049     ret->gp_cvgen       = gp->gp_cvgen;
13050     ret->gp_line        = gp->gp_line;
13051     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13052     return ret;
13053 }
13054
13055 /* duplicate a chain of magic */
13056
13057 MAGIC *
13058 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13059 {
13060     MAGIC *mgret = NULL;
13061     MAGIC **mgprev_p = &mgret;
13062
13063     PERL_ARGS_ASSERT_MG_DUP;
13064
13065     for (; mg; mg = mg->mg_moremagic) {
13066         MAGIC *nmg;
13067
13068         if ((param->flags & CLONEf_JOIN_IN)
13069                 && mg->mg_type == PERL_MAGIC_backref)
13070             /* when joining, we let the individual SVs add themselves to
13071              * backref as needed. */
13072             continue;
13073
13074         Newx(nmg, 1, MAGIC);
13075         *mgprev_p = nmg;
13076         mgprev_p = &(nmg->mg_moremagic);
13077
13078         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13079            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13080            from the original commit adding Perl_mg_dup() - revision 4538.
13081            Similarly there is the annotation "XXX random ptr?" next to the
13082            assignment to nmg->mg_ptr.  */
13083         *nmg = *mg;
13084
13085         /* FIXME for plugins
13086         if (nmg->mg_type == PERL_MAGIC_qr) {
13087             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13088         }
13089         else
13090         */
13091         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13092                           ? nmg->mg_type == PERL_MAGIC_backref
13093                                 /* The backref AV has its reference
13094                                  * count deliberately bumped by 1 */
13095                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13096                                                     nmg->mg_obj, param))
13097                                 : sv_dup_inc(nmg->mg_obj, param)
13098                           : sv_dup(nmg->mg_obj, param);
13099
13100         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13101             if (nmg->mg_len > 0) {
13102                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13103                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13104                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13105                 {
13106                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13107                     sv_dup_inc_multiple((SV**)(namtp->table),
13108                                         (SV**)(namtp->table), NofAMmeth, param);
13109                 }
13110             }
13111             else if (nmg->mg_len == HEf_SVKEY)
13112                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13113         }
13114         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13115             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13116         }
13117     }
13118     return mgret;
13119 }
13120
13121 #endif /* USE_ITHREADS */
13122
13123 struct ptr_tbl_arena {
13124     struct ptr_tbl_arena *next;
13125     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13126 };
13127
13128 /* create a new pointer-mapping table */
13129
13130 PTR_TBL_t *
13131 Perl_ptr_table_new(pTHX)
13132 {
13133     PTR_TBL_t *tbl;
13134     PERL_UNUSED_CONTEXT;
13135
13136     Newx(tbl, 1, PTR_TBL_t);
13137     tbl->tbl_max        = 511;
13138     tbl->tbl_items      = 0;
13139     tbl->tbl_arena      = NULL;
13140     tbl->tbl_arena_next = NULL;
13141     tbl->tbl_arena_end  = NULL;
13142     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13143     return tbl;
13144 }
13145
13146 #define PTR_TABLE_HASH(ptr) \
13147   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13148
13149 /* map an existing pointer using a table */
13150
13151 STATIC PTR_TBL_ENT_t *
13152 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13153 {
13154     PTR_TBL_ENT_t *tblent;
13155     const UV hash = PTR_TABLE_HASH(sv);
13156
13157     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13158
13159     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13160     for (; tblent; tblent = tblent->next) {
13161         if (tblent->oldval == sv)
13162             return tblent;
13163     }
13164     return NULL;
13165 }
13166
13167 void *
13168 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13169 {
13170     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13171
13172     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13173     PERL_UNUSED_CONTEXT;
13174
13175     return tblent ? tblent->newval : NULL;
13176 }
13177
13178 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13179  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13180  * the core's typical use of ptr_tables in thread cloning. */
13181
13182 void
13183 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13184 {
13185     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13186
13187     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13188     PERL_UNUSED_CONTEXT;
13189
13190     if (tblent) {
13191         tblent->newval = newsv;
13192     } else {
13193         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13194
13195         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13196             struct ptr_tbl_arena *new_arena;
13197
13198             Newx(new_arena, 1, struct ptr_tbl_arena);
13199             new_arena->next = tbl->tbl_arena;
13200             tbl->tbl_arena = new_arena;
13201             tbl->tbl_arena_next = new_arena->array;
13202             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13203         }
13204
13205         tblent = tbl->tbl_arena_next++;
13206
13207         tblent->oldval = oldsv;
13208         tblent->newval = newsv;
13209         tblent->next = tbl->tbl_ary[entry];
13210         tbl->tbl_ary[entry] = tblent;
13211         tbl->tbl_items++;
13212         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13213             ptr_table_split(tbl);
13214     }
13215 }
13216
13217 /* double the hash bucket size of an existing ptr table */
13218
13219 void
13220 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13221 {
13222     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13223     const UV oldsize = tbl->tbl_max + 1;
13224     UV newsize = oldsize * 2;
13225     UV i;
13226
13227     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13228     PERL_UNUSED_CONTEXT;
13229
13230     Renew(ary, newsize, PTR_TBL_ENT_t*);
13231     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13232     tbl->tbl_max = --newsize;
13233     tbl->tbl_ary = ary;
13234     for (i=0; i < oldsize; i++, ary++) {
13235         PTR_TBL_ENT_t **entp = ary;
13236         PTR_TBL_ENT_t *ent = *ary;
13237         PTR_TBL_ENT_t **curentp;
13238         if (!ent)
13239             continue;
13240         curentp = ary + oldsize;
13241         do {
13242             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13243                 *entp = ent->next;
13244                 ent->next = *curentp;
13245                 *curentp = ent;
13246             }
13247             else
13248                 entp = &ent->next;
13249             ent = *entp;
13250         } while (ent);
13251     }
13252 }
13253
13254 /* remove all the entries from a ptr table */
13255 /* Deprecated - will be removed post 5.14 */
13256
13257 void
13258 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13259 {
13260     PERL_UNUSED_CONTEXT;
13261     if (tbl && tbl->tbl_items) {
13262         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13263
13264         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13265
13266         while (arena) {
13267             struct ptr_tbl_arena *next = arena->next;
13268
13269             Safefree(arena);
13270             arena = next;
13271         };
13272
13273         tbl->tbl_items = 0;
13274         tbl->tbl_arena = NULL;
13275         tbl->tbl_arena_next = NULL;
13276         tbl->tbl_arena_end = NULL;
13277     }
13278 }
13279
13280 /* clear and free a ptr table */
13281
13282 void
13283 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13284 {
13285     struct ptr_tbl_arena *arena;
13286
13287     PERL_UNUSED_CONTEXT;
13288
13289     if (!tbl) {
13290         return;
13291     }
13292
13293     arena = tbl->tbl_arena;
13294
13295     while (arena) {
13296         struct ptr_tbl_arena *next = arena->next;
13297
13298         Safefree(arena);
13299         arena = next;
13300     }
13301
13302     Safefree(tbl->tbl_ary);
13303     Safefree(tbl);
13304 }
13305
13306 #if defined(USE_ITHREADS)
13307
13308 void
13309 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13310 {
13311     PERL_ARGS_ASSERT_RVPV_DUP;
13312
13313     assert(!isREGEXP(sstr));
13314     if (SvROK(sstr)) {
13315         if (SvWEAKREF(sstr)) {
13316             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13317             if (param->flags & CLONEf_JOIN_IN) {
13318                 /* if joining, we add any back references individually rather
13319                  * than copying the whole backref array */
13320                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13321             }
13322         }
13323         else
13324             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13325     }
13326     else if (SvPVX_const(sstr)) {
13327         /* Has something there */
13328         if (SvLEN(sstr)) {
13329             /* Normal PV - clone whole allocated space */
13330             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13331             /* sstr may not be that normal, but actually copy on write.
13332                But we are a true, independent SV, so:  */
13333             SvIsCOW_off(dstr);
13334         }
13335         else {
13336             /* Special case - not normally malloced for some reason */
13337             if (isGV_with_GP(sstr)) {
13338                 /* Don't need to do anything here.  */
13339             }
13340             else if ((SvIsCOW(sstr))) {
13341                 /* A "shared" PV - clone it as "shared" PV */
13342                 SvPV_set(dstr,
13343                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13344                                          param)));
13345             }
13346             else {
13347                 /* Some other special case - random pointer */
13348                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13349             }
13350         }
13351     }
13352     else {
13353         /* Copy the NULL */
13354         SvPV_set(dstr, NULL);
13355     }
13356 }
13357
13358 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13359 static SV **
13360 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13361                       SSize_t items, CLONE_PARAMS *const param)
13362 {
13363     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13364
13365     while (items-- > 0) {
13366         *dest++ = sv_dup_inc(*source++, param);
13367     }
13368
13369     return dest;
13370 }
13371
13372 /* duplicate an SV of any type (including AV, HV etc) */
13373
13374 static SV *
13375 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13376 {
13377     dVAR;
13378     SV *dstr;
13379
13380     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13381
13382     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13383 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13384         abort();
13385 #endif
13386         return NULL;
13387     }
13388     /* look for it in the table first */
13389     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13390     if (dstr)
13391         return dstr;
13392
13393     if(param->flags & CLONEf_JOIN_IN) {
13394         /** We are joining here so we don't want do clone
13395             something that is bad **/
13396         if (SvTYPE(sstr) == SVt_PVHV) {
13397             const HEK * const hvname = HvNAME_HEK(sstr);
13398             if (hvname) {
13399                 /** don't clone stashes if they already exist **/
13400                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13401                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13402                 ptr_table_store(PL_ptr_table, sstr, dstr);
13403                 return dstr;
13404             }
13405         }
13406         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13407             HV *stash = GvSTASH(sstr);
13408             const HEK * hvname;
13409             if (stash && (hvname = HvNAME_HEK(stash))) {
13410                 /** don't clone GVs if they already exist **/
13411                 SV **svp;
13412                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13413                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13414                 svp = hv_fetch(
13415                         stash, GvNAME(sstr),
13416                         GvNAMEUTF8(sstr)
13417                             ? -GvNAMELEN(sstr)
13418                             :  GvNAMELEN(sstr),
13419                         0
13420                       );
13421                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13422                     ptr_table_store(PL_ptr_table, sstr, *svp);
13423                     return *svp;
13424                 }
13425             }
13426         }
13427     }
13428
13429     /* create anew and remember what it is */
13430     new_SV(dstr);
13431
13432 #ifdef DEBUG_LEAKING_SCALARS
13433     dstr->sv_debug_optype = sstr->sv_debug_optype;
13434     dstr->sv_debug_line = sstr->sv_debug_line;
13435     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13436     dstr->sv_debug_parent = (SV*)sstr;
13437     FREE_SV_DEBUG_FILE(dstr);
13438     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13439 #endif
13440
13441     ptr_table_store(PL_ptr_table, sstr, dstr);
13442
13443     /* clone */
13444     SvFLAGS(dstr)       = SvFLAGS(sstr);
13445     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13446     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13447
13448 #ifdef DEBUGGING
13449     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13450         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13451                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13452 #endif
13453
13454     /* don't clone objects whose class has asked us not to */
13455     if (SvOBJECT(sstr)
13456      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13457     {
13458         SvFLAGS(dstr) = 0;
13459         return dstr;
13460     }
13461
13462     switch (SvTYPE(sstr)) {
13463     case SVt_NULL:
13464         SvANY(dstr)     = NULL;
13465         break;
13466     case SVt_IV:
13467         SET_SVANY_FOR_BODYLESS_IV(dstr);
13468         if(SvROK(sstr)) {
13469             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13470         } else {
13471             SvIV_set(dstr, SvIVX(sstr));
13472         }
13473         break;
13474     case SVt_NV:
13475 #if NVSIZE <= IVSIZE
13476         SET_SVANY_FOR_BODYLESS_NV(dstr);
13477 #else
13478         SvANY(dstr)     = new_XNV();
13479 #endif
13480         SvNV_set(dstr, SvNVX(sstr));
13481         break;
13482     default:
13483         {
13484             /* These are all the types that need complex bodies allocating.  */
13485             void *new_body;
13486             const svtype sv_type = SvTYPE(sstr);
13487             const struct body_details *const sv_type_details
13488                 = bodies_by_type + sv_type;
13489
13490             switch (sv_type) {
13491             default:
13492                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13493                 break;
13494
13495             case SVt_PVGV:
13496             case SVt_PVIO:
13497             case SVt_PVFM:
13498             case SVt_PVHV:
13499             case SVt_PVAV:
13500             case SVt_PVCV:
13501             case SVt_PVLV:
13502             case SVt_REGEXP:
13503             case SVt_PVMG:
13504             case SVt_PVNV:
13505             case SVt_PVIV:
13506             case SVt_INVLIST:
13507             case SVt_PV:
13508                 assert(sv_type_details->body_size);
13509                 if (sv_type_details->arena) {
13510                     new_body_inline(new_body, sv_type);
13511                     new_body
13512                         = (void*)((char*)new_body - sv_type_details->offset);
13513                 } else {
13514                     new_body = new_NOARENA(sv_type_details);
13515                 }
13516             }
13517             assert(new_body);
13518             SvANY(dstr) = new_body;
13519
13520 #ifndef PURIFY
13521             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13522                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13523                  sv_type_details->copy, char);
13524 #else
13525             Copy(((char*)SvANY(sstr)),
13526                  ((char*)SvANY(dstr)),
13527                  sv_type_details->body_size + sv_type_details->offset, char);
13528 #endif
13529
13530             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13531                 && !isGV_with_GP(dstr)
13532                 && !isREGEXP(dstr)
13533                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13534                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13535
13536             /* The Copy above means that all the source (unduplicated) pointers
13537                are now in the destination.  We can check the flags and the
13538                pointers in either, but it's possible that there's less cache
13539                missing by always going for the destination.
13540                FIXME - instrument and check that assumption  */
13541             if (sv_type >= SVt_PVMG) {
13542                 if (SvMAGIC(dstr))
13543                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13544                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13545                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13546                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13547             }
13548
13549             /* The cast silences a GCC warning about unhandled types.  */
13550             switch ((int)sv_type) {
13551             case SVt_PV:
13552                 break;
13553             case SVt_PVIV:
13554                 break;
13555             case SVt_PVNV:
13556                 break;
13557             case SVt_PVMG:
13558                 break;
13559             case SVt_REGEXP:
13560               duprex:
13561                 /* FIXME for plugins */
13562                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13563                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13564                 break;
13565             case SVt_PVLV:
13566                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13567                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13568                     LvTARG(dstr) = dstr;
13569                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13570                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13571                 else
13572                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13573                 if (isREGEXP(sstr)) goto duprex;
13574             case SVt_PVGV:
13575                 /* non-GP case already handled above */
13576                 if(isGV_with_GP(sstr)) {
13577                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13578                     /* Don't call sv_add_backref here as it's going to be
13579                        created as part of the magic cloning of the symbol
13580                        table--unless this is during a join and the stash
13581                        is not actually being cloned.  */
13582                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13583                        at the point of this comment.  */
13584                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13585                     if (param->flags & CLONEf_JOIN_IN)
13586                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13587                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13588                     (void)GpREFCNT_inc(GvGP(dstr));
13589                 }
13590                 break;
13591             case SVt_PVIO:
13592                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13593                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13594                     /* I have no idea why fake dirp (rsfps)
13595                        should be treated differently but otherwise
13596                        we end up with leaks -- sky*/
13597                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13598                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13599                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13600                 } else {
13601                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13602                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13603                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13604                     if (IoDIRP(dstr)) {
13605                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13606                     } else {
13607                         NOOP;
13608                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13609                     }
13610                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13611                 }
13612                 if (IoOFP(dstr) == IoIFP(sstr))
13613                     IoOFP(dstr) = IoIFP(dstr);
13614                 else
13615                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13616                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13617                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13618                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13619                 break;
13620             case SVt_PVAV:
13621                 /* avoid cloning an empty array */
13622                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13623                     SV **dst_ary, **src_ary;
13624                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13625
13626                     src_ary = AvARRAY((const AV *)sstr);
13627                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13628                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13629                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13630                     AvALLOC((const AV *)dstr) = dst_ary;
13631                     if (AvREAL((const AV *)sstr)) {
13632                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13633                                                       param);
13634                     }
13635                     else {
13636                         while (items-- > 0)
13637                             *dst_ary++ = sv_dup(*src_ary++, param);
13638                     }
13639                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13640                     while (items-- > 0) {
13641                         *dst_ary++ = NULL;
13642                     }
13643                 }
13644                 else {
13645                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13646                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13647                     AvMAX(  (const AV *)dstr)   = -1;
13648                     AvFILLp((const AV *)dstr)   = -1;
13649                 }
13650                 break;
13651             case SVt_PVHV:
13652                 if (HvARRAY((const HV *)sstr)) {
13653                     STRLEN i = 0;
13654                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13655                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13656                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13657                     char *darray;
13658                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13659                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13660                         char);
13661                     HvARRAY(dstr) = (HE**)darray;
13662                     while (i <= sxhv->xhv_max) {
13663                         const HE * const source = HvARRAY(sstr)[i];
13664                         HvARRAY(dstr)[i] = source
13665                             ? he_dup(source, sharekeys, param) : 0;
13666                         ++i;
13667                     }
13668                     if (SvOOK(sstr)) {
13669                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13670                         struct xpvhv_aux * const daux = HvAUX(dstr);
13671                         /* This flag isn't copied.  */
13672                         SvOOK_on(dstr);
13673
13674                         if (saux->xhv_name_count) {
13675                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13676                             const I32 count
13677                              = saux->xhv_name_count < 0
13678                                 ? -saux->xhv_name_count
13679                                 :  saux->xhv_name_count;
13680                             HEK **shekp = sname + count;
13681                             HEK **dhekp;
13682                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13683                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13684                             while (shekp-- > sname) {
13685                                 dhekp--;
13686                                 *dhekp = hek_dup(*shekp, param);
13687                             }
13688                         }
13689                         else {
13690                             daux->xhv_name_u.xhvnameu_name
13691                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13692                                           param);
13693                         }
13694                         daux->xhv_name_count = saux->xhv_name_count;
13695
13696                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13697                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13698 #ifdef PERL_HASH_RANDOMIZE_KEYS
13699                         daux->xhv_rand = saux->xhv_rand;
13700                         daux->xhv_last_rand = saux->xhv_last_rand;
13701 #endif
13702                         daux->xhv_riter = saux->xhv_riter;
13703                         daux->xhv_eiter = saux->xhv_eiter
13704                             ? he_dup(saux->xhv_eiter,
13705                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13706                         /* backref array needs refcnt=2; see sv_add_backref */
13707                         daux->xhv_backreferences =
13708                             (param->flags & CLONEf_JOIN_IN)
13709                                 /* when joining, we let the individual GVs and
13710                                  * CVs add themselves to backref as
13711                                  * needed. This avoids pulling in stuff
13712                                  * that isn't required, and simplifies the
13713                                  * case where stashes aren't cloned back
13714                                  * if they already exist in the parent
13715                                  * thread */
13716                             ? NULL
13717                             : saux->xhv_backreferences
13718                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13719                                     ? MUTABLE_AV(SvREFCNT_inc(
13720                                           sv_dup_inc((const SV *)
13721                                             saux->xhv_backreferences, param)))
13722                                     : MUTABLE_AV(sv_dup((const SV *)
13723                                             saux->xhv_backreferences, param))
13724                                 : 0;
13725
13726                         daux->xhv_mro_meta = saux->xhv_mro_meta
13727                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13728                             : 0;
13729
13730                         /* Record stashes for possible cloning in Perl_clone(). */
13731                         if (HvNAME(sstr))
13732                             av_push(param->stashes, dstr);
13733                     }
13734                 }
13735                 else
13736                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13737                 break;
13738             case SVt_PVCV:
13739                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13740                     CvDEPTH(dstr) = 0;
13741                 }
13742                 /* FALLTHROUGH */
13743             case SVt_PVFM:
13744                 /* NOTE: not refcounted */
13745                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13746                     hv_dup(CvSTASH(dstr), param);
13747                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13748                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13749                 if (!CvISXSUB(dstr)) {
13750                     OP_REFCNT_LOCK;
13751                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13752                     OP_REFCNT_UNLOCK;
13753                     CvSLABBED_off(dstr);
13754                 } else if (CvCONST(dstr)) {
13755                     CvXSUBANY(dstr).any_ptr =
13756                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13757                 }
13758                 assert(!CvSLABBED(dstr));
13759                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13760                 if (CvNAMED(dstr))
13761                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13762                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13763                 /* don't dup if copying back - CvGV isn't refcounted, so the
13764                  * duped GV may never be freed. A bit of a hack! DAPM */
13765                 else
13766                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13767                     CvCVGV_RC(dstr)
13768                     ? gv_dup_inc(CvGV(sstr), param)
13769                     : (param->flags & CLONEf_JOIN_IN)
13770                         ? NULL
13771                         : gv_dup(CvGV(sstr), param);
13772
13773                 if (!CvISXSUB(sstr)) {
13774                     PADLIST * padlist = CvPADLIST(sstr);
13775                     if(padlist)
13776                         padlist = padlist_dup(padlist, param);
13777                     CvPADLIST_set(dstr, padlist);
13778                 } else
13779 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13780                     PoisonPADLIST(dstr);
13781
13782                 CvOUTSIDE(dstr) =
13783                     CvWEAKOUTSIDE(sstr)
13784                     ? cv_dup(    CvOUTSIDE(dstr), param)
13785                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13786                 break;
13787             }
13788         }
13789     }
13790
13791     return dstr;
13792  }
13793
13794 SV *
13795 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13796 {
13797     PERL_ARGS_ASSERT_SV_DUP_INC;
13798     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13799 }
13800
13801 SV *
13802 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13803 {
13804     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13805     PERL_ARGS_ASSERT_SV_DUP;
13806
13807     /* Track every SV that (at least initially) had a reference count of 0.
13808        We need to do this by holding an actual reference to it in this array.
13809        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13810        (akin to the stashes hash, and the perl stack), we come unstuck if
13811        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13812        thread) is manipulated in a CLONE method, because CLONE runs before the
13813        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13814        (and fix things up by giving each a reference via the temps stack).
13815        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13816        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13817        before the walk of unreferenced happens and a reference to that is SV
13818        added to the temps stack. At which point we have the same SV considered
13819        to be in use, and free to be re-used. Not good.
13820     */
13821     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13822         assert(param->unreferenced);
13823         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13824     }
13825
13826     return dstr;
13827 }
13828
13829 /* duplicate a context */
13830
13831 PERL_CONTEXT *
13832 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13833 {
13834     PERL_CONTEXT *ncxs;
13835
13836     PERL_ARGS_ASSERT_CX_DUP;
13837
13838     if (!cxs)
13839         return (PERL_CONTEXT*)NULL;
13840
13841     /* look for it in the table first */
13842     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13843     if (ncxs)
13844         return ncxs;
13845
13846     /* create anew and remember what it is */
13847     Newx(ncxs, max + 1, PERL_CONTEXT);
13848     ptr_table_store(PL_ptr_table, cxs, ncxs);
13849     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13850
13851     while (ix >= 0) {
13852         PERL_CONTEXT * const ncx = &ncxs[ix];
13853         if (CxTYPE(ncx) == CXt_SUBST) {
13854             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13855         }
13856         else {
13857             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13858             switch (CxTYPE(ncx)) {
13859             case CXt_SUB:
13860                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13861                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13862                                            : cv_dup(ncx->blk_sub.cv,param));
13863                 if(CxHASARGS(ncx)){
13864                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13865                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13866                 } else {
13867                     ncx->blk_sub.argarray = NULL;
13868                     ncx->blk_sub.savearray = NULL;
13869                 }
13870                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13871                                            ncx->blk_sub.oldcomppad);
13872                 break;
13873             case CXt_EVAL:
13874                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13875                                                       param);
13876                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13877                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13878                 break;
13879             case CXt_LOOP_LAZYSV:
13880                 ncx->blk_loop.state_u.lazysv.end
13881                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13882                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
13883                    duplication code instead.
13884                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
13885                    actually being the same function, and (2) order
13886                    equivalence of the two unions.
13887                    We can assert the later [but only at run time :-(]  */
13888                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13889                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13890                 /* FALLTHROUGH */
13891             case CXt_LOOP_FOR:
13892                 ncx->blk_loop.state_u.ary.ary
13893                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13894                 /* FALLTHROUGH */
13895             case CXt_LOOP_LAZYIV:
13896             case CXt_LOOP_PLAIN:
13897                 /* code common to all CXt_LOOP_* types */
13898                 if (CxPADLOOP(ncx)) {
13899                     ncx->blk_loop.itervar_u.oldcomppad
13900                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13901                                         ncx->blk_loop.itervar_u.oldcomppad);
13902                 } else {
13903                     ncx->blk_loop.itervar_u.gv
13904                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13905                                     param);
13906                 }
13907                 break;
13908             case CXt_FORMAT:
13909                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13910                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13911                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13912                                                      param);
13913                 break;
13914             case CXt_BLOCK:
13915             case CXt_NULL:
13916             case CXt_WHEN:
13917             case CXt_GIVEN:
13918                 break;
13919             }
13920         }
13921         --ix;
13922     }
13923     return ncxs;
13924 }
13925
13926 /* duplicate a stack info structure */
13927
13928 PERL_SI *
13929 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13930 {
13931     PERL_SI *nsi;
13932
13933     PERL_ARGS_ASSERT_SI_DUP;
13934
13935     if (!si)
13936         return (PERL_SI*)NULL;
13937
13938     /* look for it in the table first */
13939     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13940     if (nsi)
13941         return nsi;
13942
13943     /* create anew and remember what it is */
13944     Newxz(nsi, 1, PERL_SI);
13945     ptr_table_store(PL_ptr_table, si, nsi);
13946
13947     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13948     nsi->si_cxix        = si->si_cxix;
13949     nsi->si_cxmax       = si->si_cxmax;
13950     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13951     nsi->si_type        = si->si_type;
13952     nsi->si_prev        = si_dup(si->si_prev, param);
13953     nsi->si_next        = si_dup(si->si_next, param);
13954     nsi->si_markoff     = si->si_markoff;
13955
13956     return nsi;
13957 }
13958
13959 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13960 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13961 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13962 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13963 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13964 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13965 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13966 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13967 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13968 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13969 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13970 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13971 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13972 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13973 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13974 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13975
13976 /* XXXXX todo */
13977 #define pv_dup_inc(p)   SAVEPV(p)
13978 #define pv_dup(p)       SAVEPV(p)
13979 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13980
13981 /* map any object to the new equivent - either something in the
13982  * ptr table, or something in the interpreter structure
13983  */
13984
13985 void *
13986 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13987 {
13988     void *ret;
13989
13990     PERL_ARGS_ASSERT_ANY_DUP;
13991
13992     if (!v)
13993         return (void*)NULL;
13994
13995     /* look for it in the table first */
13996     ret = ptr_table_fetch(PL_ptr_table, v);
13997     if (ret)
13998         return ret;
13999
14000     /* see if it is part of the interpreter structure */
14001     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14002         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14003     else {
14004         ret = v;
14005     }
14006
14007     return ret;
14008 }
14009
14010 /* duplicate the save stack */
14011
14012 ANY *
14013 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14014 {
14015     dVAR;
14016     ANY * const ss      = proto_perl->Isavestack;
14017     const I32 max       = proto_perl->Isavestack_max;
14018     I32 ix              = proto_perl->Isavestack_ix;
14019     ANY *nss;
14020     const SV *sv;
14021     const GV *gv;
14022     const AV *av;
14023     const HV *hv;
14024     void* ptr;
14025     int intval;
14026     long longval;
14027     GP *gp;
14028     IV iv;
14029     I32 i;
14030     char *c = NULL;
14031     void (*dptr) (void*);
14032     void (*dxptr) (pTHX_ void*);
14033
14034     PERL_ARGS_ASSERT_SS_DUP;
14035
14036     Newxz(nss, max, ANY);
14037
14038     while (ix > 0) {
14039         const UV uv = POPUV(ss,ix);
14040         const U8 type = (U8)uv & SAVE_MASK;
14041
14042         TOPUV(nss,ix) = uv;
14043         switch (type) {
14044         case SAVEt_CLEARSV:
14045         case SAVEt_CLEARPADRANGE:
14046             break;
14047         case SAVEt_HELEM:               /* hash element */
14048         case SAVEt_SV:                  /* scalar reference */
14049             sv = (const SV *)POPPTR(ss,ix);
14050             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14051             /* FALLTHROUGH */
14052         case SAVEt_ITEM:                        /* normal string */
14053         case SAVEt_GVSV:                        /* scalar slot in GV */
14054             sv = (const SV *)POPPTR(ss,ix);
14055             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14056             if (type == SAVEt_SV)
14057                 break;
14058             /* FALLTHROUGH */
14059         case SAVEt_FREESV:
14060         case SAVEt_MORTALIZESV:
14061         case SAVEt_READONLY_OFF:
14062             sv = (const SV *)POPPTR(ss,ix);
14063             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14064             break;
14065         case SAVEt_FREEPADNAME:
14066             ptr = POPPTR(ss,ix);
14067             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14068             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14069             break;
14070         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14071             c = (char*)POPPTR(ss,ix);
14072             TOPPTR(nss,ix) = savesharedpv(c);
14073             ptr = POPPTR(ss,ix);
14074             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14075             break;
14076         case SAVEt_GENERIC_SVREF:               /* generic sv */
14077         case SAVEt_SVREF:                       /* scalar reference */
14078             sv = (const SV *)POPPTR(ss,ix);
14079             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14080             if (type == SAVEt_SVREF)
14081                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14082             ptr = POPPTR(ss,ix);
14083             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14084             break;
14085         case SAVEt_GVSLOT:              /* any slot in GV */
14086             sv = (const SV *)POPPTR(ss,ix);
14087             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14088             ptr = POPPTR(ss,ix);
14089             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14090             sv = (const SV *)POPPTR(ss,ix);
14091             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14092             break;
14093         case SAVEt_HV:                          /* hash reference */
14094         case SAVEt_AV:                          /* array reference */
14095             sv = (const SV *) POPPTR(ss,ix);
14096             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14097             /* FALLTHROUGH */
14098         case SAVEt_COMPPAD:
14099         case SAVEt_NSTAB:
14100             sv = (const SV *) POPPTR(ss,ix);
14101             TOPPTR(nss,ix) = sv_dup(sv, param);
14102             break;
14103         case SAVEt_INT:                         /* int reference */
14104             ptr = POPPTR(ss,ix);
14105             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14106             intval = (int)POPINT(ss,ix);
14107             TOPINT(nss,ix) = intval;
14108             break;
14109         case SAVEt_LONG:                        /* long reference */
14110             ptr = POPPTR(ss,ix);
14111             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14112             longval = (long)POPLONG(ss,ix);
14113             TOPLONG(nss,ix) = longval;
14114             break;
14115         case SAVEt_I32:                         /* I32 reference */
14116             ptr = POPPTR(ss,ix);
14117             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14118             i = POPINT(ss,ix);
14119             TOPINT(nss,ix) = i;
14120             break;
14121         case SAVEt_IV:                          /* IV reference */
14122         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14123             ptr = POPPTR(ss,ix);
14124             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14125             iv = POPIV(ss,ix);
14126             TOPIV(nss,ix) = iv;
14127             break;
14128         case SAVEt_HPTR:                        /* HV* reference */
14129         case SAVEt_APTR:                        /* AV* reference */
14130         case SAVEt_SPTR:                        /* SV* reference */
14131             ptr = POPPTR(ss,ix);
14132             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14133             sv = (const SV *)POPPTR(ss,ix);
14134             TOPPTR(nss,ix) = sv_dup(sv, param);
14135             break;
14136         case SAVEt_VPTR:                        /* random* reference */
14137             ptr = POPPTR(ss,ix);
14138             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14139             /* FALLTHROUGH */
14140         case SAVEt_INT_SMALL:
14141         case SAVEt_I32_SMALL:
14142         case SAVEt_I16:                         /* I16 reference */
14143         case SAVEt_I8:                          /* I8 reference */
14144         case SAVEt_BOOL:
14145             ptr = POPPTR(ss,ix);
14146             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14147             break;
14148         case SAVEt_GENERIC_PVREF:               /* generic char* */
14149         case SAVEt_PPTR:                        /* char* reference */
14150             ptr = POPPTR(ss,ix);
14151             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14152             c = (char*)POPPTR(ss,ix);
14153             TOPPTR(nss,ix) = pv_dup(c);
14154             break;
14155         case SAVEt_GP:                          /* scalar reference */
14156             gp = (GP*)POPPTR(ss,ix);
14157             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14158             (void)GpREFCNT_inc(gp);
14159             gv = (const GV *)POPPTR(ss,ix);
14160             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14161             break;
14162         case SAVEt_FREEOP:
14163             ptr = POPPTR(ss,ix);
14164             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14165                 /* these are assumed to be refcounted properly */
14166                 OP *o;
14167                 switch (((OP*)ptr)->op_type) {
14168                 case OP_LEAVESUB:
14169                 case OP_LEAVESUBLV:
14170                 case OP_LEAVEEVAL:
14171                 case OP_LEAVE:
14172                 case OP_SCOPE:
14173                 case OP_LEAVEWRITE:
14174                     TOPPTR(nss,ix) = ptr;
14175                     o = (OP*)ptr;
14176                     OP_REFCNT_LOCK;
14177                     (void) OpREFCNT_inc(o);
14178                     OP_REFCNT_UNLOCK;
14179                     break;
14180                 default:
14181                     TOPPTR(nss,ix) = NULL;
14182                     break;
14183                 }
14184             }
14185             else
14186                 TOPPTR(nss,ix) = NULL;
14187             break;
14188         case SAVEt_FREECOPHH:
14189             ptr = POPPTR(ss,ix);
14190             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14191             break;
14192         case SAVEt_ADELETE:
14193             av = (const AV *)POPPTR(ss,ix);
14194             TOPPTR(nss,ix) = av_dup_inc(av, param);
14195             i = POPINT(ss,ix);
14196             TOPINT(nss,ix) = i;
14197             break;
14198         case SAVEt_DELETE:
14199             hv = (const HV *)POPPTR(ss,ix);
14200             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14201             i = POPINT(ss,ix);
14202             TOPINT(nss,ix) = i;
14203             /* FALLTHROUGH */
14204         case SAVEt_FREEPV:
14205             c = (char*)POPPTR(ss,ix);
14206             TOPPTR(nss,ix) = pv_dup_inc(c);
14207             break;
14208         case SAVEt_STACK_POS:           /* Position on Perl stack */
14209             i = POPINT(ss,ix);
14210             TOPINT(nss,ix) = i;
14211             break;
14212         case SAVEt_DESTRUCTOR:
14213             ptr = POPPTR(ss,ix);
14214             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14215             dptr = POPDPTR(ss,ix);
14216             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14217                                         any_dup(FPTR2DPTR(void *, dptr),
14218                                                 proto_perl));
14219             break;
14220         case SAVEt_DESTRUCTOR_X:
14221             ptr = POPPTR(ss,ix);
14222             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14223             dxptr = POPDXPTR(ss,ix);
14224             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14225                                          any_dup(FPTR2DPTR(void *, dxptr),
14226                                                  proto_perl));
14227             break;
14228         case SAVEt_REGCONTEXT:
14229         case SAVEt_ALLOC:
14230             ix -= uv >> SAVE_TIGHT_SHIFT;
14231             break;
14232         case SAVEt_AELEM:               /* array element */
14233             sv = (const SV *)POPPTR(ss,ix);
14234             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14235             i = POPINT(ss,ix);
14236             TOPINT(nss,ix) = i;
14237             av = (const AV *)POPPTR(ss,ix);
14238             TOPPTR(nss,ix) = av_dup_inc(av, param);
14239             break;
14240         case SAVEt_OP:
14241             ptr = POPPTR(ss,ix);
14242             TOPPTR(nss,ix) = ptr;
14243             break;
14244         case SAVEt_HINTS:
14245             ptr = POPPTR(ss,ix);
14246             ptr = cophh_copy((COPHH*)ptr);
14247             TOPPTR(nss,ix) = ptr;
14248             i = POPINT(ss,ix);
14249             TOPINT(nss,ix) = i;
14250             if (i & HINT_LOCALIZE_HH) {
14251                 hv = (const HV *)POPPTR(ss,ix);
14252                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14253             }
14254             break;
14255         case SAVEt_PADSV_AND_MORTALIZE:
14256             longval = (long)POPLONG(ss,ix);
14257             TOPLONG(nss,ix) = longval;
14258             ptr = POPPTR(ss,ix);
14259             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14260             sv = (const SV *)POPPTR(ss,ix);
14261             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14262             break;
14263         case SAVEt_SET_SVFLAGS:
14264             i = POPINT(ss,ix);
14265             TOPINT(nss,ix) = i;
14266             i = POPINT(ss,ix);
14267             TOPINT(nss,ix) = i;
14268             sv = (const SV *)POPPTR(ss,ix);
14269             TOPPTR(nss,ix) = sv_dup(sv, param);
14270             break;
14271         case SAVEt_COMPILE_WARNINGS:
14272             ptr = POPPTR(ss,ix);
14273             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14274             break;
14275         case SAVEt_PARSER:
14276             ptr = POPPTR(ss,ix);
14277             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14278             break;
14279         case SAVEt_GP_ALIASED_SV: {
14280             GP * gp_ptr = (GP *)POPPTR(ss,ix);
14281             GP * new_gp_ptr = gp_dup(gp_ptr, param);
14282             TOPPTR(nss,ix) = new_gp_ptr;
14283             new_gp_ptr->gp_refcnt++;
14284             break;
14285         }
14286         default:
14287             Perl_croak(aTHX_
14288                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14289         }
14290     }
14291
14292     return nss;
14293 }
14294
14295
14296 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14297  * flag to the result. This is done for each stash before cloning starts,
14298  * so we know which stashes want their objects cloned */
14299
14300 static void
14301 do_mark_cloneable_stash(pTHX_ SV *const sv)
14302 {
14303     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14304     if (hvname) {
14305         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14306         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14307         if (cloner && GvCV(cloner)) {
14308             dSP;
14309             UV status;
14310
14311             ENTER;
14312             SAVETMPS;
14313             PUSHMARK(SP);
14314             mXPUSHs(newSVhek(hvname));
14315             PUTBACK;
14316             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14317             SPAGAIN;
14318             status = POPu;
14319             PUTBACK;
14320             FREETMPS;
14321             LEAVE;
14322             if (status)
14323                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14324         }
14325     }
14326 }
14327
14328
14329
14330 /*
14331 =for apidoc perl_clone
14332
14333 Create and return a new interpreter by cloning the current one.
14334
14335 perl_clone takes these flags as parameters:
14336
14337 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
14338 without it we only clone the data and zero the stacks,
14339 with it we copy the stacks and the new perl interpreter is
14340 ready to run at the exact same point as the previous one.
14341 The pseudo-fork code uses COPY_STACKS while the
14342 threads->create doesn't.
14343
14344 CLONEf_KEEP_PTR_TABLE -
14345 perl_clone keeps a ptr_table with the pointer of the old
14346 variable as a key and the new variable as a value,
14347 this allows it to check if something has been cloned and not
14348 clone it again but rather just use the value and increase the
14349 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
14350 the ptr_table using the function
14351 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14352 reason to keep it around is if you want to dup some of your own
14353 variable who are outside the graph perl scans, example of this
14354 code is in threads.xs create.
14355
14356 CLONEf_CLONE_HOST -
14357 This is a win32 thing, it is ignored on unix, it tells perls
14358 win32host code (which is c++) to clone itself, this is needed on
14359 win32 if you want to run two threads at the same time,
14360 if you just want to do some stuff in a separate perl interpreter
14361 and then throw it away and return to the original one,
14362 you don't need to do anything.
14363
14364 =cut
14365 */
14366
14367 /* XXX the above needs expanding by someone who actually understands it ! */
14368 EXTERN_C PerlInterpreter *
14369 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14370
14371 PerlInterpreter *
14372 perl_clone(PerlInterpreter *proto_perl, UV flags)
14373 {
14374    dVAR;
14375 #ifdef PERL_IMPLICIT_SYS
14376
14377     PERL_ARGS_ASSERT_PERL_CLONE;
14378
14379    /* perlhost.h so we need to call into it
14380    to clone the host, CPerlHost should have a c interface, sky */
14381
14382    if (flags & CLONEf_CLONE_HOST) {
14383        return perl_clone_host(proto_perl,flags);
14384    }
14385    return perl_clone_using(proto_perl, flags,
14386                             proto_perl->IMem,
14387                             proto_perl->IMemShared,
14388                             proto_perl->IMemParse,
14389                             proto_perl->IEnv,
14390                             proto_perl->IStdIO,
14391                             proto_perl->ILIO,
14392                             proto_perl->IDir,
14393                             proto_perl->ISock,
14394                             proto_perl->IProc);
14395 }
14396
14397 PerlInterpreter *
14398 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14399                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14400                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14401                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14402                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14403                  struct IPerlProc* ipP)
14404 {
14405     /* XXX many of the string copies here can be optimized if they're
14406      * constants; they need to be allocated as common memory and just
14407      * their pointers copied. */
14408
14409     IV i;
14410     CLONE_PARAMS clone_params;
14411     CLONE_PARAMS* const param = &clone_params;
14412
14413     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14414
14415     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14416 #else           /* !PERL_IMPLICIT_SYS */
14417     IV i;
14418     CLONE_PARAMS clone_params;
14419     CLONE_PARAMS* param = &clone_params;
14420     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14421
14422     PERL_ARGS_ASSERT_PERL_CLONE;
14423 #endif          /* PERL_IMPLICIT_SYS */
14424
14425     /* for each stash, determine whether its objects should be cloned */
14426     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14427     PERL_SET_THX(my_perl);
14428
14429 #ifdef DEBUGGING
14430     PoisonNew(my_perl, 1, PerlInterpreter);
14431     PL_op = NULL;
14432     PL_curcop = NULL;
14433     PL_defstash = NULL; /* may be used by perl malloc() */
14434     PL_markstack = 0;
14435     PL_scopestack = 0;
14436     PL_scopestack_name = 0;
14437     PL_savestack = 0;
14438     PL_savestack_ix = 0;
14439     PL_savestack_max = -1;
14440     PL_sig_pending = 0;
14441     PL_parser = NULL;
14442     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14443     Zero(&PL_padname_undef, 1, PADNAME);
14444     Zero(&PL_padname_const, 1, PADNAME);
14445 #  ifdef DEBUG_LEAKING_SCALARS
14446     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14447 #  endif
14448 #  ifdef PERL_TRACE_OPS
14449     Zero(PL_op_exec_cnt, OP_max+2, UV);
14450 #  endif
14451 #else   /* !DEBUGGING */
14452     Zero(my_perl, 1, PerlInterpreter);
14453 #endif  /* DEBUGGING */
14454
14455 #ifdef PERL_IMPLICIT_SYS
14456     /* host pointers */
14457     PL_Mem              = ipM;
14458     PL_MemShared        = ipMS;
14459     PL_MemParse         = ipMP;
14460     PL_Env              = ipE;
14461     PL_StdIO            = ipStd;
14462     PL_LIO              = ipLIO;
14463     PL_Dir              = ipD;
14464     PL_Sock             = ipS;
14465     PL_Proc             = ipP;
14466 #endif          /* PERL_IMPLICIT_SYS */
14467
14468
14469     param->flags = flags;
14470     /* Nothing in the core code uses this, but we make it available to
14471        extensions (using mg_dup).  */
14472     param->proto_perl = proto_perl;
14473     /* Likely nothing will use this, but it is initialised to be consistent
14474        with Perl_clone_params_new().  */
14475     param->new_perl = my_perl;
14476     param->unreferenced = NULL;
14477
14478
14479     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14480
14481     PL_body_arenas = NULL;
14482     Zero(&PL_body_roots, 1, PL_body_roots);
14483     
14484     PL_sv_count         = 0;
14485     PL_sv_root          = NULL;
14486     PL_sv_arenaroot     = NULL;
14487
14488     PL_debug            = proto_perl->Idebug;
14489
14490     /* dbargs array probably holds garbage */
14491     PL_dbargs           = NULL;
14492
14493     PL_compiling = proto_perl->Icompiling;
14494
14495     /* pseudo environmental stuff */
14496     PL_origargc         = proto_perl->Iorigargc;
14497     PL_origargv         = proto_perl->Iorigargv;
14498
14499 #ifndef NO_TAINT_SUPPORT
14500     /* Set tainting stuff before PerlIO_debug can possibly get called */
14501     PL_tainting         = proto_perl->Itainting;
14502     PL_taint_warn       = proto_perl->Itaint_warn;
14503 #else
14504     PL_tainting         = FALSE;
14505     PL_taint_warn       = FALSE;
14506 #endif
14507
14508     PL_minus_c          = proto_perl->Iminus_c;
14509
14510     PL_localpatches     = proto_perl->Ilocalpatches;
14511     PL_splitstr         = proto_perl->Isplitstr;
14512     PL_minus_n          = proto_perl->Iminus_n;
14513     PL_minus_p          = proto_perl->Iminus_p;
14514     PL_minus_l          = proto_perl->Iminus_l;
14515     PL_minus_a          = proto_perl->Iminus_a;
14516     PL_minus_E          = proto_perl->Iminus_E;
14517     PL_minus_F          = proto_perl->Iminus_F;
14518     PL_doswitches       = proto_perl->Idoswitches;
14519     PL_dowarn           = proto_perl->Idowarn;
14520     PL_sawalias         = proto_perl->Isawalias;
14521 #ifdef PERL_SAWAMPERSAND
14522     PL_sawampersand     = proto_perl->Isawampersand;
14523 #endif
14524     PL_unsafe           = proto_perl->Iunsafe;
14525     PL_perldb           = proto_perl->Iperldb;
14526     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14527     PL_exit_flags       = proto_perl->Iexit_flags;
14528
14529     /* XXX time(&PL_basetime) when asked for? */
14530     PL_basetime         = proto_perl->Ibasetime;
14531
14532     PL_maxsysfd         = proto_perl->Imaxsysfd;
14533     PL_statusvalue      = proto_perl->Istatusvalue;
14534 #ifdef __VMS
14535     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14536 #else
14537     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14538 #endif
14539
14540     /* RE engine related */
14541     PL_regmatch_slab    = NULL;
14542     PL_reg_curpm        = NULL;
14543
14544     PL_sub_generation   = proto_perl->Isub_generation;
14545
14546     /* funky return mechanisms */
14547     PL_forkprocess      = proto_perl->Iforkprocess;
14548
14549     /* internal state */
14550     PL_maxo             = proto_perl->Imaxo;
14551
14552     PL_main_start       = proto_perl->Imain_start;
14553     PL_eval_root        = proto_perl->Ieval_root;
14554     PL_eval_start       = proto_perl->Ieval_start;
14555
14556     PL_filemode         = proto_perl->Ifilemode;
14557     PL_lastfd           = proto_perl->Ilastfd;
14558     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14559     PL_Argv             = NULL;
14560     PL_Cmd              = NULL;
14561     PL_gensym           = proto_perl->Igensym;
14562
14563     PL_laststatval      = proto_perl->Ilaststatval;
14564     PL_laststype        = proto_perl->Ilaststype;
14565     PL_mess_sv          = NULL;
14566
14567     PL_profiledata      = NULL;
14568
14569     PL_generation       = proto_perl->Igeneration;
14570
14571     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14572     PL_in_clean_all     = proto_perl->Iin_clean_all;
14573
14574     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14575     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14576     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14577     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14578     PL_nomemok          = proto_perl->Inomemok;
14579     PL_an               = proto_perl->Ian;
14580     PL_evalseq          = proto_perl->Ievalseq;
14581     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14582     PL_origalen         = proto_perl->Iorigalen;
14583
14584     PL_sighandlerp      = proto_perl->Isighandlerp;
14585
14586     PL_runops           = proto_perl->Irunops;
14587
14588     PL_subline          = proto_perl->Isubline;
14589
14590     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14591
14592 #ifdef FCRYPT
14593     PL_cryptseen        = proto_perl->Icryptseen;
14594 #endif
14595
14596 #ifdef USE_LOCALE_COLLATE
14597     PL_collation_ix     = proto_perl->Icollation_ix;
14598     PL_collation_standard       = proto_perl->Icollation_standard;
14599     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14600     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14601 #endif /* USE_LOCALE_COLLATE */
14602
14603 #ifdef USE_LOCALE_NUMERIC
14604     PL_numeric_standard = proto_perl->Inumeric_standard;
14605     PL_numeric_local    = proto_perl->Inumeric_local;
14606 #endif /* !USE_LOCALE_NUMERIC */
14607
14608     /* Did the locale setup indicate UTF-8? */
14609     PL_utf8locale       = proto_perl->Iutf8locale;
14610     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14611     /* Unicode features (see perlrun/-C) */
14612     PL_unicode          = proto_perl->Iunicode;
14613
14614     /* Pre-5.8 signals control */
14615     PL_signals          = proto_perl->Isignals;
14616
14617     /* times() ticks per second */
14618     PL_clocktick        = proto_perl->Iclocktick;
14619
14620     /* Recursion stopper for PerlIO_find_layer */
14621     PL_in_load_module   = proto_perl->Iin_load_module;
14622
14623     /* sort() routine */
14624     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14625
14626     /* Not really needed/useful since the reenrant_retint is "volatile",
14627      * but do it for consistency's sake. */
14628     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14629
14630     /* Hooks to shared SVs and locks. */
14631     PL_sharehook        = proto_perl->Isharehook;
14632     PL_lockhook         = proto_perl->Ilockhook;
14633     PL_unlockhook       = proto_perl->Iunlockhook;
14634     PL_threadhook       = proto_perl->Ithreadhook;
14635     PL_destroyhook      = proto_perl->Idestroyhook;
14636     PL_signalhook       = proto_perl->Isignalhook;
14637
14638     PL_globhook         = proto_perl->Iglobhook;
14639
14640     /* swatch cache */
14641     PL_last_swash_hv    = NULL; /* reinits on demand */
14642     PL_last_swash_klen  = 0;
14643     PL_last_swash_key[0]= '\0';
14644     PL_last_swash_tmps  = (U8*)NULL;
14645     PL_last_swash_slen  = 0;
14646
14647     PL_srand_called     = proto_perl->Isrand_called;
14648     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14649
14650     if (flags & CLONEf_COPY_STACKS) {
14651         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14652         PL_tmps_ix              = proto_perl->Itmps_ix;
14653         PL_tmps_max             = proto_perl->Itmps_max;
14654         PL_tmps_floor           = proto_perl->Itmps_floor;
14655
14656         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14657          * NOTE: unlike the others! */
14658         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14659         PL_scopestack_max       = proto_perl->Iscopestack_max;
14660
14661         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14662          * NOTE: unlike the others! */
14663         PL_savestack_ix         = proto_perl->Isavestack_ix;
14664         PL_savestack_max        = proto_perl->Isavestack_max;
14665     }
14666
14667     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14668     PL_top_env          = &PL_start_env;
14669
14670     PL_op               = proto_perl->Iop;
14671
14672     PL_Sv               = NULL;
14673     PL_Xpv              = (XPV*)NULL;
14674     my_perl->Ina        = proto_perl->Ina;
14675
14676     PL_statbuf          = proto_perl->Istatbuf;
14677     PL_statcache        = proto_perl->Istatcache;
14678
14679 #ifndef NO_TAINT_SUPPORT
14680     PL_tainted          = proto_perl->Itainted;
14681 #else
14682     PL_tainted          = FALSE;
14683 #endif
14684     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14685
14686     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14687
14688     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14689     PL_restartop        = proto_perl->Irestartop;
14690     PL_in_eval          = proto_perl->Iin_eval;
14691     PL_delaymagic       = proto_perl->Idelaymagic;
14692     PL_phase            = proto_perl->Iphase;
14693     PL_localizing       = proto_perl->Ilocalizing;
14694
14695     PL_hv_fetch_ent_mh  = NULL;
14696     PL_modcount         = proto_perl->Imodcount;
14697     PL_lastgotoprobe    = NULL;
14698     PL_dumpindent       = proto_perl->Idumpindent;
14699
14700     PL_efloatbuf        = NULL;         /* reinits on demand */
14701     PL_efloatsize       = 0;                    /* reinits on demand */
14702
14703     /* regex stuff */
14704
14705     PL_colorset         = 0;            /* reinits PL_colors[] */
14706     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14707
14708     /* Pluggable optimizer */
14709     PL_peepp            = proto_perl->Ipeepp;
14710     PL_rpeepp           = proto_perl->Irpeepp;
14711     /* op_free() hook */
14712     PL_opfreehook       = proto_perl->Iopfreehook;
14713
14714 #ifdef USE_REENTRANT_API
14715     /* XXX: things like -Dm will segfault here in perlio, but doing
14716      *  PERL_SET_CONTEXT(proto_perl);
14717      * breaks too many other things
14718      */
14719     Perl_reentrant_init(aTHX);
14720 #endif
14721
14722     /* create SV map for pointer relocation */
14723     PL_ptr_table = ptr_table_new();
14724
14725     /* initialize these special pointers as early as possible */
14726     init_constants();
14727     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14728     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14729     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14730     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14731                     &PL_padname_const);
14732
14733     /* create (a non-shared!) shared string table */
14734     PL_strtab           = newHV();
14735     HvSHAREKEYS_off(PL_strtab);
14736     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14737     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14738
14739     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14740
14741     /* This PV will be free'd special way so must set it same way op.c does */
14742     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14743     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14744
14745     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14746     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14747     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14748     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14749
14750     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14751     /* This makes no difference to the implementation, as it always pushes
14752        and shifts pointers to other SVs without changing their reference
14753        count, with the array becoming empty before it is freed. However, it
14754        makes it conceptually clear what is going on, and will avoid some
14755        work inside av.c, filling slots between AvFILL() and AvMAX() with
14756        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14757     AvREAL_off(param->stashes);
14758
14759     if (!(flags & CLONEf_COPY_STACKS)) {
14760         param->unreferenced = newAV();
14761     }
14762
14763 #ifdef PERLIO_LAYERS
14764     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14765     PerlIO_clone(aTHX_ proto_perl, param);
14766 #endif
14767
14768     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14769     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14770     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14771     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14772     PL_xsubfilename     = proto_perl->Ixsubfilename;
14773     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14774     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14775
14776     /* switches */
14777     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14778     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14779     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14780
14781     /* magical thingies */
14782
14783     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14784     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14785
14786     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14787     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14788     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14789
14790    
14791     /* Clone the regex array */
14792     /* ORANGE FIXME for plugins, probably in the SV dup code.
14793        newSViv(PTR2IV(CALLREGDUPE(
14794        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14795     */
14796     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14797     PL_regex_pad = AvARRAY(PL_regex_padav);
14798
14799     PL_stashpadmax      = proto_perl->Istashpadmax;
14800     PL_stashpadix       = proto_perl->Istashpadix ;
14801     Newx(PL_stashpad, PL_stashpadmax, HV *);
14802     {
14803         PADOFFSET o = 0;
14804         for (; o < PL_stashpadmax; ++o)
14805             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14806     }
14807
14808     /* shortcuts to various I/O objects */
14809     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14810     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14811     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14812     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14813     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14814     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14815     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14816
14817     /* shortcuts to regexp stuff */
14818     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14819
14820     /* shortcuts to misc objects */
14821     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14822
14823     /* shortcuts to debugging objects */
14824     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14825     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14826     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14827     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14828     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14829     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14830     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14831
14832     /* symbol tables */
14833     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14834     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14835     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14836     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14837     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14838
14839     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14840     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14841     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14842     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14843     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14844     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14845     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14846     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14847     PL_savebegin        = proto_perl->Isavebegin;
14848
14849     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14850
14851     /* subprocess state */
14852     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14853
14854     if (proto_perl->Iop_mask)
14855         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14856     else
14857         PL_op_mask      = NULL;
14858     /* PL_asserting        = proto_perl->Iasserting; */
14859
14860     /* current interpreter roots */
14861     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14862     OP_REFCNT_LOCK;
14863     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14864     OP_REFCNT_UNLOCK;
14865
14866     /* runtime control stuff */
14867     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14868
14869     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14870
14871     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14872
14873     /* interpreter atexit processing */
14874     PL_exitlistlen      = proto_perl->Iexitlistlen;
14875     if (PL_exitlistlen) {
14876         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14877         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14878     }
14879     else
14880         PL_exitlist     = (PerlExitListEntry*)NULL;
14881
14882     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14883     if (PL_my_cxt_size) {
14884         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14885         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14886 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14887         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14888         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14889 #endif
14890     }
14891     else {
14892         PL_my_cxt_list  = (void**)NULL;
14893 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14894         PL_my_cxt_keys  = (const char**)NULL;
14895 #endif
14896     }
14897     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14898     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14899     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14900     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14901
14902     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14903
14904     PAD_CLONE_VARS(proto_perl, param);
14905
14906 #ifdef HAVE_INTERP_INTERN
14907     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14908 #endif
14909
14910     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14911
14912 #ifdef PERL_USES_PL_PIDSTATUS
14913     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14914 #endif
14915     PL_osname           = SAVEPV(proto_perl->Iosname);
14916     PL_parser           = parser_dup(proto_perl->Iparser, param);
14917
14918     /* XXX this only works if the saved cop has already been cloned */
14919     if (proto_perl->Iparser) {
14920         PL_parser->saved_curcop = (COP*)any_dup(
14921                                     proto_perl->Iparser->saved_curcop,
14922                                     proto_perl);
14923     }
14924
14925     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14926
14927 #ifdef USE_LOCALE_CTYPE
14928     /* Should we warn if uses locale? */
14929     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
14930 #endif
14931
14932 #ifdef USE_LOCALE_COLLATE
14933     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14934 #endif /* USE_LOCALE_COLLATE */
14935
14936 #ifdef USE_LOCALE_NUMERIC
14937     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14938     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14939 #endif /* !USE_LOCALE_NUMERIC */
14940
14941     /* Unicode inversion lists */
14942     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14943     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14944     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14945     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14946
14947     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14948     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14949
14950     /* utf8 character class swashes */
14951     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14952         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14953     }
14954     for (i = 0; i < POSIX_CC_COUNT; i++) {
14955         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14956     }
14957     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
14958     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
14959     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
14960     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14961     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14962     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14963     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14964     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14965     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14966     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14967     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14968     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14969     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14970     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14971     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14972     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14973     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14974
14975     if (proto_perl->Ipsig_pend) {
14976         Newxz(PL_psig_pend, SIG_SIZE, int);
14977     }
14978     else {
14979         PL_psig_pend    = (int*)NULL;
14980     }
14981
14982     if (proto_perl->Ipsig_name) {
14983         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14984         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14985                             param);
14986         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14987     }
14988     else {
14989         PL_psig_ptr     = (SV**)NULL;
14990         PL_psig_name    = (SV**)NULL;
14991     }
14992
14993     if (flags & CLONEf_COPY_STACKS) {
14994         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14995         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14996                             PL_tmps_ix+1, param);
14997
14998         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14999         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15000         Newxz(PL_markstack, i, I32);
15001         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15002                                                   - proto_perl->Imarkstack);
15003         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15004                                                   - proto_perl->Imarkstack);
15005         Copy(proto_perl->Imarkstack, PL_markstack,
15006              PL_markstack_ptr - PL_markstack + 1, I32);
15007
15008         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15009          * NOTE: unlike the others! */
15010         Newxz(PL_scopestack, PL_scopestack_max, I32);
15011         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15012
15013 #ifdef DEBUGGING
15014         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15015         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15016 #endif
15017         /* reset stack AV to correct length before its duped via
15018          * PL_curstackinfo */
15019         AvFILLp(proto_perl->Icurstack) =
15020                             proto_perl->Istack_sp - proto_perl->Istack_base;
15021
15022         /* NOTE: si_dup() looks at PL_markstack */
15023         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15024
15025         /* PL_curstack          = PL_curstackinfo->si_stack; */
15026         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15027         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15028
15029         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15030         PL_stack_base           = AvARRAY(PL_curstack);
15031         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15032                                                    - proto_perl->Istack_base);
15033         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15034
15035         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15036         PL_savestack            = ss_dup(proto_perl, param);
15037     }
15038     else {
15039         init_stacks();
15040         ENTER;                  /* perl_destruct() wants to LEAVE; */
15041     }
15042
15043     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15044     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15045
15046     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15047     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15048     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15049     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15050     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15051     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15052
15053     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15054
15055     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15056     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15057     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15058
15059     PL_stashcache       = newHV();
15060
15061     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15062                                             proto_perl->Iwatchaddr);
15063     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15064     if (PL_debug && PL_watchaddr) {
15065         PerlIO_printf(Perl_debug_log,
15066           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15067           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15068           PTR2UV(PL_watchok));
15069     }
15070
15071     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15072     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15073     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15074
15075     /* Call the ->CLONE method, if it exists, for each of the stashes
15076        identified by sv_dup() above.
15077     */
15078     while(av_tindex(param->stashes) != -1) {
15079         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15080         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15081         if (cloner && GvCV(cloner)) {
15082             dSP;
15083             ENTER;
15084             SAVETMPS;
15085             PUSHMARK(SP);
15086             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15087             PUTBACK;
15088             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15089             FREETMPS;
15090             LEAVE;
15091         }
15092     }
15093
15094     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15095         ptr_table_free(PL_ptr_table);
15096         PL_ptr_table = NULL;
15097     }
15098
15099     if (!(flags & CLONEf_COPY_STACKS)) {
15100         unreferenced_to_tmp_stack(param->unreferenced);
15101     }
15102
15103     SvREFCNT_dec(param->stashes);
15104
15105     /* orphaned? eg threads->new inside BEGIN or use */
15106     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15107         SvREFCNT_inc_simple_void(PL_compcv);
15108         SAVEFREESV(PL_compcv);
15109     }
15110
15111     return my_perl;
15112 }
15113
15114 static void
15115 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15116 {
15117     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15118     
15119     if (AvFILLp(unreferenced) > -1) {
15120         SV **svp = AvARRAY(unreferenced);
15121         SV **const last = svp + AvFILLp(unreferenced);
15122         SSize_t count = 0;
15123
15124         do {
15125             if (SvREFCNT(*svp) == 1)
15126                 ++count;
15127         } while (++svp <= last);
15128
15129         EXTEND_MORTAL(count);
15130         svp = AvARRAY(unreferenced);
15131
15132         do {
15133             if (SvREFCNT(*svp) == 1) {
15134                 /* Our reference is the only one to this SV. This means that
15135                    in this thread, the scalar effectively has a 0 reference.
15136                    That doesn't work (cleanup never happens), so donate our
15137                    reference to it onto the save stack. */
15138                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15139             } else {
15140                 /* As an optimisation, because we are already walking the
15141                    entire array, instead of above doing either
15142                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15143                    release our reference to the scalar, so that at the end of
15144                    the array owns zero references to the scalars it happens to
15145                    point to. We are effectively converting the array from
15146                    AvREAL() on to AvREAL() off. This saves the av_clear()
15147                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15148                    walking the array a second time.  */
15149                 SvREFCNT_dec(*svp);
15150             }
15151
15152         } while (++svp <= last);
15153         AvREAL_off(unreferenced);
15154     }
15155     SvREFCNT_dec_NN(unreferenced);
15156 }
15157
15158 void
15159 Perl_clone_params_del(CLONE_PARAMS *param)
15160 {
15161     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15162        happy: */
15163     PerlInterpreter *const to = param->new_perl;
15164     dTHXa(to);
15165     PerlInterpreter *const was = PERL_GET_THX;
15166
15167     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15168
15169     if (was != to) {
15170         PERL_SET_THX(to);
15171     }
15172
15173     SvREFCNT_dec(param->stashes);
15174     if (param->unreferenced)
15175         unreferenced_to_tmp_stack(param->unreferenced);
15176
15177     Safefree(param);
15178
15179     if (was != to) {
15180         PERL_SET_THX(was);
15181     }
15182 }
15183
15184 CLONE_PARAMS *
15185 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15186 {
15187     dVAR;
15188     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15189        does a dTHX; to get the context from thread local storage.
15190        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15191        a version that passes in my_perl.  */
15192     PerlInterpreter *const was = PERL_GET_THX;
15193     CLONE_PARAMS *param;
15194
15195     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15196
15197     if (was != to) {
15198         PERL_SET_THX(to);
15199     }
15200
15201     /* Given that we've set the context, we can do this unshared.  */
15202     Newx(param, 1, CLONE_PARAMS);
15203
15204     param->flags = 0;
15205     param->proto_perl = from;
15206     param->new_perl = to;
15207     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15208     AvREAL_off(param->stashes);
15209     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15210
15211     if (was != to) {
15212         PERL_SET_THX(was);
15213     }
15214     return param;
15215 }
15216
15217 #endif /* USE_ITHREADS */
15218
15219 void
15220 Perl_init_constants(pTHX)
15221 {
15222     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15223     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15224     SvANY(&PL_sv_undef)         = NULL;
15225
15226     SvANY(&PL_sv_no)            = new_XPVNV();
15227     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15228     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15229                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15230                                   |SVp_POK|SVf_POK;
15231
15232     SvANY(&PL_sv_yes)           = new_XPVNV();
15233     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15234     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15235                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15236                                   |SVp_POK|SVf_POK;
15237
15238     SvPV_set(&PL_sv_no, (char*)PL_No);
15239     SvCUR_set(&PL_sv_no, 0);
15240     SvLEN_set(&PL_sv_no, 0);
15241     SvIV_set(&PL_sv_no, 0);
15242     SvNV_set(&PL_sv_no, 0);
15243
15244     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15245     SvCUR_set(&PL_sv_yes, 1);
15246     SvLEN_set(&PL_sv_yes, 0);
15247     SvIV_set(&PL_sv_yes, 1);
15248     SvNV_set(&PL_sv_yes, 1);
15249
15250     PadnamePV(&PL_padname_const) = (char *)PL_No;
15251 }
15252
15253 /*
15254 =head1 Unicode Support
15255
15256 =for apidoc sv_recode_to_utf8
15257
15258 The encoding is assumed to be an Encode object, on entry the PV
15259 of the sv is assumed to be octets in that encoding, and the sv
15260 will be converted into Unicode (and UTF-8).
15261
15262 If the sv already is UTF-8 (or if it is not POK), or if the encoding
15263 is not a reference, nothing is done to the sv.  If the encoding is not
15264 an C<Encode::XS> Encoding object, bad things will happen.
15265 (See F<lib/encoding.pm> and L<Encode>.)
15266
15267 The PV of the sv is returned.
15268
15269 =cut */
15270
15271 char *
15272 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15273 {
15274     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15275
15276     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15277         SV *uni;
15278         STRLEN len;
15279         const char *s;
15280         dSP;
15281         SV *nsv = sv;
15282         ENTER;
15283         PUSHSTACK;
15284         SAVETMPS;
15285         if (SvPADTMP(nsv)) {
15286             nsv = sv_newmortal();
15287             SvSetSV_nosteal(nsv, sv);
15288         }
15289         save_re_context();
15290         PUSHMARK(sp);
15291         EXTEND(SP, 3);
15292         PUSHs(encoding);
15293         PUSHs(nsv);
15294 /*
15295   NI-S 2002/07/09
15296   Passing sv_yes is wrong - it needs to be or'ed set of constants
15297   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15298   remove converted chars from source.
15299
15300   Both will default the value - let them.
15301
15302         XPUSHs(&PL_sv_yes);
15303 */
15304         PUTBACK;
15305         call_method("decode", G_SCALAR);
15306         SPAGAIN;
15307         uni = POPs;
15308         PUTBACK;
15309         s = SvPV_const(uni, len);
15310         if (s != SvPVX_const(sv)) {
15311             SvGROW(sv, len + 1);
15312             Move(s, SvPVX(sv), len + 1, char);
15313             SvCUR_set(sv, len);
15314         }
15315         FREETMPS;
15316         POPSTACK;
15317         LEAVE;
15318         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15319             /* clear pos and any utf8 cache */
15320             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15321             if (mg)
15322                 mg->mg_len = -1;
15323             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15324                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15325         }
15326         SvUTF8_on(sv);
15327         return SvPVX(sv);
15328     }
15329     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15330 }
15331
15332 /*
15333 =for apidoc sv_cat_decode
15334
15335 The encoding is assumed to be an Encode object, the PV of the ssv is
15336 assumed to be octets in that encoding and decoding the input starts
15337 from the position which (PV + *offset) pointed to.  The dsv will be
15338 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
15339 when the string tstr appears in decoding output or the input ends on
15340 the PV of the ssv.  The value which the offset points will be modified
15341 to the last input position on the ssv.
15342
15343 Returns TRUE if the terminator was found, else returns FALSE.
15344
15345 =cut */
15346
15347 bool
15348 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15349                    SV *ssv, int *offset, char *tstr, int tlen)
15350 {
15351     bool ret = FALSE;
15352
15353     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15354
15355     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15356         SV *offsv;
15357         dSP;
15358         ENTER;
15359         SAVETMPS;
15360         save_re_context();
15361         PUSHMARK(sp);
15362         EXTEND(SP, 6);
15363         PUSHs(encoding);
15364         PUSHs(dsv);
15365         PUSHs(ssv);
15366         offsv = newSViv(*offset);
15367         mPUSHs(offsv);
15368         mPUSHp(tstr, tlen);
15369         PUTBACK;
15370         call_method("cat_decode", G_SCALAR);
15371         SPAGAIN;
15372         ret = SvTRUE(TOPs);
15373         *offset = SvIV(offsv);
15374         PUTBACK;
15375         FREETMPS;
15376         LEAVE;
15377     }
15378     else
15379         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15380     return ret;
15381
15382 }
15383
15384 /* ---------------------------------------------------------------------
15385  *
15386  * support functions for report_uninit()
15387  */
15388
15389 /* the maxiumum size of array or hash where we will scan looking
15390  * for the undefined element that triggered the warning */
15391
15392 #define FUV_MAX_SEARCH_SIZE 1000
15393
15394 /* Look for an entry in the hash whose value has the same SV as val;
15395  * If so, return a mortal copy of the key. */
15396
15397 STATIC SV*
15398 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15399 {
15400     dVAR;
15401     HE **array;
15402     I32 i;
15403
15404     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15405
15406     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15407                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15408         return NULL;
15409
15410     array = HvARRAY(hv);
15411
15412     for (i=HvMAX(hv); i>=0; i--) {
15413         HE *entry;
15414         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15415             if (HeVAL(entry) != val)
15416                 continue;
15417             if (    HeVAL(entry) == &PL_sv_undef ||
15418                     HeVAL(entry) == &PL_sv_placeholder)
15419                 continue;
15420             if (!HeKEY(entry))
15421                 return NULL;
15422             if (HeKLEN(entry) == HEf_SVKEY)
15423                 return sv_mortalcopy(HeKEY_sv(entry));
15424             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15425         }
15426     }
15427     return NULL;
15428 }
15429
15430 /* Look for an entry in the array whose value has the same SV as val;
15431  * If so, return the index, otherwise return -1. */
15432
15433 STATIC I32
15434 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15435 {
15436     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15437
15438     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15439                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15440         return -1;
15441
15442     if (val != &PL_sv_undef) {
15443         SV ** const svp = AvARRAY(av);
15444         I32 i;
15445
15446         for (i=AvFILLp(av); i>=0; i--)
15447             if (svp[i] == val)
15448                 return i;
15449     }
15450     return -1;
15451 }
15452
15453 /* varname(): return the name of a variable, optionally with a subscript.
15454  * If gv is non-zero, use the name of that global, along with gvtype (one
15455  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15456  * targ.  Depending on the value of the subscript_type flag, return:
15457  */
15458
15459 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15460 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15461 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15462 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15463
15464 SV*
15465 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15466         const SV *const keyname, I32 aindex, int subscript_type)
15467 {
15468
15469     SV * const name = sv_newmortal();
15470     if (gv && isGV(gv)) {
15471         char buffer[2];
15472         buffer[0] = gvtype;
15473         buffer[1] = 0;
15474
15475         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15476
15477         gv_fullname4(name, gv, buffer, 0);
15478
15479         if ((unsigned int)SvPVX(name)[1] <= 26) {
15480             buffer[0] = '^';
15481             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15482
15483             /* Swap the 1 unprintable control character for the 2 byte pretty
15484                version - ie substr($name, 1, 1) = $buffer; */
15485             sv_insert(name, 1, 1, buffer, 2);
15486         }
15487     }
15488     else {
15489         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15490         PADNAME *sv;
15491
15492         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15493
15494         if (!cv || !CvPADLIST(cv))
15495             return NULL;
15496         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15497         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15498         SvUTF8_on(name);
15499     }
15500
15501     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15502         SV * const sv = newSV(0);
15503         *SvPVX(name) = '$';
15504         Perl_sv_catpvf(aTHX_ name, "{%s}",
15505             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15506                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15507         SvREFCNT_dec_NN(sv);
15508     }
15509     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15510         *SvPVX(name) = '$';
15511         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15512     }
15513     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15514         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15515         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15516     }
15517
15518     return name;
15519 }
15520
15521
15522 /*
15523 =for apidoc find_uninit_var
15524
15525 Find the name of the undefined variable (if any) that caused the operator
15526 to issue a "Use of uninitialized value" warning.
15527 If match is true, only return a name if its value matches uninit_sv.
15528 So roughly speaking, if a unary operator (such as OP_COS) generates a
15529 warning, then following the direct child of the op may yield an
15530 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15531 other hand, with OP_ADD there are two branches to follow, so we only print
15532 the variable name if we get an exact match.
15533 desc_p points to a string pointer holding the description of the op.
15534 This may be updated if needed.
15535
15536 The name is returned as a mortal SV.
15537
15538 Assumes that PL_op is the op that originally triggered the error, and that
15539 PL_comppad/PL_curpad points to the currently executing pad.
15540
15541 =cut
15542 */
15543
15544 STATIC SV *
15545 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15546                   bool match, const char **desc_p)
15547 {
15548     dVAR;
15549     SV *sv;
15550     const GV *gv;
15551     const OP *o, *o2, *kid;
15552
15553     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15554
15555     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15556                             uninit_sv == &PL_sv_placeholder)))
15557         return NULL;
15558
15559     switch (obase->op_type) {
15560
15561     case OP_RV2AV:
15562     case OP_RV2HV:
15563     case OP_PADAV:
15564     case OP_PADHV:
15565       {
15566         const bool pad  = (    obase->op_type == OP_PADAV
15567                             || obase->op_type == OP_PADHV
15568                             || obase->op_type == OP_PADRANGE
15569                           );
15570
15571         const bool hash = (    obase->op_type == OP_PADHV
15572                             || obase->op_type == OP_RV2HV
15573                             || (obase->op_type == OP_PADRANGE
15574                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15575                           );
15576         I32 index = 0;
15577         SV *keysv = NULL;
15578         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15579
15580         if (pad) { /* @lex, %lex */
15581             sv = PAD_SVl(obase->op_targ);
15582             gv = NULL;
15583         }
15584         else {
15585             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15586             /* @global, %global */
15587                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15588                 if (!gv)
15589                     break;
15590                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15591             }
15592             else if (obase == PL_op) /* @{expr}, %{expr} */
15593                 return find_uninit_var(cUNOPx(obase)->op_first,
15594                                                 uninit_sv, match, desc_p);
15595             else /* @{expr}, %{expr} as a sub-expression */
15596                 return NULL;
15597         }
15598
15599         /* attempt to find a match within the aggregate */
15600         if (hash) {
15601             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15602             if (keysv)
15603                 subscript_type = FUV_SUBSCRIPT_HASH;
15604         }
15605         else {
15606             index = find_array_subscript((const AV *)sv, uninit_sv);
15607             if (index >= 0)
15608                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15609         }
15610
15611         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15612             break;
15613
15614         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15615                                     keysv, index, subscript_type);
15616       }
15617
15618     case OP_RV2SV:
15619         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15620             /* $global */
15621             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15622             if (!gv || !GvSTASH(gv))
15623                 break;
15624             if (match && (GvSV(gv) != uninit_sv))
15625                 break;
15626             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15627         }
15628         /* ${expr} */
15629         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15630
15631     case OP_PADSV:
15632         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15633             break;
15634         return varname(NULL, '$', obase->op_targ,
15635                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15636
15637     case OP_GVSV:
15638         gv = cGVOPx_gv(obase);
15639         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15640             break;
15641         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15642
15643     case OP_AELEMFAST_LEX:
15644         if (match) {
15645             SV **svp;
15646             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15647             if (!av || SvRMAGICAL(av))
15648                 break;
15649             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15650             if (!svp || *svp != uninit_sv)
15651                 break;
15652         }
15653         return varname(NULL, '$', obase->op_targ,
15654                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15655     case OP_AELEMFAST:
15656         {
15657             gv = cGVOPx_gv(obase);
15658             if (!gv)
15659                 break;
15660             if (match) {
15661                 SV **svp;
15662                 AV *const av = GvAV(gv);
15663                 if (!av || SvRMAGICAL(av))
15664                     break;
15665                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15666                 if (!svp || *svp != uninit_sv)
15667                     break;
15668             }
15669             return varname(gv, '$', 0,
15670                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15671         }
15672         NOT_REACHED; /* NOTREACHED */
15673
15674     case OP_EXISTS:
15675         o = cUNOPx(obase)->op_first;
15676         if (!o || o->op_type != OP_NULL ||
15677                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15678             break;
15679         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15680
15681     case OP_AELEM:
15682     case OP_HELEM:
15683     {
15684         bool negate = FALSE;
15685
15686         if (PL_op == obase)
15687             /* $a[uninit_expr] or $h{uninit_expr} */
15688             return find_uninit_var(cBINOPx(obase)->op_last,
15689                                                 uninit_sv, match, desc_p);
15690
15691         gv = NULL;
15692         o = cBINOPx(obase)->op_first;
15693         kid = cBINOPx(obase)->op_last;
15694
15695         /* get the av or hv, and optionally the gv */
15696         sv = NULL;
15697         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15698             sv = PAD_SV(o->op_targ);
15699         }
15700         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15701                 && cUNOPo->op_first->op_type == OP_GV)
15702         {
15703             gv = cGVOPx_gv(cUNOPo->op_first);
15704             if (!gv)
15705                 break;
15706             sv = o->op_type
15707                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15708         }
15709         if (!sv)
15710             break;
15711
15712         if (kid && kid->op_type == OP_NEGATE) {
15713             negate = TRUE;
15714             kid = cUNOPx(kid)->op_first;
15715         }
15716
15717         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15718             /* index is constant */
15719             SV* kidsv;
15720             if (negate) {
15721                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15722                 sv_catsv(kidsv, cSVOPx_sv(kid));
15723             }
15724             else
15725                 kidsv = cSVOPx_sv(kid);
15726             if (match) {
15727                 if (SvMAGICAL(sv))
15728                     break;
15729                 if (obase->op_type == OP_HELEM) {
15730                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15731                     if (!he || HeVAL(he) != uninit_sv)
15732                         break;
15733                 }
15734                 else {
15735                     SV * const  opsv = cSVOPx_sv(kid);
15736                     const IV  opsviv = SvIV(opsv);
15737                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15738                         negate ? - opsviv : opsviv,
15739                         FALSE);
15740                     if (!svp || *svp != uninit_sv)
15741                         break;
15742                 }
15743             }
15744             if (obase->op_type == OP_HELEM)
15745                 return varname(gv, '%', o->op_targ,
15746                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15747             else
15748                 return varname(gv, '@', o->op_targ, NULL,
15749                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15750                     FUV_SUBSCRIPT_ARRAY);
15751         }
15752         else  {
15753             /* index is an expression;
15754              * attempt to find a match within the aggregate */
15755             if (obase->op_type == OP_HELEM) {
15756                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15757                 if (keysv)
15758                     return varname(gv, '%', o->op_targ,
15759                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15760             }
15761             else {
15762                 const I32 index
15763                     = find_array_subscript((const AV *)sv, uninit_sv);
15764                 if (index >= 0)
15765                     return varname(gv, '@', o->op_targ,
15766                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15767             }
15768             if (match)
15769                 break;
15770             return varname(gv,
15771                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15772                 ? '@' : '%'),
15773                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15774         }
15775         NOT_REACHED; /* NOTREACHED */
15776     }
15777
15778     case OP_MULTIDEREF: {
15779         /* If we were executing OP_MULTIDEREF when the undef warning
15780          * triggered, then it must be one of the index values within
15781          * that triggered it. If not, then the only possibility is that
15782          * the value retrieved by the last aggregate lookup might be the
15783          * culprit. For the former, we set PL_multideref_pc each time before
15784          * using an index, so work though the item list until we reach
15785          * that point. For the latter, just work through the entire item
15786          * list; the last aggregate retrieved will be the candidate.
15787          */
15788
15789         /* the named aggregate, if any */
15790         PADOFFSET agg_targ = 0;
15791         GV       *agg_gv   = NULL;
15792         /* the last-seen index */
15793         UV        index_type;
15794         PADOFFSET index_targ;
15795         GV       *index_gv;
15796         IV        index_const_iv = 0; /* init for spurious compiler warn */
15797         SV       *index_const_sv;
15798         int       depth = 0;  /* how many array/hash lookups we've done */
15799
15800         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15801         UNOP_AUX_item *last = NULL;
15802         UV actions = items->uv;
15803         bool is_hv;
15804
15805         if (PL_op == obase) {
15806             last = PL_multideref_pc;
15807             assert(last >= items && last <= items + items[-1].uv);
15808         }
15809
15810         assert(actions);
15811
15812         while (1) {
15813             is_hv = FALSE;
15814             switch (actions & MDEREF_ACTION_MASK) {
15815
15816             case MDEREF_reload:
15817                 actions = (++items)->uv;
15818                 continue;
15819
15820             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15821                 is_hv = TRUE;
15822                 /* FALLTHROUGH */
15823             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15824                 agg_targ = (++items)->pad_offset;
15825                 agg_gv = NULL;
15826                 break;
15827
15828             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15829                 is_hv = TRUE;
15830                 /* FALLTHROUGH */
15831             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15832                 agg_targ = 0;
15833                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15834                 assert(isGV_with_GP(agg_gv));
15835                 break;
15836
15837             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15838             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15839                 ++items;
15840                 /* FALLTHROUGH */
15841             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15842             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15843                 agg_targ = 0;
15844                 agg_gv   = NULL;
15845                 is_hv    = TRUE;
15846                 break;
15847
15848             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15849             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15850                 ++items;
15851                 /* FALLTHROUGH */
15852             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15853             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15854                 agg_targ = 0;
15855                 agg_gv   = NULL;
15856             } /* switch */
15857
15858             index_targ     = 0;
15859             index_gv       = NULL;
15860             index_const_sv = NULL;
15861
15862             index_type = (actions & MDEREF_INDEX_MASK);
15863             switch (index_type) {
15864             case MDEREF_INDEX_none:
15865                 break;
15866             case MDEREF_INDEX_const:
15867                 if (is_hv)
15868                     index_const_sv = UNOP_AUX_item_sv(++items)
15869                 else
15870                     index_const_iv = (++items)->iv;
15871                 break;
15872             case MDEREF_INDEX_padsv:
15873                 index_targ = (++items)->pad_offset;
15874                 break;
15875             case MDEREF_INDEX_gvsv:
15876                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15877                 assert(isGV_with_GP(index_gv));
15878                 break;
15879             }
15880
15881             if (index_type != MDEREF_INDEX_none)
15882                 depth++;
15883
15884             if (   index_type == MDEREF_INDEX_none
15885                 || (actions & MDEREF_FLAG_last)
15886                 || (last && items == last)
15887             )
15888                 break;
15889
15890             actions >>= MDEREF_SHIFT;
15891         } /* while */
15892
15893         if (PL_op == obase) {
15894             /* index was undef */
15895
15896             *desc_p = (    (actions & MDEREF_FLAG_last)
15897                         && (obase->op_private
15898                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15899                         ?
15900                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15901                                 ? "exists"
15902                                 : "delete"
15903                         : is_hv ? "hash element" : "array element";
15904             assert(index_type != MDEREF_INDEX_none);
15905             if (index_gv)
15906                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15907             if (index_targ)
15908                 return varname(NULL, '$', index_targ,
15909                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15910             assert(is_hv); /* AV index is an IV and can't be undef */
15911             /* can a const HV index ever be undef? */
15912             return NULL;
15913         }
15914
15915         /* the SV returned by pp_multideref() was undef, if anything was */
15916
15917         if (depth != 1)
15918             break;
15919
15920         if (agg_targ)
15921             sv = PAD_SV(agg_targ);
15922         else if (agg_gv)
15923             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
15924         else
15925             break;
15926
15927         if (index_type == MDEREF_INDEX_const) {
15928             if (match) {
15929                 if (SvMAGICAL(sv))
15930                     break;
15931                 if (is_hv) {
15932                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
15933                     if (!he || HeVAL(he) != uninit_sv)
15934                         break;
15935                 }
15936                 else {
15937                     SV * const * const svp =
15938                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
15939                     if (!svp || *svp != uninit_sv)
15940                         break;
15941                 }
15942             }
15943             return is_hv
15944                 ? varname(agg_gv, '%', agg_targ,
15945                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
15946                 : varname(agg_gv, '@', agg_targ,
15947                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
15948         }
15949         else  {
15950             /* index is an var */
15951             if (is_hv) {
15952                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15953                 if (keysv)
15954                     return varname(agg_gv, '%', agg_targ,
15955                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15956             }
15957             else {
15958                 const I32 index
15959                     = find_array_subscript((const AV *)sv, uninit_sv);
15960                 if (index >= 0)
15961                     return varname(agg_gv, '@', agg_targ,
15962                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15963             }
15964             if (match)
15965                 break;
15966             return varname(agg_gv,
15967                 is_hv ? '%' : '@',
15968                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15969         }
15970         NOT_REACHED; /* NOTREACHED */
15971     }
15972
15973     case OP_AASSIGN:
15974         /* only examine RHS */
15975         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
15976                                                                 match, desc_p);
15977
15978     case OP_OPEN:
15979         o = cUNOPx(obase)->op_first;
15980         if (   o->op_type == OP_PUSHMARK
15981            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15982         )
15983             o = OpSIBLING(o);
15984
15985         if (!OpHAS_SIBLING(o)) {
15986             /* one-arg version of open is highly magical */
15987
15988             if (o->op_type == OP_GV) { /* open FOO; */
15989                 gv = cGVOPx_gv(o);
15990                 if (match && GvSV(gv) != uninit_sv)
15991                     break;
15992                 return varname(gv, '$', 0,
15993                             NULL, 0, FUV_SUBSCRIPT_NONE);
15994             }
15995             /* other possibilities not handled are:
15996              * open $x; or open my $x;  should return '${*$x}'
15997              * open expr;               should return '$'.expr ideally
15998              */
15999              break;
16000         }
16001         goto do_op;
16002
16003     /* ops where $_ may be an implicit arg */
16004     case OP_TRANS:
16005     case OP_TRANSR:
16006     case OP_SUBST:
16007     case OP_MATCH:
16008         if ( !(obase->op_flags & OPf_STACKED)) {
16009             if (uninit_sv == DEFSV)
16010                 return newSVpvs_flags("$_", SVs_TEMP);
16011             else if (obase->op_targ
16012                   && uninit_sv == PAD_SVl(obase->op_targ))
16013                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16014                                FUV_SUBSCRIPT_NONE);
16015         }
16016         goto do_op;
16017
16018     case OP_PRTF:
16019     case OP_PRINT:
16020     case OP_SAY:
16021         match = 1; /* print etc can return undef on defined args */
16022         /* skip filehandle as it can't produce 'undef' warning  */
16023         o = cUNOPx(obase)->op_first;
16024         if ((obase->op_flags & OPf_STACKED)
16025             &&
16026                (   o->op_type == OP_PUSHMARK
16027                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16028             o = OpSIBLING(OpSIBLING(o));
16029         goto do_op2;
16030
16031
16032     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16033     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16034
16035         /* the following ops are capable of returning PL_sv_undef even for
16036          * defined arg(s) */
16037
16038     case OP_BACKTICK:
16039     case OP_PIPE_OP:
16040     case OP_FILENO:
16041     case OP_BINMODE:
16042     case OP_TIED:
16043     case OP_GETC:
16044     case OP_SYSREAD:
16045     case OP_SEND:
16046     case OP_IOCTL:
16047     case OP_SOCKET:
16048     case OP_SOCKPAIR:
16049     case OP_BIND:
16050     case OP_CONNECT:
16051     case OP_LISTEN:
16052     case OP_ACCEPT:
16053     case OP_SHUTDOWN:
16054     case OP_SSOCKOPT:
16055     case OP_GETPEERNAME:
16056     case OP_FTRREAD:
16057     case OP_FTRWRITE:
16058     case OP_FTREXEC:
16059     case OP_FTROWNED:
16060     case OP_FTEREAD:
16061     case OP_FTEWRITE:
16062     case OP_FTEEXEC:
16063     case OP_FTEOWNED:
16064     case OP_FTIS:
16065     case OP_FTZERO:
16066     case OP_FTSIZE:
16067     case OP_FTFILE:
16068     case OP_FTDIR:
16069     case OP_FTLINK:
16070     case OP_FTPIPE:
16071     case OP_FTSOCK:
16072     case OP_FTBLK:
16073     case OP_FTCHR:
16074     case OP_FTTTY:
16075     case OP_FTSUID:
16076     case OP_FTSGID:
16077     case OP_FTSVTX:
16078     case OP_FTTEXT:
16079     case OP_FTBINARY:
16080     case OP_FTMTIME:
16081     case OP_FTATIME:
16082     case OP_FTCTIME:
16083     case OP_READLINK:
16084     case OP_OPEN_DIR:
16085     case OP_READDIR:
16086     case OP_TELLDIR:
16087     case OP_SEEKDIR:
16088     case OP_REWINDDIR:
16089     case OP_CLOSEDIR:
16090     case OP_GMTIME:
16091     case OP_ALARM:
16092     case OP_SEMGET:
16093     case OP_GETLOGIN:
16094     case OP_UNDEF:
16095     case OP_SUBSTR:
16096     case OP_AEACH:
16097     case OP_EACH:
16098     case OP_SORT:
16099     case OP_CALLER:
16100     case OP_DOFILE:
16101     case OP_PROTOTYPE:
16102     case OP_NCMP:
16103     case OP_SMARTMATCH:
16104     case OP_UNPACK:
16105     case OP_SYSOPEN:
16106     case OP_SYSSEEK:
16107         match = 1;
16108         goto do_op;
16109
16110     case OP_ENTERSUB:
16111     case OP_GOTO:
16112         /* XXX tmp hack: these two may call an XS sub, and currently
16113           XS subs don't have a SUB entry on the context stack, so CV and
16114           pad determination goes wrong, and BAD things happen. So, just
16115           don't try to determine the value under those circumstances.
16116           Need a better fix at dome point. DAPM 11/2007 */
16117         break;
16118
16119     case OP_FLIP:
16120     case OP_FLOP:
16121     {
16122         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16123         if (gv && GvSV(gv) == uninit_sv)
16124             return newSVpvs_flags("$.", SVs_TEMP);
16125         goto do_op;
16126     }
16127
16128     case OP_POS:
16129         /* def-ness of rval pos() is independent of the def-ness of its arg */
16130         if ( !(obase->op_flags & OPf_MOD))
16131             break;
16132
16133     case OP_SCHOMP:
16134     case OP_CHOMP:
16135         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16136             return newSVpvs_flags("${$/}", SVs_TEMP);
16137         /* FALLTHROUGH */
16138
16139     default:
16140     do_op:
16141         if (!(obase->op_flags & OPf_KIDS))
16142             break;
16143         o = cUNOPx(obase)->op_first;
16144         
16145     do_op2:
16146         if (!o)
16147             break;
16148
16149         /* This loop checks all the kid ops, skipping any that cannot pos-
16150          * sibly be responsible for the uninitialized value; i.e., defined
16151          * constants and ops that return nothing.  If there is only one op
16152          * left that is not skipped, then we *know* it is responsible for
16153          * the uninitialized value.  If there is more than one op left, we
16154          * have to look for an exact match in the while() loop below.
16155          * Note that we skip padrange, because the individual pad ops that
16156          * it replaced are still in the tree, so we work on them instead.
16157          */
16158         o2 = NULL;
16159         for (kid=o; kid; kid = OpSIBLING(kid)) {
16160             const OPCODE type = kid->op_type;
16161             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16162               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16163               || (type == OP_PUSHMARK)
16164               || (type == OP_PADRANGE)
16165             )
16166             continue;
16167
16168             if (o2) { /* more than one found */
16169                 o2 = NULL;
16170                 break;
16171             }
16172             o2 = kid;
16173         }
16174         if (o2)
16175             return find_uninit_var(o2, uninit_sv, match, desc_p);
16176
16177         /* scan all args */
16178         while (o) {
16179             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16180             if (sv)
16181                 return sv;
16182             o = OpSIBLING(o);
16183         }
16184         break;
16185     }
16186     return NULL;
16187 }
16188
16189
16190 /*
16191 =for apidoc report_uninit
16192
16193 Print appropriate "Use of uninitialized variable" warning.
16194
16195 =cut
16196 */
16197
16198 void
16199 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16200 {
16201     const char *desc = NULL;
16202     SV* varname = NULL;
16203
16204     if (PL_op) {
16205         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16206                 ? "join or string"
16207                 : OP_DESC(PL_op);
16208         if (uninit_sv && PL_curpad) {
16209             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16210             if (varname)
16211                 sv_insert(varname, 0, 0, " ", 1);
16212         }
16213     }
16214     else if (PL_curstackinfo->si_type == PERLSI_SORT
16215              &&  CxMULTICALL(&cxstack[cxstack_ix]))
16216     {
16217         /* we've reached the end of a sort block or sub,
16218          * and the uninit value is probably what that code returned */
16219         desc = "sort";
16220     }
16221
16222     /* PL_warn_uninit_sv is constant */
16223     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16224     if (desc)
16225         /* diag_listed_as: Use of uninitialized value%s */
16226         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16227                 SVfARG(varname ? varname : &PL_sv_no),
16228                 " in ", desc);
16229     else
16230         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16231                 "", "", "");
16232     GCC_DIAG_RESTORE;
16233 }
16234
16235 /*
16236  * ex: set ts=8 sts=4 sw=4 et:
16237  */