This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
infnan: grok_number* setting the infnan NV directly
[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     case SVt_PVIO:
1429     case SVt_PVFM:
1430     case SVt_PVGV:
1431     case SVt_PVCV:
1432     case SVt_PVLV:
1433     case SVt_INVLIST:
1434     case SVt_REGEXP:
1435     case SVt_PVMG:
1436     case SVt_PVNV:
1437     case SVt_PV:
1438
1439         assert(new_type_details->body_size);
1440         /* We always allocated the full length item with PURIFY. To do this
1441            we fake things so that arena is false for all 16 types..  */
1442         if(new_type_details->arena) {
1443             /* This points to the start of the allocated area.  */
1444             new_body_inline(new_body, new_type);
1445             Zero(new_body, new_type_details->body_size, char);
1446             new_body = ((char *)new_body) - new_type_details->offset;
1447         } else {
1448             new_body = new_NOARENAZ(new_type_details);
1449         }
1450         SvANY(sv) = new_body;
1451
1452         if (old_type_details->copy) {
1453             /* There is now the potential for an upgrade from something without
1454                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1455             int offset = old_type_details->offset;
1456             int length = old_type_details->copy;
1457
1458             if (new_type_details->offset > old_type_details->offset) {
1459                 const int difference
1460                     = new_type_details->offset - old_type_details->offset;
1461                 offset += difference;
1462                 length -= difference;
1463             }
1464             assert (length >= 0);
1465                 
1466             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1467                  char);
1468         }
1469
1470 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1471         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1472          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1473          * NV slot, but the new one does, then we need to initialise the
1474          * freshly created NV slot with whatever the correct bit pattern is
1475          * for 0.0  */
1476         if (old_type_details->zero_nv && !new_type_details->zero_nv
1477             && !isGV_with_GP(sv))
1478             SvNV_set(sv, 0);
1479 #endif
1480
1481         if (UNLIKELY(new_type == SVt_PVIO)) {
1482             IO * const io = MUTABLE_IO(sv);
1483             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1484
1485             SvOBJECT_on(io);
1486             /* Clear the stashcache because a new IO could overrule a package
1487                name */
1488             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1489             hv_clear(PL_stashcache);
1490
1491             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1492             IoPAGE_LEN(sv) = 60;
1493         }
1494         if (UNLIKELY(new_type == SVt_REGEXP))
1495             sv->sv_u.svu_rx = (regexp *)new_body;
1496         else if (old_type < SVt_PV) {
1497             /* referant will be NULL unless the old type was SVt_IV emulating
1498                SVt_RV */
1499             sv->sv_u.svu_rv = referant;
1500         }
1501         break;
1502     default:
1503         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1504                    (unsigned long)new_type);
1505     }
1506
1507     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1508        and sometimes SVt_NV */
1509     if (old_type_details->body_size) {
1510 #ifdef PURIFY
1511         safefree(old_body);
1512 #else
1513         /* Note that there is an assumption that all bodies of types that
1514            can be upgraded came from arenas. Only the more complex non-
1515            upgradable types are allowed to be directly malloc()ed.  */
1516         assert(old_type_details->arena);
1517         del_body((void*)((char*)old_body + old_type_details->offset),
1518                  &PL_body_roots[old_type]);
1519 #endif
1520     }
1521 }
1522
1523 /*
1524 =for apidoc sv_backoff
1525
1526 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1527 wrapper instead.
1528
1529 =cut
1530 */
1531
1532 int
1533 Perl_sv_backoff(SV *const sv)
1534 {
1535     STRLEN delta;
1536     const char * const s = SvPVX_const(sv);
1537
1538     PERL_ARGS_ASSERT_SV_BACKOFF;
1539
1540     assert(SvOOK(sv));
1541     assert(SvTYPE(sv) != SVt_PVHV);
1542     assert(SvTYPE(sv) != SVt_PVAV);
1543
1544     SvOOK_offset(sv, delta);
1545     
1546     SvLEN_set(sv, SvLEN(sv) + delta);
1547     SvPV_set(sv, SvPVX(sv) - delta);
1548     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1549     SvFLAGS(sv) &= ~SVf_OOK;
1550     return 0;
1551 }
1552
1553 /*
1554 =for apidoc sv_grow
1555
1556 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1557 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1558 Use the C<SvGROW> wrapper instead.
1559
1560 =cut
1561 */
1562
1563 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1564
1565 char *
1566 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1567 {
1568     char *s;
1569
1570     PERL_ARGS_ASSERT_SV_GROW;
1571
1572     if (SvROK(sv))
1573         sv_unref(sv);
1574     if (SvTYPE(sv) < SVt_PV) {
1575         sv_upgrade(sv, SVt_PV);
1576         s = SvPVX_mutable(sv);
1577     }
1578     else if (SvOOK(sv)) {       /* pv is offset? */
1579         sv_backoff(sv);
1580         s = SvPVX_mutable(sv);
1581         if (newlen > SvLEN(sv))
1582             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1583     }
1584     else
1585     {
1586         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1587         s = SvPVX_mutable(sv);
1588     }
1589
1590 #ifdef PERL_NEW_COPY_ON_WRITE
1591     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1592      * to store the COW count. So in general, allocate one more byte than
1593      * asked for, to make it likely this byte is always spare: and thus
1594      * make more strings COW-able.
1595      * If the new size is a big power of two, don't bother: we assume the
1596      * caller wanted a nice 2^N sized block and will be annoyed at getting
1597      * 2^N+1.
1598      * Only increment if the allocation isn't MEM_SIZE_MAX,
1599      * otherwise it will wrap to 0.
1600      */
1601     if (newlen & 0xff && newlen != MEM_SIZE_MAX)
1602         newlen++;
1603 #endif
1604
1605 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1606 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1607 #endif
1608
1609     if (newlen > SvLEN(sv)) {           /* need more room? */
1610         STRLEN minlen = SvCUR(sv);
1611         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1612         if (newlen < minlen)
1613             newlen = minlen;
1614 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1615
1616         /* Don't round up on the first allocation, as odds are pretty good that
1617          * the initial request is accurate as to what is really needed */
1618         if (SvLEN(sv)) {
1619             newlen = PERL_STRLEN_ROUNDUP(newlen);
1620         }
1621 #endif
1622         if (SvLEN(sv) && s) {
1623             s = (char*)saferealloc(s, newlen);
1624         }
1625         else {
1626             s = (char*)safemalloc(newlen);
1627             if (SvPVX_const(sv) && SvCUR(sv)) {
1628                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1629             }
1630         }
1631         SvPV_set(sv, s);
1632 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1633         /* Do this here, do it once, do it right, and then we will never get
1634            called back into sv_grow() unless there really is some growing
1635            needed.  */
1636         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1637 #else
1638         SvLEN_set(sv, newlen);
1639 #endif
1640     }
1641     return s;
1642 }
1643
1644 /*
1645 =for apidoc sv_setiv
1646
1647 Copies an integer into the given SV, upgrading first if necessary.
1648 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1649
1650 =cut
1651 */
1652
1653 void
1654 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1655 {
1656     PERL_ARGS_ASSERT_SV_SETIV;
1657
1658     SV_CHECK_THINKFIRST_COW_DROP(sv);
1659     switch (SvTYPE(sv)) {
1660     case SVt_NULL:
1661     case SVt_NV:
1662         sv_upgrade(sv, SVt_IV);
1663         break;
1664     case SVt_PV:
1665         sv_upgrade(sv, SVt_PVIV);
1666         break;
1667
1668     case SVt_PVGV:
1669         if (!isGV_with_GP(sv))
1670             break;
1671     case SVt_PVAV:
1672     case SVt_PVHV:
1673     case SVt_PVCV:
1674     case SVt_PVFM:
1675     case SVt_PVIO:
1676         /* diag_listed_as: Can't coerce %s to %s in %s */
1677         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1678                    OP_DESC(PL_op));
1679     default: NOOP;
1680     }
1681     (void)SvIOK_only(sv);                       /* validate number */
1682     SvIV_set(sv, i);
1683     SvTAINT(sv);
1684 }
1685
1686 /*
1687 =for apidoc sv_setiv_mg
1688
1689 Like C<sv_setiv>, but also handles 'set' magic.
1690
1691 =cut
1692 */
1693
1694 void
1695 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1696 {
1697     PERL_ARGS_ASSERT_SV_SETIV_MG;
1698
1699     sv_setiv(sv,i);
1700     SvSETMAGIC(sv);
1701 }
1702
1703 /*
1704 =for apidoc sv_setuv
1705
1706 Copies an unsigned integer into the given SV, upgrading first if necessary.
1707 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1708
1709 =cut
1710 */
1711
1712 void
1713 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1714 {
1715     PERL_ARGS_ASSERT_SV_SETUV;
1716
1717     /* With the if statement to ensure that integers are stored as IVs whenever
1718        possible:
1719        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1720
1721        without
1722        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1723
1724        If you wish to remove the following if statement, so that this routine
1725        (and its callers) always return UVs, please benchmark to see what the
1726        effect is. Modern CPUs may be different. Or may not :-)
1727     */
1728     if (u <= (UV)IV_MAX) {
1729        sv_setiv(sv, (IV)u);
1730        return;
1731     }
1732     sv_setiv(sv, 0);
1733     SvIsUV_on(sv);
1734     SvUV_set(sv, u);
1735 }
1736
1737 /*
1738 =for apidoc sv_setuv_mg
1739
1740 Like C<sv_setuv>, but also handles 'set' magic.
1741
1742 =cut
1743 */
1744
1745 void
1746 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1747 {
1748     PERL_ARGS_ASSERT_SV_SETUV_MG;
1749
1750     sv_setuv(sv,u);
1751     SvSETMAGIC(sv);
1752 }
1753
1754 /*
1755 =for apidoc sv_setnv
1756
1757 Copies a double into the given SV, upgrading first if necessary.
1758 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1759
1760 =cut
1761 */
1762
1763 void
1764 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1765 {
1766     PERL_ARGS_ASSERT_SV_SETNV;
1767
1768     SV_CHECK_THINKFIRST_COW_DROP(sv);
1769     switch (SvTYPE(sv)) {
1770     case SVt_NULL:
1771     case SVt_IV:
1772         sv_upgrade(sv, SVt_NV);
1773         break;
1774     case SVt_PV:
1775     case SVt_PVIV:
1776         sv_upgrade(sv, SVt_PVNV);
1777         break;
1778
1779     case SVt_PVGV:
1780         if (!isGV_with_GP(sv))
1781             break;
1782     case SVt_PVAV:
1783     case SVt_PVHV:
1784     case SVt_PVCV:
1785     case SVt_PVFM:
1786     case SVt_PVIO:
1787         /* diag_listed_as: Can't coerce %s to %s in %s */
1788         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1789                    OP_DESC(PL_op));
1790     default: NOOP;
1791     }
1792     SvNV_set(sv, num);
1793     (void)SvNOK_only(sv);                       /* validate number */
1794     SvTAINT(sv);
1795 }
1796
1797 /*
1798 =for apidoc sv_setnv_mg
1799
1800 Like C<sv_setnv>, but also handles 'set' magic.
1801
1802 =cut
1803 */
1804
1805 void
1806 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1807 {
1808     PERL_ARGS_ASSERT_SV_SETNV_MG;
1809
1810     sv_setnv(sv,num);
1811     SvSETMAGIC(sv);
1812 }
1813
1814 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1815  * not incrementable warning display.
1816  * Originally part of S_not_a_number().
1817  * The return value may be != tmpbuf.
1818  */
1819
1820 STATIC const char *
1821 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1822     const char *pv;
1823
1824      PERL_ARGS_ASSERT_SV_DISPLAY;
1825
1826      if (DO_UTF8(sv)) {
1827           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1828           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1829      } else {
1830           char *d = tmpbuf;
1831           const char * const limit = tmpbuf + tmpbuf_size - 8;
1832           /* each *s can expand to 4 chars + "...\0",
1833              i.e. need room for 8 chars */
1834         
1835           const char *s = SvPVX_const(sv);
1836           const char * const end = s + SvCUR(sv);
1837           for ( ; s < end && d < limit; s++ ) {
1838                int ch = *s & 0xFF;
1839                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1840                     *d++ = 'M';
1841                     *d++ = '-';
1842
1843                     /* Map to ASCII "equivalent" of Latin1 */
1844                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1845                }
1846                if (ch == '\n') {
1847                     *d++ = '\\';
1848                     *d++ = 'n';
1849                }
1850                else if (ch == '\r') {
1851                     *d++ = '\\';
1852                     *d++ = 'r';
1853                }
1854                else if (ch == '\f') {
1855                     *d++ = '\\';
1856                     *d++ = 'f';
1857                }
1858                else if (ch == '\\') {
1859                     *d++ = '\\';
1860                     *d++ = '\\';
1861                }
1862                else if (ch == '\0') {
1863                     *d++ = '\\';
1864                     *d++ = '0';
1865                }
1866                else if (isPRINT_LC(ch))
1867                     *d++ = ch;
1868                else {
1869                     *d++ = '^';
1870                     *d++ = toCTRL(ch);
1871                }
1872           }
1873           if (s < end) {
1874                *d++ = '.';
1875                *d++ = '.';
1876                *d++ = '.';
1877           }
1878           *d = '\0';
1879           pv = tmpbuf;
1880     }
1881
1882     return pv;
1883 }
1884
1885 /* Print an "isn't numeric" warning, using a cleaned-up,
1886  * printable version of the offending string
1887  */
1888
1889 STATIC void
1890 S_not_a_number(pTHX_ SV *const sv)
1891 {
1892      char tmpbuf[64];
1893      const char *pv;
1894
1895      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1896
1897      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1898
1899     if (PL_op)
1900         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1901                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1902                     "Argument \"%s\" isn't numeric in %s", pv,
1903                     OP_DESC(PL_op));
1904     else
1905         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1906                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1907                     "Argument \"%s\" isn't numeric", pv);
1908 }
1909
1910 STATIC void
1911 S_not_incrementable(pTHX_ SV *const sv) {
1912      char tmpbuf[64];
1913      const char *pv;
1914
1915      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1916
1917      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1918
1919      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1920                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1921 }
1922
1923 /*
1924 =for apidoc looks_like_number
1925
1926 Test if the content of an SV looks like a number (or is a number).
1927 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1928 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1929 ignored.
1930
1931 =cut
1932 */
1933
1934 I32
1935 Perl_looks_like_number(pTHX_ SV *const sv)
1936 {
1937     const char *sbegin;
1938     STRLEN len;
1939     int numtype;
1940
1941     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1942
1943     if (SvPOK(sv) || SvPOKp(sv)) {
1944         sbegin = SvPV_nomg_const(sv, len);
1945     }
1946     else
1947         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1948     numtype = grok_number(sbegin, len, NULL);
1949     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1950 }
1951
1952 STATIC bool
1953 S_glob_2number(pTHX_ GV * const gv)
1954 {
1955     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1956
1957     /* We know that all GVs stringify to something that is not-a-number,
1958         so no need to test that.  */
1959     if (ckWARN(WARN_NUMERIC))
1960     {
1961         SV *const buffer = sv_newmortal();
1962         gv_efullname3(buffer, gv, "*");
1963         not_a_number(buffer);
1964     }
1965     /* We just want something true to return, so that S_sv_2iuv_common
1966         can tail call us and return true.  */
1967     return TRUE;
1968 }
1969
1970 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1971    until proven guilty, assume that things are not that bad... */
1972
1973 /*
1974    NV_PRESERVES_UV:
1975
1976    As 64 bit platforms often have an NV that doesn't preserve all bits of
1977    an IV (an assumption perl has been based on to date) it becomes necessary
1978    to remove the assumption that the NV always carries enough precision to
1979    recreate the IV whenever needed, and that the NV is the canonical form.
1980    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1981    precision as a side effect of conversion (which would lead to insanity
1982    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1983    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1984       where precision was lost, and IV/UV/NV slots that have a valid conversion
1985       which has lost no precision
1986    2) to ensure that if a numeric conversion to one form is requested that
1987       would lose precision, the precise conversion (or differently
1988       imprecise conversion) is also performed and cached, to prevent
1989       requests for different numeric formats on the same SV causing
1990       lossy conversion chains. (lossless conversion chains are perfectly
1991       acceptable (still))
1992
1993
1994    flags are used:
1995    SvIOKp is true if the IV slot contains a valid value
1996    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1997    SvNOKp is true if the NV slot contains a valid value
1998    SvNOK  is true only if the NV value is accurate
1999
2000    so
2001    while converting from PV to NV, check to see if converting that NV to an
2002    IV(or UV) would lose accuracy over a direct conversion from PV to
2003    IV(or UV). If it would, cache both conversions, return NV, but mark
2004    SV as IOK NOKp (ie not NOK).
2005
2006    While converting from PV to IV, check to see if converting that IV to an
2007    NV would lose accuracy over a direct conversion from PV to NV. If it
2008    would, cache both conversions, flag similarly.
2009
2010    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2011    correctly because if IV & NV were set NV *always* overruled.
2012    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2013    changes - now IV and NV together means that the two are interchangeable:
2014    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2015
2016    The benefit of this is that operations such as pp_add know that if
2017    SvIOK is true for both left and right operands, then integer addition
2018    can be used instead of floating point (for cases where the result won't
2019    overflow). Before, floating point was always used, which could lead to
2020    loss of precision compared with integer addition.
2021
2022    * making IV and NV equal status should make maths accurate on 64 bit
2023      platforms
2024    * may speed up maths somewhat if pp_add and friends start to use
2025      integers when possible instead of fp. (Hopefully the overhead in
2026      looking for SvIOK and checking for overflow will not outweigh the
2027      fp to integer speedup)
2028    * will slow down integer operations (callers of SvIV) on "inaccurate"
2029      values, as the change from SvIOK to SvIOKp will cause a call into
2030      sv_2iv each time rather than a macro access direct to the IV slot
2031    * should speed up number->string conversion on integers as IV is
2032      favoured when IV and NV are equally accurate
2033
2034    ####################################################################
2035    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2036    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2037    On the other hand, SvUOK is true iff UV.
2038    ####################################################################
2039
2040    Your mileage will vary depending your CPU's relative fp to integer
2041    performance ratio.
2042 */
2043
2044 #ifndef NV_PRESERVES_UV
2045 #  define IS_NUMBER_UNDERFLOW_IV 1
2046 #  define IS_NUMBER_UNDERFLOW_UV 2
2047 #  define IS_NUMBER_IV_AND_UV    2
2048 #  define IS_NUMBER_OVERFLOW_IV  4
2049 #  define IS_NUMBER_OVERFLOW_UV  5
2050
2051 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2052
2053 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2054 STATIC int
2055 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2056 #  ifdef DEBUGGING
2057                        , I32 numtype
2058 #  endif
2059                        )
2060 {
2061     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2062     PERL_UNUSED_CONTEXT;
2063
2064     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));
2065     if (SvNVX(sv) < (NV)IV_MIN) {
2066         (void)SvIOKp_on(sv);
2067         (void)SvNOK_on(sv);
2068         SvIV_set(sv, IV_MIN);
2069         return IS_NUMBER_UNDERFLOW_IV;
2070     }
2071     if (SvNVX(sv) > (NV)UV_MAX) {
2072         (void)SvIOKp_on(sv);
2073         (void)SvNOK_on(sv);
2074         SvIsUV_on(sv);
2075         SvUV_set(sv, UV_MAX);
2076         return IS_NUMBER_OVERFLOW_UV;
2077     }
2078     (void)SvIOKp_on(sv);
2079     (void)SvNOK_on(sv);
2080     /* Can't use strtol etc to convert this string.  (See truth table in
2081        sv_2iv  */
2082     if (SvNVX(sv) <= (UV)IV_MAX) {
2083         SvIV_set(sv, I_V(SvNVX(sv)));
2084         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2085             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2086         } else {
2087             /* Integer is imprecise. NOK, IOKp */
2088         }
2089         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2090     }
2091     SvIsUV_on(sv);
2092     SvUV_set(sv, U_V(SvNVX(sv)));
2093     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2094         if (SvUVX(sv) == UV_MAX) {
2095             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2096                possibly be preserved by NV. Hence, it must be overflow.
2097                NOK, IOKp */
2098             return IS_NUMBER_OVERFLOW_UV;
2099         }
2100         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2101     } else {
2102         /* Integer is imprecise. NOK, IOKp */
2103     }
2104     return IS_NUMBER_OVERFLOW_IV;
2105 }
2106 #endif /* !NV_PRESERVES_UV*/
2107
2108 /* If numtype is infnan, set the NV of the sv accordingly.
2109  * If numtype is anything else, try setting the NV using Atof(PV). */
2110 #ifdef USING_MSVC6
2111 #  pragma warning(push)
2112 #  pragma warning(disable:4756;disable:4056)
2113 #endif
2114 static void
2115 S_sv_setnv(pTHX_ SV* sv, int numtype, NV nanv)
2116 {
2117     bool pok = cBOOL(SvPOK(sv));
2118     bool nok = FALSE;
2119     if ((numtype & IS_NUMBER_INFINITY)) {
2120         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2121         nok = TRUE;
2122     }
2123     else if ((numtype & IS_NUMBER_NAN)) {
2124         SvNV_set(sv, nanv);
2125         nok = TRUE;
2126     }
2127     else if (pok) {
2128         SvNV_set(sv, Atof(SvPVX_const(sv)));
2129         /* Purposefully no true nok here, since we don't want to blow
2130          * away the possible IOK/UV of an existing sv. */
2131     }
2132     if (nok) {
2133         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2134         if (pok)
2135             SvPOK_on(sv); /* PV is okay, though. */
2136     }
2137 }
2138 #ifdef USING_MSVC6
2139 #  pragma warning(pop)
2140 #endif
2141
2142 STATIC bool
2143 S_sv_2iuv_common(pTHX_ SV *const sv)
2144 {
2145     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2146
2147     if (SvNOKp(sv)) {
2148         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2149          * without also getting a cached IV/UV from it at the same time
2150          * (ie PV->NV conversion should detect loss of accuracy and cache
2151          * IV or UV at same time to avoid this. */
2152         /* IV-over-UV optimisation - choose to cache IV if possible */
2153
2154         if (SvTYPE(sv) == SVt_NV)
2155             sv_upgrade(sv, SVt_PVNV);
2156
2157         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2158         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2159            certainly cast into the IV range at IV_MAX, whereas the correct
2160            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2161            cases go to UV */
2162 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2163         if (Perl_isnan(SvNVX(sv))) {
2164             SvUV_set(sv, 0);
2165             SvIsUV_on(sv);
2166             return FALSE;
2167         }
2168 #endif
2169         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2170             SvIV_set(sv, I_V(SvNVX(sv)));
2171             if (SvNVX(sv) == (NV) SvIVX(sv)
2172 #ifndef NV_PRESERVES_UV
2173                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2174                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2175                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2176                 /* Don't flag it as "accurately an integer" if the number
2177                    came from a (by definition imprecise) NV operation, and
2178                    we're outside the range of NV integer precision */
2179 #endif
2180                 ) {
2181                 if (SvNOK(sv))
2182                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2183                 else {
2184                     /* scalar has trailing garbage, eg "42a" */
2185                 }
2186                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2187                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2188                                       PTR2UV(sv),
2189                                       SvNVX(sv),
2190                                       SvIVX(sv)));
2191
2192             } else {
2193                 /* IV not precise.  No need to convert from PV, as NV
2194                    conversion would already have cached IV if it detected
2195                    that PV->IV would be better than PV->NV->IV
2196                    flags already correct - don't set public IOK.  */
2197                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2198                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2199                                       PTR2UV(sv),
2200                                       SvNVX(sv),
2201                                       SvIVX(sv)));
2202             }
2203             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2204                but the cast (NV)IV_MIN rounds to a the value less (more
2205                negative) than IV_MIN which happens to be equal to SvNVX ??
2206                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2207                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2208                (NV)UVX == NVX are both true, but the values differ. :-(
2209                Hopefully for 2s complement IV_MIN is something like
2210                0x8000000000000000 which will be exact. NWC */
2211         }
2212         else {
2213             SvUV_set(sv, U_V(SvNVX(sv)));
2214             if (
2215                 (SvNVX(sv) == (NV) SvUVX(sv))
2216 #ifndef  NV_PRESERVES_UV
2217                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2218                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2219                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2220                 /* Don't flag it as "accurately an integer" if the number
2221                    came from a (by definition imprecise) NV operation, and
2222                    we're outside the range of NV integer precision */
2223 #endif
2224                 && SvNOK(sv)
2225                 )
2226                 SvIOK_on(sv);
2227             SvIsUV_on(sv);
2228             DEBUG_c(PerlIO_printf(Perl_debug_log,
2229                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2230                                   PTR2UV(sv),
2231                                   SvUVX(sv),
2232                                   SvUVX(sv)));
2233         }
2234     }
2235     else if (SvPOKp(sv)) {
2236         UV value;
2237         NV nanv;
2238         const int numtype = grok_number2_flags(SvPVX_const(sv), SvCUR(sv), &value, &nanv, 0);
2239         /* We want to avoid a possible problem when we cache an IV/ a UV which
2240            may be later translated to an NV, and the resulting NV is not
2241            the same as the direct translation of the initial string
2242            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2243            be careful to ensure that the value with the .456 is around if the
2244            NV value is requested in the future).
2245         
2246            This means that if we cache such an IV/a UV, we need to cache the
2247            NV as well.  Moreover, we trade speed for space, and do not
2248            cache the NV if we are sure it's not needed.
2249          */
2250
2251         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2252         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2253              == IS_NUMBER_IN_UV) {
2254             /* It's definitely an integer, only upgrade to PVIV */
2255             if (SvTYPE(sv) < SVt_PVIV)
2256                 sv_upgrade(sv, SVt_PVIV);
2257             (void)SvIOK_on(sv);
2258         } else if (SvTYPE(sv) < SVt_PVNV)
2259             sv_upgrade(sv, SVt_PVNV);
2260
2261         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2262             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2263                 not_a_number(sv);
2264             S_sv_setnv(aTHX_ sv, numtype, nanv);
2265             return FALSE;
2266         }
2267
2268         /* If NVs preserve UVs then we only use the UV value if we know that
2269            we aren't going to call atof() below. If NVs don't preserve UVs
2270            then the value returned may have more precision than atof() will
2271            return, even though value isn't perfectly accurate.  */
2272         if ((numtype & (IS_NUMBER_IN_UV
2273 #ifdef NV_PRESERVES_UV
2274                         | IS_NUMBER_NOT_INT
2275 #endif
2276             )) == IS_NUMBER_IN_UV) {
2277             /* This won't turn off the public IOK flag if it was set above  */
2278             (void)SvIOKp_on(sv);
2279
2280             if (!(numtype & IS_NUMBER_NEG)) {
2281                 /* positive */;
2282                 if (value <= (UV)IV_MAX) {
2283                     SvIV_set(sv, (IV)value);
2284                 } else {
2285                     /* it didn't overflow, and it was positive. */
2286                     SvUV_set(sv, value);
2287                     SvIsUV_on(sv);
2288                 }
2289             } else {
2290                 /* 2s complement assumption  */
2291                 if (value <= (UV)IV_MIN) {
2292                     SvIV_set(sv, value == (UV)IV_MIN
2293                                     ? IV_MIN : -(IV)value);
2294                 } else {
2295                     /* Too negative for an IV.  This is a double upgrade, but
2296                        I'm assuming it will be rare.  */
2297                     if (SvTYPE(sv) < SVt_PVNV)
2298                         sv_upgrade(sv, SVt_PVNV);
2299                     SvNOK_on(sv);
2300                     SvIOK_off(sv);
2301                     SvIOKp_on(sv);
2302                     SvNV_set(sv, -(NV)value);
2303                     SvIV_set(sv, IV_MIN);
2304                 }
2305             }
2306         }
2307         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2308            will be in the previous block to set the IV slot, and the next
2309            block to set the NV slot.  So no else here.  */
2310         
2311         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2312             != IS_NUMBER_IN_UV) {
2313             /* It wasn't an (integer that doesn't overflow the UV). */
2314             S_sv_setnv(aTHX_ sv, numtype, nanv);
2315
2316             if (! numtype && ckWARN(WARN_NUMERIC))
2317                 not_a_number(sv);
2318
2319             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2320                                   PTR2UV(sv), SvNVX(sv)));
2321
2322 #ifdef NV_PRESERVES_UV
2323             (void)SvIOKp_on(sv);
2324             (void)SvNOK_on(sv);
2325 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2326             if (Perl_isnan(SvNVX(sv))) {
2327                 SvUV_set(sv, 0);
2328                 SvIsUV_on(sv);
2329                 return FALSE;
2330             }
2331 #endif
2332             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2333                 SvIV_set(sv, I_V(SvNVX(sv)));
2334                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2335                     SvIOK_on(sv);
2336                 } else {
2337                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2338                 }
2339                 /* UV will not work better than IV */
2340             } else {
2341                 if (SvNVX(sv) > (NV)UV_MAX) {
2342                     SvIsUV_on(sv);
2343                     /* Integer is inaccurate. NOK, IOKp, is UV */
2344                     SvUV_set(sv, UV_MAX);
2345                 } else {
2346                     SvUV_set(sv, U_V(SvNVX(sv)));
2347                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2348                        NV preservse UV so can do correct comparison.  */
2349                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2350                         SvIOK_on(sv);
2351                     } else {
2352                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2353                     }
2354                 }
2355                 SvIsUV_on(sv);
2356             }
2357 #else /* NV_PRESERVES_UV */
2358             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2359                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2360                 /* The IV/UV slot will have been set from value returned by
2361                    grok_number above.  The NV slot has just been set using
2362                    Atof.  */
2363                 SvNOK_on(sv);
2364                 assert (SvIOKp(sv));
2365             } else {
2366                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2367                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2368                     /* Small enough to preserve all bits. */
2369                     (void)SvIOKp_on(sv);
2370                     SvNOK_on(sv);
2371                     SvIV_set(sv, I_V(SvNVX(sv)));
2372                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2373                         SvIOK_on(sv);
2374                     /* Assumption: first non-preserved integer is < IV_MAX,
2375                        this NV is in the preserved range, therefore: */
2376                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2377                           < (UV)IV_MAX)) {
2378                         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);
2379                     }
2380                 } else {
2381                     /* IN_UV NOT_INT
2382                          0      0       already failed to read UV.
2383                          0      1       already failed to read UV.
2384                          1      0       you won't get here in this case. IV/UV
2385                                         slot set, public IOK, Atof() unneeded.
2386                          1      1       already read UV.
2387                        so there's no point in sv_2iuv_non_preserve() attempting
2388                        to use atol, strtol, strtoul etc.  */
2389 #  ifdef DEBUGGING
2390                     sv_2iuv_non_preserve (sv, numtype);
2391 #  else
2392                     sv_2iuv_non_preserve (sv);
2393 #  endif
2394                 }
2395             }
2396 #endif /* NV_PRESERVES_UV */
2397         /* It might be more code efficient to go through the entire logic above
2398            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2399            gets complex and potentially buggy, so more programmer efficient
2400            to do it this way, by turning off the public flags:  */
2401         if (!numtype)
2402             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2403         }
2404     }
2405     else  {
2406         if (isGV_with_GP(sv))
2407             return glob_2number(MUTABLE_GV(sv));
2408
2409         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2410                 report_uninit(sv);
2411         if (SvTYPE(sv) < SVt_IV)
2412             /* Typically the caller expects that sv_any is not NULL now.  */
2413             sv_upgrade(sv, SVt_IV);
2414         /* Return 0 from the caller.  */
2415         return TRUE;
2416     }
2417     return FALSE;
2418 }
2419
2420 /*
2421 =for apidoc sv_2iv_flags
2422
2423 Return the integer value of an SV, doing any necessary string
2424 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2425 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2426
2427 =cut
2428 */
2429
2430 IV
2431 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2432 {
2433     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2434
2435     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2436          && SvTYPE(sv) != SVt_PVFM);
2437
2438     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2439         mg_get(sv);
2440
2441     if (SvROK(sv)) {
2442         if (SvAMAGIC(sv)) {
2443             SV * tmpstr;
2444             if (flags & SV_SKIP_OVERLOAD)
2445                 return 0;
2446             tmpstr = AMG_CALLunary(sv, numer_amg);
2447             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2448                 return SvIV(tmpstr);
2449             }
2450         }
2451         return PTR2IV(SvRV(sv));
2452     }
2453
2454     if (SvVALID(sv) || isREGEXP(sv)) {
2455         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2456            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2457            In practice they are extremely unlikely to actually get anywhere
2458            accessible by user Perl code - the only way that I'm aware of is when
2459            a constant subroutine which is used as the second argument to index.
2460
2461            Regexps have no SvIVX and SvNVX fields.
2462         */
2463         assert(isREGEXP(sv) || SvPOKp(sv));
2464         {
2465             UV value;
2466             const char * const ptr =
2467                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2468             const int numtype
2469                 = grok_number(ptr, SvCUR(sv), &value);
2470
2471             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2472                 == IS_NUMBER_IN_UV) {
2473                 /* It's definitely an integer */
2474                 if (numtype & IS_NUMBER_NEG) {
2475                     if (value < (UV)IV_MIN)
2476                         return -(IV)value;
2477                 } else {
2478                     if (value < (UV)IV_MAX)
2479                         return (IV)value;
2480                 }
2481             }
2482
2483             /* Quite wrong but no good choices. */
2484             if ((numtype & IS_NUMBER_INFINITY)) {
2485                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2486             } else if ((numtype & IS_NUMBER_NAN)) {
2487                 return 0; /* So wrong. */
2488             }
2489
2490             if (!numtype) {
2491                 if (ckWARN(WARN_NUMERIC))
2492                     not_a_number(sv);
2493             }
2494             return I_V(Atof(ptr));
2495         }
2496     }
2497
2498     if (SvTHINKFIRST(sv)) {
2499 #ifdef PERL_OLD_COPY_ON_WRITE
2500         if (SvIsCOW(sv)) {
2501             sv_force_normal_flags(sv, 0);
2502         }
2503 #endif
2504         if (SvREADONLY(sv) && !SvOK(sv)) {
2505             if (ckWARN(WARN_UNINITIALIZED))
2506                 report_uninit(sv);
2507             return 0;
2508         }
2509     }
2510
2511     if (!SvIOKp(sv)) {
2512         if (S_sv_2iuv_common(aTHX_ sv))
2513             return 0;
2514     }
2515
2516     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2517         PTR2UV(sv),SvIVX(sv)));
2518     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2519 }
2520
2521 /*
2522 =for apidoc sv_2uv_flags
2523
2524 Return the unsigned integer value of an SV, doing any necessary string
2525 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2526 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2527
2528 =cut
2529 */
2530
2531 UV
2532 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2533 {
2534     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2535
2536     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2537         mg_get(sv);
2538
2539     if (SvROK(sv)) {
2540         if (SvAMAGIC(sv)) {
2541             SV *tmpstr;
2542             if (flags & SV_SKIP_OVERLOAD)
2543                 return 0;
2544             tmpstr = AMG_CALLunary(sv, numer_amg);
2545             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2546                 return SvUV(tmpstr);
2547             }
2548         }
2549         return PTR2UV(SvRV(sv));
2550     }
2551
2552     if (SvVALID(sv) || isREGEXP(sv)) {
2553         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2554            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2555            Regexps have no SvIVX and SvNVX fields. */
2556         assert(isREGEXP(sv) || SvPOKp(sv));
2557         {
2558             UV value;
2559             const char * const ptr =
2560                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2561             const int numtype
2562                 = grok_number(ptr, SvCUR(sv), &value);
2563
2564             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2565                 == IS_NUMBER_IN_UV) {
2566                 /* It's definitely an integer */
2567                 if (!(numtype & IS_NUMBER_NEG))
2568                     return value;
2569             }
2570
2571             /* Quite wrong but no good choices. */
2572             if ((numtype & IS_NUMBER_INFINITY)) {
2573                 return UV_MAX; /* So wrong. */
2574             } else if ((numtype & IS_NUMBER_NAN)) {
2575                 return 0; /* So wrong. */
2576             }
2577
2578             if (!numtype) {
2579                 if (ckWARN(WARN_NUMERIC))
2580                     not_a_number(sv);
2581             }
2582             return U_V(Atof(ptr));
2583         }
2584     }
2585
2586     if (SvTHINKFIRST(sv)) {
2587 #ifdef PERL_OLD_COPY_ON_WRITE
2588         if (SvIsCOW(sv)) {
2589             sv_force_normal_flags(sv, 0);
2590         }
2591 #endif
2592         if (SvREADONLY(sv) && !SvOK(sv)) {
2593             if (ckWARN(WARN_UNINITIALIZED))
2594                 report_uninit(sv);
2595             return 0;
2596         }
2597     }
2598
2599     if (!SvIOKp(sv)) {
2600         if (S_sv_2iuv_common(aTHX_ sv))
2601             return 0;
2602     }
2603
2604     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2605                           PTR2UV(sv),SvUVX(sv)));
2606     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2607 }
2608
2609 /*
2610 =for apidoc sv_2nv_flags
2611
2612 Return the num value of an SV, doing any necessary string or integer
2613 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2614 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2615
2616 =cut
2617 */
2618
2619 NV
2620 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2621 {
2622     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2623
2624     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2625          && SvTYPE(sv) != SVt_PVFM);
2626     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2627         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2628            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2629            Regexps have no SvIVX and SvNVX fields.  */
2630         const char *ptr;
2631         if (flags & SV_GMAGIC)
2632             mg_get(sv);
2633         if (SvNOKp(sv))
2634             return SvNVX(sv);
2635         if (SvPOKp(sv) && !SvIOKp(sv)) {
2636             ptr = SvPVX_const(sv);
2637           grokpv:
2638             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2639                 !grok_number(ptr, SvCUR(sv), NULL))
2640                 not_a_number(sv);
2641             return Atof(ptr);
2642         }
2643         if (SvIOKp(sv)) {
2644             if (SvIsUV(sv))
2645                 return (NV)SvUVX(sv);
2646             else
2647                 return (NV)SvIVX(sv);
2648         }
2649         if (SvROK(sv)) {
2650             goto return_rok;
2651         }
2652         if (isREGEXP(sv)) {
2653             ptr = RX_WRAPPED((REGEXP *)sv);
2654             goto grokpv;
2655         }
2656         assert(SvTYPE(sv) >= SVt_PVMG);
2657         /* This falls through to the report_uninit near the end of the
2658            function. */
2659     } else if (SvTHINKFIRST(sv)) {
2660         if (SvROK(sv)) {
2661         return_rok:
2662             if (SvAMAGIC(sv)) {
2663                 SV *tmpstr;
2664                 if (flags & SV_SKIP_OVERLOAD)
2665                     return 0;
2666                 tmpstr = AMG_CALLunary(sv, numer_amg);
2667                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2668                     return SvNV(tmpstr);
2669                 }
2670             }
2671             return PTR2NV(SvRV(sv));
2672         }
2673 #ifdef PERL_OLD_COPY_ON_WRITE
2674         if (SvIsCOW(sv)) {
2675             sv_force_normal_flags(sv, 0);
2676         }
2677 #endif
2678         if (SvREADONLY(sv) && !SvOK(sv)) {
2679             if (ckWARN(WARN_UNINITIALIZED))
2680                 report_uninit(sv);
2681             return 0.0;
2682         }
2683     }
2684     if (SvTYPE(sv) < SVt_NV) {
2685         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2686         sv_upgrade(sv, SVt_NV);
2687         DEBUG_c({
2688             STORE_NUMERIC_LOCAL_SET_STANDARD();
2689             PerlIO_printf(Perl_debug_log,
2690                           "0x%"UVxf" num(%" NVgf ")\n",
2691                           PTR2UV(sv), SvNVX(sv));
2692             RESTORE_NUMERIC_LOCAL();
2693         });
2694     }
2695     else if (SvTYPE(sv) < SVt_PVNV)
2696         sv_upgrade(sv, SVt_PVNV);
2697     if (SvNOKp(sv)) {
2698         return SvNVX(sv);
2699     }
2700     if (SvIOKp(sv)) {
2701         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2702 #ifdef NV_PRESERVES_UV
2703         if (SvIOK(sv))
2704             SvNOK_on(sv);
2705         else
2706             SvNOKp_on(sv);
2707 #else
2708         /* Only set the public NV OK flag if this NV preserves the IV  */
2709         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2710         if (SvIOK(sv) &&
2711             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2712                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2713             SvNOK_on(sv);
2714         else
2715             SvNOKp_on(sv);
2716 #endif
2717     }
2718     else if (SvPOKp(sv)) {
2719         UV value;
2720         NV nanv;
2721         const int numtype = grok_number2_flags(SvPVX_const(sv), SvCUR(sv), &value, &nanv, 0);
2722         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2723             not_a_number(sv);
2724 #ifdef NV_PRESERVES_UV
2725         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2726             == IS_NUMBER_IN_UV) {
2727             /* It's definitely an integer */
2728             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2729         } else {
2730             S_sv_setnv(aTHX_ sv, numtype, nanv);
2731         }
2732         if (numtype)
2733             SvNOK_on(sv);
2734         else
2735             SvNOKp_on(sv);
2736 #else
2737         SvNV_set(sv, Atof(SvPVX_const(sv)));
2738         /* Only set the public NV OK flag if this NV preserves the value in
2739            the PV at least as well as an IV/UV would.
2740            Not sure how to do this 100% reliably. */
2741         /* if that shift count is out of range then Configure's test is
2742            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2743            UV_BITS */
2744         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2745             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2746             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2747         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2748             /* Can't use strtol etc to convert this string, so don't try.
2749                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2750             SvNOK_on(sv);
2751         } else {
2752             /* value has been set.  It may not be precise.  */
2753             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2754                 /* 2s complement assumption for (UV)IV_MIN  */
2755                 SvNOK_on(sv); /* Integer is too negative.  */
2756             } else {
2757                 SvNOKp_on(sv);
2758                 SvIOKp_on(sv);
2759
2760                 if (numtype & IS_NUMBER_NEG) {
2761                     /* -IV_MIN is undefined, but we should never reach
2762                      * this point with both IS_NUMBER_NEG and value ==
2763                      * (UV)IV_MIN */
2764                     assert(value != (UV)IV_MIN);
2765                     SvIV_set(sv, -(IV)value);
2766                 } else if (value <= (UV)IV_MAX) {
2767                     SvIV_set(sv, (IV)value);
2768                 } else {
2769                     SvUV_set(sv, value);
2770                     SvIsUV_on(sv);
2771                 }
2772
2773                 if (numtype & IS_NUMBER_NOT_INT) {
2774                     /* I believe that even if the original PV had decimals,
2775                        they are lost beyond the limit of the FP precision.
2776                        However, neither is canonical, so both only get p
2777                        flags.  NWC, 2000/11/25 */
2778                     /* Both already have p flags, so do nothing */
2779                 } else {
2780                     const NV nv = SvNVX(sv);
2781                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2782                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2783                         if (SvIVX(sv) == I_V(nv)) {
2784                             SvNOK_on(sv);
2785                         } else {
2786                             /* It had no "." so it must be integer.  */
2787                         }
2788                         SvIOK_on(sv);
2789                     } else {
2790                         /* between IV_MAX and NV(UV_MAX).
2791                            Could be slightly > UV_MAX */
2792
2793                         if (numtype & IS_NUMBER_NOT_INT) {
2794                             /* UV and NV both imprecise.  */
2795                         } else {
2796                             const UV nv_as_uv = U_V(nv);
2797
2798                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2799                                 SvNOK_on(sv);
2800                             }
2801                             SvIOK_on(sv);
2802                         }
2803                     }
2804                 }
2805             }
2806         }
2807         /* It might be more code efficient to go through the entire logic above
2808            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2809            gets complex and potentially buggy, so more programmer efficient
2810            to do it this way, by turning off the public flags:  */
2811         if (!numtype)
2812             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2813 #endif /* NV_PRESERVES_UV */
2814     }
2815     else  {
2816         if (isGV_with_GP(sv)) {
2817             glob_2number(MUTABLE_GV(sv));
2818             return 0.0;
2819         }
2820
2821         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2822             report_uninit(sv);
2823         assert (SvTYPE(sv) >= SVt_NV);
2824         /* Typically the caller expects that sv_any is not NULL now.  */
2825         /* XXX Ilya implies that this is a bug in callers that assume this
2826            and ideally should be fixed.  */
2827         return 0.0;
2828     }
2829     DEBUG_c({
2830         STORE_NUMERIC_LOCAL_SET_STANDARD();
2831         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2832                       PTR2UV(sv), SvNVX(sv));
2833         RESTORE_NUMERIC_LOCAL();
2834     });
2835     return SvNVX(sv);
2836 }
2837
2838 /*
2839 =for apidoc sv_2num
2840
2841 Return an SV with the numeric value of the source SV, doing any necessary
2842 reference or overload conversion.  The caller is expected to have handled
2843 get-magic already.
2844
2845 =cut
2846 */
2847
2848 SV *
2849 Perl_sv_2num(pTHX_ SV *const sv)
2850 {
2851     PERL_ARGS_ASSERT_SV_2NUM;
2852
2853     if (!SvROK(sv))
2854         return sv;
2855     if (SvAMAGIC(sv)) {
2856         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2857         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2858         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2859             return sv_2num(tmpsv);
2860     }
2861     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2862 }
2863
2864 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2865  * UV as a string towards the end of buf, and return pointers to start and
2866  * end of it.
2867  *
2868  * We assume that buf is at least TYPE_CHARS(UV) long.
2869  */
2870
2871 static char *
2872 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2873 {
2874     char *ptr = buf + TYPE_CHARS(UV);
2875     char * const ebuf = ptr;
2876     int sign;
2877
2878     PERL_ARGS_ASSERT_UIV_2BUF;
2879
2880     if (is_uv)
2881         sign = 0;
2882     else if (iv >= 0) {
2883         uv = iv;
2884         sign = 0;
2885     } else {
2886         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2887         sign = 1;
2888     }
2889     do {
2890         *--ptr = '0' + (char)(uv % 10);
2891     } while (uv /= 10);
2892     if (sign)
2893         *--ptr = '-';
2894     *peob = ebuf;
2895     return ptr;
2896 }
2897
2898 #ifdef LONGDOUBLE_DOUBLEDOUBLE
2899 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
2900  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
2901  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
2902  * after the first 1023 zero bits.
2903  *
2904  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
2905  * of dynamically growing buffer might be better, start at just 16 bytes
2906  * (for example) and grow only when necessary.  Or maybe just by looking
2907  * at the exponents of the two doubles? */
2908 #  define DOUBLEDOUBLE_MAXBITS 2098
2909 #endif
2910
2911 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
2912  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
2913  * per xdigit.  For the double-double case, this can be rather many.
2914  * The non-double-double-long-double overshoots since all bits of NV
2915  * are not mantissa bits, there are also exponent bits. */
2916 #ifdef LONGDOUBLE_DOUBLEDOUBLE
2917 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
2918 #else
2919 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
2920 #endif
2921
2922 /* If we do not have a known long double format, (including not using
2923  * long doubles, or long doubles being equal to doubles) then we will
2924  * fall back to the ldexp/frexp route, with which we can retrieve at
2925  * most as many bits as our widest unsigned integer type is.  We try
2926  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
2927  *
2928  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
2929  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
2930  */
2931 #if defined(HAS_QUAD) && defined(Uquad_t)
2932 #  define MANTISSATYPE Uquad_t
2933 #  define MANTISSASIZE 8
2934 #else
2935 #  define MANTISSATYPE UV
2936 #  define MANTISSASIZE UVSIZE
2937 #endif
2938
2939 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
2940 #  define HEXTRACT_LITTLE_ENDIAN
2941 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
2942 #  define HEXTRACT_BIG_ENDIAN
2943 #else
2944 #  define HEXTRACT_MIX_ENDIAN
2945 #endif
2946
2947 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
2948  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
2949  * are being extracted from (either directly from the long double in-memory
2950  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
2951  * is used to update the exponent.  vhex is the pointer to the beginning
2952  * of the output buffer (of VHEX_SIZE).
2953  *
2954  * The tricky part is that S_hextract() needs to be called twice:
2955  * the first time with vend as NULL, and the second time with vend as
2956  * the pointer returned by the first call.  What happens is that on
2957  * the first round the output size is computed, and the intended
2958  * extraction sanity checked.  On the second round the actual output
2959  * (the extraction of the hexadecimal values) takes place.
2960  * Sanity failures cause fatal failures during both rounds. */
2961 STATIC U8*
2962 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
2963 {
2964     U8* v = vhex;
2965     int ix;
2966     int ixmin = 0, ixmax = 0;
2967
2968     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
2969      * and elsewhere. */
2970
2971     /* These macros are just to reduce typos, they have multiple
2972      * repetitions below, but usually only one (or sometimes two)
2973      * of them is really being used. */
2974     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
2975 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
2976 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
2977 #define HEXTRACT_OUTPUT(ix) \
2978     STMT_START { \
2979       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
2980    } STMT_END
2981 #define HEXTRACT_COUNT(ix, c) \
2982     STMT_START { \
2983       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
2984    } STMT_END
2985 #define HEXTRACT_BYTE(ix) \
2986     STMT_START { \
2987       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
2988    } STMT_END
2989 #define HEXTRACT_LO_NYBBLE(ix) \
2990     STMT_START { \
2991       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
2992    } STMT_END
2993     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
2994      * to make it look less odd when the top bits of a NV
2995      * are extracted using HEXTRACT_LO_NYBBLE: the highest
2996      * order bits can be in the "low nybble" of a byte. */
2997 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
2998 #define HEXTRACT_BYTES_LE(a, b) \
2999     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
3000 #define HEXTRACT_BYTES_BE(a, b) \
3001     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
3002 #define HEXTRACT_IMPLICIT_BIT(nv) \
3003     STMT_START { \
3004         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
3005    } STMT_END
3006
3007 /* Most formats do.  Those which don't should undef this. */
3008 #define HEXTRACT_HAS_IMPLICIT_BIT
3009 /* Many formats do.  Those which don't should undef this. */
3010 #define HEXTRACT_HAS_TOP_NYBBLE
3011
3012     /* HEXTRACTSIZE is the maximum number of xdigits. */
3013 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
3014 #  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/4)
3015 #else
3016 #  define HEXTRACTSIZE 2 * NVSIZE
3017 #endif
3018
3019     const U8* vmaxend = vhex + HEXTRACTSIZE;
3020     PERL_UNUSED_VAR(ix); /* might happen */
3021     if (!Perl_isinfnan(nv)) {
3022         (void)Perl_frexp(PERL_ABS(nv), exponent);
3023         if (vend && (vend <= vhex || vend > vmaxend))
3024             Perl_croak(aTHX_ "Hexadecimal float: internal error");
3025     }
3026     {
3027         /* First check if using long doubles. */
3028 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
3029 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
3030         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
3031          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
3032         /* The bytes 13..0 are the mantissa/fraction,
3033          * the 15,14 are the sign+exponent. */
3034         const U8* nvp = (const U8*)(&nv);
3035         HEXTRACT_IMPLICIT_BIT(nv);
3036 #   undef HEXTRACT_HAS_TOP_NYBBLE
3037         HEXTRACT_BYTES_LE(13, 0);
3038 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
3039         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
3040          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
3041         /* The bytes 2..15 are the mantissa/fraction,
3042          * the 0,1 are the sign+exponent. */
3043         const U8* nvp = (const U8*)(&nv);
3044         HEXTRACT_IMPLICIT_BIT(nv);
3045 #   undef HEXTRACT_HAS_TOP_NYBBLE
3046         HEXTRACT_BYTES_BE(2, 15);
3047 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
3048         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
3049          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
3050          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
3051          * meaning that 2 or 6 bytes are empty padding. */
3052         /* The bytes 7..0 are the mantissa/fraction */
3053         const U8* nvp = (const U8*)(&nv);
3054 #    undef HEXTRACT_HAS_IMPLICIT_BIT
3055 #    undef HEXTRACT_HAS_TOP_NYBBLE
3056         HEXTRACT_BYTES_LE(7, 0);
3057 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
3058         /* Does this format ever happen? (Wikipedia says the Motorola
3059          * 6888x math coprocessors used format _like_ this but padded
3060          * to 96 bits with 16 unused bits between the exponent and the
3061          * mantissa.) */
3062         const U8* nvp = (const U8*)(&nv);
3063 #    undef HEXTRACT_HAS_IMPLICIT_BIT
3064 #    undef HEXTRACT_HAS_TOP_NYBBLE
3065         HEXTRACT_BYTES_BE(0, 7);
3066 #  else
3067 #    define HEXTRACT_FALLBACK
3068         /* Double-double format: two doubles next to each other.
3069          * The first double is the high-order one, exactly like
3070          * it would be for a "lone" double.  The second double
3071          * is shifted down using the exponent so that that there
3072          * are no common bits.  The tricky part is that the value
3073          * of the double-double is the SUM of the two doubles and
3074          * the second one can be also NEGATIVE.
3075          *
3076          * Because of this tricky construction the bytewise extraction we
3077          * use for the other long double formats doesn't work, we must
3078          * extract the values bit by bit.
3079          *
3080          * The little-endian double-double is used .. somewhere?
3081          *
3082          * The big endian double-double is used in e.g. PPC/Power (AIX)
3083          * and MIPS (SGI).
3084          *
3085          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
3086          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
3087          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
3088          */
3089 #  endif
3090 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
3091         /* Using normal doubles, not long doubles.
3092          *
3093          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
3094          * bytes, since we might need to handle printf precision, and
3095          * also need to insert the radix. */
3096 #  if NVSIZE == 8
3097 #    ifdef HEXTRACT_LITTLE_ENDIAN
3098         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
3099         const U8* nvp = (const U8*)(&nv);
3100         HEXTRACT_IMPLICIT_BIT(nv);
3101         HEXTRACT_TOP_NYBBLE(6);
3102         HEXTRACT_BYTES_LE(5, 0);
3103 #    elif defined(HEXTRACT_BIG_ENDIAN)
3104         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
3105         const U8* nvp = (const U8*)(&nv);
3106         HEXTRACT_IMPLICIT_BIT(nv);
3107         HEXTRACT_TOP_NYBBLE(1);
3108         HEXTRACT_BYTES_BE(2, 7);
3109 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
3110         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
3111         const U8* nvp = (const U8*)(&nv);
3112         HEXTRACT_IMPLICIT_BIT(nv);
3113         HEXTRACT_TOP_NYBBLE(2); /* 6 */
3114         HEXTRACT_BYTE(1); /* 5 */
3115         HEXTRACT_BYTE(0); /* 4 */
3116         HEXTRACT_BYTE(7); /* 3 */
3117         HEXTRACT_BYTE(6); /* 2 */
3118         HEXTRACT_BYTE(5); /* 1 */
3119         HEXTRACT_BYTE(4); /* 0 */
3120 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
3121         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
3122         const U8* nvp = (const U8*)(&nv);
3123         HEXTRACT_IMPLICIT_BIT(nv);
3124         HEXTRACT_TOP_NYBBLE(5); /* 6 */
3125         HEXTRACT_BYTE(6); /* 5 */
3126         HEXTRACT_BYTE(7); /* 4 */
3127         HEXTRACT_BYTE(0); /* 3 */
3128         HEXTRACT_BYTE(1); /* 2 */
3129         HEXTRACT_BYTE(2); /* 1 */
3130         HEXTRACT_BYTE(3); /* 0 */
3131 #    else
3132 #      define HEXTRACT_FALLBACK
3133 #    endif
3134 #  else
3135 #    define HEXTRACT_FALLBACK
3136 #  endif
3137 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
3138 #  ifdef HEXTRACT_FALLBACK
3139 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
3140         /* The fallback is used for the double-double format, and
3141          * for unknown long double formats, and for unknown double
3142          * formats, or in general unknown NV formats. */
3143         if (nv == (NV)0.0) {
3144             if (vend)
3145                 *v++ = 0;
3146             else
3147                 v++;
3148             *exponent = 0;
3149         }
3150         else {
3151             NV d = nv < 0 ? -nv : nv;
3152             NV e = (NV)1.0;
3153             U8 ha = 0x0; /* hexvalue accumulator */
3154             U8 hd = 0x8; /* hexvalue digit */
3155
3156             /* Shift d and e (and update exponent) so that e <= d < 2*e,
3157              * this is essentially manual frexp(). Multiplying by 0.5 and
3158              * doubling should be lossless in binary floating point. */
3159
3160             *exponent = 1;
3161
3162             while (e > d) {
3163                 e *= (NV)0.5;
3164                 (*exponent)--;
3165             }
3166             /* Now d >= e */
3167
3168             while (d >= e + e) {
3169                 e += e;
3170                 (*exponent)++;
3171             }
3172             /* Now e <= d < 2*e */
3173
3174             /* First extract the leading hexdigit (the implicit bit). */
3175             if (d >= e) {
3176                 d -= e;
3177                 if (vend)
3178                     *v++ = 1;
3179                 else
3180                     v++;
3181             }
3182             else {
3183                 if (vend)
3184                     *v++ = 0;
3185                 else
3186                     v++;
3187             }
3188             e *= (NV)0.5;
3189
3190             /* Then extract the remaining hexdigits. */
3191             while (d > (NV)0.0) {
3192                 if (d >= e) {
3193                     ha |= hd;
3194                     d -= e;
3195                 }
3196                 if (hd == 1) {
3197                     /* Output or count in groups of four bits,
3198                      * that is, when the hexdigit is down to one. */
3199                     if (vend)
3200                         *v++ = ha;
3201                     else
3202                         v++;
3203                     /* Reset the hexvalue. */
3204                     ha = 0x0;
3205                     hd = 0x8;
3206                 }
3207                 else
3208                     hd >>= 1;
3209                 e *= (NV)0.5;
3210             }
3211
3212             /* Flush possible pending hexvalue. */
3213             if (ha) {
3214                 if (vend)
3215                     *v++ = ha;
3216                 else
3217                     v++;
3218             }
3219         }
3220 #  endif
3221     }
3222     /* Croak for various reasons: if the output pointer escaped the
3223      * output buffer, if the extraction index escaped the extraction
3224      * buffer, or if the ending output pointer didn't match the
3225      * previously computed value. */
3226     if (v <= vhex || v - vhex >= VHEX_SIZE ||
3227         /* For double-double the ixmin and ixmax stay at zero,
3228          * which is convenient since the HEXTRACTSIZE is tricky
3229          * for double-double. */
3230         ixmin < 0 || ixmax >= NVSIZE ||
3231         (vend && v != vend))
3232         Perl_croak(aTHX_ "Hexadecimal float: internal error");
3233     return v;
3234 }
3235
3236 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
3237  * infinity or a not-a-number, writes the appropriate strings to the
3238  * buffer, including a zero byte.  On success returns the written length,
3239  * excluding the zero byte, on failure (not an infinity, not a nan, or the
3240  * maxlen too small) returns zero. */
3241 STATIC size_t
3242 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char format, char plus, char alt) {
3243     assert(maxlen >= 4);
3244     if (maxlen < 4) /* "Inf\0", "NaN\0" */
3245         return 0;
3246     else {
3247         char* s = buffer;
3248         if (Perl_isinf(nv)) {
3249             if (nv < 0) {
3250                 if (maxlen < 5) /* "-Inf\0"  */
3251                     return 0;
3252                 *s++ = '-';
3253             } else if (plus) {
3254                 *s++ = '+';
3255             }
3256             *s++ = 'I';
3257             *s++ = 'n';
3258             *s++ = 'f';
3259         } else if (Perl_isnan(nv)) {
3260             U8 mask;
3261             NV payload = nv;
3262             U8* hibyte = nan_hibyte(&payload, &mask);
3263             *s++ = 'N';
3264             *s++ = 'a';
3265             *s++ = 'N';
3266             if (nan_is_signaling(nv)) {
3267                 *s++ = 's';
3268             }
3269             /* Detect and clear the "quiet bit" from the NV copy.
3270              * This is done so that in *most* platforms the bit is
3271              * skipped and not included in the hexadecimal result. */
3272             *hibyte &= ~mask;
3273             if (alt) {
3274                 U8 vhex[VHEX_SIZE];
3275                 U8* vend;
3276                 U8* v;
3277                 int exponent = 0;
3278                 char* start;
3279                 bool upper = isUPPER(format);
3280                 const char* xdig = PL_hexdigit + (upper ? 16 : 0);
3281                 char xhex = upper ? 'X' : 'x';
3282
3283                 /* We need to clear the bits of the first
3284                  * byte that are not part of the payload. */
3285                 *hibyte &= (1 << (7 - NV_MANT_REAL_DIG % 8)) - 1;
3286
3287                 vend = S_hextract(aTHX_ payload, &exponent, vhex, NULL);
3288                 S_hextract(aTHX_ payload, &exponent, vhex, vend);
3289
3290                 v = vhex;
3291
3292 #ifdef NV_IMPLICIT_BIT
3293                 /* S_hextract thinks it needs to extract the implicit bit,
3294                  * which is bogus with NaN. */
3295                 v++;
3296 #endif
3297                 while (v < vend && *v == 0) v++;
3298
3299                 *s++ = '(';
3300
3301                 start = s;
3302                 if (vend - v <= 2 * UVSIZE) {
3303                     *s++ = '0';
3304                     *s++ = xhex;
3305                     start = s;
3306                     while (v < vend) {
3307                         *s++ = xdig[*v++];
3308                     }
3309                     if (s == start) {
3310                         *s++ = '0';
3311                     }
3312                 } else {
3313                     /* If not displayable as an UV, display as hex
3314                      * bytes, then.  This happens with e.g. 32-bit
3315                      * (UVSIZE=4) platforms.  The format is "\xHH..."
3316                      *
3317                      * Similar formats are accepted on numification.
3318                      *
3319                      * The choice of quoting in the result is not
3320                      * customizable currently.  Maybe something could
3321                      * be rigged to follow the '%#'. */
3322                     *s++ = '"';
3323
3324                     if ((vend - vhex) % 2) {
3325                         *s++ = '\\';
3326                         *s++ = xhex;
3327                         *s++ = '0';
3328                         *s++ = xdig[*v++];
3329                     }
3330                     while (v < vend) {
3331                         *s++ = '\\';
3332                         *s++ = 'x';
3333                         *s++ = xdig[*v++];
3334                         *s++ = xdig[*v++];
3335                     }
3336
3337                     *s++ = '"';
3338                 }
3339
3340                 *s++ = ')';
3341             }
3342         }
3343         else
3344             return 0;
3345         *s++ = 0;
3346         return s - buffer - 1; /* -1: excluding the zero byte */
3347     }
3348 }
3349
3350 /*
3351 =for apidoc sv_2pv_flags
3352
3353 Returns a pointer to the string value of an SV, and sets *lp to its length.
3354 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
3355 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
3356 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
3357
3358 =cut
3359 */
3360
3361 char *
3362 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
3363 {
3364     char *s;
3365
3366     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
3367
3368     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
3369          && SvTYPE(sv) != SVt_PVFM);
3370     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3371         mg_get(sv);
3372     if (SvROK(sv)) {
3373         if (SvAMAGIC(sv)) {
3374             SV *tmpstr;
3375             if (flags & SV_SKIP_OVERLOAD)
3376                 return NULL;
3377             tmpstr = AMG_CALLunary(sv, string_amg);
3378             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
3379             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3380                 /* Unwrap this:  */
3381                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3382                  */
3383
3384                 char *pv;
3385                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3386                     if (flags & SV_CONST_RETURN) {
3387                         pv = (char *) SvPVX_const(tmpstr);
3388                     } else {
3389                         pv = (flags & SV_MUTABLE_RETURN)
3390                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3391                     }
3392                     if (lp)
3393                         *lp = SvCUR(tmpstr);
3394                 } else {
3395                     pv = sv_2pv_flags(tmpstr, lp, flags);
3396                 }
3397                 if (SvUTF8(tmpstr))
3398                     SvUTF8_on(sv);
3399                 else
3400                     SvUTF8_off(sv);
3401                 return pv;
3402             }
3403         }
3404         {
3405             STRLEN len;
3406             char *retval;
3407             char *buffer;
3408             SV *const referent = SvRV(sv);
3409
3410             if (!referent) {
3411                 len = 7;
3412                 retval = buffer = savepvn("NULLREF", len);
3413             } else if (SvTYPE(referent) == SVt_REGEXP &&
3414                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3415                         amagic_is_enabled(string_amg))) {
3416                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3417
3418                 assert(re);
3419                         
3420                 /* If the regex is UTF-8 we want the containing scalar to
3421                    have an UTF-8 flag too */
3422                 if (RX_UTF8(re))
3423                     SvUTF8_on(sv);
3424                 else
3425                     SvUTF8_off(sv);     
3426
3427                 if (lp)
3428                     *lp = RX_WRAPLEN(re);
3429  
3430                 return RX_WRAPPED(re);
3431             } else {
3432                 const char *const typestr = sv_reftype(referent, 0);
3433                 const STRLEN typelen = strlen(typestr);
3434                 UV addr = PTR2UV(referent);
3435                 const char *stashname = NULL;
3436                 STRLEN stashnamelen = 0; /* hush, gcc */
3437                 const char *buffer_end;
3438
3439                 if (SvOBJECT(referent)) {
3440                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3441
3442                     if (name) {
3443                         stashname = HEK_KEY(name);
3444                         stashnamelen = HEK_LEN(name);
3445
3446                         if (HEK_UTF8(name)) {
3447                             SvUTF8_on(sv);
3448                         } else {
3449                             SvUTF8_off(sv);
3450                         }
3451                     } else {
3452                         stashname = "__ANON__";
3453                         stashnamelen = 8;
3454                     }
3455                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3456                         + 2 * sizeof(UV) + 2 /* )\0 */;
3457                 } else {
3458                     len = typelen + 3 /* (0x */
3459                         + 2 * sizeof(UV) + 2 /* )\0 */;
3460                 }
3461
3462                 Newx(buffer, len, char);
3463                 buffer_end = retval = buffer + len;
3464
3465                 /* Working backwards  */
3466                 *--retval = '\0';
3467                 *--retval = ')';
3468                 do {
3469                     *--retval = PL_hexdigit[addr & 15];
3470                 } while (addr >>= 4);
3471                 *--retval = 'x';
3472                 *--retval = '0';
3473                 *--retval = '(';
3474
3475                 retval -= typelen;
3476                 memcpy(retval, typestr, typelen);
3477
3478                 if (stashname) {
3479                     *--retval = '=';
3480                     retval -= stashnamelen;
3481                     memcpy(retval, stashname, stashnamelen);
3482                 }
3483                 /* retval may not necessarily have reached the start of the
3484                    buffer here.  */
3485                 assert (retval >= buffer);
3486
3487                 len = buffer_end - retval - 1; /* -1 for that \0  */
3488             }
3489             if (lp)
3490                 *lp = len;
3491             SAVEFREEPV(buffer);
3492             return retval;
3493         }
3494     }
3495
3496     if (SvPOKp(sv)) {
3497         if (lp)
3498             *lp = SvCUR(sv);
3499         if (flags & SV_MUTABLE_RETURN)
3500             return SvPVX_mutable(sv);
3501         if (flags & SV_CONST_RETURN)
3502             return (char *)SvPVX_const(sv);
3503         return SvPVX(sv);
3504     }
3505
3506     if (SvIOK(sv)) {
3507         /* I'm assuming that if both IV and NV are equally valid then
3508            converting the IV is going to be more efficient */
3509         const U32 isUIOK = SvIsUV(sv);
3510         char buf[TYPE_CHARS(UV)];
3511         char *ebuf, *ptr;
3512         STRLEN len;
3513
3514         if (SvTYPE(sv) < SVt_PVIV)
3515             sv_upgrade(sv, SVt_PVIV);
3516         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3517         len = ebuf - ptr;
3518         /* inlined from sv_setpvn */
3519         s = SvGROW_mutable(sv, len + 1);
3520         Move(ptr, s, len, char);
3521         s += len;
3522         *s = '\0';
3523         SvPOK_on(sv);
3524     }
3525     else if (SvNOK(sv)) {
3526         if (SvTYPE(sv) < SVt_PVNV)
3527             sv_upgrade(sv, SVt_PVNV);
3528         if (SvNVX(sv) == 0.0
3529 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3530             && !Perl_isnan(SvNVX(sv))
3531 #endif
3532         ) {
3533             s = SvGROW_mutable(sv, 2);
3534             *s++ = '0';
3535             *s = '\0';
3536         } else {
3537             STRLEN len;
3538             STRLEN size = 5; /* "-Inf\0" */
3539
3540             s = SvGROW_mutable(sv, size);
3541             len = S_infnan_2pv(SvNVX(sv), s, size, 'g', 0, 0);
3542             if (len > 0) {
3543                 s += len;
3544                 SvPOK_on(sv);
3545             }
3546             else {
3547                 /* some Xenix systems wipe out errno here */
3548                 dSAVE_ERRNO;
3549
3550                 size =
3551                     1 + /* sign */
3552                     1 + /* "." */
3553                     NV_DIG +
3554                     1 + /* "e" */
3555                     1 + /* sign */
3556                     5 + /* exponent digits */
3557                     1 + /* \0 */
3558                     2; /* paranoia */
3559
3560                 s = SvGROW_mutable(sv, size);
3561 #ifndef USE_LOCALE_NUMERIC
3562                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3563
3564                 SvPOK_on(sv);
3565 #else
3566                 {
3567                     bool local_radix;
3568                     DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3569
3570                     local_radix =
3571                         PL_numeric_local &&
3572                         PL_numeric_radix_sv &&
3573                         SvUTF8(PL_numeric_radix_sv);
3574                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3575                         size += SvLEN(PL_numeric_radix_sv) - 1;
3576                         s = SvGROW_mutable(sv, size);
3577                     }
3578
3579                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3580
3581                     /* If the radix character is UTF-8, and actually is in the
3582                      * output, turn on the UTF-8 flag for the scalar */
3583                     if (local_radix &&
3584                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3585                         SvUTF8_on(sv);
3586                     }
3587
3588                     RESTORE_LC_NUMERIC();
3589                 }
3590
3591                 /* We don't call SvPOK_on(), because it may come to
3592                  * pass that the locale changes so that the
3593                  * stringification we just did is no longer correct.  We
3594                  * will have to re-stringify every time it is needed */
3595 #endif
3596                 RESTORE_ERRNO;
3597             }
3598             while (*s) s++;
3599         }
3600     }
3601     else if (isGV_with_GP(sv)) {
3602         GV *const gv = MUTABLE_GV(sv);
3603         SV *const buffer = sv_newmortal();
3604
3605         gv_efullname3(buffer, gv, "*");
3606
3607         assert(SvPOK(buffer));
3608         if (SvUTF8(buffer))
3609             SvUTF8_on(sv);
3610         if (lp)
3611             *lp = SvCUR(buffer);
3612         return SvPVX(buffer);
3613     }
3614     else if (isREGEXP(sv)) {
3615         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3616         return RX_WRAPPED((REGEXP *)sv);
3617     }
3618     else {
3619         if (lp)
3620             *lp = 0;
3621         if (flags & SV_UNDEF_RETURNS_NULL)
3622             return NULL;
3623         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3624             report_uninit(sv);
3625         /* Typically the caller expects that sv_any is not NULL now.  */
3626         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3627             sv_upgrade(sv, SVt_PV);
3628         return (char *)"";
3629     }
3630
3631     {
3632         const STRLEN len = s - SvPVX_const(sv);
3633         if (lp) 
3634             *lp = len;
3635         SvCUR_set(sv, len);
3636     }
3637     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3638                           PTR2UV(sv),SvPVX_const(sv)));
3639     if (flags & SV_CONST_RETURN)
3640         return (char *)SvPVX_const(sv);
3641     if (flags & SV_MUTABLE_RETURN)
3642         return SvPVX_mutable(sv);
3643     return SvPVX(sv);
3644 }
3645
3646 /*
3647 =for apidoc sv_copypv
3648
3649 Copies a stringified representation of the source SV into the
3650 destination SV.  Automatically performs any necessary mg_get and
3651 coercion of numeric values into strings.  Guaranteed to preserve
3652 UTF8 flag even from overloaded objects.  Similar in nature to
3653 sv_2pv[_flags] but operates directly on an SV instead of just the
3654 string.  Mostly uses sv_2pv_flags to do its work, except when that
3655 would lose the UTF-8'ness of the PV.
3656
3657 =for apidoc sv_copypv_nomg
3658
3659 Like sv_copypv, but doesn't invoke get magic first.
3660
3661 =for apidoc sv_copypv_flags
3662
3663 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3664 include SV_GMAGIC.
3665
3666 =cut
3667 */
3668
3669 void
3670 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3671 {
3672     STRLEN len;
3673     const char *s;
3674
3675     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3676
3677     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3678     sv_setpvn(dsv,s,len);
3679     if (SvUTF8(ssv))
3680         SvUTF8_on(dsv);
3681     else
3682         SvUTF8_off(dsv);
3683 }
3684
3685 /*
3686 =for apidoc sv_2pvbyte
3687
3688 Return a pointer to the byte-encoded representation of the SV, and set *lp
3689 to its length.  May cause the SV to be downgraded from UTF-8 as a
3690 side-effect.
3691
3692 Usually accessed via the C<SvPVbyte> macro.
3693
3694 =cut
3695 */
3696
3697 char *
3698 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3699 {
3700     PERL_ARGS_ASSERT_SV_2PVBYTE;
3701
3702     SvGETMAGIC(sv);
3703     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3704      || isGV_with_GP(sv) || SvROK(sv)) {
3705         SV *sv2 = sv_newmortal();
3706         sv_copypv_nomg(sv2,sv);
3707         sv = sv2;
3708     }
3709     sv_utf8_downgrade(sv,0);
3710     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3711 }
3712
3713 /*
3714 =for apidoc sv_2pvutf8
3715
3716 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3717 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3718
3719 Usually accessed via the C<SvPVutf8> macro.
3720
3721 =cut
3722 */
3723
3724 char *
3725 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3726 {
3727     PERL_ARGS_ASSERT_SV_2PVUTF8;
3728
3729     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3730      || isGV_with_GP(sv) || SvROK(sv))
3731         sv = sv_mortalcopy(sv);
3732     else
3733         SvGETMAGIC(sv);
3734     sv_utf8_upgrade_nomg(sv);
3735     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3736 }
3737
3738
3739 /*
3740 =for apidoc sv_2bool
3741
3742 This macro is only used by sv_true() or its macro equivalent, and only if
3743 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3744 It calls sv_2bool_flags with the SV_GMAGIC flag.
3745
3746 =for apidoc sv_2bool_flags
3747
3748 This function is only used by sv_true() and friends,  and only if
3749 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3750 contain SV_GMAGIC, then it does an mg_get() first.
3751
3752
3753 =cut
3754 */
3755
3756 bool
3757 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3758 {
3759     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3760
3761     restart:
3762     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3763
3764     if (!SvOK(sv))
3765         return 0;
3766     if (SvROK(sv)) {
3767         if (SvAMAGIC(sv)) {
3768             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3769             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3770                 bool svb;
3771                 sv = tmpsv;
3772                 if(SvGMAGICAL(sv)) {
3773                     flags = SV_GMAGIC;
3774                     goto restart; /* call sv_2bool */
3775                 }
3776                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3777                 else if(!SvOK(sv)) {
3778                     svb = 0;
3779                 }
3780                 else if(SvPOK(sv)) {
3781                     svb = SvPVXtrue(sv);
3782                 }
3783                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3784                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3785                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3786                 }
3787                 else {
3788                     flags = 0;
3789                     goto restart; /* call sv_2bool_nomg */
3790                 }
3791                 return cBOOL(svb);
3792             }
3793         }
3794         return SvRV(sv) != 0;
3795     }
3796     if (isREGEXP(sv))
3797         return
3798           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3799     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3800 }
3801
3802 /*
3803 =for apidoc sv_utf8_upgrade
3804
3805 Converts the PV of an SV to its UTF-8-encoded form.
3806 Forces the SV to string form if it is not already.
3807 Will C<mg_get> on C<sv> if appropriate.
3808 Always sets the SvUTF8 flag to avoid future validity checks even
3809 if the whole string is the same in UTF-8 as not.
3810 Returns the number of bytes in the converted string
3811
3812 This is not a general purpose byte encoding to Unicode interface:
3813 use the Encode extension for that.
3814
3815 =for apidoc sv_utf8_upgrade_nomg
3816
3817 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3818
3819 =for apidoc sv_utf8_upgrade_flags
3820
3821 Converts the PV of an SV to its UTF-8-encoded form.
3822 Forces the SV to string form if it is not already.
3823 Always sets the SvUTF8 flag to avoid future validity checks even
3824 if all the bytes are invariant in UTF-8.
3825 If C<flags> has C<SV_GMAGIC> bit set,
3826 will C<mg_get> on C<sv> if appropriate, else not.
3827
3828 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3829 will expand when converted to UTF-8, and skips the extra work of checking for
3830 that.  Typically this flag is used by a routine that has already parsed the
3831 string and found such characters, and passes this information on so that the
3832 work doesn't have to be repeated.
3833
3834 Returns the number of bytes in the converted string.
3835
3836 This is not a general purpose byte encoding to Unicode interface:
3837 use the Encode extension for that.
3838
3839 =for apidoc sv_utf8_upgrade_flags_grow
3840
3841 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3842 the number of unused bytes the string of 'sv' is guaranteed to have free after
3843 it upon return.  This allows the caller to reserve extra space that it intends
3844 to fill, to avoid extra grows.
3845
3846 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3847 are implemented in terms of this function.
3848
3849 Returns the number of bytes in the converted string (not including the spares).
3850
3851 =cut
3852
3853 (One might think that the calling routine could pass in the position of the
3854 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3855 have to be found again.  But that is not the case, because typically when the
3856 caller is likely to use this flag, it won't be calling this routine unless it
3857 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3858 and just use bytes.  But some things that do fit into a byte are variants in
3859 utf8, and the caller may not have been keeping track of these.)
3860
3861 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3862 C<NUL> isn't guaranteed due to having other routines do the work in some input
3863 cases, or if the input is already flagged as being in utf8.
3864
3865 The speed of this could perhaps be improved for many cases if someone wanted to
3866 write a fast function that counts the number of variant characters in a string,
3867 especially if it could return the position of the first one.
3868
3869 */
3870
3871 STRLEN
3872 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3873 {
3874     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3875
3876     if (sv == &PL_sv_undef)
3877         return 0;
3878     if (!SvPOK_nog(sv)) {
3879         STRLEN len = 0;
3880         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3881             (void) sv_2pv_flags(sv,&len, flags);
3882             if (SvUTF8(sv)) {
3883                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3884                 return len;
3885             }
3886         } else {
3887             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3888         }
3889     }
3890
3891     if (SvUTF8(sv)) {
3892         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3893         return SvCUR(sv);
3894     }
3895
3896     if (SvIsCOW(sv)) {
3897         S_sv_uncow(aTHX_ sv, 0);
3898     }
3899
3900     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3901         sv_recode_to_utf8(sv, _get_encoding());
3902         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3903         return SvCUR(sv);
3904     }
3905
3906     if (SvCUR(sv) == 0) {
3907         if (extra) SvGROW(sv, extra);
3908     } else { /* Assume Latin-1/EBCDIC */
3909         /* This function could be much more efficient if we
3910          * had a FLAG in SVs to signal if there are any variant
3911          * chars in the PV.  Given that there isn't such a flag
3912          * make the loop as fast as possible (although there are certainly ways
3913          * to speed this up, eg. through vectorization) */
3914         U8 * s = (U8 *) SvPVX_const(sv);
3915         U8 * e = (U8 *) SvEND(sv);
3916         U8 *t = s;
3917         STRLEN two_byte_count = 0;
3918         
3919         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3920
3921         /* See if really will need to convert to utf8.  We mustn't rely on our
3922          * incoming SV being well formed and having a trailing '\0', as certain
3923          * code in pp_formline can send us partially built SVs. */
3924
3925         while (t < e) {
3926             const U8 ch = *t++;
3927             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3928
3929             t--;    /* t already incremented; re-point to first variant */
3930             two_byte_count = 1;
3931             goto must_be_utf8;
3932         }
3933
3934         /* utf8 conversion not needed because all are invariants.  Mark as
3935          * UTF-8 even if no variant - saves scanning loop */
3936         SvUTF8_on(sv);
3937         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3938         return SvCUR(sv);
3939
3940       must_be_utf8:
3941
3942         /* Here, the string should be converted to utf8, either because of an
3943          * input flag (two_byte_count = 0), or because a character that
3944          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3945          * the beginning of the string (if we didn't examine anything), or to
3946          * the first variant.  In either case, everything from s to t - 1 will
3947          * occupy only 1 byte each on output.
3948          *
3949          * There are two main ways to convert.  One is to create a new string
3950          * and go through the input starting from the beginning, appending each
3951          * converted value onto the new string as we go along.  It's probably
3952          * best to allocate enough space in the string for the worst possible
3953          * case rather than possibly running out of space and having to
3954          * reallocate and then copy what we've done so far.  Since everything
3955          * from s to t - 1 is invariant, the destination can be initialized
3956          * with these using a fast memory copy
3957          *
3958          * The other way is to figure out exactly how big the string should be
3959          * by parsing the entire input.  Then you don't have to make it big
3960          * enough to handle the worst possible case, and more importantly, if
3961          * the string you already have is large enough, you don't have to
3962          * allocate a new string, you can copy the last character in the input
3963          * string to the final position(s) that will be occupied by the
3964          * converted string and go backwards, stopping at t, since everything
3965          * before that is invariant.
3966          *
3967          * There are advantages and disadvantages to each method.
3968          *
3969          * In the first method, we can allocate a new string, do the memory
3970          * copy from the s to t - 1, and then proceed through the rest of the
3971          * string byte-by-byte.
3972          *
3973          * In the second method, we proceed through the rest of the input
3974          * string just calculating how big the converted string will be.  Then
3975          * there are two cases:
3976          *  1)  if the string has enough extra space to handle the converted
3977          *      value.  We go backwards through the string, converting until we
3978          *      get to the position we are at now, and then stop.  If this
3979          *      position is far enough along in the string, this method is
3980          *      faster than the other method.  If the memory copy were the same
3981          *      speed as the byte-by-byte loop, that position would be about
3982          *      half-way, as at the half-way mark, parsing to the end and back
3983          *      is one complete string's parse, the same amount as starting
3984          *      over and going all the way through.  Actually, it would be
3985          *      somewhat less than half-way, as it's faster to just count bytes
3986          *      than to also copy, and we don't have the overhead of allocating
3987          *      a new string, changing the scalar to use it, and freeing the
3988          *      existing one.  But if the memory copy is fast, the break-even
3989          *      point is somewhere after half way.  The counting loop could be
3990          *      sped up by vectorization, etc, to move the break-even point
3991          *      further towards the beginning.
3992          *  2)  if the string doesn't have enough space to handle the converted
3993          *      value.  A new string will have to be allocated, and one might
3994          *      as well, given that, start from the beginning doing the first
3995          *      method.  We've spent extra time parsing the string and in
3996          *      exchange all we've gotten is that we know precisely how big to
3997          *      make the new one.  Perl is more optimized for time than space,
3998          *      so this case is a loser.
3999          * So what I've decided to do is not use the 2nd method unless it is
4000          * guaranteed that a new string won't have to be allocated, assuming
4001          * the worst case.  I also decided not to put any more conditions on it
4002          * than this, for now.  It seems likely that, since the worst case is
4003          * twice as big as the unknown portion of the string (plus 1), we won't
4004          * be guaranteed enough space, causing us to go to the first method,
4005          * unless the string is short, or the first variant character is near
4006          * the end of it.  In either of these cases, it seems best to use the
4007          * 2nd method.  The only circumstance I can think of where this would
4008          * be really slower is if the string had once had much more data in it
4009          * than it does now, but there is still a substantial amount in it  */
4010
4011         {
4012             STRLEN invariant_head = t - s;
4013             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
4014             if (SvLEN(sv) < size) {
4015
4016                 /* Here, have decided to allocate a new string */
4017
4018                 U8 *dst;
4019                 U8 *d;
4020
4021                 Newx(dst, size, U8);
4022
4023                 /* If no known invariants at the beginning of the input string,
4024                  * set so starts from there.  Otherwise, can use memory copy to
4025                  * get up to where we are now, and then start from here */
4026
4027                 if (invariant_head == 0) {
4028                     d = dst;
4029                 } else {
4030                     Copy(s, dst, invariant_head, char);
4031                     d = dst + invariant_head;
4032                 }
4033
4034                 while (t < e) {
4035                     append_utf8_from_native_byte(*t, &d);
4036                     t++;
4037                 }
4038                 *d = '\0';
4039                 SvPV_free(sv); /* No longer using pre-existing string */
4040                 SvPV_set(sv, (char*)dst);
4041                 SvCUR_set(sv, d - dst);
4042                 SvLEN_set(sv, size);
4043             } else {
4044
4045                 /* Here, have decided to get the exact size of the string.
4046                  * Currently this happens only when we know that there is
4047                  * guaranteed enough space to fit the converted string, so
4048                  * don't have to worry about growing.  If two_byte_count is 0,
4049                  * then t points to the first byte of the string which hasn't
4050                  * been examined yet.  Otherwise two_byte_count is 1, and t
4051                  * points to the first byte in the string that will expand to
4052                  * two.  Depending on this, start examining at t or 1 after t.
4053                  * */
4054
4055                 U8 *d = t + two_byte_count;
4056
4057
4058                 /* Count up the remaining bytes that expand to two */
4059
4060                 while (d < e) {
4061                     const U8 chr = *d++;
4062                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
4063                 }
4064
4065                 /* The string will expand by just the number of bytes that
4066                  * occupy two positions.  But we are one afterwards because of
4067                  * the increment just above.  This is the place to put the
4068                  * trailing NUL, and to set the length before we decrement */
4069
4070                 d += two_byte_count;
4071                 SvCUR_set(sv, d - s);
4072                 *d-- = '\0';
4073
4074
4075                 /* Having decremented d, it points to the position to put the
4076                  * very last byte of the expanded string.  Go backwards through
4077                  * the string, copying and expanding as we go, stopping when we
4078                  * get to the part that is invariant the rest of the way down */
4079
4080                 e--;
4081                 while (e >= t) {
4082                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
4083                         *d-- = *e;
4084                     } else {
4085                         *d-- = UTF8_EIGHT_BIT_LO(*e);
4086                         *d-- = UTF8_EIGHT_BIT_HI(*e);
4087                     }
4088                     e--;
4089                 }
4090             }
4091
4092             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4093                 /* Update pos. We do it at the end rather than during
4094                  * the upgrade, to avoid slowing down the common case
4095                  * (upgrade without pos).
4096                  * pos can be stored as either bytes or characters.  Since
4097                  * this was previously a byte string we can just turn off
4098                  * the bytes flag. */
4099                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
4100                 if (mg) {
4101                     mg->mg_flags &= ~MGf_BYTES;
4102                 }
4103                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
4104                     magic_setutf8(sv,mg); /* clear UTF8 cache */
4105             }
4106         }
4107     }
4108
4109     /* Mark as UTF-8 even if no variant - saves scanning loop */
4110     SvUTF8_on(sv);
4111     return SvCUR(sv);
4112 }
4113
4114 /*
4115 =for apidoc sv_utf8_downgrade
4116
4117 Attempts to convert the PV of an SV from characters to bytes.
4118 If the PV contains a character that cannot fit
4119 in a byte, this conversion will fail;
4120 in this case, either returns false or, if C<fail_ok> is not
4121 true, croaks.
4122
4123 This is not a general purpose Unicode to byte encoding interface:
4124 use the Encode extension for that.
4125
4126 =cut
4127 */
4128
4129 bool
4130 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
4131 {
4132     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
4133
4134     if (SvPOKp(sv) && SvUTF8(sv)) {
4135         if (SvCUR(sv)) {
4136             U8 *s;
4137             STRLEN len;
4138             int mg_flags = SV_GMAGIC;
4139
4140             if (SvIsCOW(sv)) {
4141                 S_sv_uncow(aTHX_ sv, 0);
4142             }
4143             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4144                 /* update pos */
4145                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
4146                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
4147                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
4148                                                 SV_GMAGIC|SV_CONST_RETURN);
4149                         mg_flags = 0; /* sv_pos_b2u does get magic */
4150                 }
4151                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
4152                     magic_setutf8(sv,mg); /* clear UTF8 cache */
4153
4154             }
4155             s = (U8 *) SvPV_flags(sv, len, mg_flags);
4156
4157             if (!utf8_to_bytes(s, &len)) {
4158                 if (fail_ok)
4159                     return FALSE;
4160                 else {
4161                     if (PL_op)
4162                         Perl_croak(aTHX_ "Wide character in %s",
4163                                    OP_DESC(PL_op));
4164                     else
4165                         Perl_croak(aTHX_ "Wide character");
4166                 }
4167             }
4168             SvCUR_set(sv, len);
4169         }
4170     }
4171     SvUTF8_off(sv);
4172     return TRUE;
4173 }
4174
4175 /*
4176 =for apidoc sv_utf8_encode
4177
4178 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
4179 flag off so that it looks like octets again.
4180
4181 =cut
4182 */
4183
4184 void
4185 Perl_sv_utf8_encode(pTHX_ SV *const sv)
4186 {
4187     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
4188
4189     if (SvREADONLY(sv)) {
4190         sv_force_normal_flags(sv, 0);
4191     }
4192     (void) sv_utf8_upgrade(sv);
4193     SvUTF8_off(sv);
4194 }
4195
4196 /*
4197 =for apidoc sv_utf8_decode
4198
4199 If the PV of the SV is an octet sequence in UTF-8
4200 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
4201 so that it looks like a character.  If the PV contains only single-byte
4202 characters, the C<SvUTF8> flag stays off.
4203 Scans PV for validity and returns false if the PV is invalid UTF-8.
4204
4205 =cut
4206 */
4207
4208 bool
4209 Perl_sv_utf8_decode(pTHX_ SV *const sv)
4210 {
4211     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
4212
4213     if (SvPOKp(sv)) {
4214         const U8 *start, *c;
4215         const U8 *e;
4216
4217         /* The octets may have got themselves encoded - get them back as
4218          * bytes
4219          */
4220         if (!sv_utf8_downgrade(sv, TRUE))
4221             return FALSE;
4222
4223         /* it is actually just a matter of turning the utf8 flag on, but
4224          * we want to make sure everything inside is valid utf8 first.
4225          */
4226         c = start = (const U8 *) SvPVX_const(sv);
4227         if (!is_utf8_string(c, SvCUR(sv)))
4228             return FALSE;
4229         e = (const U8 *) SvEND(sv);
4230         while (c < e) {
4231             const U8 ch = *c++;
4232             if (!UTF8_IS_INVARIANT(ch)) {
4233                 SvUTF8_on(sv);
4234                 break;
4235             }
4236         }
4237         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
4238             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
4239                    after this, clearing pos.  Does anything on CPAN
4240                    need this? */
4241             /* adjust pos to the start of a UTF8 char sequence */
4242             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
4243             if (mg) {
4244                 I32 pos = mg->mg_len;
4245                 if (pos > 0) {
4246                     for (c = start + pos; c > start; c--) {
4247                         if (UTF8_IS_START(*c))
4248                             break;
4249                     }
4250                     mg->mg_len  = c - start;
4251                 }
4252             }
4253             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
4254                 magic_setutf8(sv,mg); /* clear UTF8 cache */
4255         }
4256     }
4257     return TRUE;
4258 }
4259
4260 /*
4261 =for apidoc sv_setsv
4262
4263 Copies the contents of the source SV C<ssv> into the destination SV
4264 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
4265 function if the source SV needs to be reused.  Does not handle 'set' magic on
4266 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
4267 performs a copy-by-value, obliterating any previous content of the
4268 destination.
4269
4270 You probably want to use one of the assortment of wrappers, such as
4271 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4272 C<SvSetMagicSV_nosteal>.
4273
4274 =for apidoc sv_setsv_flags
4275
4276 Copies the contents of the source SV C<ssv> into the destination SV
4277 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
4278 function if the source SV needs to be reused.  Does not handle 'set' magic.
4279 Loosely speaking, it performs a copy-by-value, obliterating any previous
4280 content of the destination.
4281 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
4282 C<ssv> if appropriate, else not.  If the C<flags>
4283 parameter has the C<SV_NOSTEAL> bit set then the
4284 buffers of temps will not be stolen.  <sv_setsv>
4285 and C<sv_setsv_nomg> are implemented in terms of this function.
4286
4287 You probably want to use one of the assortment of wrappers, such as
4288 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
4289 C<SvSetMagicSV_nosteal>.
4290
4291 This is the primary function for copying scalars, and most other
4292 copy-ish functions and macros use this underneath.
4293
4294 =cut
4295 */
4296
4297 static void
4298 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
4299 {
4300     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
4301     HV *old_stash = NULL;
4302
4303     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
4304
4305     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
4306         const char * const name = GvNAME(sstr);
4307         const STRLEN len = GvNAMELEN(sstr);
4308         {
4309             if (dtype >= SVt_PV) {
4310                 SvPV_free(dstr);
4311                 SvPV_set(dstr, 0);
4312                 SvLEN_set(dstr, 0);
4313                 SvCUR_set(dstr, 0);
4314             }
4315             SvUPGRADE(dstr, SVt_PVGV);
4316             (void)SvOK_off(dstr);
4317             isGV_with_GP_on(dstr);
4318         }
4319         GvSTASH(dstr) = GvSTASH(sstr);
4320         if (GvSTASH(dstr))
4321             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
4322         gv_name_set(MUTABLE_GV(dstr), name, len,
4323                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
4324         SvFAKE_on(dstr);        /* can coerce to non-glob */
4325     }
4326
4327     if(GvGP(MUTABLE_GV(sstr))) {
4328         /* If source has method cache entry, clear it */
4329         if(GvCVGEN(sstr)) {
4330             SvREFCNT_dec(GvCV(sstr));
4331             GvCV_set(sstr, NULL);
4332             GvCVGEN(sstr) = 0;
4333         }
4334         /* If source has a real method, then a method is
4335            going to change */
4336         else if(
4337          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4338         ) {
4339             mro_changes = 1;
4340         }
4341     }
4342
4343     /* If dest already had a real method, that's a change as well */
4344     if(
4345         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
4346      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4347     ) {
4348         mro_changes = 1;
4349     }
4350
4351     /* We don't need to check the name of the destination if it was not a
4352        glob to begin with. */
4353     if(dtype == SVt_PVGV) {
4354         const char * const name = GvNAME((const GV *)dstr);
4355         if(
4356             strEQ(name,"ISA")
4357          /* The stash may have been detached from the symbol table, so
4358             check its name. */
4359          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4360         )
4361             mro_changes = 2;
4362         else {
4363             const STRLEN len = GvNAMELEN(dstr);
4364             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4365              || (len == 1 && name[0] == ':')) {
4366                 mro_changes = 3;
4367
4368                 /* Set aside the old stash, so we can reset isa caches on
4369                    its subclasses. */
4370                 if((old_stash = GvHV(dstr)))
4371                     /* Make sure we do not lose it early. */
4372                     SvREFCNT_inc_simple_void_NN(
4373                      sv_2mortal((SV *)old_stash)
4374                     );
4375             }
4376         }
4377
4378         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4379     }
4380
4381     gp_free(MUTABLE_GV(dstr));
4382     GvINTRO_off(dstr);          /* one-shot flag */
4383     GvGP_set(dstr, gp_ref(GvGP(sstr)));
4384     if (SvTAINTED(sstr))
4385         SvTAINT(dstr);
4386     if (GvIMPORTED(dstr) != GVf_IMPORTED
4387         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4388         {
4389             GvIMPORTED_on(dstr);
4390         }
4391     GvMULTI_on(dstr);
4392     if(mro_changes == 2) {
4393       if (GvAV((const GV *)sstr)) {
4394         MAGIC *mg;
4395         SV * const sref = (SV *)GvAV((const GV *)dstr);
4396         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4397             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4398                 AV * const ary = newAV();
4399                 av_push(ary, mg->mg_obj); /* takes the refcount */
4400                 mg->mg_obj = (SV *)ary;
4401             }
4402             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
4403         }
4404         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
4405       }
4406       mro_isa_changed_in(GvSTASH(dstr));
4407     }
4408     else if(mro_changes == 3) {
4409         HV * const stash = GvHV(dstr);
4410         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
4411             mro_package_moved(
4412                 stash, old_stash,
4413                 (GV *)dstr, 0
4414             );
4415     }
4416     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
4417     if (GvIO(dstr) && dtype == SVt_PVGV) {
4418         DEBUG_o(Perl_deb(aTHX_
4419                         "glob_assign_glob clearing PL_stashcache\n"));
4420         /* It's a cache. It will rebuild itself quite happily.
4421            It's a lot of effort to work out exactly which key (or keys)
4422            might be invalidated by the creation of the this file handle.
4423          */
4424         hv_clear(PL_stashcache);
4425     }
4426     return;
4427 }
4428
4429 void
4430 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4431 {
4432     SV * const sref = SvRV(sstr);
4433     SV *dref;
4434     const int intro = GvINTRO(dstr);
4435     SV **location;
4436     U8 import_flag = 0;
4437     const U32 stype = SvTYPE(sref);
4438
4439     PERL_ARGS_ASSERT_GV_SETREF;
4440
4441     if (intro) {
4442         GvINTRO_off(dstr);      /* one-shot flag */
4443         GvLINE(dstr) = CopLINE(PL_curcop);
4444         GvEGV(dstr) = MUTABLE_GV(dstr);
4445     }
4446     GvMULTI_on(dstr);
4447     switch (stype) {
4448     case SVt_PVCV:
4449         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4450         import_flag = GVf_IMPORTED_CV;
4451         goto common;
4452     case SVt_PVHV:
4453         location = (SV **) &GvHV(dstr);
4454         import_flag = GVf_IMPORTED_HV;
4455         goto common;
4456     case SVt_PVAV:
4457         location = (SV **) &GvAV(dstr);
4458         import_flag = GVf_IMPORTED_AV;
4459         goto common;
4460     case SVt_PVIO:
4461         location = (SV **) &GvIOp(dstr);
4462         goto common;
4463     case SVt_PVFM:
4464         location = (SV **) &GvFORM(dstr);
4465         goto common;
4466     default:
4467         location = &GvSV(dstr);
4468         import_flag = GVf_IMPORTED_SV;
4469     common:
4470         if (intro) {
4471             if (stype == SVt_PVCV) {
4472                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4473                 if (GvCVGEN(dstr)) {
4474                     SvREFCNT_dec(GvCV(dstr));
4475                     GvCV_set(dstr, NULL);
4476                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4477                 }
4478             }
4479             /* SAVEt_GVSLOT takes more room on the savestack and has more
4480                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4481                leave_scope needs access to the GV so it can reset method
4482                caches.  We must use SAVEt_GVSLOT whenever the type is
4483                SVt_PVCV, even if the stash is anonymous, as the stash may
4484                gain a name somehow before leave_scope. */
4485             if (stype == SVt_PVCV) {
4486                 /* There is no save_pushptrptrptr.  Creating it for this
4487                    one call site would be overkill.  So inline the ss add
4488                    routines here. */
4489                 dSS_ADD;
4490                 SS_ADD_PTR(dstr);
4491                 SS_ADD_PTR(location);
4492                 SS_ADD_PTR(SvREFCNT_inc(*location));
4493                 SS_ADD_UV(SAVEt_GVSLOT);
4494                 SS_ADD_END(4);
4495             }
4496             else SAVEGENERICSV(*location);
4497         }
4498         dref = *location;
4499         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4500             CV* const cv = MUTABLE_CV(*location);
4501             if (cv) {
4502                 if (!GvCVGEN((const GV *)dstr) &&
4503                     (CvROOT(cv) || CvXSUB(cv)) &&
4504                     /* redundant check that avoids creating the extra SV
4505                        most of the time: */
4506                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4507                     {
4508                         SV * const new_const_sv =
4509                             CvCONST((const CV *)sref)
4510                                  ? cv_const_sv((const CV *)sref)
4511                                  : NULL;
4512                         report_redefined_cv(
4513                            sv_2mortal(Perl_newSVpvf(aTHX_
4514                                 "%"HEKf"::%"HEKf,
4515                                 HEKfARG(
4516                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4517                                 ),
4518                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4519                            )),
4520                            cv,
4521                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4522                         );
4523                     }
4524                 if (!intro)
4525                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4526                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4527                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4528                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4529             }
4530             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4531             GvASSUMECV_on(dstr);
4532             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4533                 if (intro && GvREFCNT(dstr) > 1) {
4534                     /* temporary remove extra savestack's ref */
4535                     --GvREFCNT(dstr);
4536                     gv_method_changed(dstr);
4537                     ++GvREFCNT(dstr);
4538                 }
4539                 else gv_method_changed(dstr);
4540             }
4541         }
4542         *location = SvREFCNT_inc_simple_NN(sref);
4543         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4544             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4545             GvFLAGS(dstr) |= import_flag;
4546         }
4547         if (import_flag == GVf_IMPORTED_SV) {
4548             if (intro) {
4549                 save_aliased_sv((GV *)dstr);
4550             }
4551             /* Turn off the flag if sref is not referenced elsewhere,
4552                even by weak refs.  (SvRMAGICAL is a pessimistic check for
4553                back refs.)  */
4554             if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
4555                 GvALIASED_SV_off(dstr);
4556             else
4557                 GvALIASED_SV_on(dstr);
4558         }
4559         if (stype == SVt_PVHV) {
4560             const char * const name = GvNAME((GV*)dstr);
4561             const STRLEN len = GvNAMELEN(dstr);
4562             if (
4563                 (
4564                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4565                 || (len == 1 && name[0] == ':')
4566                 )
4567              && (!dref || HvENAME_get(dref))
4568             ) {
4569                 mro_package_moved(
4570                     (HV *)sref, (HV *)dref,
4571                     (GV *)dstr, 0
4572                 );
4573             }
4574         }
4575         else if (
4576             stype == SVt_PVAV && sref != dref
4577          && strEQ(GvNAME((GV*)dstr), "ISA")
4578          /* The stash may have been detached from the symbol table, so
4579             check its name before doing anything. */
4580          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4581         ) {
4582             MAGIC *mg;
4583             MAGIC * const omg = dref && SvSMAGICAL(dref)
4584                                  ? mg_find(dref, PERL_MAGIC_isa)
4585                                  : NULL;
4586             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4587                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4588                     AV * const ary = newAV();
4589                     av_push(ary, mg->mg_obj); /* takes the refcount */
4590                     mg->mg_obj = (SV *)ary;
4591                 }
4592                 if (omg) {
4593                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4594                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4595                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4596                         while (items--)
4597                             av_push(
4598                              (AV *)mg->mg_obj,
4599                              SvREFCNT_inc_simple_NN(*svp++)
4600                             );
4601                     }
4602                     else
4603                         av_push(
4604                          (AV *)mg->mg_obj,
4605                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4606                         );
4607                 }
4608                 else
4609                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4610             }
4611             else
4612             {
4613                 sv_magic(
4614                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4615                 );
4616                 mg = mg_find(sref, PERL_MAGIC_isa);
4617             }
4618             /* Since the *ISA assignment could have affected more than
4619                one stash, don't call mro_isa_changed_in directly, but let
4620                magic_clearisa do it for us, as it already has the logic for
4621                dealing with globs vs arrays of globs. */
4622             assert(mg);
4623             Perl_magic_clearisa(aTHX_ NULL, mg);
4624         }
4625         else if (stype == SVt_PVIO) {
4626             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4627             /* It's a cache. It will rebuild itself quite happily.
4628                It's a lot of effort to work out exactly which key (or keys)
4629                might be invalidated by the creation of the this file handle.
4630             */
4631             hv_clear(PL_stashcache);
4632         }
4633         break;
4634     }
4635     if (!intro) SvREFCNT_dec(dref);
4636     if (SvTAINTED(sstr))
4637         SvTAINT(dstr);
4638     return;
4639 }
4640
4641
4642
4643
4644 #ifdef PERL_DEBUG_READONLY_COW
4645 # include <sys/mman.h>
4646
4647 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4648 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4649 # endif
4650
4651 void
4652 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4653 {
4654     struct perl_memory_debug_header * const header =
4655         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4656     const MEM_SIZE len = header->size;
4657     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4658 # ifdef PERL_TRACK_MEMPOOL
4659     if (!header->readonly) header->readonly = 1;
4660 # endif
4661     if (mprotect(header, len, PROT_READ))
4662         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4663                          header, len, errno);
4664 }
4665
4666 static void
4667 S_sv_buf_to_rw(pTHX_ SV *sv)
4668 {
4669     struct perl_memory_debug_header * const header =
4670         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4671     const MEM_SIZE len = header->size;
4672     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4673     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4674         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4675                          header, len, errno);
4676 # ifdef PERL_TRACK_MEMPOOL
4677     header->readonly = 0;
4678 # endif
4679 }
4680
4681 #else
4682 # define sv_buf_to_ro(sv)       NOOP
4683 # define sv_buf_to_rw(sv)       NOOP
4684 #endif
4685
4686 void
4687 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4688 {
4689     U32 sflags;
4690     int dtype;
4691     svtype stype;
4692
4693     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4694
4695     if (UNLIKELY( sstr == dstr ))
4696         return;
4697
4698     if (SvIS_FREED(dstr)) {
4699         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4700                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4701     }
4702     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4703     if (UNLIKELY( !sstr ))
4704         sstr = &PL_sv_undef;
4705     if (SvIS_FREED(sstr)) {
4706         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4707                    (void*)sstr, (void*)dstr);
4708     }
4709     stype = SvTYPE(sstr);
4710     dtype = SvTYPE(dstr);
4711
4712     /* There's a lot of redundancy below but we're going for speed here */
4713
4714     switch (stype) {
4715     case SVt_NULL:
4716       undef_sstr:
4717         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4718             (void)SvOK_off(dstr);
4719             return;
4720         }
4721         break;
4722     case SVt_IV:
4723         if (SvIOK(sstr)) {
4724             switch (dtype) {
4725             case SVt_NULL:
4726                 /* For performance, we inline promoting to type SVt_IV. */
4727                 /* We're starting from SVt_NULL, so provided that define is
4728                  * actual 0, we don't have to unset any SV type flags
4729                  * to promote to SVt_IV. */
4730                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4731                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4732                 SvFLAGS(dstr) |= SVt_IV;
4733                 break;
4734             case SVt_NV:
4735             case SVt_PV:
4736                 sv_upgrade(dstr, SVt_PVIV);
4737                 break;
4738             case SVt_PVGV:
4739             case SVt_PVLV:
4740                 goto end_of_first_switch;
4741             }
4742             (void)SvIOK_only(dstr);
4743             SvIV_set(dstr,  SvIVX(sstr));
4744             if (SvIsUV(sstr))
4745                 SvIsUV_on(dstr);
4746             /* SvTAINTED can only be true if the SV has taint magic, which in
4747                turn means that the SV type is PVMG (or greater). This is the
4748                case statement for SVt_IV, so this cannot be true (whatever gcov
4749                may say).  */
4750             assert(!SvTAINTED(sstr));
4751             return;
4752         }
4753         if (!SvROK(sstr))
4754             goto undef_sstr;
4755         if (dtype < SVt_PV && dtype != SVt_IV)
4756             sv_upgrade(dstr, SVt_IV);
4757         break;
4758
4759     case SVt_NV:
4760         if (LIKELY( SvNOK(sstr) )) {
4761             switch (dtype) {
4762             case SVt_NULL:
4763             case SVt_IV:
4764                 sv_upgrade(dstr, SVt_NV);
4765                 break;
4766             case SVt_PV:
4767             case SVt_PVIV:
4768                 sv_upgrade(dstr, SVt_PVNV);
4769                 break;
4770             case SVt_PVGV:
4771             case SVt_PVLV:
4772                 goto end_of_first_switch;
4773             }
4774             SvNV_set(dstr, SvNVX(sstr));
4775             (void)SvNOK_only(dstr);
4776             /* SvTAINTED can only be true if the SV has taint magic, which in
4777                turn means that the SV type is PVMG (or greater). This is the
4778                case statement for SVt_NV, so this cannot be true (whatever gcov
4779                may say).  */
4780             assert(!SvTAINTED(sstr));
4781             return;
4782         }
4783         goto undef_sstr;
4784
4785     case SVt_PV:
4786         if (dtype < SVt_PV)
4787             sv_upgrade(dstr, SVt_PV);
4788         break;
4789     case SVt_PVIV:
4790         if (dtype < SVt_PVIV)
4791             sv_upgrade(dstr, SVt_PVIV);
4792         break;
4793     case SVt_PVNV:
4794         if (dtype < SVt_PVNV)
4795             sv_upgrade(dstr, SVt_PVNV);
4796         break;
4797     default:
4798         {
4799         const char * const type = sv_reftype(sstr,0);
4800         if (PL_op)
4801             /* diag_listed_as: Bizarre copy of %s */
4802             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4803         else
4804             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4805         }
4806         NOT_REACHED; /* NOTREACHED */
4807
4808     case SVt_REGEXP:
4809       upgregexp:
4810         if (dtype < SVt_REGEXP)
4811         {
4812             if (dtype >= SVt_PV) {
4813                 SvPV_free(dstr);
4814                 SvPV_set(dstr, 0);
4815                 SvLEN_set(dstr, 0);
4816                 SvCUR_set(dstr, 0);
4817             }
4818             sv_upgrade(dstr, SVt_REGEXP);
4819         }
4820         break;
4821
4822         case SVt_INVLIST:
4823     case SVt_PVLV:
4824     case SVt_PVGV:
4825     case SVt_PVMG:
4826         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4827             mg_get(sstr);
4828             if (SvTYPE(sstr) != stype)
4829                 stype = SvTYPE(sstr);
4830         }
4831         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4832                     glob_assign_glob(dstr, sstr, dtype);
4833                     return;
4834         }
4835         if (stype == SVt_PVLV)
4836         {
4837             if (isREGEXP(sstr)) goto upgregexp;
4838             SvUPGRADE(dstr, SVt_PVNV);
4839         }
4840         else
4841             SvUPGRADE(dstr, (svtype)stype);
4842     }
4843  end_of_first_switch:
4844
4845     /* dstr may have been upgraded.  */
4846     dtype = SvTYPE(dstr);
4847     sflags = SvFLAGS(sstr);
4848
4849     if (UNLIKELY( dtype == SVt_PVCV )) {
4850         /* Assigning to a subroutine sets the prototype.  */
4851         if (SvOK(sstr)) {
4852             STRLEN len;
4853             const char *const ptr = SvPV_const(sstr, len);
4854
4855             SvGROW(dstr, len + 1);
4856             Copy(ptr, SvPVX(dstr), len + 1, char);
4857             SvCUR_set(dstr, len);
4858             SvPOK_only(dstr);
4859             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4860             CvAUTOLOAD_off(dstr);
4861         } else {
4862             SvOK_off(dstr);
4863         }
4864     }
4865     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4866              || dtype == SVt_PVFM))
4867     {
4868         const char * const type = sv_reftype(dstr,0);
4869         if (PL_op)
4870             /* diag_listed_as: Cannot copy to %s */
4871             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4872         else
4873             Perl_croak(aTHX_ "Cannot copy to %s", type);
4874     } else if (sflags & SVf_ROK) {
4875         if (isGV_with_GP(dstr)
4876             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4877             sstr = SvRV(sstr);
4878             if (sstr == dstr) {
4879                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4880                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4881                 {
4882                     GvIMPORTED_on(dstr);
4883                 }
4884                 GvMULTI_on(dstr);
4885                 return;
4886             }
4887             glob_assign_glob(dstr, sstr, dtype);
4888             return;
4889         }
4890
4891         if (dtype >= SVt_PV) {
4892             if (isGV_with_GP(dstr)) {
4893                 gv_setref(dstr, sstr);
4894                 return;
4895             }
4896             if (SvPVX_const(dstr)) {
4897                 SvPV_free(dstr);
4898                 SvLEN_set(dstr, 0);
4899                 SvCUR_set(dstr, 0);
4900             }
4901         }
4902         (void)SvOK_off(dstr);
4903         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4904         SvFLAGS(dstr) |= sflags & SVf_ROK;
4905         assert(!(sflags & SVp_NOK));
4906         assert(!(sflags & SVp_IOK));
4907         assert(!(sflags & SVf_NOK));
4908         assert(!(sflags & SVf_IOK));
4909     }
4910     else if (isGV_with_GP(dstr)) {
4911         if (!(sflags & SVf_OK)) {
4912             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4913                            "Undefined value assigned to typeglob");
4914         }
4915         else {
4916             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4917             if (dstr != (const SV *)gv) {
4918                 const char * const name = GvNAME((const GV *)dstr);
4919                 const STRLEN len = GvNAMELEN(dstr);
4920                 HV *old_stash = NULL;
4921                 bool reset_isa = FALSE;
4922                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4923                  || (len == 1 && name[0] == ':')) {
4924                     /* Set aside the old stash, so we can reset isa caches
4925                        on its subclasses. */
4926                     if((old_stash = GvHV(dstr))) {
4927                         /* Make sure we do not lose it early. */
4928                         SvREFCNT_inc_simple_void_NN(
4929                          sv_2mortal((SV *)old_stash)
4930                         );
4931                     }
4932                     reset_isa = TRUE;
4933                 }
4934
4935                 if (GvGP(dstr)) {
4936                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4937                     gp_free(MUTABLE_GV(dstr));
4938                 }
4939                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4940
4941                 if (reset_isa) {
4942                     HV * const stash = GvHV(dstr);
4943                     if(
4944                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4945                     )
4946                         mro_package_moved(
4947                          stash, old_stash,
4948                          (GV *)dstr, 0
4949                         );
4950                 }
4951             }
4952         }
4953     }
4954     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4955           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4956         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4957     }
4958     else if (sflags & SVp_POK) {
4959         const STRLEN cur = SvCUR(sstr);
4960         const STRLEN len = SvLEN(sstr);
4961
4962         /*
4963          * We have three basic ways to copy the string:
4964          *
4965          *  1. Swipe
4966          *  2. Copy-on-write
4967          *  3. Actual copy
4968          * 
4969          * Which we choose is based on various factors.  The following
4970          * things are listed in order of speed, fastest to slowest:
4971          *  - Swipe
4972          *  - Copying a short string
4973          *  - Copy-on-write bookkeeping
4974          *  - malloc
4975          *  - Copying a long string
4976          * 
4977          * We swipe the string (steal the string buffer) if the SV on the
4978          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4979          * big win on long strings.  It should be a win on short strings if
4980          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4981          * slow things down, as SvPVX_const(sstr) would have been freed
4982          * soon anyway.
4983          * 
4984          * We also steal the buffer from a PADTMP (operator target) if it
4985          * is â€˜long enough’.  For short strings, a swipe does not help
4986          * here, as it causes more malloc calls the next time the target
4987          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4988          * be allocated it is still not worth swiping PADTMPs for short
4989          * strings, as the savings here are small.
4990          * 
4991          * If swiping is not an option, then we see whether it is
4992          * worth using copy-on-write.  If the lhs already has a buf-
4993          * fer big enough and the string is short, we skip it and fall back
4994          * to method 3, since memcpy is faster for short strings than the
4995          * later bookkeeping overhead that copy-on-write entails.
4996
4997          * If the rhs is not a copy-on-write string yet, then we also
4998          * consider whether the buffer is too large relative to the string
4999          * it holds.  Some operations such as readline allocate a large
5000          * buffer in the expectation of reusing it.  But turning such into
5001          * a COW buffer is counter-productive because it increases memory
5002          * usage by making readline allocate a new large buffer the sec-
5003          * ond time round.  So, if the buffer is too large, again, we use
5004          * method 3 (copy).
5005          * 
5006          * Finally, if there is no buffer on the left, or the buffer is too 
5007          * small, then we use copy-on-write and make both SVs share the
5008          * string buffer.
5009          *
5010          */
5011
5012         /* Whichever path we take through the next code, we want this true,
5013            and doing it now facilitates the COW check.  */
5014         (void)SvPOK_only(dstr);
5015
5016         if (
5017                  (              /* Either ... */
5018                                 /* slated for free anyway (and not COW)? */
5019                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
5020                                 /* or a swipable TARG */
5021                  || ((sflags &
5022                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
5023                        == SVs_PADTMP
5024                                 /* whose buffer is worth stealing */
5025                      && CHECK_COWBUF_THRESHOLD(cur,len)
5026                     )
5027                  ) &&
5028                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
5029                  (!(flags & SV_NOSTEAL)) &&
5030                                         /* and we're allowed to steal temps */
5031                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
5032                  len)             /* and really is a string */
5033         {       /* Passes the swipe test.  */
5034             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
5035                 SvPV_free(dstr);
5036             SvPV_set(dstr, SvPVX_mutable(sstr));
5037             SvLEN_set(dstr, SvLEN(sstr));
5038             SvCUR_set(dstr, SvCUR(sstr));
5039
5040             SvTEMP_off(dstr);
5041             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
5042             SvPV_set(sstr, NULL);
5043             SvLEN_set(sstr, 0);
5044             SvCUR_set(sstr, 0);
5045             SvTEMP_off(sstr);
5046         }
5047         else if (flags & SV_COW_SHARED_HASH_KEYS
5048               &&
5049 #ifdef PERL_OLD_COPY_ON_WRITE
5050                  (  sflags & SVf_IsCOW
5051                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
5052                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
5053                      && SvTYPE(sstr) >= SVt_PVIV && len
5054                     )
5055                  )
5056 #elif defined(PERL_NEW_COPY_ON_WRITE)
5057                  (sflags & SVf_IsCOW
5058                    ? (!len ||
5059                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
5060                           /* If this is a regular (non-hek) COW, only so
5061                              many COW "copies" are possible. */
5062                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
5063                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
5064                      && !(SvFLAGS(dstr) & SVf_BREAK)
5065                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
5066                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
5067                     ))
5068 #else
5069                  sflags & SVf_IsCOW
5070               && !(SvFLAGS(dstr) & SVf_BREAK)
5071 #endif
5072             ) {
5073             /* Either it's a shared hash key, or it's suitable for
5074                copy-on-write.  */
5075             if (DEBUG_C_TEST) {
5076                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
5077                 sv_dump(sstr);
5078                 sv_dump(dstr);
5079             }
5080 #ifdef PERL_ANY_COW
5081             if (!(sflags & SVf_IsCOW)) {
5082                     SvIsCOW_on(sstr);
5083 # ifdef PERL_OLD_COPY_ON_WRITE
5084                     /* Make the source SV into a loop of 1.
5085                        (about to become 2) */
5086                     SV_COW_NEXT_SV_SET(sstr, sstr);
5087 # else
5088                     CowREFCNT(sstr) = 0;
5089 # endif
5090             }
5091 #endif
5092             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
5093                 SvPV_free(dstr);
5094             }
5095
5096 #ifdef PERL_ANY_COW
5097             if (len) {
5098 # ifdef PERL_OLD_COPY_ON_WRITE
5099                     assert (SvTYPE(dstr) >= SVt_PVIV);
5100                     /* SvIsCOW_normal */
5101                     /* splice us in between source and next-after-source.  */
5102                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
5103                     SV_COW_NEXT_SV_SET(sstr, dstr);
5104 # else
5105                     if (sflags & SVf_IsCOW) {
5106                         sv_buf_to_rw(sstr);
5107                     }
5108                     CowREFCNT(sstr)++;
5109 # endif
5110                     SvPV_set(dstr, SvPVX_mutable(sstr));
5111                     sv_buf_to_ro(sstr);
5112             } else
5113 #endif
5114             {
5115                     /* SvIsCOW_shared_hash */
5116                     DEBUG_C(PerlIO_printf(Perl_debug_log,
5117                                           "Copy on write: Sharing hash\n"));
5118
5119                     assert (SvTYPE(dstr) >= SVt_PV);
5120                     SvPV_set(dstr,
5121                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
5122             }
5123             SvLEN_set(dstr, len);
5124             SvCUR_set(dstr, cur);
5125             SvIsCOW_on(dstr);
5126         } else {
5127             /* Failed the swipe test, and we cannot do copy-on-write either.
5128                Have to copy the string.  */
5129             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
5130             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
5131             SvCUR_set(dstr, cur);
5132             *SvEND(dstr) = '\0';
5133         }
5134         if (sflags & SVp_NOK) {
5135             SvNV_set(dstr, SvNVX(sstr));
5136         }
5137         if (sflags & SVp_IOK) {
5138             SvIV_set(dstr, SvIVX(sstr));
5139             /* Must do this otherwise some other overloaded use of 0x80000000
5140                gets confused. I guess SVpbm_VALID */
5141             if (sflags & SVf_IVisUV)
5142                 SvIsUV_on(dstr);
5143         }
5144         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
5145         {
5146             const MAGIC * const smg = SvVSTRING_mg(sstr);
5147             if (smg) {
5148                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
5149                          smg->mg_ptr, smg->mg_len);
5150                 SvRMAGICAL_on(dstr);
5151             }
5152         }
5153     }
5154     else if (sflags & (SVp_IOK|SVp_NOK)) {
5155         (void)SvOK_off(dstr);
5156         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
5157         if (sflags & SVp_IOK) {
5158             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
5159             SvIV_set(dstr, SvIVX(sstr));
5160         }
5161         if (sflags & SVp_NOK) {
5162             SvNV_set(dstr, SvNVX(sstr));
5163         }
5164     }
5165     else {
5166         if (isGV_with_GP(sstr)) {
5167             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
5168         }
5169         else
5170             (void)SvOK_off(dstr);
5171     }
5172     if (SvTAINTED(sstr))
5173         SvTAINT(dstr);
5174 }
5175
5176 /*
5177 =for apidoc sv_setsv_mg
5178
5179 Like C<sv_setsv>, but also handles 'set' magic.
5180
5181 =cut
5182 */
5183
5184 void
5185 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
5186 {
5187     PERL_ARGS_ASSERT_SV_SETSV_MG;
5188
5189     sv_setsv(dstr,sstr);
5190     SvSETMAGIC(dstr);
5191 }
5192
5193 #ifdef PERL_ANY_COW
5194 # ifdef PERL_OLD_COPY_ON_WRITE
5195 #  define SVt_COW SVt_PVIV
5196 # else
5197 #  define SVt_COW SVt_PV
5198 # endif
5199 SV *
5200 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
5201 {
5202     STRLEN cur = SvCUR(sstr);
5203     STRLEN len = SvLEN(sstr);
5204     char *new_pv;
5205 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
5206     const bool already = cBOOL(SvIsCOW(sstr));
5207 #endif
5208
5209     PERL_ARGS_ASSERT_SV_SETSV_COW;
5210
5211     if (DEBUG_C_TEST) {
5212         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
5213                       (void*)sstr, (void*)dstr);
5214         sv_dump(sstr);
5215         if (dstr)
5216                     sv_dump(dstr);
5217     }
5218
5219     if (dstr) {
5220         if (SvTHINKFIRST(dstr))
5221             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
5222         else if (SvPVX_const(dstr))
5223             Safefree(SvPVX_mutable(dstr));
5224     }
5225     else
5226         new_SV(dstr);
5227     SvUPGRADE(dstr, SVt_COW);
5228
5229     assert (SvPOK(sstr));
5230     assert (SvPOKp(sstr));
5231 # ifdef PERL_OLD_COPY_ON_WRITE
5232     assert (!SvIOK(sstr));
5233     assert (!SvIOKp(sstr));
5234     assert (!SvNOK(sstr));
5235     assert (!SvNOKp(sstr));
5236 # endif
5237
5238     if (SvIsCOW(sstr)) {
5239
5240         if (SvLEN(sstr) == 0) {
5241             /* source is a COW shared hash key.  */
5242             DEBUG_C(PerlIO_printf(Perl_debug_log,
5243                                   "Fast copy on write: Sharing hash\n"));
5244             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
5245             goto common_exit;
5246         }
5247 # ifdef PERL_OLD_COPY_ON_WRITE
5248         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
5249 # else
5250         assert(SvCUR(sstr)+1 < SvLEN(sstr));
5251         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
5252 # endif
5253     } else {
5254         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
5255         SvUPGRADE(sstr, SVt_COW);
5256         SvIsCOW_on(sstr);
5257         DEBUG_C(PerlIO_printf(Perl_debug_log,
5258                               "Fast copy on write: Converting sstr to COW\n"));
5259 # ifdef PERL_OLD_COPY_ON_WRITE
5260         SV_COW_NEXT_SV_SET(dstr, sstr);
5261 # else
5262         CowREFCNT(sstr) = 0;    
5263 # endif
5264     }
5265 # ifdef PERL_OLD_COPY_ON_WRITE
5266     SV_COW_NEXT_SV_SET(sstr, dstr);
5267 # else
5268 #  ifdef PERL_DEBUG_READONLY_COW
5269     if (already) sv_buf_to_rw(sstr);
5270 #  endif
5271     CowREFCNT(sstr)++;  
5272 # endif
5273     new_pv = SvPVX_mutable(sstr);
5274     sv_buf_to_ro(sstr);
5275
5276   common_exit:
5277     SvPV_set(dstr, new_pv);
5278     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
5279     if (SvUTF8(sstr))
5280         SvUTF8_on(dstr);
5281     SvLEN_set(dstr, len);
5282     SvCUR_set(dstr, cur);
5283     if (DEBUG_C_TEST) {
5284         sv_dump(dstr);
5285     }
5286     return dstr;
5287 }
5288 #endif
5289
5290 /*
5291 =for apidoc sv_setpvn
5292
5293 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
5294 The C<len> parameter indicates the number of
5295 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
5296 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
5297
5298 =cut
5299 */
5300
5301 void
5302 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5303 {
5304     char *dptr;
5305
5306     PERL_ARGS_ASSERT_SV_SETPVN;
5307
5308     SV_CHECK_THINKFIRST_COW_DROP(sv);
5309     if (!ptr) {
5310         (void)SvOK_off(sv);
5311         return;
5312     }
5313     else {
5314         /* len is STRLEN which is unsigned, need to copy to signed */
5315         const IV iv = len;
5316         if (iv < 0)
5317             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
5318                        IVdf, iv);
5319     }
5320     SvUPGRADE(sv, SVt_PV);
5321
5322     dptr = SvGROW(sv, len + 1);
5323     Move(ptr,dptr,len,char);
5324     dptr[len] = '\0';
5325     SvCUR_set(sv, len);
5326     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5327     SvTAINT(sv);
5328     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5329 }
5330
5331 /*
5332 =for apidoc sv_setpvn_mg
5333
5334 Like C<sv_setpvn>, but also handles 'set' magic.
5335
5336 =cut
5337 */
5338
5339 void
5340 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5341 {
5342     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5343
5344     sv_setpvn(sv,ptr,len);
5345     SvSETMAGIC(sv);
5346 }
5347
5348 /*
5349 =for apidoc sv_setpv
5350
5351 Copies a string into an SV.  The string must be terminated with a C<NUL>
5352 character.
5353 Does not handle 'set' magic.  See C<sv_setpv_mg>.
5354
5355 =cut
5356 */
5357
5358 void
5359 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5360 {
5361     STRLEN len;
5362
5363     PERL_ARGS_ASSERT_SV_SETPV;
5364
5365     SV_CHECK_THINKFIRST_COW_DROP(sv);
5366     if (!ptr) {
5367         (void)SvOK_off(sv);
5368         return;
5369     }
5370     len = strlen(ptr);
5371     SvUPGRADE(sv, SVt_PV);
5372
5373     SvGROW(sv, len + 1);
5374     Move(ptr,SvPVX(sv),len+1,char);
5375     SvCUR_set(sv, len);
5376     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5377     SvTAINT(sv);
5378     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5379 }
5380
5381 /*
5382 =for apidoc sv_setpv_mg
5383
5384 Like C<sv_setpv>, but also handles 'set' magic.
5385
5386 =cut
5387 */
5388
5389 void
5390 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5391 {
5392     PERL_ARGS_ASSERT_SV_SETPV_MG;
5393
5394     sv_setpv(sv,ptr);
5395     SvSETMAGIC(sv);
5396 }
5397
5398 void
5399 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5400 {
5401     PERL_ARGS_ASSERT_SV_SETHEK;
5402
5403     if (!hek) {
5404         return;
5405     }
5406
5407     if (HEK_LEN(hek) == HEf_SVKEY) {
5408         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5409         return;
5410     } else {
5411         const int flags = HEK_FLAGS(hek);
5412         if (flags & HVhek_WASUTF8) {
5413             STRLEN utf8_len = HEK_LEN(hek);
5414             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5415             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5416             SvUTF8_on(sv);
5417             return;
5418         } else if (flags & HVhek_UNSHARED) {
5419             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5420             if (HEK_UTF8(hek))
5421                 SvUTF8_on(sv);
5422             else SvUTF8_off(sv);
5423             return;
5424         }
5425         {
5426             SV_CHECK_THINKFIRST_COW_DROP(sv);
5427             SvUPGRADE(sv, SVt_PV);
5428             SvPV_free(sv);
5429             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5430             SvCUR_set(sv, HEK_LEN(hek));
5431             SvLEN_set(sv, 0);
5432             SvIsCOW_on(sv);
5433             SvPOK_on(sv);
5434             if (HEK_UTF8(hek))
5435                 SvUTF8_on(sv);
5436             else SvUTF8_off(sv);
5437             return;
5438         }
5439     }
5440 }
5441
5442
5443 /*
5444 =for apidoc sv_usepvn_flags
5445
5446 Tells an SV to use C<ptr> to find its string value.  Normally the
5447 string is stored inside the SV, but sv_usepvn allows the SV to use an
5448 outside string.  The C<ptr> should point to memory that was allocated
5449 by L<Newx|perlclib/Memory Management and String Handling>.  It must be
5450 the start of a Newx-ed block of memory, and not a pointer to the
5451 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
5452 and not be from a non-Newx memory allocator like C<malloc>.  The
5453 string length, C<len>, must be supplied.  By default this function
5454 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5455 so that pointer should not be freed or used by the programmer after
5456 giving it to sv_usepvn, and neither should any pointers from "behind"
5457 that pointer (e.g. ptr + 1) be used.
5458
5459 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
5460 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
5461 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5462 C<len>, and already meets the requirements for storing in C<SvPVX>).
5463
5464 =cut
5465 */
5466
5467 void
5468 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5469 {
5470     STRLEN allocate;
5471
5472     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5473
5474     SV_CHECK_THINKFIRST_COW_DROP(sv);
5475     SvUPGRADE(sv, SVt_PV);
5476     if (!ptr) {
5477         (void)SvOK_off(sv);
5478         if (flags & SV_SMAGIC)
5479             SvSETMAGIC(sv);
5480         return;
5481     }
5482     if (SvPVX_const(sv))
5483         SvPV_free(sv);
5484
5485 #ifdef DEBUGGING
5486     if (flags & SV_HAS_TRAILING_NUL)
5487         assert(ptr[len] == '\0');
5488 #endif
5489
5490     allocate = (flags & SV_HAS_TRAILING_NUL)
5491         ? len + 1 :
5492 #ifdef Perl_safesysmalloc_size
5493         len + 1;
5494 #else 
5495         PERL_STRLEN_ROUNDUP(len + 1);
5496 #endif
5497     if (flags & SV_HAS_TRAILING_NUL) {
5498         /* It's long enough - do nothing.
5499            Specifically Perl_newCONSTSUB is relying on this.  */
5500     } else {
5501 #ifdef DEBUGGING
5502         /* Force a move to shake out bugs in callers.  */
5503         char *new_ptr = (char*)safemalloc(allocate);
5504         Copy(ptr, new_ptr, len, char);
5505         PoisonFree(ptr,len,char);
5506         Safefree(ptr);
5507         ptr = new_ptr;
5508 #else
5509         ptr = (char*) saferealloc (ptr, allocate);
5510 #endif
5511     }
5512 #ifdef Perl_safesysmalloc_size
5513     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5514 #else
5515     SvLEN_set(sv, allocate);
5516 #endif
5517     SvCUR_set(sv, len);
5518     SvPV_set(sv, ptr);
5519     if (!(flags & SV_HAS_TRAILING_NUL)) {
5520         ptr[len] = '\0';
5521     }
5522     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5523     SvTAINT(sv);
5524     if (flags & SV_SMAGIC)
5525         SvSETMAGIC(sv);
5526 }
5527
5528 #ifdef PERL_OLD_COPY_ON_WRITE
5529 /* Need to do this *after* making the SV normal, as we need the buffer
5530    pointer to remain valid until after we've copied it.  If we let go too early,
5531    another thread could invalidate it by unsharing last of the same hash key
5532    (which it can do by means other than releasing copy-on-write Svs)
5533    or by changing the other copy-on-write SVs in the loop.  */
5534 STATIC void
5535 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
5536 {
5537     PERL_ARGS_ASSERT_SV_RELEASE_COW;
5538
5539     { /* this SV was SvIsCOW_normal(sv) */
5540          /* we need to find the SV pointing to us.  */
5541         SV *current = SV_COW_NEXT_SV(after);
5542
5543         if (current == sv) {
5544             /* The SV we point to points back to us (there were only two of us
5545                in the loop.)
5546                Hence other SV is no longer copy on write either.  */
5547             SvIsCOW_off(after);
5548             sv_buf_to_rw(after);
5549         } else {
5550             /* We need to follow the pointers around the loop.  */
5551             SV *next;
5552             while ((next = SV_COW_NEXT_SV(current)) != sv) {
5553                 assert (next);
5554                 current = next;
5555                  /* don't loop forever if the structure is bust, and we have
5556                     a pointer into a closed loop.  */
5557                 assert (current != after);
5558                 assert (SvPVX_const(current) == pvx);
5559             }
5560             /* Make the SV before us point to the SV after us.  */
5561             SV_COW_NEXT_SV_SET(current, after);
5562         }
5563     }
5564 }
5565 #endif
5566 /*
5567 =for apidoc sv_force_normal_flags
5568
5569 Undo various types of fakery on an SV, where fakery means
5570 "more than" a string: if the PV is a shared string, make
5571 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5572 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5573 we do the copy, and is also used locally; if this is a
5574 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5575 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5576 SvPOK_off rather than making a copy.  (Used where this
5577 scalar is about to be set to some other value.)  In addition,
5578 the C<flags> parameter gets passed to C<sv_unref_flags()>
5579 when unreffing.  C<sv_force_normal> calls this function
5580 with flags set to 0.
5581
5582 This function is expected to be used to signal to perl that this SV is
5583 about to be written to, and any extra book-keeping needs to be taken care
5584 of.  Hence, it croaks on read-only values.
5585
5586 =cut
5587 */
5588
5589 static void
5590 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5591 {
5592     assert(SvIsCOW(sv));
5593     {
5594 #ifdef PERL_ANY_COW
5595         const char * const pvx = SvPVX_const(sv);
5596         const STRLEN len = SvLEN(sv);
5597         const STRLEN cur = SvCUR(sv);
5598 # ifdef PERL_OLD_COPY_ON_WRITE
5599         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5600            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5601            we'll fail an assertion.  */
5602         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5603 # endif
5604
5605         if (DEBUG_C_TEST) {
5606                 PerlIO_printf(Perl_debug_log,
5607                               "Copy on write: Force normal %ld\n",
5608                               (long) flags);
5609                 sv_dump(sv);
5610         }
5611         SvIsCOW_off(sv);
5612 # ifdef PERL_NEW_COPY_ON_WRITE
5613         if (len) {
5614             /* Must do this first, since the CowREFCNT uses SvPVX and
5615             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5616             the only owner left of the buffer. */
5617             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5618             {
5619                 U8 cowrefcnt = CowREFCNT(sv);
5620                 if(cowrefcnt != 0) {
5621                     cowrefcnt--;
5622                     CowREFCNT(sv) = cowrefcnt;
5623                     sv_buf_to_ro(sv);
5624                     goto copy_over;
5625                 }
5626             }
5627             /* Else we are the only owner of the buffer. */
5628         }
5629         else
5630 # endif
5631         {
5632             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5633             copy_over:
5634             SvPV_set(sv, NULL);
5635             SvCUR_set(sv, 0);
5636             SvLEN_set(sv, 0);
5637             if (flags & SV_COW_DROP_PV) {
5638                 /* OK, so we don't need to copy our buffer.  */
5639                 SvPOK_off(sv);
5640             } else {
5641                 SvGROW(sv, cur + 1);
5642                 Move(pvx,SvPVX(sv),cur,char);
5643                 SvCUR_set(sv, cur);
5644                 *SvEND(sv) = '\0';
5645             }
5646             if (len) {
5647 # ifdef PERL_OLD_COPY_ON_WRITE
5648                 sv_release_COW(sv, pvx, next);
5649 # endif
5650             } else {
5651                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5652             }
5653             if (DEBUG_C_TEST) {
5654                 sv_dump(sv);
5655             }
5656         }
5657 #else
5658             const char * const pvx = SvPVX_const(sv);
5659             const STRLEN len = SvCUR(sv);
5660             SvIsCOW_off(sv);
5661             SvPV_set(sv, NULL);
5662             SvLEN_set(sv, 0);
5663             if (flags & SV_COW_DROP_PV) {
5664                 /* OK, so we don't need to copy our buffer.  */
5665                 SvPOK_off(sv);
5666             } else {
5667                 SvGROW(sv, len + 1);
5668                 Move(pvx,SvPVX(sv),len,char);
5669                 *SvEND(sv) = '\0';
5670             }
5671             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5672 #endif
5673     }
5674 }
5675
5676 void
5677 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5678 {
5679     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5680
5681     if (SvREADONLY(sv))
5682         Perl_croak_no_modify();
5683     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5684         S_sv_uncow(aTHX_ sv, flags);
5685     if (SvROK(sv))
5686         sv_unref_flags(sv, flags);
5687     else if (SvFAKE(sv) && isGV_with_GP(sv))
5688         sv_unglob(sv, flags);
5689     else if (SvFAKE(sv) && isREGEXP(sv)) {
5690         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5691            to sv_unglob. We only need it here, so inline it.  */
5692         const bool islv = SvTYPE(sv) == SVt_PVLV;
5693         const svtype new_type =
5694           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5695         SV *const temp = newSV_type(new_type);
5696         regexp *const temp_p = ReANY((REGEXP *)sv);
5697
5698         if (new_type == SVt_PVMG) {
5699             SvMAGIC_set(temp, SvMAGIC(sv));
5700             SvMAGIC_set(sv, NULL);
5701             SvSTASH_set(temp, SvSTASH(sv));
5702             SvSTASH_set(sv, NULL);
5703         }
5704         if (!islv) SvCUR_set(temp, SvCUR(sv));
5705         /* Remember that SvPVX is in the head, not the body.  But
5706            RX_WRAPPED is in the body. */
5707         assert(ReANY((REGEXP *)sv)->mother_re);
5708         /* Their buffer is already owned by someone else. */
5709         if (flags & SV_COW_DROP_PV) {
5710             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5711                zeroed body.  For SVt_PVLV, it should have been set to 0
5712                before turning into a regexp. */
5713             assert(!SvLEN(islv ? sv : temp));
5714             sv->sv_u.svu_pv = 0;
5715         }
5716         else {
5717             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5718             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5719             SvPOK_on(sv);
5720         }
5721
5722         /* Now swap the rest of the bodies. */
5723
5724         SvFAKE_off(sv);
5725         if (!islv) {
5726             SvFLAGS(sv) &= ~SVTYPEMASK;
5727             SvFLAGS(sv) |= new_type;
5728             SvANY(sv) = SvANY(temp);
5729         }
5730
5731         SvFLAGS(temp) &= ~(SVTYPEMASK);
5732         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5733         SvANY(temp) = temp_p;
5734         temp->sv_u.svu_rx = (regexp *)temp_p;
5735
5736         SvREFCNT_dec_NN(temp);
5737     }
5738     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5739 }
5740
5741 /*
5742 =for apidoc sv_chop
5743
5744 Efficient removal of characters from the beginning of the string buffer.
5745 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5746 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5747 character of the adjusted string.  Uses the "OOK hack".  On return, only
5748 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5749
5750 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5751 refer to the same chunk of data.
5752
5753 The unfortunate similarity of this function's name to that of Perl's C<chop>
5754 operator is strictly coincidental.  This function works from the left;
5755 C<chop> works from the right.
5756
5757 =cut
5758 */
5759
5760 void
5761 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5762 {
5763     STRLEN delta;
5764     STRLEN old_delta;
5765     U8 *p;
5766 #ifdef DEBUGGING
5767     const U8 *evacp;
5768     STRLEN evacn;
5769 #endif
5770     STRLEN max_delta;
5771
5772     PERL_ARGS_ASSERT_SV_CHOP;
5773
5774     if (!ptr || !SvPOKp(sv))
5775         return;
5776     delta = ptr - SvPVX_const(sv);
5777     if (!delta) {
5778         /* Nothing to do.  */
5779         return;
5780     }
5781     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5782     if (delta > max_delta)
5783         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5784                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5785     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5786     SV_CHECK_THINKFIRST(sv);
5787     SvPOK_only_UTF8(sv);
5788
5789     if (!SvOOK(sv)) {
5790         if (!SvLEN(sv)) { /* make copy of shared string */
5791             const char *pvx = SvPVX_const(sv);
5792             const STRLEN len = SvCUR(sv);
5793             SvGROW(sv, len + 1);
5794             Move(pvx,SvPVX(sv),len,char);
5795             *SvEND(sv) = '\0';
5796         }
5797         SvOOK_on(sv);
5798         old_delta = 0;
5799     } else {
5800         SvOOK_offset(sv, old_delta);
5801     }
5802     SvLEN_set(sv, SvLEN(sv) - delta);
5803     SvCUR_set(sv, SvCUR(sv) - delta);
5804     SvPV_set(sv, SvPVX(sv) + delta);
5805
5806     p = (U8 *)SvPVX_const(sv);
5807
5808 #ifdef DEBUGGING
5809     /* how many bytes were evacuated?  we will fill them with sentinel
5810        bytes, except for the part holding the new offset of course. */
5811     evacn = delta;
5812     if (old_delta)
5813         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5814     assert(evacn);
5815     assert(evacn <= delta + old_delta);
5816     evacp = p - evacn;
5817 #endif
5818
5819     /* This sets 'delta' to the accumulated value of all deltas so far */
5820     delta += old_delta;
5821     assert(delta);
5822
5823     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5824      * the string; otherwise store a 0 byte there and store 'delta' just prior
5825      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5826      * portion of the chopped part of the string */
5827     if (delta < 0x100) {
5828         *--p = (U8) delta;
5829     } else {
5830         *--p = 0;
5831         p -= sizeof(STRLEN);
5832         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5833     }
5834
5835 #ifdef DEBUGGING
5836     /* Fill the preceding buffer with sentinals to verify that no-one is
5837        using it.  */
5838     while (p > evacp) {
5839         --p;
5840         *p = (U8)PTR2UV(p);
5841     }
5842 #endif
5843 }
5844
5845 /*
5846 =for apidoc sv_catpvn
5847
5848 Concatenates the string onto the end of the string which is in the SV.  The
5849 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5850 status set, then the bytes appended should be valid UTF-8.
5851 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5852
5853 =for apidoc sv_catpvn_flags
5854
5855 Concatenates the string onto the end of the string which is in the SV.  The
5856 C<len> indicates number of bytes to copy.
5857
5858 By default, the string appended is assumed to be valid UTF-8 if the SV has
5859 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5860 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5861 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5862 string appended will be upgraded to UTF-8 if necessary.
5863
5864 If C<flags> has the C<SV_SMAGIC> bit set, will
5865 C<mg_set> on C<dsv> afterwards if appropriate.
5866 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5867 in terms of this function.
5868
5869 =cut
5870 */
5871
5872 void
5873 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5874 {
5875     STRLEN dlen;
5876     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5877
5878     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5879     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5880
5881     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5882       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5883          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5884          dlen = SvCUR(dsv);
5885       }
5886       else SvGROW(dsv, dlen + slen + 1);
5887       if (sstr == dstr)
5888         sstr = SvPVX_const(dsv);
5889       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5890       SvCUR_set(dsv, SvCUR(dsv) + slen);
5891     }
5892     else {
5893         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5894         const char * const send = sstr + slen;
5895         U8 *d;
5896
5897         /* Something this code does not account for, which I think is
5898            impossible; it would require the same pv to be treated as
5899            bytes *and* utf8, which would indicate a bug elsewhere. */
5900         assert(sstr != dstr);
5901
5902         SvGROW(dsv, dlen + slen * 2 + 1);
5903         d = (U8 *)SvPVX(dsv) + dlen;
5904
5905         while (sstr < send) {
5906             append_utf8_from_native_byte(*sstr, &d);
5907             sstr++;
5908         }
5909         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5910     }
5911     *SvEND(dsv) = '\0';
5912     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5913     SvTAINT(dsv);
5914     if (flags & SV_SMAGIC)
5915         SvSETMAGIC(dsv);
5916 }
5917
5918 /*
5919 =for apidoc sv_catsv
5920
5921 Concatenates the string from SV C<ssv> onto the end of the string in SV
5922 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5923 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5924 C<sv_catsv_nomg>.
5925
5926 =for apidoc sv_catsv_flags
5927
5928 Concatenates the string from SV C<ssv> onto the end of the string in SV
5929 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5930 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5931 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5932 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5933 and C<sv_catsv_mg> are implemented in terms of this function.
5934
5935 =cut */
5936
5937 void
5938 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5939 {
5940     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5941
5942     if (ssv) {
5943         STRLEN slen;
5944         const char *spv = SvPV_flags_const(ssv, slen, flags);
5945         if (flags & SV_GMAGIC)
5946                 SvGETMAGIC(dsv);
5947         sv_catpvn_flags(dsv, spv, slen,
5948                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5949         if (flags & SV_SMAGIC)
5950                 SvSETMAGIC(dsv);
5951     }
5952 }
5953
5954 /*
5955 =for apidoc sv_catpv
5956
5957 Concatenates the C<NUL>-terminated string onto the end of the string which is
5958 in the SV.
5959 If the SV has the UTF-8 status set, then the bytes appended should be
5960 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5961
5962 =cut */
5963
5964 void
5965 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5966 {
5967     STRLEN len;
5968     STRLEN tlen;
5969     char *junk;
5970
5971     PERL_ARGS_ASSERT_SV_CATPV;
5972
5973     if (!ptr)
5974         return;
5975     junk = SvPV_force(sv, tlen);
5976     len = strlen(ptr);
5977     SvGROW(sv, tlen + len + 1);
5978     if (ptr == junk)
5979         ptr = SvPVX_const(sv);
5980     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5981     SvCUR_set(sv, SvCUR(sv) + len);
5982     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5983     SvTAINT(sv);
5984 }
5985
5986 /*
5987 =for apidoc sv_catpv_flags
5988
5989 Concatenates the C<NUL>-terminated string onto the end of the string which is
5990 in the SV.
5991 If the SV has the UTF-8 status set, then the bytes appended should
5992 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5993 on the modified SV if appropriate.
5994
5995 =cut
5996 */
5997
5998 void
5999 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
6000 {
6001     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
6002     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
6003 }
6004
6005 /*
6006 =for apidoc sv_catpv_mg
6007
6008 Like C<sv_catpv>, but also handles 'set' magic.
6009
6010 =cut
6011 */
6012
6013 void
6014 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
6015 {
6016     PERL_ARGS_ASSERT_SV_CATPV_MG;
6017
6018     sv_catpv(sv,ptr);
6019     SvSETMAGIC(sv);
6020 }
6021
6022 /*
6023 =for apidoc newSV
6024
6025 Creates a new SV.  A non-zero C<len> parameter indicates the number of
6026 bytes of preallocated string space the SV should have.  An extra byte for a
6027 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
6028 space is allocated.)  The reference count for the new SV is set to 1.
6029
6030 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
6031 parameter, I<x>, a debug aid which allowed callers to identify themselves.
6032 This aid has been superseded by a new build option, PERL_MEM_LOG (see
6033 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
6034 modules supporting older perls.
6035
6036 =cut
6037 */
6038
6039 SV *
6040 Perl_newSV(pTHX_ const STRLEN len)
6041 {
6042     SV *sv;
6043
6044     new_SV(sv);
6045     if (len) {
6046         sv_grow(sv, len + 1);
6047     }
6048     return sv;
6049 }
6050 /*
6051 =for apidoc sv_magicext
6052
6053 Adds magic to an SV, upgrading it if necessary.  Applies the
6054 supplied vtable and returns a pointer to the magic added.
6055
6056 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
6057 In particular, you can add magic to SvREADONLY SVs, and add more than
6058 one instance of the same 'how'.
6059
6060 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
6061 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
6062 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
6063 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
6064
6065 (This is now used as a subroutine by C<sv_magic>.)
6066
6067 =cut
6068 */
6069 MAGIC * 
6070 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
6071                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
6072 {
6073     MAGIC* mg;
6074
6075     PERL_ARGS_ASSERT_SV_MAGICEXT;
6076
6077     SvUPGRADE(sv, SVt_PVMG);
6078     Newxz(mg, 1, MAGIC);
6079     mg->mg_moremagic = SvMAGIC(sv);
6080     SvMAGIC_set(sv, mg);
6081
6082     /* Sometimes a magic contains a reference loop, where the sv and
6083        object refer to each other.  To prevent a reference loop that
6084        would prevent such objects being freed, we look for such loops
6085        and if we find one we avoid incrementing the object refcount.
6086
6087        Note we cannot do this to avoid self-tie loops as intervening RV must
6088        have its REFCNT incremented to keep it in existence.
6089
6090     */
6091     if (!obj || obj == sv ||
6092         how == PERL_MAGIC_arylen ||
6093         how == PERL_MAGIC_symtab ||
6094         (SvTYPE(obj) == SVt_PVGV &&
6095             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
6096              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
6097              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
6098     {
6099         mg->mg_obj = obj;
6100     }
6101     else {
6102         mg->mg_obj = SvREFCNT_inc_simple(obj);
6103         mg->mg_flags |= MGf_REFCOUNTED;
6104     }
6105
6106     /* Normal self-ties simply pass a null object, and instead of
6107        using mg_obj directly, use the SvTIED_obj macro to produce a
6108        new RV as needed.  For glob "self-ties", we are tieing the PVIO
6109        with an RV obj pointing to the glob containing the PVIO.  In
6110        this case, to avoid a reference loop, we need to weaken the
6111        reference.
6112     */
6113
6114     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
6115         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
6116     {
6117       sv_rvweaken(obj);
6118     }
6119
6120     mg->mg_type = how;
6121     mg->mg_len = namlen;
6122     if (name) {
6123         if (namlen > 0)
6124             mg->mg_ptr = savepvn(name, namlen);
6125         else if (namlen == HEf_SVKEY) {
6126             /* Yes, this is casting away const. This is only for the case of
6127                HEf_SVKEY. I think we need to document this aberation of the
6128                constness of the API, rather than making name non-const, as
6129                that change propagating outwards a long way.  */
6130             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
6131         } else
6132             mg->mg_ptr = (char *) name;
6133     }
6134     mg->mg_virtual = (MGVTBL *) vtable;
6135
6136     mg_magical(sv);
6137     return mg;
6138 }
6139
6140 MAGIC *
6141 Perl_sv_magicext_mglob(pTHX_ SV *sv)
6142 {
6143     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
6144     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
6145         /* This sv is only a delegate.  //g magic must be attached to
6146            its target. */
6147         vivify_defelem(sv);
6148         sv = LvTARG(sv);
6149     }
6150 #ifdef PERL_OLD_COPY_ON_WRITE
6151     if (SvIsCOW(sv))
6152         sv_force_normal_flags(sv, 0);
6153 #endif
6154     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
6155                        &PL_vtbl_mglob, 0, 0);
6156 }
6157
6158 /*
6159 =for apidoc sv_magic
6160
6161 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
6162 necessary, then adds a new magic item of type C<how> to the head of the
6163 magic list.
6164
6165 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
6166 handling of the C<name> and C<namlen> arguments.
6167
6168 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
6169 to add more than one instance of the same 'how'.
6170
6171 =cut
6172 */
6173
6174 void
6175 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
6176              const char *const name, const I32 namlen)
6177 {
6178     const MGVTBL *vtable;
6179     MAGIC* mg;
6180     unsigned int flags;
6181     unsigned int vtable_index;
6182
6183     PERL_ARGS_ASSERT_SV_MAGIC;
6184
6185     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
6186         || ((flags = PL_magic_data[how]),
6187             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
6188             > magic_vtable_max))
6189         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
6190
6191     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
6192        Useful for attaching extension internal data to perl vars.
6193        Note that multiple extensions may clash if magical scalars
6194        etc holding private data from one are passed to another. */
6195
6196     vtable = (vtable_index == magic_vtable_max)
6197         ? NULL : PL_magic_vtables + vtable_index;
6198
6199 #ifdef PERL_OLD_COPY_ON_WRITE
6200     if (SvIsCOW(sv))
6201         sv_force_normal_flags(sv, 0);
6202 #endif
6203     if (SvREADONLY(sv)) {
6204         if (
6205             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
6206            )
6207         {
6208             Perl_croak_no_modify();
6209         }
6210     }
6211     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
6212         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
6213             /* sv_magic() refuses to add a magic of the same 'how' as an
6214                existing one
6215              */
6216             if (how == PERL_MAGIC_taint)
6217                 mg->mg_len |= 1;
6218             return;
6219         }
6220     }
6221
6222     /* Force pos to be stored as characters, not bytes. */
6223     if (SvMAGICAL(sv) && DO_UTF8(sv)
6224       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
6225       && mg->mg_len != -1
6226       && mg->mg_flags & MGf_BYTES) {
6227         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
6228                                                SV_CONST_RETURN);
6229         mg->mg_flags &= ~MGf_BYTES;
6230     }
6231
6232     /* Rest of work is done else where */
6233     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
6234
6235     switch (how) {
6236     case PERL_MAGIC_taint:
6237         mg->mg_len = 1;
6238         break;
6239     case PERL_MAGIC_ext:
6240     case PERL_MAGIC_dbfile:
6241         SvRMAGICAL_on(sv);
6242         break;
6243     }
6244 }
6245
6246 static int
6247 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
6248 {
6249     MAGIC* mg;
6250     MAGIC** mgp;
6251
6252     assert(flags <= 1);
6253
6254     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
6255         return 0;
6256     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
6257     for (mg = *mgp; mg; mg = *mgp) {
6258         const MGVTBL* const virt = mg->mg_virtual;
6259         if (mg->mg_type == type && (!flags || virt == vtbl)) {
6260             *mgp = mg->mg_moremagic;
6261             if (virt && virt->svt_free)
6262                 virt->svt_free(aTHX_ sv, mg);
6263             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
6264                 if (mg->mg_len > 0)
6265                     Safefree(mg->mg_ptr);
6266                 else if (mg->mg_len == HEf_SVKEY)
6267                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
6268                 else if (mg->mg_type == PERL_MAGIC_utf8)
6269                     Safefree(mg->mg_ptr);
6270             }
6271             if (mg->mg_flags & MGf_REFCOUNTED)
6272                 SvREFCNT_dec(mg->mg_obj);
6273             Safefree(mg);
6274         }
6275         else
6276             mgp = &mg->mg_moremagic;
6277     }
6278     if (SvMAGIC(sv)) {
6279         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
6280             mg_magical(sv);     /*    else fix the flags now */
6281     }
6282     else {
6283         SvMAGICAL_off(sv);
6284         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
6285     }
6286     return 0;
6287 }
6288
6289 /*
6290 =for apidoc sv_unmagic
6291
6292 Removes all magic of type C<type> from an SV.
6293
6294 =cut
6295 */
6296
6297 int
6298 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
6299 {
6300     PERL_ARGS_ASSERT_SV_UNMAGIC;
6301     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
6302 }
6303
6304 /*
6305 =for apidoc sv_unmagicext
6306
6307 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
6308
6309 =cut
6310 */
6311
6312 int
6313 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
6314 {
6315     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
6316     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
6317 }
6318
6319 /*
6320 =for apidoc sv_rvweaken
6321
6322 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
6323 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
6324 push a back-reference to this RV onto the array of backreferences
6325 associated with that magic.  If the RV is magical, set magic will be
6326 called after the RV is cleared.
6327
6328 =cut
6329 */
6330
6331 SV *
6332 Perl_sv_rvweaken(pTHX_ SV *const sv)
6333 {
6334     SV *tsv;
6335
6336     PERL_ARGS_ASSERT_SV_RVWEAKEN;
6337
6338     if (!SvOK(sv))  /* let undefs pass */
6339         return sv;
6340     if (!SvROK(sv))
6341         Perl_croak(aTHX_ "Can't weaken a nonreference");
6342     else if (SvWEAKREF(sv)) {
6343         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
6344         return sv;
6345     }
6346     else if (SvREADONLY(sv)) croak_no_modify();
6347     tsv = SvRV(sv);
6348     Perl_sv_add_backref(aTHX_ tsv, sv);
6349     SvWEAKREF_on(sv);
6350     SvREFCNT_dec_NN(tsv);
6351     return sv;
6352 }
6353
6354 /*
6355 =for apidoc sv_get_backrefs
6356
6357 If the sv is the target of a weakrefence then return
6358 the backrefs structure associated with the sv, otherwise
6359 return NULL.
6360
6361 When returning a non-null result the type of the return
6362 is relevant. If it is an AV then the contents of the AV
6363 are the weakrefs which point at this item. If it is any
6364 other type then the item itself is the weakref.
6365
6366 See also Perl_sv_add_backref(), Perl_sv_del_backref(),
6367 Perl_sv_kill_backrefs()
6368
6369 =cut
6370 */
6371
6372 SV *
6373 Perl_sv_get_backrefs(SV *const sv)
6374 {
6375     SV *backrefs= NULL;
6376
6377     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6378
6379     /* find slot to store array or singleton backref */
6380
6381     if (SvTYPE(sv) == SVt_PVHV) {
6382         if (SvOOK(sv)) {
6383             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6384             backrefs = (SV *)iter->xhv_backreferences;
6385         }
6386     } else if (SvMAGICAL(sv)) {
6387         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6388         if (mg)
6389             backrefs = mg->mg_obj;
6390     }
6391     return backrefs;
6392 }
6393
6394 /* Give tsv backref magic if it hasn't already got it, then push a
6395  * back-reference to sv onto the array associated with the backref magic.
6396  *
6397  * As an optimisation, if there's only one backref and it's not an AV,
6398  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6399  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6400  * active.)
6401  */
6402
6403 /* A discussion about the backreferences array and its refcount:
6404  *
6405  * The AV holding the backreferences is pointed to either as the mg_obj of
6406  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6407  * xhv_backreferences field. The array is created with a refcount
6408  * of 2. This means that if during global destruction the array gets
6409  * picked on before its parent to have its refcount decremented by the
6410  * random zapper, it won't actually be freed, meaning it's still there for
6411  * when its parent gets freed.
6412  *
6413  * When the parent SV is freed, the extra ref is killed by
6414  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6415  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6416  *
6417  * When a single backref SV is stored directly, it is not reference
6418  * counted.
6419  */
6420
6421 void
6422 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6423 {
6424     SV **svp;
6425     AV *av = NULL;
6426     MAGIC *mg = NULL;
6427
6428     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6429
6430     /* find slot to store array or singleton backref */
6431
6432     if (SvTYPE(tsv) == SVt_PVHV) {
6433         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6434     } else {
6435         if (SvMAGICAL(tsv))
6436             mg = mg_find(tsv, PERL_MAGIC_backref);
6437         if (!mg)
6438             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6439         svp = &(mg->mg_obj);
6440     }
6441
6442     /* create or retrieve the array */
6443
6444     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6445         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6446     ) {
6447         /* create array */
6448         if (mg)
6449             mg->mg_flags |= MGf_REFCOUNTED;
6450         av = newAV();
6451         AvREAL_off(av);
6452         SvREFCNT_inc_simple_void_NN(av);
6453         /* av now has a refcnt of 2; see discussion above */
6454         av_extend(av, *svp ? 2 : 1);
6455         if (*svp) {
6456             /* move single existing backref to the array */
6457             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6458         }
6459         *svp = (SV*)av;
6460     }
6461     else {
6462         av = MUTABLE_AV(*svp);
6463         if (!av) {
6464             /* optimisation: store single backref directly in HvAUX or mg_obj */
6465             *svp = sv;
6466             return;
6467         }
6468         assert(SvTYPE(av) == SVt_PVAV);
6469         if (AvFILLp(av) >= AvMAX(av)) {
6470             av_extend(av, AvFILLp(av)+1);
6471         }
6472     }
6473     /* push new backref */
6474     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6475 }
6476
6477 /* delete a back-reference to ourselves from the backref magic associated
6478  * with the SV we point to.
6479  */
6480
6481 void
6482 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6483 {
6484     SV **svp = NULL;
6485
6486     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6487
6488     if (SvTYPE(tsv) == SVt_PVHV) {
6489         if (SvOOK(tsv))
6490             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6491     }
6492     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6493         /* It's possible for the the last (strong) reference to tsv to have
6494            become freed *before* the last thing holding a weak reference.
6495            If both survive longer than the backreferences array, then when
6496            the referent's reference count drops to 0 and it is freed, it's
6497            not able to chase the backreferences, so they aren't NULLed.
6498
6499            For example, a CV holds a weak reference to its stash. If both the
6500            CV and the stash survive longer than the backreferences array,
6501            and the CV gets picked for the SvBREAK() treatment first,
6502            *and* it turns out that the stash is only being kept alive because
6503            of an our variable in the pad of the CV, then midway during CV
6504            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6505            It ends up pointing to the freed HV. Hence it's chased in here, and
6506            if this block wasn't here, it would hit the !svp panic just below.
6507
6508            I don't believe that "better" destruction ordering is going to help
6509            here - during global destruction there's always going to be the
6510            chance that something goes out of order. We've tried to make it
6511            foolproof before, and it only resulted in evolutionary pressure on
6512            fools. Which made us look foolish for our hubris. :-(
6513         */
6514         return;
6515     }
6516     else {
6517         MAGIC *const mg
6518             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6519         svp =  mg ? &(mg->mg_obj) : NULL;
6520     }
6521
6522     if (!svp)
6523         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6524     if (!*svp) {
6525         /* It's possible that sv is being freed recursively part way through the
6526            freeing of tsv. If this happens, the backreferences array of tsv has
6527            already been freed, and so svp will be NULL. If this is the case,
6528            we should not panic. Instead, nothing needs doing, so return.  */
6529         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6530             return;
6531         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6532                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6533     }
6534
6535     if (SvTYPE(*svp) == SVt_PVAV) {
6536 #ifdef DEBUGGING
6537         int count = 1;
6538 #endif
6539         AV * const av = (AV*)*svp;
6540         SSize_t fill;
6541         assert(!SvIS_FREED(av));
6542         fill = AvFILLp(av);
6543         assert(fill > -1);
6544         svp = AvARRAY(av);
6545         /* for an SV with N weak references to it, if all those
6546          * weak refs are deleted, then sv_del_backref will be called
6547          * N times and O(N^2) compares will be done within the backref
6548          * array. To ameliorate this potential slowness, we:
6549          * 1) make sure this code is as tight as possible;
6550          * 2) when looking for SV, look for it at both the head and tail of the
6551          *    array first before searching the rest, since some create/destroy
6552          *    patterns will cause the backrefs to be freed in order.
6553          */
6554         if (*svp == sv) {
6555             AvARRAY(av)++;
6556             AvMAX(av)--;
6557         }
6558         else {
6559             SV **p = &svp[fill];
6560             SV *const topsv = *p;
6561             if (topsv != sv) {
6562 #ifdef DEBUGGING
6563                 count = 0;
6564 #endif
6565                 while (--p > svp) {
6566                     if (*p == sv) {
6567                         /* We weren't the last entry.
6568                            An unordered list has this property that you
6569                            can take the last element off the end to fill
6570                            the hole, and it's still an unordered list :-)
6571                         */
6572                         *p = topsv;
6573 #ifdef DEBUGGING
6574                         count++;
6575 #else
6576                         break; /* should only be one */
6577 #endif
6578                     }
6579                 }
6580             }
6581         }
6582         assert(count ==1);
6583         AvFILLp(av) = fill-1;
6584     }
6585     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6586         /* freed AV; skip */
6587     }
6588     else {
6589         /* optimisation: only a single backref, stored directly */
6590         if (*svp != sv)
6591             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6592                        (void*)*svp, (void*)sv);
6593         *svp = NULL;
6594     }
6595
6596 }
6597
6598 void
6599 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6600 {
6601     SV **svp;
6602     SV **last;
6603     bool is_array;
6604
6605     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6606
6607     if (!av)
6608         return;
6609
6610     /* after multiple passes through Perl_sv_clean_all() for a thingy
6611      * that has badly leaked, the backref array may have gotten freed,
6612      * since we only protect it against 1 round of cleanup */
6613     if (SvIS_FREED(av)) {
6614         if (PL_in_clean_all) /* All is fair */
6615             return;
6616         Perl_croak(aTHX_
6617                    "panic: magic_killbackrefs (freed backref AV/SV)");
6618     }
6619
6620
6621     is_array = (SvTYPE(av) == SVt_PVAV);
6622     if (is_array) {
6623         assert(!SvIS_FREED(av));
6624         svp = AvARRAY(av);
6625         if (svp)
6626             last = svp + AvFILLp(av);
6627     }
6628     else {
6629         /* optimisation: only a single backref, stored directly */
6630         svp = (SV**)&av;
6631         last = svp;
6632     }
6633
6634     if (svp) {
6635         while (svp <= last) {
6636             if (*svp) {
6637                 SV *const referrer = *svp;
6638                 if (SvWEAKREF(referrer)) {
6639                     /* XXX Should we check that it hasn't changed? */
6640                     assert(SvROK(referrer));
6641                     SvRV_set(referrer, 0);
6642                     SvOK_off(referrer);
6643                     SvWEAKREF_off(referrer);
6644                     SvSETMAGIC(referrer);
6645                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6646                            SvTYPE(referrer) == SVt_PVLV) {
6647                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6648                     /* You lookin' at me?  */
6649                     assert(GvSTASH(referrer));
6650                     assert(GvSTASH(referrer) == (const HV *)sv);
6651                     GvSTASH(referrer) = 0;
6652                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6653                            SvTYPE(referrer) == SVt_PVFM) {
6654                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6655                         /* You lookin' at me?  */
6656                         assert(CvSTASH(referrer));
6657                         assert(CvSTASH(referrer) == (const HV *)sv);
6658                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6659                     }
6660                     else {
6661                         assert(SvTYPE(sv) == SVt_PVGV);
6662                         /* You lookin' at me?  */
6663                         assert(CvGV(referrer));
6664                         assert(CvGV(referrer) == (const GV *)sv);
6665                         anonymise_cv_maybe(MUTABLE_GV(sv),
6666                                                 MUTABLE_CV(referrer));
6667                     }
6668
6669                 } else {
6670                     Perl_croak(aTHX_
6671                                "panic: magic_killbackrefs (flags=%"UVxf")",
6672                                (UV)SvFLAGS(referrer));
6673                 }
6674
6675                 if (is_array)
6676                     *svp = NULL;
6677             }
6678             svp++;
6679         }
6680     }
6681     if (is_array) {
6682         AvFILLp(av) = -1;
6683         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6684     }
6685     return;
6686 }
6687
6688 /*
6689 =for apidoc sv_insert
6690
6691 Inserts a string at the specified offset/length within the SV.  Similar to
6692 the Perl substr() function.  Handles get magic.
6693
6694 =for apidoc sv_insert_flags
6695
6696 Same as C<sv_insert>, but the extra C<flags> are passed to the
6697 C<SvPV_force_flags> that applies to C<bigstr>.
6698
6699 =cut
6700 */
6701
6702 void
6703 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6704 {
6705     char *big;
6706     char *mid;
6707     char *midend;
6708     char *bigend;
6709     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6710     STRLEN curlen;
6711
6712     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6713
6714     if (!bigstr)
6715         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6716     SvPV_force_flags(bigstr, curlen, flags);
6717     (void)SvPOK_only_UTF8(bigstr);
6718     if (offset + len > curlen) {
6719         SvGROW(bigstr, offset+len+1);
6720         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6721         SvCUR_set(bigstr, offset+len);
6722     }
6723
6724     SvTAINT(bigstr);
6725     i = littlelen - len;
6726     if (i > 0) {                        /* string might grow */
6727         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6728         mid = big + offset + len;
6729         midend = bigend = big + SvCUR(bigstr);
6730         bigend += i;
6731         *bigend = '\0';
6732         while (midend > mid)            /* shove everything down */
6733             *--bigend = *--midend;
6734         Move(little,big+offset,littlelen,char);
6735         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6736         SvSETMAGIC(bigstr);
6737         return;
6738     }
6739     else if (i == 0) {
6740         Move(little,SvPVX(bigstr)+offset,len,char);
6741         SvSETMAGIC(bigstr);
6742         return;
6743     }
6744
6745     big = SvPVX(bigstr);
6746     mid = big + offset;
6747     midend = mid + len;
6748     bigend = big + SvCUR(bigstr);
6749
6750     if (midend > bigend)
6751         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6752                    midend, bigend);
6753
6754     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6755         if (littlelen) {
6756             Move(little, mid, littlelen,char);
6757             mid += littlelen;
6758         }
6759         i = bigend - midend;
6760         if (i > 0) {
6761             Move(midend, mid, i,char);
6762             mid += i;
6763         }
6764         *mid = '\0';
6765         SvCUR_set(bigstr, mid - big);
6766     }
6767     else if ((i = mid - big)) { /* faster from front */
6768         midend -= littlelen;
6769         mid = midend;
6770         Move(big, midend - i, i, char);
6771         sv_chop(bigstr,midend-i);
6772         if (littlelen)
6773             Move(little, mid, littlelen,char);
6774     }
6775     else if (littlelen) {
6776         midend -= littlelen;
6777         sv_chop(bigstr,midend);
6778         Move(little,midend,littlelen,char);
6779     }
6780     else {
6781         sv_chop(bigstr,midend);
6782     }
6783     SvSETMAGIC(bigstr);
6784 }
6785
6786 /*
6787 =for apidoc sv_replace
6788
6789 Make the first argument a copy of the second, then delete the original.
6790 The target SV physically takes over ownership of the body of the source SV
6791 and inherits its flags; however, the target keeps any magic it owns,
6792 and any magic in the source is discarded.
6793 Note that this is a rather specialist SV copying operation; most of the
6794 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6795
6796 =cut
6797 */
6798
6799 void
6800 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6801 {
6802     const U32 refcnt = SvREFCNT(sv);
6803
6804     PERL_ARGS_ASSERT_SV_REPLACE;
6805
6806     SV_CHECK_THINKFIRST_COW_DROP(sv);
6807     if (SvREFCNT(nsv) != 1) {
6808         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6809                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6810     }
6811     if (SvMAGICAL(sv)) {
6812         if (SvMAGICAL(nsv))
6813             mg_free(nsv);
6814         else
6815             sv_upgrade(nsv, SVt_PVMG);
6816         SvMAGIC_set(nsv, SvMAGIC(sv));
6817         SvFLAGS(nsv) |= SvMAGICAL(sv);
6818         SvMAGICAL_off(sv);
6819         SvMAGIC_set(sv, NULL);
6820     }
6821     SvREFCNT(sv) = 0;
6822     sv_clear(sv);
6823     assert(!SvREFCNT(sv));
6824 #ifdef DEBUG_LEAKING_SCALARS
6825     sv->sv_flags  = nsv->sv_flags;
6826     sv->sv_any    = nsv->sv_any;
6827     sv->sv_refcnt = nsv->sv_refcnt;
6828     sv->sv_u      = nsv->sv_u;
6829 #else
6830     StructCopy(nsv,sv,SV);
6831 #endif
6832     if(SvTYPE(sv) == SVt_IV) {
6833         SET_SVANY_FOR_BODYLESS_IV(sv);
6834     }
6835         
6836
6837 #ifdef PERL_OLD_COPY_ON_WRITE
6838     if (SvIsCOW_normal(nsv)) {
6839         /* We need to follow the pointers around the loop to make the
6840            previous SV point to sv, rather than nsv.  */
6841         SV *next;
6842         SV *current = nsv;
6843         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6844             assert(next);
6845             current = next;
6846             assert(SvPVX_const(current) == SvPVX_const(nsv));
6847         }
6848         /* Make the SV before us point to the SV after us.  */
6849         if (DEBUG_C_TEST) {
6850             PerlIO_printf(Perl_debug_log, "previous is\n");
6851             sv_dump(current);
6852             PerlIO_printf(Perl_debug_log,
6853                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6854                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6855         }
6856         SV_COW_NEXT_SV_SET(current, sv);
6857     }
6858 #endif
6859     SvREFCNT(sv) = refcnt;
6860     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6861     SvREFCNT(nsv) = 0;
6862     del_SV(nsv);
6863 }
6864
6865 /* We're about to free a GV which has a CV that refers back to us.
6866  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6867  * field) */
6868
6869 STATIC void
6870 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6871 {
6872     SV *gvname;
6873     GV *anongv;
6874
6875     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6876
6877     /* be assertive! */
6878     assert(SvREFCNT(gv) == 0);
6879     assert(isGV(gv) && isGV_with_GP(gv));
6880     assert(GvGP(gv));
6881     assert(!CvANON(cv));
6882     assert(CvGV(cv) == gv);
6883     assert(!CvNAMED(cv));
6884
6885     /* will the CV shortly be freed by gp_free() ? */
6886     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6887         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6888         return;
6889     }
6890
6891     /* if not, anonymise: */
6892     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6893                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6894                     : newSVpvn_flags( "__ANON__", 8, 0 );
6895     sv_catpvs(gvname, "::__ANON__");
6896     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6897     SvREFCNT_dec_NN(gvname);
6898
6899     CvANON_on(cv);
6900     CvCVGV_RC_on(cv);
6901     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6902 }
6903
6904
6905 /*
6906 =for apidoc sv_clear
6907
6908 Clear an SV: call any destructors, free up any memory used by the body,
6909 and free the body itself.  The SV's head is I<not> freed, although
6910 its type is set to all 1's so that it won't inadvertently be assumed
6911 to be live during global destruction etc.
6912 This function should only be called when REFCNT is zero.  Most of the time
6913 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6914 instead.
6915
6916 =cut
6917 */
6918
6919 void
6920 Perl_sv_clear(pTHX_ SV *const orig_sv)
6921 {
6922     dVAR;
6923     HV *stash;
6924     U32 type;
6925     const struct body_details *sv_type_details;
6926     SV* iter_sv = NULL;
6927     SV* next_sv = NULL;
6928     SV *sv = orig_sv;
6929     STRLEN hash_index;
6930
6931     PERL_ARGS_ASSERT_SV_CLEAR;
6932
6933     /* within this loop, sv is the SV currently being freed, and
6934      * iter_sv is the most recent AV or whatever that's being iterated
6935      * over to provide more SVs */
6936
6937     while (sv) {
6938
6939         type = SvTYPE(sv);
6940
6941         assert(SvREFCNT(sv) == 0);
6942         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6943
6944         if (type <= SVt_IV) {
6945             /* See the comment in sv.h about the collusion between this
6946              * early return and the overloading of the NULL slots in the
6947              * size table.  */
6948             if (SvROK(sv))
6949                 goto free_rv;
6950             SvFLAGS(sv) &= SVf_BREAK;
6951             SvFLAGS(sv) |= SVTYPEMASK;
6952             goto free_head;
6953         }
6954
6955         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6956            for another purpose  */
6957         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6958
6959         if (type >= SVt_PVMG) {
6960             if (SvOBJECT(sv)) {
6961                 if (!curse(sv, 1)) goto get_next_sv;
6962                 type = SvTYPE(sv); /* destructor may have changed it */
6963             }
6964             /* Free back-references before magic, in case the magic calls
6965              * Perl code that has weak references to sv. */
6966             if (type == SVt_PVHV) {
6967                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6968                 if (SvMAGIC(sv))
6969                     mg_free(sv);
6970             }
6971             else if (SvMAGIC(sv)) {
6972                 /* Free back-references before other types of magic. */
6973                 sv_unmagic(sv, PERL_MAGIC_backref);
6974                 mg_free(sv);
6975             }
6976             SvMAGICAL_off(sv);
6977         }
6978         switch (type) {
6979             /* case SVt_INVLIST: */
6980         case SVt_PVIO:
6981             if (IoIFP(sv) &&
6982                 IoIFP(sv) != PerlIO_stdin() &&
6983                 IoIFP(sv) != PerlIO_stdout() &&
6984                 IoIFP(sv) != PerlIO_stderr() &&
6985                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6986             {
6987                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6988                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6989                           IoTYPE(sv) == IoTYPE_RDWR   ||
6990                           IoTYPE(sv) == IoTYPE_APPEND));
6991             }
6992             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6993                 PerlDir_close(IoDIRP(sv));
6994             IoDIRP(sv) = (DIR*)NULL;
6995             Safefree(IoTOP_NAME(sv));
6996             Safefree(IoFMT_NAME(sv));
6997             Safefree(IoBOTTOM_NAME(sv));
6998             if ((const GV *)sv == PL_statgv)
6999                 PL_statgv = NULL;
7000             goto freescalar;
7001         case SVt_REGEXP:
7002             /* FIXME for plugins */
7003           freeregexp:
7004             pregfree2((REGEXP*) sv);
7005             goto freescalar;
7006         case SVt_PVCV:
7007         case SVt_PVFM:
7008             cv_undef(MUTABLE_CV(sv));
7009             /* If we're in a stash, we don't own a reference to it.
7010              * However it does have a back reference to us, which needs to
7011              * be cleared.  */
7012             if ((stash = CvSTASH(sv)))
7013                 sv_del_backref(MUTABLE_SV(stash), sv);
7014             goto freescalar;
7015         case SVt_PVHV:
7016             if (PL_last_swash_hv == (const HV *)sv) {
7017                 PL_last_swash_hv = NULL;
7018             }
7019             if (HvTOTALKEYS((HV*)sv) > 0) {
7020                 const char *name;
7021                 /* this statement should match the one at the beginning of
7022                  * hv_undef_flags() */
7023                 if (   PL_phase != PERL_PHASE_DESTRUCT
7024                     && (name = HvNAME((HV*)sv)))
7025                 {
7026                     if (PL_stashcache) {
7027                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
7028                                      SVfARG(sv)));
7029                         (void)hv_deletehek(PL_stashcache,
7030                                            HvNAME_HEK((HV*)sv), G_DISCARD);
7031                     }
7032                     hv_name_set((HV*)sv, NULL, 0, 0);
7033                 }
7034
7035                 /* save old iter_sv in unused SvSTASH field */
7036                 assert(!SvOBJECT(sv));
7037                 SvSTASH(sv) = (HV*)iter_sv;
7038                 iter_sv = sv;
7039
7040                 /* save old hash_index in unused SvMAGIC field */
7041                 assert(!SvMAGICAL(sv));
7042                 assert(!SvMAGIC(sv));
7043                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
7044                 hash_index = 0;
7045
7046                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
7047                 goto get_next_sv; /* process this new sv */
7048             }
7049             /* free empty hash */
7050             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
7051             assert(!HvARRAY((HV*)sv));
7052             break;
7053         case SVt_PVAV:
7054             {
7055                 AV* av = MUTABLE_AV(sv);
7056                 if (PL_comppad == av) {
7057                     PL_comppad = NULL;
7058                     PL_curpad = NULL;
7059                 }
7060                 if (AvREAL(av) && AvFILLp(av) > -1) {
7061                     next_sv = AvARRAY(av)[AvFILLp(av)--];
7062                     /* save old iter_sv in top-most slot of AV,
7063                      * and pray that it doesn't get wiped in the meantime */
7064                     AvARRAY(av)[AvMAX(av)] = iter_sv;
7065                     iter_sv = sv;
7066                     goto get_next_sv; /* process this new sv */
7067                 }
7068                 Safefree(AvALLOC(av));
7069             }
7070
7071             break;
7072         case SVt_PVLV:
7073             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
7074                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
7075                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
7076                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
7077             }
7078             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
7079                 SvREFCNT_dec(LvTARG(sv));
7080             if (isREGEXP(sv)) goto freeregexp;
7081         case SVt_PVGV:
7082             if (isGV_with_GP(sv)) {
7083                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
7084                    && HvENAME_get(stash))
7085                     mro_method_changed_in(stash);
7086                 gp_free(MUTABLE_GV(sv));
7087                 if (GvNAME_HEK(sv))
7088                     unshare_hek(GvNAME_HEK(sv));
7089                 /* If we're in a stash, we don't own a reference to it.
7090                  * However it does have a back reference to us, which
7091                  * needs to be cleared.  */
7092                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
7093                         sv_del_backref(MUTABLE_SV(stash), sv);
7094             }
7095             /* FIXME. There are probably more unreferenced pointers to SVs
7096              * in the interpreter struct that we should check and tidy in
7097              * a similar fashion to this:  */
7098             /* See also S_sv_unglob, which does the same thing. */
7099             if ((const GV *)sv == PL_last_in_gv)
7100                 PL_last_in_gv = NULL;
7101             else if ((const GV *)sv == PL_statgv)
7102                 PL_statgv = NULL;
7103             else if ((const GV *)sv == PL_stderrgv)
7104                 PL_stderrgv = NULL;
7105         case SVt_PVMG:
7106         case SVt_PVNV:
7107         case SVt_PVIV:
7108         case SVt_INVLIST:
7109         case SVt_PV:
7110           freescalar:
7111             /* Don't bother with SvOOK_off(sv); as we're only going to
7112              * free it.  */
7113             if (SvOOK(sv)) {
7114                 STRLEN offset;
7115                 SvOOK_offset(sv, offset);
7116                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
7117                 /* Don't even bother with turning off the OOK flag.  */
7118             }
7119             if (SvROK(sv)) {
7120             free_rv:
7121                 {
7122                     SV * const target = SvRV(sv);
7123                     if (SvWEAKREF(sv))
7124                         sv_del_backref(target, sv);
7125                     else
7126                         next_sv = target;
7127                 }
7128             }
7129 #ifdef PERL_ANY_COW
7130             else if (SvPVX_const(sv)
7131                      && !(SvTYPE(sv) == SVt_PVIO
7132                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
7133             {
7134                 if (SvIsCOW(sv)) {
7135                     if (DEBUG_C_TEST) {
7136                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
7137                         sv_dump(sv);
7138                     }
7139                     if (SvLEN(sv)) {
7140 # ifdef PERL_OLD_COPY_ON_WRITE
7141                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
7142 # else
7143                         if (CowREFCNT(sv)) {
7144                             sv_buf_to_rw(sv);
7145                             CowREFCNT(sv)--;
7146                             sv_buf_to_ro(sv);
7147                             SvLEN_set(sv, 0);
7148                         }
7149 # endif
7150                     } else {
7151                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
7152                     }
7153
7154                 }
7155 # ifdef PERL_OLD_COPY_ON_WRITE
7156                 else
7157 # endif
7158                 if (SvLEN(sv)) {
7159                     Safefree(SvPVX_mutable(sv));
7160                 }
7161             }
7162 #else
7163             else if (SvPVX_const(sv) && SvLEN(sv)
7164                      && !(SvTYPE(sv) == SVt_PVIO
7165                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
7166                 Safefree(SvPVX_mutable(sv));
7167             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
7168                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
7169             }
7170 #endif
7171             break;
7172         case SVt_NV:
7173             break;
7174         }
7175
7176       free_body:
7177
7178         SvFLAGS(sv) &= SVf_BREAK;
7179         SvFLAGS(sv) |= SVTYPEMASK;
7180
7181         sv_type_details = bodies_by_type + type;
7182         if (sv_type_details->arena) {
7183             del_body(((char *)SvANY(sv) + sv_type_details->offset),
7184                      &PL_body_roots[type]);
7185         }
7186         else if (sv_type_details->body_size) {
7187             safefree(SvANY(sv));
7188         }
7189
7190       free_head:
7191         /* caller is responsible for freeing the head of the original sv */
7192         if (sv != orig_sv && !SvREFCNT(sv))
7193             del_SV(sv);
7194
7195         /* grab and free next sv, if any */
7196       get_next_sv:
7197         while (1) {
7198             sv = NULL;
7199             if (next_sv) {
7200                 sv = next_sv;
7201                 next_sv = NULL;
7202             }
7203             else if (!iter_sv) {
7204                 break;
7205             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
7206                 AV *const av = (AV*)iter_sv;
7207                 if (AvFILLp(av) > -1) {
7208                     sv = AvARRAY(av)[AvFILLp(av)--];
7209                 }
7210                 else { /* no more elements of current AV to free */
7211                     sv = iter_sv;
7212                     type = SvTYPE(sv);
7213                     /* restore previous value, squirrelled away */
7214                     iter_sv = AvARRAY(av)[AvMAX(av)];
7215                     Safefree(AvALLOC(av));
7216                     goto free_body;
7217                 }
7218             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
7219                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
7220                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
7221                     /* no more elements of current HV to free */
7222                     sv = iter_sv;
7223                     type = SvTYPE(sv);
7224                     /* Restore previous values of iter_sv and hash_index,
7225                      * squirrelled away */
7226                     assert(!SvOBJECT(sv));
7227                     iter_sv = (SV*)SvSTASH(sv);
7228                     assert(!SvMAGICAL(sv));
7229                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
7230 #ifdef DEBUGGING
7231                     /* perl -DA does not like rubbish in SvMAGIC. */
7232                     SvMAGIC_set(sv, 0);
7233 #endif
7234
7235                     /* free any remaining detritus from the hash struct */
7236                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
7237                     assert(!HvARRAY((HV*)sv));
7238                     goto free_body;
7239                 }
7240             }
7241
7242             /* unrolled SvREFCNT_dec and sv_free2 follows: */
7243
7244             if (!sv)
7245                 continue;
7246             if (!SvREFCNT(sv)) {
7247                 sv_free(sv);
7248                 continue;
7249             }
7250             if (--(SvREFCNT(sv)))
7251                 continue;
7252 #ifdef DEBUGGING
7253             if (SvTEMP(sv)) {
7254                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7255                          "Attempt to free temp prematurely: SV 0x%"UVxf
7256                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7257                 continue;
7258             }
7259 #endif
7260             if (SvIMMORTAL(sv)) {
7261                 /* make sure SvREFCNT(sv)==0 happens very seldom */
7262                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7263                 continue;
7264             }
7265             break;
7266         } /* while 1 */
7267
7268     } /* while sv */
7269 }
7270
7271 /* This routine curses the sv itself, not the object referenced by sv. So
7272    sv does not have to be ROK. */
7273
7274 static bool
7275 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
7276     PERL_ARGS_ASSERT_CURSE;
7277     assert(SvOBJECT(sv));
7278
7279     if (PL_defstash &&  /* Still have a symbol table? */
7280         SvDESTROYABLE(sv))
7281     {
7282         dSP;
7283         HV* stash;
7284         do {
7285           stash = SvSTASH(sv);
7286           assert(SvTYPE(stash) == SVt_PVHV);
7287           if (HvNAME(stash)) {
7288             CV* destructor = NULL;
7289             assert (SvOOK(stash));
7290             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
7291             if (!destructor || HvMROMETA(stash)->destroy_gen
7292                                 != PL_sub_generation)
7293             {
7294                 GV * const gv =
7295                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
7296                 if (gv) destructor = GvCV(gv);
7297                 if (!SvOBJECT(stash))
7298                 {
7299                     SvSTASH(stash) =
7300                         destructor ? (HV *)destructor : ((HV *)0)+1;
7301                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
7302                         PL_sub_generation;
7303                 }
7304             }
7305             assert(!destructor || destructor == ((CV *)0)+1
7306                 || SvTYPE(destructor) == SVt_PVCV);
7307             if (destructor && destructor != ((CV *)0)+1
7308                 /* A constant subroutine can have no side effects, so
7309                    don't bother calling it.  */
7310                 && !CvCONST(destructor)
7311                 /* Don't bother calling an empty destructor or one that
7312                    returns immediately. */
7313                 && (CvISXSUB(destructor)
7314                 || (CvSTART(destructor)
7315                     && (CvSTART(destructor)->op_next->op_type
7316                                         != OP_LEAVESUB)
7317                     && (CvSTART(destructor)->op_next->op_type
7318                                         != OP_PUSHMARK
7319                         || CvSTART(destructor)->op_next->op_next->op_type
7320                                         != OP_RETURN
7321                        )
7322                    ))
7323                )
7324             {
7325                 SV* const tmpref = newRV(sv);
7326                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
7327                 ENTER;
7328                 PUSHSTACKi(PERLSI_DESTROY);
7329                 EXTEND(SP, 2);
7330                 PUSHMARK(SP);
7331                 PUSHs(tmpref);
7332                 PUTBACK;
7333                 call_sv(MUTABLE_SV(destructor),
7334                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7335                 POPSTACK;
7336                 SPAGAIN;
7337                 LEAVE;
7338                 if(SvREFCNT(tmpref) < 2) {
7339                     /* tmpref is not kept alive! */
7340                     SvREFCNT(sv)--;
7341                     SvRV_set(tmpref, NULL);
7342                     SvROK_off(tmpref);
7343                 }
7344                 SvREFCNT_dec_NN(tmpref);
7345             }
7346           }
7347         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7348
7349
7350         if (check_refcnt && SvREFCNT(sv)) {
7351             if (PL_in_clean_objs)
7352                 Perl_croak(aTHX_
7353                   "DESTROY created new reference to dead object '%"HEKf"'",
7354                    HEKfARG(HvNAME_HEK(stash)));
7355             /* DESTROY gave object new lease on life */
7356             return FALSE;
7357         }
7358     }
7359
7360     if (SvOBJECT(sv)) {
7361         HV * const stash = SvSTASH(sv);
7362         /* Curse before freeing the stash, as freeing the stash could cause
7363            a recursive call into S_curse. */
7364         SvOBJECT_off(sv);       /* Curse the object. */
7365         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7366         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7367     }
7368     return TRUE;
7369 }
7370
7371 /*
7372 =for apidoc sv_newref
7373
7374 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7375 instead.
7376
7377 =cut
7378 */
7379
7380 SV *
7381 Perl_sv_newref(pTHX_ SV *const sv)
7382 {
7383     PERL_UNUSED_CONTEXT;
7384     if (sv)
7385         (SvREFCNT(sv))++;
7386     return sv;
7387 }
7388
7389 /*
7390 =for apidoc sv_free
7391
7392 Decrement an SV's reference count, and if it drops to zero, call
7393 C<sv_clear> to invoke destructors and free up any memory used by
7394 the body; finally, deallocate the SV's head itself.
7395 Normally called via a wrapper macro C<SvREFCNT_dec>.
7396
7397 =cut
7398 */
7399
7400 void
7401 Perl_sv_free(pTHX_ SV *const sv)
7402 {
7403     SvREFCNT_dec(sv);
7404 }
7405
7406
7407 /* Private helper function for SvREFCNT_dec().
7408  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7409
7410 void
7411 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7412 {
7413     dVAR;
7414
7415     PERL_ARGS_ASSERT_SV_FREE2;
7416
7417     if (LIKELY( rc == 1 )) {
7418         /* normal case */
7419         SvREFCNT(sv) = 0;
7420
7421 #ifdef DEBUGGING
7422         if (SvTEMP(sv)) {
7423             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7424                              "Attempt to free temp prematurely: SV 0x%"UVxf
7425                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7426             return;
7427         }
7428 #endif
7429         if (SvIMMORTAL(sv)) {
7430             /* make sure SvREFCNT(sv)==0 happens very seldom */
7431             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7432             return;
7433         }
7434         sv_clear(sv);
7435         if (! SvREFCNT(sv)) /* may have have been resurrected */
7436             del_SV(sv);
7437         return;
7438     }
7439
7440     /* handle exceptional cases */
7441
7442     assert(rc == 0);
7443
7444     if (SvFLAGS(sv) & SVf_BREAK)
7445         /* this SV's refcnt has been artificially decremented to
7446          * trigger cleanup */
7447         return;
7448     if (PL_in_clean_all) /* All is fair */
7449         return;
7450     if (SvIMMORTAL(sv)) {
7451         /* make sure SvREFCNT(sv)==0 happens very seldom */
7452         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7453         return;
7454     }
7455     if (ckWARN_d(WARN_INTERNAL)) {
7456 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7457         Perl_dump_sv_child(aTHX_ sv);
7458 #else
7459     #ifdef DEBUG_LEAKING_SCALARS
7460         sv_dump(sv);
7461     #endif
7462 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7463         if (PL_warnhook == PERL_WARNHOOK_FATAL
7464             || ckDEAD(packWARN(WARN_INTERNAL))) {
7465             /* Don't let Perl_warner cause us to escape our fate:  */
7466             abort();
7467         }
7468 #endif
7469         /* This may not return:  */
7470         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7471                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
7472                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7473 #endif
7474     }
7475 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7476     abort();
7477 #endif
7478
7479 }
7480
7481
7482 /*
7483 =for apidoc sv_len
7484
7485 Returns the length of the string in the SV.  Handles magic and type
7486 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
7487 gives raw access to the xpv_cur slot.
7488
7489 =cut
7490 */
7491
7492 STRLEN
7493 Perl_sv_len(pTHX_ SV *const sv)
7494 {
7495     STRLEN len;
7496
7497     if (!sv)
7498         return 0;
7499
7500     (void)SvPV_const(sv, len);
7501     return len;
7502 }
7503
7504 /*
7505 =for apidoc sv_len_utf8
7506
7507 Returns the number of characters in the string in an SV, counting wide
7508 UTF-8 bytes as a single character.  Handles magic and type coercion.
7509
7510 =cut
7511 */
7512
7513 /*
7514  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7515  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7516  * (Note that the mg_len is not the length of the mg_ptr field.
7517  * This allows the cache to store the character length of the string without
7518  * needing to malloc() extra storage to attach to the mg_ptr.)
7519  *
7520  */
7521
7522 STRLEN
7523 Perl_sv_len_utf8(pTHX_ SV *const sv)
7524 {
7525     if (!sv)
7526         return 0;
7527
7528     SvGETMAGIC(sv);
7529     return sv_len_utf8_nomg(sv);
7530 }
7531
7532 STRLEN
7533 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7534 {
7535     STRLEN len;
7536     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7537
7538     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7539
7540     if (PL_utf8cache && SvUTF8(sv)) {
7541             STRLEN ulen;
7542             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7543
7544             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7545                 if (mg->mg_len != -1)
7546                     ulen = mg->mg_len;
7547                 else {
7548                     /* We can use the offset cache for a headstart.
7549                        The longer value is stored in the first pair.  */
7550                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7551
7552                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7553                                                        s + len);
7554                 }
7555                 
7556                 if (PL_utf8cache < 0) {
7557                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7558                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7559                 }
7560             }
7561             else {
7562                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7563                 utf8_mg_len_cache_update(sv, &mg, ulen);
7564             }
7565             return ulen;
7566     }
7567     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7568 }
7569
7570 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7571    offset.  */
7572 static STRLEN
7573 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7574                       STRLEN *const uoffset_p, bool *const at_end)
7575 {
7576     const U8 *s = start;
7577     STRLEN uoffset = *uoffset_p;
7578
7579     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7580
7581     while (s < send && uoffset) {
7582         --uoffset;
7583         s += UTF8SKIP(s);
7584     }
7585     if (s == send) {
7586         *at_end = TRUE;
7587     }
7588     else if (s > send) {
7589         *at_end = TRUE;
7590         /* This is the existing behaviour. Possibly it should be a croak, as
7591            it's actually a bounds error  */
7592         s = send;
7593     }
7594     *uoffset_p -= uoffset;
7595     return s - start;
7596 }
7597
7598 /* Given the length of the string in both bytes and UTF-8 characters, decide
7599    whether to walk forwards or backwards to find the byte corresponding to
7600    the passed in UTF-8 offset.  */
7601 static STRLEN
7602 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7603                     STRLEN uoffset, const STRLEN uend)
7604 {
7605     STRLEN backw = uend - uoffset;
7606
7607     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7608
7609     if (uoffset < 2 * backw) {
7610         /* The assumption is that going forwards is twice the speed of going
7611            forward (that's where the 2 * backw comes from).
7612            (The real figure of course depends on the UTF-8 data.)  */
7613         const U8 *s = start;
7614
7615         while (s < send && uoffset--)
7616             s += UTF8SKIP(s);
7617         assert (s <= send);
7618         if (s > send)
7619             s = send;
7620         return s - start;
7621     }
7622
7623     while (backw--) {
7624         send--;
7625         while (UTF8_IS_CONTINUATION(*send))
7626             send--;
7627     }
7628     return send - start;
7629 }
7630
7631 /* For the string representation of the given scalar, find the byte
7632    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7633    give another position in the string, *before* the sought offset, which
7634    (which is always true, as 0, 0 is a valid pair of positions), which should
7635    help reduce the amount of linear searching.
7636    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7637    will be used to reduce the amount of linear searching. The cache will be
7638    created if necessary, and the found value offered to it for update.  */
7639 static STRLEN
7640 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7641                     const U8 *const send, STRLEN uoffset,
7642                     STRLEN uoffset0, STRLEN boffset0)
7643 {
7644     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7645     bool found = FALSE;
7646     bool at_end = FALSE;
7647
7648     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7649
7650     assert (uoffset >= uoffset0);
7651
7652     if (!uoffset)
7653         return 0;
7654
7655     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7656         && PL_utf8cache
7657         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7658                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7659         if ((*mgp)->mg_ptr) {
7660             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7661             if (cache[0] == uoffset) {
7662                 /* An exact match. */
7663                 return cache[1];
7664             }
7665             if (cache[2] == uoffset) {
7666                 /* An exact match. */
7667                 return cache[3];
7668             }
7669
7670             if (cache[0] < uoffset) {
7671                 /* The cache already knows part of the way.   */
7672                 if (cache[0] > uoffset0) {
7673                     /* The cache knows more than the passed in pair  */
7674                     uoffset0 = cache[0];
7675                     boffset0 = cache[1];
7676                 }
7677                 if ((*mgp)->mg_len != -1) {
7678                     /* And we know the end too.  */
7679                     boffset = boffset0
7680                         + sv_pos_u2b_midway(start + boffset0, send,
7681                                               uoffset - uoffset0,
7682                                               (*mgp)->mg_len - uoffset0);
7683                 } else {
7684                     uoffset -= uoffset0;
7685                     boffset = boffset0
7686                         + sv_pos_u2b_forwards(start + boffset0,
7687                                               send, &uoffset, &at_end);
7688                     uoffset += uoffset0;
7689                 }
7690             }
7691             else if (cache[2] < uoffset) {
7692                 /* We're between the two cache entries.  */
7693                 if (cache[2] > uoffset0) {
7694                     /* and the cache knows more than the passed in pair  */
7695                     uoffset0 = cache[2];
7696                     boffset0 = cache[3];
7697                 }
7698
7699                 boffset = boffset0
7700                     + sv_pos_u2b_midway(start + boffset0,
7701                                           start + cache[1],
7702                                           uoffset - uoffset0,
7703                                           cache[0] - uoffset0);
7704             } else {
7705                 boffset = boffset0
7706                     + sv_pos_u2b_midway(start + boffset0,
7707                                           start + cache[3],
7708                                           uoffset - uoffset0,
7709                                           cache[2] - uoffset0);
7710             }
7711             found = TRUE;
7712         }
7713         else if ((*mgp)->mg_len != -1) {
7714             /* If we can take advantage of a passed in offset, do so.  */
7715             /* In fact, offset0 is either 0, or less than offset, so don't
7716                need to worry about the other possibility.  */
7717             boffset = boffset0
7718                 + sv_pos_u2b_midway(start + boffset0, send,
7719                                       uoffset - uoffset0,
7720                                       (*mgp)->mg_len - uoffset0);
7721             found = TRUE;
7722         }
7723     }
7724
7725     if (!found || PL_utf8cache < 0) {
7726         STRLEN real_boffset;
7727         uoffset -= uoffset0;
7728         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7729                                                       send, &uoffset, &at_end);
7730         uoffset += uoffset0;
7731
7732         if (found && PL_utf8cache < 0)
7733             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7734                                        real_boffset, sv);
7735         boffset = real_boffset;
7736     }
7737
7738     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7739         if (at_end)
7740             utf8_mg_len_cache_update(sv, mgp, uoffset);
7741         else
7742             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7743     }
7744     return boffset;
7745 }
7746
7747
7748 /*
7749 =for apidoc sv_pos_u2b_flags
7750
7751 Converts the offset from a count of UTF-8 chars from
7752 the start of the string, to a count of the equivalent number of bytes; if
7753 lenp is non-zero, it does the same to lenp, but this time starting from
7754 the offset, rather than from the start
7755 of the string.  Handles type coercion.
7756 I<flags> is passed to C<SvPV_flags>, and usually should be
7757 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7758
7759 =cut
7760 */
7761
7762 /*
7763  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7764  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7765  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7766  *
7767  */
7768
7769 STRLEN
7770 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7771                       U32 flags)
7772 {
7773     const U8 *start;
7774     STRLEN len;
7775     STRLEN boffset;
7776
7777     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7778
7779     start = (U8*)SvPV_flags(sv, len, flags);
7780     if (len) {
7781         const U8 * const send = start + len;
7782         MAGIC *mg = NULL;
7783         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7784
7785         if (lenp
7786             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7787                         is 0, and *lenp is already set to that.  */) {
7788             /* Convert the relative offset to absolute.  */
7789             const STRLEN uoffset2 = uoffset + *lenp;
7790             const STRLEN boffset2
7791                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7792                                       uoffset, boffset) - boffset;
7793
7794             *lenp = boffset2;
7795         }
7796     } else {
7797         if (lenp)
7798             *lenp = 0;
7799         boffset = 0;
7800     }
7801
7802     return boffset;
7803 }
7804
7805 /*
7806 =for apidoc sv_pos_u2b
7807
7808 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7809 the start of the string, to a count of the equivalent number of bytes; if
7810 lenp is non-zero, it does the same to lenp, but this time starting from
7811 the offset, rather than from the start of the string.  Handles magic and
7812 type coercion.
7813
7814 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7815 than 2Gb.
7816
7817 =cut
7818 */
7819
7820 /*
7821  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7822  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7823  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7824  *
7825  */
7826
7827 /* This function is subject to size and sign problems */
7828
7829 void
7830 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7831 {
7832     PERL_ARGS_ASSERT_SV_POS_U2B;
7833
7834     if (lenp) {
7835         STRLEN ulen = (STRLEN)*lenp;
7836         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7837                                          SV_GMAGIC|SV_CONST_RETURN);
7838         *lenp = (I32)ulen;
7839     } else {
7840         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7841                                          SV_GMAGIC|SV_CONST_RETURN);
7842     }
7843 }
7844
7845 static void
7846 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7847                            const STRLEN ulen)
7848 {
7849     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7850     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7851         return;
7852
7853     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7854                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7855         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7856     }
7857     assert(*mgp);
7858
7859     (*mgp)->mg_len = ulen;
7860 }
7861
7862 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7863    byte length pairing. The (byte) length of the total SV is passed in too,
7864    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7865    may not have updated SvCUR, so we can't rely on reading it directly.
7866
7867    The proffered utf8/byte length pairing isn't used if the cache already has
7868    two pairs, and swapping either for the proffered pair would increase the
7869    RMS of the intervals between known byte offsets.
7870
7871    The cache itself consists of 4 STRLEN values
7872    0: larger UTF-8 offset
7873    1: corresponding byte offset
7874    2: smaller UTF-8 offset
7875    3: corresponding byte offset
7876
7877    Unused cache pairs have the value 0, 0.
7878    Keeping the cache "backwards" means that the invariant of
7879    cache[0] >= cache[2] is maintained even with empty slots, which means that
7880    the code that uses it doesn't need to worry if only 1 entry has actually
7881    been set to non-zero.  It also makes the "position beyond the end of the
7882    cache" logic much simpler, as the first slot is always the one to start
7883    from.   
7884 */
7885 static void
7886 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7887                            const STRLEN utf8, const STRLEN blen)
7888 {
7889     STRLEN *cache;
7890
7891     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7892
7893     if (SvREADONLY(sv))
7894         return;
7895
7896     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7897                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7898         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7899                            0);
7900         (*mgp)->mg_len = -1;
7901     }
7902     assert(*mgp);
7903
7904     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7905         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7906         (*mgp)->mg_ptr = (char *) cache;
7907     }
7908     assert(cache);
7909
7910     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7911         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7912            a pointer.  Note that we no longer cache utf8 offsets on refer-
7913            ences, but this check is still a good idea, for robustness.  */
7914         const U8 *start = (const U8 *) SvPVX_const(sv);
7915         const STRLEN realutf8 = utf8_length(start, start + byte);
7916
7917         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7918                                    sv);
7919     }
7920
7921     /* Cache is held with the later position first, to simplify the code
7922        that deals with unbounded ends.  */
7923        
7924     ASSERT_UTF8_CACHE(cache);
7925     if (cache[1] == 0) {
7926         /* Cache is totally empty  */
7927         cache[0] = utf8;
7928         cache[1] = byte;
7929     } else if (cache[3] == 0) {
7930         if (byte > cache[1]) {
7931             /* New one is larger, so goes first.  */
7932             cache[2] = cache[0];
7933             cache[3] = cache[1];
7934             cache[0] = utf8;
7935             cache[1] = byte;
7936         } else {
7937             cache[2] = utf8;
7938             cache[3] = byte;
7939         }
7940     } else {
7941 /* float casts necessary? XXX */
7942 #define THREEWAY_SQUARE(a,b,c,d) \
7943             ((float)((d) - (c))) * ((float)((d) - (c))) \
7944             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7945                + ((float)((b) - (a))) * ((float)((b) - (a)))
7946
7947         /* Cache has 2 slots in use, and we know three potential pairs.
7948            Keep the two that give the lowest RMS distance. Do the
7949            calculation in bytes simply because we always know the byte
7950            length.  squareroot has the same ordering as the positive value,
7951            so don't bother with the actual square root.  */
7952         if (byte > cache[1]) {
7953             /* New position is after the existing pair of pairs.  */
7954             const float keep_earlier
7955                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7956             const float keep_later
7957                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7958
7959             if (keep_later < keep_earlier) {
7960                 cache[2] = cache[0];
7961                 cache[3] = cache[1];
7962             }
7963             cache[0] = utf8;
7964             cache[1] = byte;
7965         }
7966         else {
7967             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7968             float b, c, keep_earlier;
7969             if (byte > cache[3]) {
7970                 /* New position is between the existing pair of pairs.  */
7971                 b = (float)cache[3];
7972                 c = (float)byte;
7973             } else {
7974                 /* New position is before the existing pair of pairs.  */
7975                 b = (float)byte;
7976                 c = (float)cache[3];
7977             }
7978             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7979             if (byte > cache[3]) {
7980                 if (keep_later < keep_earlier) {
7981                     cache[2] = utf8;
7982                     cache[3] = byte;
7983                 }
7984                 else {
7985                     cache[0] = utf8;
7986                     cache[1] = byte;
7987                 }
7988             }
7989             else {
7990                 if (! (keep_later < keep_earlier)) {
7991                     cache[0] = cache[2];
7992                     cache[1] = cache[3];
7993                 }
7994                 cache[2] = utf8;
7995                 cache[3] = byte;
7996             }
7997         }
7998     }
7999     ASSERT_UTF8_CACHE(cache);
8000 }
8001
8002 /* We already know all of the way, now we may be able to walk back.  The same
8003    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
8004    backward is half the speed of walking forward. */
8005 static STRLEN
8006 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
8007                     const U8 *end, STRLEN endu)
8008 {
8009     const STRLEN forw = target - s;
8010     STRLEN backw = end - target;
8011
8012     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
8013
8014     if (forw < 2 * backw) {
8015         return utf8_length(s, target);
8016     }
8017
8018     while (end > target) {
8019         end--;
8020         while (UTF8_IS_CONTINUATION(*end)) {
8021             end--;
8022         }
8023         endu--;
8024     }
8025     return endu;
8026 }
8027
8028 /*
8029 =for apidoc sv_pos_b2u_flags
8030
8031 Converts the offset from a count of bytes from the start of the string, to
8032 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
8033 I<flags> is passed to C<SvPV_flags>, and usually should be
8034 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
8035
8036 =cut
8037 */
8038
8039 /*
8040  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
8041  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
8042  * and byte offsets.
8043  *
8044  */
8045 STRLEN
8046 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
8047 {
8048     const U8* s;
8049     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
8050     STRLEN blen;
8051     MAGIC* mg = NULL;
8052     const U8* send;
8053     bool found = FALSE;
8054
8055     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
8056
8057     s = (const U8*)SvPV_flags(sv, blen, flags);
8058
8059     if (blen < offset)
8060         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
8061                    ", byte=%"UVuf, (UV)blen, (UV)offset);
8062
8063     send = s + offset;
8064
8065     if (!SvREADONLY(sv)
8066         && PL_utf8cache
8067         && SvTYPE(sv) >= SVt_PVMG
8068         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
8069     {
8070         if (mg->mg_ptr) {
8071             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
8072             if (cache[1] == offset) {
8073                 /* An exact match. */
8074                 return cache[0];
8075             }
8076             if (cache[3] == offset) {
8077                 /* An exact match. */
8078                 return cache[2];
8079             }
8080
8081             if (cache[1] < offset) {
8082                 /* We already know part of the way. */
8083                 if (mg->mg_len != -1) {
8084                     /* Actually, we know the end too.  */
8085                     len = cache[0]
8086                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
8087                                               s + blen, mg->mg_len - cache[0]);
8088                 } else {
8089                     len = cache[0] + utf8_length(s + cache[1], send);
8090                 }
8091             }
8092             else if (cache[3] < offset) {
8093                 /* We're between the two cached pairs, so we do the calculation
8094                    offset by the byte/utf-8 positions for the earlier pair,
8095                    then add the utf-8 characters from the string start to
8096                    there.  */
8097                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
8098                                           s + cache[1], cache[0] - cache[2])
8099                     + cache[2];
8100
8101             }
8102             else { /* cache[3] > offset */
8103                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
8104                                           cache[2]);
8105
8106             }
8107             ASSERT_UTF8_CACHE(cache);
8108             found = TRUE;
8109         } else if (mg->mg_len != -1) {
8110             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
8111             found = TRUE;
8112         }
8113     }
8114     if (!found || PL_utf8cache < 0) {
8115         const STRLEN real_len = utf8_length(s, send);
8116
8117         if (found && PL_utf8cache < 0)
8118             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
8119         len = real_len;
8120     }
8121
8122     if (PL_utf8cache) {
8123         if (blen == offset)
8124             utf8_mg_len_cache_update(sv, &mg, len);
8125         else
8126             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
8127     }
8128
8129     return len;
8130 }
8131
8132 /*
8133 =for apidoc sv_pos_b2u
8134
8135 Converts the value pointed to by offsetp from a count of bytes from the
8136 start of the string, to a count of the equivalent number of UTF-8 chars.
8137 Handles magic and type coercion.
8138
8139 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
8140 longer than 2Gb.
8141
8142 =cut
8143 */
8144
8145 /*
8146  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
8147  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
8148  * byte offsets.
8149  *
8150  */
8151 void
8152 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
8153 {
8154     PERL_ARGS_ASSERT_SV_POS_B2U;
8155
8156     if (!sv)
8157         return;
8158
8159     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
8160                                      SV_GMAGIC|SV_CONST_RETURN);
8161 }
8162
8163 static void
8164 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
8165                              STRLEN real, SV *const sv)
8166 {
8167     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
8168
8169     /* As this is debugging only code, save space by keeping this test here,
8170        rather than inlining it in all the callers.  */
8171     if (from_cache == real)
8172         return;
8173
8174     /* Need to turn the assertions off otherwise we may recurse infinitely
8175        while printing error messages.  */
8176     SAVEI8(PL_utf8cache);
8177     PL_utf8cache = 0;
8178     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
8179                func, (UV) from_cache, (UV) real, SVfARG(sv));
8180 }
8181
8182 /*
8183 =for apidoc sv_eq
8184
8185 Returns a boolean indicating whether the strings in the two SVs are
8186 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
8187 coerce its args to strings if necessary.
8188
8189 =for apidoc sv_eq_flags
8190
8191 Returns a boolean indicating whether the strings in the two SVs are
8192 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
8193 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
8194
8195 =cut
8196 */
8197
8198 I32
8199 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
8200 {
8201     const char *pv1;
8202     STRLEN cur1;
8203     const char *pv2;
8204     STRLEN cur2;
8205     I32  eq     = 0;
8206     SV* svrecode = NULL;
8207
8208     if (!sv1) {
8209         pv1 = "";
8210         cur1 = 0;
8211     }
8212     else {
8213         /* if pv1 and pv2 are the same, second SvPV_const call may
8214          * invalidate pv1 (if we are handling magic), so we may need to
8215          * make a copy */
8216         if (sv1 == sv2 && flags & SV_GMAGIC
8217          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
8218             pv1 = SvPV_const(sv1, cur1);
8219             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
8220         }
8221         pv1 = SvPV_flags_const(sv1, cur1, flags);
8222     }
8223
8224     if (!sv2){
8225         pv2 = "";
8226         cur2 = 0;
8227     }
8228     else
8229         pv2 = SvPV_flags_const(sv2, cur2, flags);
8230
8231     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
8232         /* Differing utf8ness.
8233          * Do not UTF8size the comparands as a side-effect. */
8234          if (IN_ENCODING) {
8235               if (SvUTF8(sv1)) {
8236                    svrecode = newSVpvn(pv2, cur2);
8237                    sv_recode_to_utf8(svrecode, _get_encoding());
8238                    pv2 = SvPV_const(svrecode, cur2);
8239               }
8240               else {
8241                    svrecode = newSVpvn(pv1, cur1);
8242                    sv_recode_to_utf8(svrecode, _get_encoding());
8243                    pv1 = SvPV_const(svrecode, cur1);
8244               }
8245               /* Now both are in UTF-8. */
8246               if (cur1 != cur2) {
8247                    SvREFCNT_dec_NN(svrecode);
8248                    return FALSE;
8249               }
8250          }
8251          else {
8252               if (SvUTF8(sv1)) {
8253                   /* sv1 is the UTF-8 one  */
8254                   return bytes_cmp_utf8((const U8*)pv2, cur2,
8255                                         (const U8*)pv1, cur1) == 0;
8256               }
8257               else {
8258                   /* sv2 is the UTF-8 one  */
8259                   return bytes_cmp_utf8((const U8*)pv1, cur1,
8260                                         (const U8*)pv2, cur2) == 0;
8261               }
8262          }
8263     }
8264
8265     if (cur1 == cur2)
8266         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
8267         
8268     SvREFCNT_dec(svrecode);
8269
8270     return eq;
8271 }
8272
8273 /*
8274 =for apidoc sv_cmp
8275
8276 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
8277 string in C<sv1> is less than, equal to, or greater than the string in
8278 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
8279 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
8280
8281 =for apidoc sv_cmp_flags
8282
8283 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
8284 string in C<sv1> is less than, equal to, or greater than the string in
8285 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
8286 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
8287 also C<sv_cmp_locale_flags>.
8288
8289 =cut
8290 */
8291
8292 I32
8293 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
8294 {
8295     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
8296 }
8297
8298 I32
8299 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
8300                   const U32 flags)
8301 {
8302     STRLEN cur1, cur2;
8303     const char *pv1, *pv2;
8304     I32  cmp;
8305     SV *svrecode = NULL;
8306
8307     if (!sv1) {
8308         pv1 = "";
8309         cur1 = 0;
8310     }
8311     else
8312         pv1 = SvPV_flags_const(sv1, cur1, flags);
8313
8314     if (!sv2) {
8315         pv2 = "";
8316         cur2 = 0;
8317     }
8318     else
8319         pv2 = SvPV_flags_const(sv2, cur2, flags);
8320
8321     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
8322         /* Differing utf8ness.
8323          * Do not UTF8size the comparands as a side-effect. */
8324         if (SvUTF8(sv1)) {
8325             if (IN_ENCODING) {
8326                  svrecode = newSVpvn(pv2, cur2);
8327                  sv_recode_to_utf8(svrecode, _get_encoding());
8328                  pv2 = SvPV_const(svrecode, cur2);
8329             }
8330             else {
8331                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
8332                                                    (const U8*)pv1, cur1);
8333                 return retval ? retval < 0 ? -1 : +1 : 0;
8334             }
8335         }
8336         else {
8337             if (IN_ENCODING) {
8338                  svrecode = newSVpvn(pv1, cur1);
8339                  sv_recode_to_utf8(svrecode, _get_encoding());
8340                  pv1 = SvPV_const(svrecode, cur1);
8341             }
8342             else {
8343                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
8344                                                   (const U8*)pv2, cur2);
8345                 return retval ? retval < 0 ? -1 : +1 : 0;
8346             }
8347         }
8348     }
8349
8350     if (!cur1) {
8351         cmp = cur2 ? -1 : 0;
8352     } else if (!cur2) {
8353         cmp = 1;
8354     } else {
8355         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
8356
8357         if (retval) {
8358             cmp = retval < 0 ? -1 : 1;
8359         } else if (cur1 == cur2) {
8360             cmp = 0;
8361         } else {
8362             cmp = cur1 < cur2 ? -1 : 1;
8363         }
8364     }
8365
8366     SvREFCNT_dec(svrecode);
8367
8368     return cmp;
8369 }
8370
8371 /*
8372 =for apidoc sv_cmp_locale
8373
8374 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8375 'use bytes' aware, handles get magic, and will coerce its args to strings
8376 if necessary.  See also C<sv_cmp>.
8377
8378 =for apidoc sv_cmp_locale_flags
8379
8380 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8381 'use bytes' aware and will coerce its args to strings if necessary.  If the
8382 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
8383
8384 =cut
8385 */
8386
8387 I32
8388 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8389 {
8390     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8391 }
8392
8393 I32
8394 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8395                          const U32 flags)
8396 {
8397 #ifdef USE_LOCALE_COLLATE
8398
8399     char *pv1, *pv2;
8400     STRLEN len1, len2;
8401     I32 retval;
8402
8403     if (PL_collation_standard)
8404         goto raw_compare;
8405
8406     len1 = 0;
8407     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8408     len2 = 0;
8409     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8410
8411     if (!pv1 || !len1) {
8412         if (pv2 && len2)
8413             return -1;
8414         else
8415             goto raw_compare;
8416     }
8417     else {
8418         if (!pv2 || !len2)
8419             return 1;
8420     }
8421
8422     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8423
8424     if (retval)
8425         return retval < 0 ? -1 : 1;
8426
8427     /*
8428      * When the result of collation is equality, that doesn't mean
8429      * that there are no differences -- some locales exclude some
8430      * characters from consideration.  So to avoid false equalities,
8431      * we use the raw string as a tiebreaker.
8432      */
8433
8434   raw_compare:
8435     /* FALLTHROUGH */
8436
8437 #else
8438     PERL_UNUSED_ARG(flags);
8439 #endif /* USE_LOCALE_COLLATE */
8440
8441     return sv_cmp(sv1, sv2);
8442 }
8443
8444
8445 #ifdef USE_LOCALE_COLLATE
8446
8447 /*
8448 =for apidoc sv_collxfrm
8449
8450 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8451 C<sv_collxfrm_flags>.
8452
8453 =for apidoc sv_collxfrm_flags
8454
8455 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8456 flags contain SV_GMAGIC, it handles get-magic.
8457
8458 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
8459 scalar data of the variable, but transformed to such a format that a normal
8460 memory comparison can be used to compare the data according to the locale
8461 settings.
8462
8463 =cut
8464 */
8465
8466 char *
8467 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8468 {
8469     MAGIC *mg;
8470
8471     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8472
8473     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8474     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8475         const char *s;
8476         char *xf;
8477         STRLEN len, xlen;
8478
8479         if (mg)
8480             Safefree(mg->mg_ptr);
8481         s = SvPV_flags_const(sv, len, flags);
8482         if ((xf = mem_collxfrm(s, len, &xlen))) {
8483             if (! mg) {
8484 #ifdef PERL_OLD_COPY_ON_WRITE
8485                 if (SvIsCOW(sv))
8486                     sv_force_normal_flags(sv, 0);
8487 #endif
8488                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8489                                  0, 0);
8490                 assert(mg);
8491             }
8492             mg->mg_ptr = xf;
8493             mg->mg_len = xlen;
8494         }
8495         else {
8496             if (mg) {
8497                 mg->mg_ptr = NULL;
8498                 mg->mg_len = -1;
8499             }
8500         }
8501     }
8502     if (mg && mg->mg_ptr) {
8503         *nxp = mg->mg_len;
8504         return mg->mg_ptr + sizeof(PL_collation_ix);
8505     }
8506     else {
8507         *nxp = 0;
8508         return NULL;
8509     }
8510 }
8511
8512 #endif /* USE_LOCALE_COLLATE */
8513
8514 static char *
8515 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8516 {
8517     SV * const tsv = newSV(0);
8518     ENTER;
8519     SAVEFREESV(tsv);
8520     sv_gets(tsv, fp, 0);
8521     sv_utf8_upgrade_nomg(tsv);
8522     SvCUR_set(sv,append);
8523     sv_catsv(sv,tsv);
8524     LEAVE;
8525     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8526 }
8527
8528 static char *
8529 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8530 {
8531     SSize_t bytesread;
8532     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8533       /* Grab the size of the record we're getting */
8534     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8535     
8536     /* Go yank in */
8537 #ifdef __VMS
8538     int fd;
8539     Stat_t st;
8540
8541     /* With a true, record-oriented file on VMS, we need to use read directly
8542      * to ensure that we respect RMS record boundaries.  The user is responsible
8543      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8544      * record size) field.  N.B. This is likely to produce invalid results on
8545      * varying-width character data when a record ends mid-character.
8546      */
8547     fd = PerlIO_fileno(fp);
8548     if (fd != -1
8549         && PerlLIO_fstat(fd, &st) == 0
8550         && (st.st_fab_rfm == FAB$C_VAR
8551             || st.st_fab_rfm == FAB$C_VFC
8552             || st.st_fab_rfm == FAB$C_FIX)) {
8553
8554         bytesread = PerlLIO_read(fd, buffer, recsize);
8555     }
8556     else /* in-memory file from PerlIO::Scalar
8557           * or not a record-oriented file
8558           */
8559 #endif
8560     {
8561         bytesread = PerlIO_read(fp, buffer, recsize);
8562
8563         /* At this point, the logic in sv_get() means that sv will
8564            be treated as utf-8 if the handle is utf8.
8565         */
8566         if (PerlIO_isutf8(fp) && bytesread > 0) {
8567             char *bend = buffer + bytesread;
8568             char *bufp = buffer;
8569             size_t charcount = 0;
8570             bool charstart = TRUE;
8571             STRLEN skip = 0;
8572
8573             while (charcount < recsize) {
8574                 /* count accumulated characters */
8575                 while (bufp < bend) {
8576                     if (charstart) {
8577                         skip = UTF8SKIP(bufp);
8578                     }
8579                     if (bufp + skip > bend) {
8580                         /* partial at the end */
8581                         charstart = FALSE;
8582                         break;
8583                     }
8584                     else {
8585                         ++charcount;
8586                         bufp += skip;
8587                         charstart = TRUE;
8588                     }
8589                 }
8590
8591                 if (charcount < recsize) {
8592                     STRLEN readsize;
8593                     STRLEN bufp_offset = bufp - buffer;
8594                     SSize_t morebytesread;
8595
8596                     /* originally I read enough to fill any incomplete
8597                        character and the first byte of the next
8598                        character if needed, but if there's many
8599                        multi-byte encoded characters we're going to be
8600                        making a read call for every character beyond
8601                        the original read size.
8602
8603                        So instead, read the rest of the character if
8604                        any, and enough bytes to match at least the
8605                        start bytes for each character we're going to
8606                        read.
8607                     */
8608                     if (charstart)
8609                         readsize = recsize - charcount;
8610                     else 
8611                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8612                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8613                     bend = buffer + bytesread;
8614                     morebytesread = PerlIO_read(fp, bend, readsize);
8615                     if (morebytesread <= 0) {
8616                         /* we're done, if we still have incomplete
8617                            characters the check code in sv_gets() will
8618                            warn about them.
8619
8620                            I'd originally considered doing
8621                            PerlIO_ungetc() on all but the lead
8622                            character of the incomplete character, but
8623                            read() doesn't do that, so I don't.
8624                         */
8625                         break;
8626                     }
8627
8628                     /* prepare to scan some more */
8629                     bytesread += morebytesread;
8630                     bend = buffer + bytesread;
8631                     bufp = buffer + bufp_offset;
8632                 }
8633             }
8634         }
8635     }
8636
8637     if (bytesread < 0)
8638         bytesread = 0;
8639     SvCUR_set(sv, bytesread + append);
8640     buffer[bytesread] = '\0';
8641     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8642 }
8643
8644 /*
8645 =for apidoc sv_gets
8646
8647 Get a line from the filehandle and store it into the SV, optionally
8648 appending to the currently-stored string.  If C<append> is not 0, the
8649 line is appended to the SV instead of overwriting it.  C<append> should
8650 be set to the byte offset that the appended string should start at
8651 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8652
8653 =cut
8654 */
8655
8656 char *
8657 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8658 {
8659     const char *rsptr;
8660     STRLEN rslen;
8661     STDCHAR rslast;
8662     STDCHAR *bp;
8663     SSize_t cnt;
8664     int i = 0;
8665     int rspara = 0;
8666
8667     PERL_ARGS_ASSERT_SV_GETS;
8668
8669     if (SvTHINKFIRST(sv))
8670         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8671     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8672        from <>.
8673        However, perlbench says it's slower, because the existing swipe code
8674        is faster than copy on write.
8675        Swings and roundabouts.  */
8676     SvUPGRADE(sv, SVt_PV);
8677
8678     if (append) {
8679         /* line is going to be appended to the existing buffer in the sv */
8680         if (PerlIO_isutf8(fp)) {
8681             if (!SvUTF8(sv)) {
8682                 sv_utf8_upgrade_nomg(sv);
8683                 sv_pos_u2b(sv,&append,0);
8684             }
8685         } else if (SvUTF8(sv)) {
8686             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8687         }
8688     }
8689
8690     SvPOK_only(sv);
8691     if (!append) {
8692         /* not appending - "clear" the string by setting SvCUR to 0,
8693          * the pv is still avaiable. */
8694         SvCUR_set(sv,0);
8695     }
8696     if (PerlIO_isutf8(fp))
8697         SvUTF8_on(sv);
8698
8699     if (IN_PERL_COMPILETIME) {
8700         /* we always read code in line mode */
8701         rsptr = "\n";
8702         rslen = 1;
8703     }
8704     else if (RsSNARF(PL_rs)) {
8705         /* If it is a regular disk file use size from stat() as estimate
8706            of amount we are going to read -- may result in mallocing
8707            more memory than we really need if the layers below reduce
8708            the size we read (e.g. CRLF or a gzip layer).
8709          */
8710         Stat_t st;
8711         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8712             const Off_t offset = PerlIO_tell(fp);
8713             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8714 #ifdef PERL_NEW_COPY_ON_WRITE
8715                 /* Add an extra byte for the sake of copy-on-write's
8716                  * buffer reference count. */
8717                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8718 #else
8719                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8720 #endif
8721             }
8722         }
8723         rsptr = NULL;
8724         rslen = 0;
8725     }
8726     else if (RsRECORD(PL_rs)) {
8727         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8728     }
8729     else if (RsPARA(PL_rs)) {
8730         rsptr = "\n\n";
8731         rslen = 2;
8732         rspara = 1;
8733     }
8734     else {
8735         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8736         if (PerlIO_isutf8(fp)) {
8737             rsptr = SvPVutf8(PL_rs, rslen);
8738         }
8739         else {
8740             if (SvUTF8(PL_rs)) {
8741                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8742                     Perl_croak(aTHX_ "Wide character in $/");
8743                 }
8744             }
8745             /* extract the raw pointer to the record separator */
8746             rsptr = SvPV_const(PL_rs, rslen);
8747         }
8748     }
8749
8750     /* rslast is the last character in the record separator
8751      * note we don't use rslast except when rslen is true, so the
8752      * null assign is a placeholder. */
8753     rslast = rslen ? rsptr[rslen - 1] : '\0';
8754
8755     if (rspara) {               /* have to do this both before and after */
8756         do {                    /* to make sure file boundaries work right */
8757             if (PerlIO_eof(fp))
8758                 return 0;
8759             i = PerlIO_getc(fp);
8760             if (i != '\n') {
8761                 if (i == -1)
8762                     return 0;
8763                 PerlIO_ungetc(fp,i);
8764                 break;
8765             }
8766         } while (i != EOF);
8767     }
8768
8769     /* See if we know enough about I/O mechanism to cheat it ! */
8770
8771     /* This used to be #ifdef test - it is made run-time test for ease
8772        of abstracting out stdio interface. One call should be cheap
8773        enough here - and may even be a macro allowing compile
8774        time optimization.
8775      */
8776
8777     if (PerlIO_fast_gets(fp)) {
8778     /*
8779      * We can do buffer based IO operations on this filehandle.
8780      *
8781      * This means we can bypass a lot of subcalls and process
8782      * the buffer directly, it also means we know the upper bound
8783      * on the amount of data we might read of the current buffer
8784      * into our sv. Knowing this allows us to preallocate the pv
8785      * to be able to hold that maximum, which allows us to simplify
8786      * a lot of logic. */
8787
8788     /*
8789      * We're going to steal some values from the stdio struct
8790      * and put EVERYTHING in the innermost loop into registers.
8791      */
8792     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8793     STRLEN bpx;         /* length of the data in the target sv
8794                            used to fix pointers after a SvGROW */
8795     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8796                            of data left in the read-ahead buffer.
8797                            If 0 then the pv buffer can hold the full
8798                            amount left, otherwise this is the amount it
8799                            can hold. */
8800
8801 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8802     /* An ungetc()d char is handled separately from the regular
8803      * buffer, so we getc() it back out and stuff it in the buffer.
8804      */
8805     i = PerlIO_getc(fp);
8806     if (i == EOF) return 0;
8807     *(--((*fp)->_ptr)) = (unsigned char) i;
8808     (*fp)->_cnt++;
8809 #endif
8810
8811     /* Here is some breathtakingly efficient cheating */
8812
8813     /* When you read the following logic resist the urge to think
8814      * of record separators that are 1 byte long. They are an
8815      * uninteresting special (simple) case.
8816      *
8817      * Instead think of record separators which are at least 2 bytes
8818      * long, and keep in mind that we need to deal with such
8819      * separators when they cross a read-ahead buffer boundary.
8820      *
8821      * Also consider that we need to gracefully deal with separators
8822      * that may be longer than a single read ahead buffer.
8823      *
8824      * Lastly do not forget we want to copy the delimiter as well. We
8825      * are copying all data in the file _up_to_and_including_ the separator
8826      * itself.
8827      *
8828      * Now that you have all that in mind here is what is happening below:
8829      *
8830      * 1. When we first enter the loop we do some memory book keeping to see
8831      * how much free space there is in the target SV. (This sub assumes that
8832      * it is operating on the same SV most of the time via $_ and that it is
8833      * going to be able to reuse the same pv buffer each call.) If there is
8834      * "enough" room then we set "shortbuffered" to how much space there is
8835      * and start reading forward.
8836      *
8837      * 2. When we scan forward we copy from the read-ahead buffer to the target
8838      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8839      * and the end of the of pv, as well as for the "rslast", which is the last
8840      * char of the separator.
8841      *
8842      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8843      * (which has a "complete" record up to the point we saw rslast) and check
8844      * it to see if it matches the separator. If it does we are done. If it doesn't
8845      * we continue on with the scan/copy.
8846      *
8847      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8848      * the IO system to read the next buffer. We do this by doing a getc(), which
8849      * returns a single char read (or EOF), and prefills the buffer, and also
8850      * allows us to find out how full the buffer is.  We use this information to
8851      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8852      * the returned single char into the target sv, and then go back into scan
8853      * forward mode.
8854      *
8855      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8856      * remaining space in the read-buffer.
8857      *
8858      * Note that this code despite its twisty-turny nature is pretty darn slick.
8859      * It manages single byte separators, multi-byte cross boundary separators,
8860      * and cross-read-buffer separators cleanly and efficiently at the cost
8861      * of potentially greatly overallocating the target SV.
8862      *
8863      * Yves
8864      */
8865
8866
8867     /* get the number of bytes remaining in the read-ahead buffer
8868      * on first call on a given fp this will return 0.*/
8869     cnt = PerlIO_get_cnt(fp);
8870
8871     /* make sure we have the room */
8872     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8873         /* Not room for all of it
8874            if we are looking for a separator and room for some
8875          */
8876         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8877             /* just process what we have room for */
8878             shortbuffered = cnt - SvLEN(sv) + append + 1;
8879             cnt -= shortbuffered;
8880         }
8881         else {
8882             /* ensure that the target sv has enough room to hold
8883              * the rest of the read-ahead buffer */
8884             shortbuffered = 0;
8885             /* remember that cnt can be negative */
8886             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8887         }
8888     }
8889     else {
8890         /* we have enough room to hold the full buffer, lets scream */
8891         shortbuffered = 0;
8892     }
8893
8894     /* extract the pointer to sv's string buffer, offset by append as necessary */
8895     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8896     /* extract the point to the read-ahead buffer */
8897     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8898
8899     /* some trace debug output */
8900     DEBUG_P(PerlIO_printf(Perl_debug_log,
8901         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8902     DEBUG_P(PerlIO_printf(Perl_debug_log,
8903         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8904          UVuf"\n",
8905                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8906                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8907
8908     for (;;) {
8909       screamer:
8910         /* if there is stuff left in the read-ahead buffer */
8911         if (cnt > 0) {
8912             /* if there is a separator */
8913             if (rslen) {
8914                 /* loop until we hit the end of the read-ahead buffer */
8915                 while (cnt > 0) {                    /* this     |  eat */
8916                     /* scan forward copying and searching for rslast as we go */
8917                     cnt--;
8918                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8919                         goto thats_all_folks;        /* screams  |  sed :-) */
8920                 }
8921             }
8922             else {
8923                 /* no separator, slurp the full buffer */
8924                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8925                 bp += cnt;                           /* screams  |  dust */
8926                 ptr += cnt;                          /* louder   |  sed :-) */
8927                 cnt = 0;
8928                 assert (!shortbuffered);
8929                 goto cannot_be_shortbuffered;
8930             }
8931         }
8932         
8933         if (shortbuffered) {            /* oh well, must extend */
8934             /* we didnt have enough room to fit the line into the target buffer
8935              * so we must extend the target buffer and keep going */
8936             cnt = shortbuffered;
8937             shortbuffered = 0;
8938             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8939             SvCUR_set(sv, bpx);
8940             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8941             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8942             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8943             continue;
8944         }
8945
8946     cannot_be_shortbuffered:
8947         /* we need to refill the read-ahead buffer if possible */
8948
8949         DEBUG_P(PerlIO_printf(Perl_debug_log,
8950                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8951                               PTR2UV(ptr),(IV)cnt));
8952         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8953
8954         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8955            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8956             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8957             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8958
8959         /*
8960             call PerlIO_getc() to let it prefill the lookahead buffer
8961
8962             This used to call 'filbuf' in stdio form, but as that behaves like
8963             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8964             another abstraction.
8965
8966             Note we have to deal with the char in 'i' if we are not at EOF
8967         */
8968         i   = PerlIO_getc(fp);          /* get more characters */
8969
8970         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8971            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8972             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8973             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8974
8975         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8976         cnt = PerlIO_get_cnt(fp);
8977         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8978         DEBUG_P(PerlIO_printf(Perl_debug_log,
8979             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8980             PTR2UV(ptr),(IV)cnt));
8981
8982         if (i == EOF)                   /* all done for ever? */
8983             goto thats_really_all_folks;
8984
8985         /* make sure we have enough space in the target sv */
8986         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8987         SvCUR_set(sv, bpx);
8988         SvGROW(sv, bpx + cnt + 2);
8989         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8990
8991         /* copy of the char we got from getc() */
8992         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8993
8994         /* make sure we deal with the i being the last character of a separator */
8995         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8996             goto thats_all_folks;
8997     }
8998
8999   thats_all_folks:
9000     /* check if we have actually found the separator - only really applies
9001      * when rslen > 1 */
9002     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
9003           memNE((char*)bp - rslen, rsptr, rslen))
9004         goto screamer;                          /* go back to the fray */
9005   thats_really_all_folks:
9006     if (shortbuffered)
9007         cnt += shortbuffered;
9008         DEBUG_P(PerlIO_printf(Perl_debug_log,
9009              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
9010     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
9011     DEBUG_P(PerlIO_printf(Perl_debug_log,
9012         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
9013         "\n",
9014         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
9015         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
9016     *bp = '\0';
9017     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
9018     DEBUG_P(PerlIO_printf(Perl_debug_log,
9019         "Screamer: done, len=%ld, string=|%.*s|\n",
9020         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
9021     }
9022    else
9023     {
9024        /*The big, slow, and stupid way. */
9025 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
9026         STDCHAR *buf = NULL;
9027         Newx(buf, 8192, STDCHAR);
9028         assert(buf);
9029 #else
9030         STDCHAR buf[8192];
9031 #endif
9032
9033       screamer2:
9034         if (rslen) {
9035             const STDCHAR * const bpe = buf + sizeof(buf);
9036             bp = buf;
9037             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
9038                 ; /* keep reading */
9039             cnt = bp - buf;
9040         }
9041         else {
9042             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
9043             /* Accommodate broken VAXC compiler, which applies U8 cast to
9044              * both args of ?: operator, causing EOF to change into 255
9045              */
9046             if (cnt > 0)
9047                  i = (U8)buf[cnt - 1];
9048             else
9049                  i = EOF;
9050         }
9051
9052         if (cnt < 0)
9053             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
9054         if (append)
9055             sv_catpvn_nomg(sv, (char *) buf, cnt);
9056         else
9057             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
9058
9059         if (i != EOF &&                 /* joy */
9060             (!rslen ||
9061              SvCUR(sv) < rslen ||
9062              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
9063         {
9064             append = -1;
9065             /*
9066              * If we're reading from a TTY and we get a short read,
9067              * indicating that the user hit his EOF character, we need
9068              * to notice it now, because if we try to read from the TTY
9069              * again, the EOF condition will disappear.
9070              *
9071              * The comparison of cnt to sizeof(buf) is an optimization
9072              * that prevents unnecessary calls to feof().
9073              *
9074              * - jik 9/25/96
9075              */
9076             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
9077                 goto screamer2;
9078         }
9079
9080 #ifdef USE_HEAP_INSTEAD_OF_STACK
9081         Safefree(buf);
9082 #endif
9083     }
9084
9085     if (rspara) {               /* have to do this both before and after */
9086         while (i != EOF) {      /* to make sure file boundaries work right */
9087             i = PerlIO_getc(fp);
9088             if (i != '\n') {
9089                 PerlIO_ungetc(fp,i);
9090                 break;
9091             }
9092         }
9093     }
9094
9095     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
9096 }
9097
9098 /*
9099 =for apidoc sv_inc
9100
9101 Auto-increment of the value in the SV, doing string to numeric conversion
9102 if necessary.  Handles 'get' magic and operator overloading.
9103
9104 =cut
9105 */
9106
9107 void
9108 Perl_sv_inc(pTHX_ SV *const sv)
9109 {
9110     if (!sv)
9111         return;
9112     SvGETMAGIC(sv);
9113     sv_inc_nomg(sv);
9114 }
9115
9116 /*
9117 =for apidoc sv_inc_nomg
9118
9119 Auto-increment of the value in the SV, doing string to numeric conversion
9120 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9121
9122 =cut
9123 */
9124
9125 void
9126 Perl_sv_inc_nomg(pTHX_ SV *const sv)
9127 {
9128     char *d;
9129     int flags;
9130
9131     if (!sv)
9132         return;
9133     if (SvTHINKFIRST(sv)) {
9134         if (SvREADONLY(sv)) {
9135                 Perl_croak_no_modify();
9136         }
9137         if (SvROK(sv)) {
9138             IV i;
9139             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
9140                 return;
9141             i = PTR2IV(SvRV(sv));
9142             sv_unref(sv);
9143             sv_setiv(sv, i);
9144         }
9145         else sv_force_normal_flags(sv, 0);
9146     }
9147     flags = SvFLAGS(sv);
9148     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
9149         /* It's (privately or publicly) a float, but not tested as an
9150            integer, so test it to see. */
9151         (void) SvIV(sv);
9152         flags = SvFLAGS(sv);
9153     }
9154     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9155         /* It's publicly an integer, or privately an integer-not-float */
9156 #ifdef PERL_PRESERVE_IVUV
9157       oops_its_int:
9158 #endif
9159         if (SvIsUV(sv)) {
9160             if (SvUVX(sv) == UV_MAX)
9161                 sv_setnv(sv, UV_MAX_P1);
9162             else
9163                 (void)SvIOK_only_UV(sv);
9164                 SvUV_set(sv, SvUVX(sv) + 1);
9165         } else {
9166             if (SvIVX(sv) == IV_MAX)
9167                 sv_setuv(sv, (UV)IV_MAX + 1);
9168             else {
9169                 (void)SvIOK_only(sv);
9170                 SvIV_set(sv, SvIVX(sv) + 1);
9171             }   
9172         }
9173         return;
9174     }
9175     if (flags & SVp_NOK) {
9176         const NV was = SvNVX(sv);
9177         if (LIKELY(!Perl_isinfnan(was)) &&
9178             NV_OVERFLOWS_INTEGERS_AT &&
9179             was >= NV_OVERFLOWS_INTEGERS_AT) {
9180             /* diag_listed_as: Lost precision when %s %f by 1 */
9181             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9182                            "Lost precision when incrementing %" NVff " by 1",
9183                            was);
9184         }
9185         (void)SvNOK_only(sv);
9186         SvNV_set(sv, was + 1.0);
9187         return;
9188     }
9189
9190     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
9191         if ((flags & SVTYPEMASK) < SVt_PVIV)
9192             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
9193         (void)SvIOK_only(sv);
9194         SvIV_set(sv, 1);
9195         return;
9196     }
9197     d = SvPVX(sv);
9198     while (isALPHA(*d)) d++;
9199     while (isDIGIT(*d)) d++;
9200     if (d < SvEND(sv)) {
9201         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
9202 #ifdef PERL_PRESERVE_IVUV
9203         /* Got to punt this as an integer if needs be, but we don't issue
9204            warnings. Probably ought to make the sv_iv_please() that does
9205            the conversion if possible, and silently.  */
9206         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9207             /* Need to try really hard to see if it's an integer.
9208                9.22337203685478e+18 is an integer.
9209                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9210                so $a="9.22337203685478e+18"; $a+0; $a++
9211                needs to be the same as $a="9.22337203685478e+18"; $a++
9212                or we go insane. */
9213         
9214             (void) sv_2iv(sv);
9215             if (SvIOK(sv))
9216                 goto oops_its_int;
9217
9218             /* sv_2iv *should* have made this an NV */
9219             if (flags & SVp_NOK) {
9220                 (void)SvNOK_only(sv);
9221                 SvNV_set(sv, SvNVX(sv) + 1.0);
9222                 return;
9223             }
9224             /* I don't think we can get here. Maybe I should assert this
9225                And if we do get here I suspect that sv_setnv will croak. NWC
9226                Fall through. */
9227             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
9228                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9229         }
9230 #endif /* PERL_PRESERVE_IVUV */
9231         if (!numtype && ckWARN(WARN_NUMERIC))
9232             not_incrementable(sv);
9233         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9234         return;
9235     }
9236     d--;
9237     while (d >= SvPVX_const(sv)) {
9238         if (isDIGIT(*d)) {
9239             if (++*d <= '9')
9240                 return;
9241             *(d--) = '0';
9242         }
9243         else {
9244 #ifdef EBCDIC
9245             /* MKS: The original code here died if letters weren't consecutive.
9246              * at least it didn't have to worry about non-C locales.  The
9247              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9248              * arranged in order (although not consecutively) and that only
9249              * [A-Za-z] are accepted by isALPHA in the C locale.
9250              */
9251             if (isALPHA_FOLD_NE(*d, 'z')) {
9252                 do { ++*d; } while (!isALPHA(*d));
9253                 return;
9254             }
9255             *(d--) -= 'z' - 'a';
9256 #else
9257             ++*d;
9258             if (isALPHA(*d))
9259                 return;
9260             *(d--) -= 'z' - 'a' + 1;
9261 #endif
9262         }
9263     }
9264     /* oh,oh, the number grew */
9265     SvGROW(sv, SvCUR(sv) + 2);
9266     SvCUR_set(sv, SvCUR(sv) + 1);
9267     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9268         *d = d[-1];
9269     if (isDIGIT(d[1]))
9270         *d = '1';
9271     else
9272         *d = d[1];
9273 }
9274
9275 /*
9276 =for apidoc sv_dec
9277
9278 Auto-decrement of the value in the SV, doing string to numeric conversion
9279 if necessary.  Handles 'get' magic and operator overloading.
9280
9281 =cut
9282 */
9283
9284 void
9285 Perl_sv_dec(pTHX_ SV *const sv)
9286 {
9287     if (!sv)
9288         return;
9289     SvGETMAGIC(sv);
9290     sv_dec_nomg(sv);
9291 }
9292
9293 /*
9294 =for apidoc sv_dec_nomg
9295
9296 Auto-decrement of the value in the SV, doing string to numeric conversion
9297 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9298
9299 =cut
9300 */
9301
9302 void
9303 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9304 {
9305     int flags;
9306
9307     if (!sv)
9308         return;
9309     if (SvTHINKFIRST(sv)) {
9310         if (SvREADONLY(sv)) {
9311                 Perl_croak_no_modify();
9312         }
9313         if (SvROK(sv)) {
9314             IV i;
9315             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9316                 return;
9317             i = PTR2IV(SvRV(sv));
9318             sv_unref(sv);
9319             sv_setiv(sv, i);
9320         }
9321         else sv_force_normal_flags(sv, 0);
9322     }
9323     /* Unlike sv_inc we don't have to worry about string-never-numbers
9324        and keeping them magic. But we mustn't warn on punting */
9325     flags = SvFLAGS(sv);
9326     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9327         /* It's publicly an integer, or privately an integer-not-float */
9328 #ifdef PERL_PRESERVE_IVUV
9329       oops_its_int:
9330 #endif
9331         if (SvIsUV(sv)) {
9332             if (SvUVX(sv) == 0) {
9333                 (void)SvIOK_only(sv);
9334                 SvIV_set(sv, -1);
9335             }
9336             else {
9337                 (void)SvIOK_only_UV(sv);
9338                 SvUV_set(sv, SvUVX(sv) - 1);
9339             }   
9340         } else {
9341             if (SvIVX(sv) == IV_MIN) {
9342                 sv_setnv(sv, (NV)IV_MIN);
9343                 goto oops_its_num;
9344             }
9345             else {
9346                 (void)SvIOK_only(sv);
9347                 SvIV_set(sv, SvIVX(sv) - 1);
9348             }   
9349         }
9350         return;
9351     }
9352     if (flags & SVp_NOK) {
9353     oops_its_num:
9354         {
9355             const NV was = SvNVX(sv);
9356             if (LIKELY(!Perl_isinfnan(was)) &&
9357                 NV_OVERFLOWS_INTEGERS_AT &&
9358                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9359                 /* diag_listed_as: Lost precision when %s %f by 1 */
9360                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9361                                "Lost precision when decrementing %" NVff " by 1",
9362                                was);
9363             }
9364             (void)SvNOK_only(sv);
9365             SvNV_set(sv, was - 1.0);
9366             return;
9367         }
9368     }
9369     if (!(flags & SVp_POK)) {
9370         if ((flags & SVTYPEMASK) < SVt_PVIV)
9371             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9372         SvIV_set(sv, -1);
9373         (void)SvIOK_only(sv);
9374         return;
9375     }
9376 #ifdef PERL_PRESERVE_IVUV
9377     {
9378         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9379         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9380             /* Need to try really hard to see if it's an integer.
9381                9.22337203685478e+18 is an integer.
9382                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9383                so $a="9.22337203685478e+18"; $a+0; $a--
9384                needs to be the same as $a="9.22337203685478e+18"; $a--
9385                or we go insane. */
9386         
9387             (void) sv_2iv(sv);
9388             if (SvIOK(sv))
9389                 goto oops_its_int;
9390
9391             /* sv_2iv *should* have made this an NV */
9392             if (flags & SVp_NOK) {
9393                 (void)SvNOK_only(sv);
9394                 SvNV_set(sv, SvNVX(sv) - 1.0);
9395                 return;
9396             }
9397             /* I don't think we can get here. Maybe I should assert this
9398                And if we do get here I suspect that sv_setnv will croak. NWC
9399                Fall through. */
9400             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
9401                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9402         }
9403     }
9404 #endif /* PERL_PRESERVE_IVUV */
9405     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9406 }
9407
9408 /* this define is used to eliminate a chunk of duplicated but shared logic
9409  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9410  * used anywhere but here - yves
9411  */
9412 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9413     STMT_START {      \
9414         SSize_t ix = ++PL_tmps_ix;              \
9415         if (UNLIKELY(ix >= PL_tmps_max))        \
9416             ix = tmps_grow_p(ix);                       \
9417         PL_tmps_stack[ix] = (AnSv); \
9418     } STMT_END
9419
9420 /*
9421 =for apidoc sv_mortalcopy
9422
9423 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9424 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9425 explicit call to FREETMPS, or by an implicit call at places such as
9426 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
9427
9428 =cut
9429 */
9430
9431 /* Make a string that will exist for the duration of the expression
9432  * evaluation.  Actually, it may have to last longer than that, but
9433  * hopefully we won't free it until it has been assigned to a
9434  * permanent location. */
9435
9436 SV *
9437 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9438 {
9439     SV *sv;
9440
9441     if (flags & SV_GMAGIC)
9442         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9443     new_SV(sv);
9444     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9445     PUSH_EXTEND_MORTAL__SV_C(sv);
9446     SvTEMP_on(sv);
9447     return sv;
9448 }
9449
9450 /*
9451 =for apidoc sv_newmortal
9452
9453 Creates a new null SV which is mortal.  The reference count of the SV is
9454 set to 1.  It will be destroyed "soon", either by an explicit call to
9455 FREETMPS, or by an implicit call at places such as statement boundaries.
9456 See also C<sv_mortalcopy> and C<sv_2mortal>.
9457
9458 =cut
9459 */
9460
9461 SV *
9462 Perl_sv_newmortal(pTHX)
9463 {
9464     SV *sv;
9465
9466     new_SV(sv);
9467     SvFLAGS(sv) = SVs_TEMP;
9468     PUSH_EXTEND_MORTAL__SV_C(sv);
9469     return sv;
9470 }
9471
9472
9473 /*
9474 =for apidoc newSVpvn_flags
9475
9476 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9477 characters) into it.  The reference count for the
9478 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9479 string.  You are responsible for ensuring that the source string is at least
9480 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9481 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9482 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9483 returning.  If C<SVf_UTF8> is set, C<s>
9484 is considered to be in UTF-8 and the
9485 C<SVf_UTF8> flag will be set on the new SV.
9486 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9487
9488     #define newSVpvn_utf8(s, len, u)                    \
9489         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9490
9491 =cut
9492 */
9493
9494 SV *
9495 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9496 {
9497     SV *sv;
9498
9499     /* All the flags we don't support must be zero.
9500        And we're new code so I'm going to assert this from the start.  */
9501     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9502     new_SV(sv);
9503     sv_setpvn(sv,s,len);
9504
9505     /* This code used to do a sv_2mortal(), however we now unroll the call to
9506      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9507      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9508      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9509      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9510      * means that we eliminate quite a few steps than it looks - Yves
9511      * (explaining patch by gfx) */
9512
9513     SvFLAGS(sv) |= flags;
9514
9515     if(flags & SVs_TEMP){
9516         PUSH_EXTEND_MORTAL__SV_C(sv);
9517     }
9518
9519     return sv;
9520 }
9521
9522 /*
9523 =for apidoc sv_2mortal
9524
9525 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9526 by an explicit call to FREETMPS, or by an implicit call at places such as
9527 statement boundaries.  SvTEMP() is turned on which means that the SV's
9528 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
9529 and C<sv_mortalcopy>.
9530
9531 =cut
9532 */
9533
9534 SV *
9535 Perl_sv_2mortal(pTHX_ SV *const sv)
9536 {
9537     dVAR;
9538     if (!sv)
9539         return sv;
9540     if (SvIMMORTAL(sv))
9541         return sv;
9542     PUSH_EXTEND_MORTAL__SV_C(sv);
9543     SvTEMP_on(sv);
9544     return sv;
9545 }
9546
9547 /*
9548 =for apidoc newSVpv
9549
9550 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9551 characters) into it.  The reference count for the
9552 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9553 strlen(), (which means if you use this option, that C<s> can't have embedded
9554 C<NUL> characters and has to have a terminating C<NUL> byte).
9555
9556 For efficiency, consider using C<newSVpvn> instead.
9557
9558 =cut
9559 */
9560
9561 SV *
9562 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9563 {
9564     SV *sv;
9565
9566     new_SV(sv);
9567     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9568     return sv;
9569 }
9570
9571 /*
9572 =for apidoc newSVpvn
9573
9574 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9575 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9576 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9577 are responsible for ensuring that the source buffer is at least
9578 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9579 undefined.
9580
9581 =cut
9582 */
9583
9584 SV *
9585 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9586 {
9587     SV *sv;
9588     new_SV(sv);
9589     sv_setpvn(sv,buffer,len);
9590     return sv;
9591 }
9592
9593 /*
9594 =for apidoc newSVhek
9595
9596 Creates a new SV from the hash key structure.  It will generate scalars that
9597 point to the shared string table where possible.  Returns a new (undefined)
9598 SV if the hek is NULL.
9599
9600 =cut
9601 */
9602
9603 SV *
9604 Perl_newSVhek(pTHX_ const HEK *const hek)
9605 {
9606     if (!hek) {
9607         SV *sv;
9608
9609         new_SV(sv);
9610         return sv;
9611     }
9612
9613     if (HEK_LEN(hek) == HEf_SVKEY) {
9614         return newSVsv(*(SV**)HEK_KEY(hek));
9615     } else {
9616         const int flags = HEK_FLAGS(hek);
9617         if (flags & HVhek_WASUTF8) {
9618             /* Trouble :-)
9619                Andreas would like keys he put in as utf8 to come back as utf8
9620             */
9621             STRLEN utf8_len = HEK_LEN(hek);
9622             SV * const sv = newSV_type(SVt_PV);
9623             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9624             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9625             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9626             SvUTF8_on (sv);
9627             return sv;
9628         } else if (flags & HVhek_UNSHARED) {
9629             /* A hash that isn't using shared hash keys has to have
9630                the flag in every key so that we know not to try to call
9631                share_hek_hek on it.  */
9632
9633             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9634             if (HEK_UTF8(hek))
9635                 SvUTF8_on (sv);
9636             return sv;
9637         }
9638         /* This will be overwhelminly the most common case.  */
9639         {
9640             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9641                more efficient than sharepvn().  */
9642             SV *sv;
9643
9644             new_SV(sv);
9645             sv_upgrade(sv, SVt_PV);
9646             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9647             SvCUR_set(sv, HEK_LEN(hek));
9648             SvLEN_set(sv, 0);
9649             SvIsCOW_on(sv);
9650             SvPOK_on(sv);
9651             if (HEK_UTF8(hek))
9652                 SvUTF8_on(sv);
9653             return sv;
9654         }
9655     }
9656 }
9657
9658 /*
9659 =for apidoc newSVpvn_share
9660
9661 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9662 table.  If the string does not already exist in the table, it is
9663 created first.  Turns on the SvIsCOW flag (or READONLY
9664 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9665 is non-zero, that value is used; otherwise the hash is computed.
9666 The string's hash can later be retrieved from the SV
9667 with the C<SvSHARED_HASH()> macro.  The idea here is
9668 that as the string table is used for shared hash keys these strings will have
9669 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9670
9671 =cut
9672 */
9673
9674 SV *
9675 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9676 {
9677     dVAR;
9678     SV *sv;
9679     bool is_utf8 = FALSE;
9680     const char *const orig_src = src;
9681
9682     if (len < 0) {
9683         STRLEN tmplen = -len;
9684         is_utf8 = TRUE;
9685         /* See the note in hv.c:hv_fetch() --jhi */
9686         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9687         len = tmplen;
9688     }
9689     if (!hash)
9690         PERL_HASH(hash, src, len);
9691     new_SV(sv);
9692     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9693        changes here, update it there too.  */
9694     sv_upgrade(sv, SVt_PV);
9695     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9696     SvCUR_set(sv, len);
9697     SvLEN_set(sv, 0);
9698     SvIsCOW_on(sv);
9699     SvPOK_on(sv);
9700     if (is_utf8)
9701         SvUTF8_on(sv);
9702     if (src != orig_src)
9703         Safefree(src);
9704     return sv;
9705 }
9706
9707 /*
9708 =for apidoc newSVpv_share
9709
9710 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9711 string/length pair.
9712
9713 =cut
9714 */
9715
9716 SV *
9717 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9718 {
9719     return newSVpvn_share(src, strlen(src), hash);
9720 }
9721
9722 #if defined(PERL_IMPLICIT_CONTEXT)
9723
9724 /* pTHX_ magic can't cope with varargs, so this is a no-context
9725  * version of the main function, (which may itself be aliased to us).
9726  * Don't access this version directly.
9727  */
9728
9729 SV *
9730 Perl_newSVpvf_nocontext(const char *const pat, ...)
9731 {
9732     dTHX;
9733     SV *sv;
9734     va_list args;
9735
9736     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9737
9738     va_start(args, pat);
9739     sv = vnewSVpvf(pat, &args);
9740     va_end(args);
9741     return sv;
9742 }
9743 #endif
9744
9745 /*
9746 =for apidoc newSVpvf
9747
9748 Creates a new SV and initializes it with the string formatted like
9749 C<sprintf>.
9750
9751 =cut
9752 */
9753
9754 SV *
9755 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9756 {
9757     SV *sv;
9758     va_list args;
9759
9760     PERL_ARGS_ASSERT_NEWSVPVF;
9761
9762     va_start(args, pat);
9763     sv = vnewSVpvf(pat, &args);
9764     va_end(args);
9765     return sv;
9766 }
9767
9768 /* backend for newSVpvf() and newSVpvf_nocontext() */
9769
9770 SV *
9771 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9772 {
9773     SV *sv;
9774
9775     PERL_ARGS_ASSERT_VNEWSVPVF;
9776
9777     new_SV(sv);
9778     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9779     return sv;
9780 }
9781
9782 /*
9783 =for apidoc newSVnv
9784
9785 Creates a new SV and copies a floating point value into it.
9786 The reference count for the SV is set to 1.
9787
9788 =cut
9789 */
9790
9791 SV *
9792 Perl_newSVnv(pTHX_ const NV n)
9793 {
9794     SV *sv;
9795
9796     new_SV(sv);
9797     sv_setnv(sv,n);
9798     return sv;
9799 }
9800
9801 /*
9802 =for apidoc newSViv
9803
9804 Creates a new SV and copies an integer into it.  The reference count for the
9805 SV is set to 1.
9806
9807 =cut
9808 */
9809
9810 SV *
9811 Perl_newSViv(pTHX_ const IV i)
9812 {
9813     SV *sv;
9814
9815     new_SV(sv);
9816
9817     /* Inlining ONLY the small relevant subset of sv_setiv here
9818      * for performance. Makes a significant difference. */
9819
9820     /* We're starting from SVt_FIRST, so provided that's
9821      * actual 0, we don't have to unset any SV type flags
9822      * to promote to SVt_IV. */
9823     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9824
9825     SET_SVANY_FOR_BODYLESS_IV(sv);
9826     SvFLAGS(sv) |= SVt_IV;
9827     (void)SvIOK_on(sv);
9828
9829     SvIV_set(sv, i);
9830     SvTAINT(sv);
9831
9832     return sv;
9833 }
9834
9835 /*
9836 =for apidoc newSVuv
9837
9838 Creates a new SV and copies an unsigned integer into it.
9839 The reference count for the SV is set to 1.
9840
9841 =cut
9842 */
9843
9844 SV *
9845 Perl_newSVuv(pTHX_ const UV u)
9846 {
9847     SV *sv;
9848
9849     /* Inlining ONLY the small relevant subset of sv_setuv here
9850      * for performance. Makes a significant difference. */
9851
9852     /* Using ivs is more efficient than using uvs - see sv_setuv */
9853     if (u <= (UV)IV_MAX) {
9854         return newSViv((IV)u);
9855     }
9856
9857     new_SV(sv);
9858
9859     /* We're starting from SVt_FIRST, so provided that's
9860      * actual 0, we don't have to unset any SV type flags
9861      * to promote to SVt_IV. */
9862     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9863
9864     SET_SVANY_FOR_BODYLESS_IV(sv);
9865     SvFLAGS(sv) |= SVt_IV;
9866     (void)SvIOK_on(sv);
9867     (void)SvIsUV_on(sv);
9868
9869     SvUV_set(sv, u);
9870     SvTAINT(sv);
9871
9872     return sv;
9873 }
9874
9875 /*
9876 =for apidoc newSV_type
9877
9878 Creates a new SV, of the type specified.  The reference count for the new SV
9879 is set to 1.
9880
9881 =cut
9882 */
9883
9884 SV *
9885 Perl_newSV_type(pTHX_ const svtype type)
9886 {
9887     SV *sv;
9888
9889     new_SV(sv);
9890     ASSUME(SvTYPE(sv) == SVt_FIRST);
9891     if(type != SVt_FIRST)
9892         sv_upgrade(sv, type);
9893     return sv;
9894 }
9895
9896 /*
9897 =for apidoc newRV_noinc
9898
9899 Creates an RV wrapper for an SV.  The reference count for the original
9900 SV is B<not> incremented.
9901
9902 =cut
9903 */
9904
9905 SV *
9906 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9907 {
9908     SV *sv;
9909
9910     PERL_ARGS_ASSERT_NEWRV_NOINC;
9911
9912     new_SV(sv);
9913
9914     /* We're starting from SVt_FIRST, so provided that's
9915      * actual 0, we don't have to unset any SV type flags
9916      * to promote to SVt_IV. */
9917     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9918
9919     SET_SVANY_FOR_BODYLESS_IV(sv);
9920     SvFLAGS(sv) |= SVt_IV;
9921     SvROK_on(sv);
9922     SvIV_set(sv, 0);
9923
9924     SvTEMP_off(tmpRef);
9925     SvRV_set(sv, tmpRef);
9926
9927     return sv;
9928 }
9929
9930 /* newRV_inc is the official function name to use now.
9931  * newRV_inc is in fact #defined to newRV in sv.h
9932  */
9933
9934 SV *
9935 Perl_newRV(pTHX_ SV *const sv)
9936 {
9937     PERL_ARGS_ASSERT_NEWRV;
9938
9939     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9940 }
9941
9942 /*
9943 =for apidoc newSVsv
9944
9945 Creates a new SV which is an exact duplicate of the original SV.
9946 (Uses C<sv_setsv>.)
9947
9948 =cut
9949 */
9950
9951 SV *
9952 Perl_newSVsv(pTHX_ SV *const old)
9953 {
9954     SV *sv;
9955
9956     if (!old)
9957         return NULL;
9958     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9959         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9960         return NULL;
9961     }
9962     /* Do this here, otherwise we leak the new SV if this croaks. */
9963     SvGETMAGIC(old);
9964     new_SV(sv);
9965     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9966        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9967     sv_setsv_flags(sv, old, SV_NOSTEAL);
9968     return sv;
9969 }
9970
9971 /*
9972 =for apidoc sv_reset
9973
9974 Underlying implementation for the C<reset> Perl function.
9975 Note that the perl-level function is vaguely deprecated.
9976
9977 =cut
9978 */
9979
9980 void
9981 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9982 {
9983     PERL_ARGS_ASSERT_SV_RESET;
9984
9985     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9986 }
9987
9988 void
9989 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9990 {
9991     char todo[PERL_UCHAR_MAX+1];
9992     const char *send;
9993
9994     if (!stash || SvTYPE(stash) != SVt_PVHV)
9995         return;
9996
9997     if (!s) {           /* reset ?? searches */
9998         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9999         if (mg) {
10000             const U32 count = mg->mg_len / sizeof(PMOP**);
10001             PMOP **pmp = (PMOP**) mg->mg_ptr;
10002             PMOP *const *const end = pmp + count;
10003
10004             while (pmp < end) {
10005 #ifdef USE_ITHREADS
10006                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
10007 #else
10008                 (*pmp)->op_pmflags &= ~PMf_USED;
10009 #endif
10010                 ++pmp;
10011             }
10012         }
10013         return;
10014     }
10015
10016     /* reset variables */
10017
10018     if (!HvARRAY(stash))
10019         return;
10020
10021     Zero(todo, 256, char);
10022     send = s + len;
10023     while (s < send) {
10024         I32 max;
10025         I32 i = (unsigned char)*s;
10026         if (s[1] == '-') {
10027             s += 2;
10028         }
10029         max = (unsigned char)*s++;
10030         for ( ; i <= max; i++) {
10031             todo[i] = 1;
10032         }
10033         for (i = 0; i <= (I32) HvMAX(stash); i++) {
10034             HE *entry;
10035             for (entry = HvARRAY(stash)[i];
10036                  entry;
10037                  entry = HeNEXT(entry))
10038             {
10039                 GV *gv;
10040                 SV *sv;
10041
10042                 if (!todo[(U8)*HeKEY(entry)])
10043                     continue;
10044                 gv = MUTABLE_GV(HeVAL(entry));
10045                 sv = GvSV(gv);
10046                 if (sv && !SvREADONLY(sv)) {
10047                     SV_CHECK_THINKFIRST_COW_DROP(sv);
10048                     if (!isGV(sv)) SvOK_off(sv);
10049                 }
10050                 if (GvAV(gv)) {
10051                     av_clear(GvAV(gv));
10052                 }
10053                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
10054                     hv_clear(GvHV(gv));
10055                 }
10056             }
10057         }
10058     }
10059 }
10060
10061 /*
10062 =for apidoc sv_2io
10063
10064 Using various gambits, try to get an IO from an SV: the IO slot if its a
10065 GV; or the recursive result if we're an RV; or the IO slot of the symbol
10066 named after the PV if we're a string.
10067
10068 'Get' magic is ignored on the sv passed in, but will be called on
10069 C<SvRV(sv)> if sv is an RV.
10070
10071 =cut
10072 */
10073
10074 IO*
10075 Perl_sv_2io(pTHX_ SV *const sv)
10076 {
10077     IO* io;
10078     GV* gv;
10079
10080     PERL_ARGS_ASSERT_SV_2IO;
10081
10082     switch (SvTYPE(sv)) {
10083     case SVt_PVIO:
10084         io = MUTABLE_IO(sv);
10085         break;
10086     case SVt_PVGV:
10087     case SVt_PVLV:
10088         if (isGV_with_GP(sv)) {
10089             gv = MUTABLE_GV(sv);
10090             io = GvIO(gv);
10091             if (!io)
10092                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
10093                                     HEKfARG(GvNAME_HEK(gv)));
10094             break;
10095         }
10096         /* FALLTHROUGH */
10097     default:
10098         if (!SvOK(sv))
10099             Perl_croak(aTHX_ PL_no_usym, "filehandle");
10100         if (SvROK(sv)) {
10101             SvGETMAGIC(SvRV(sv));
10102             return sv_2io(SvRV(sv));
10103         }
10104         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
10105         if (gv)
10106             io = GvIO(gv);
10107         else
10108             io = 0;
10109         if (!io) {
10110             SV *newsv = sv;
10111             if (SvGMAGICAL(sv)) {
10112                 newsv = sv_newmortal();
10113                 sv_setsv_nomg(newsv, sv);
10114             }
10115             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
10116         }
10117         break;
10118     }
10119     return io;
10120 }
10121
10122 /*
10123 =for apidoc sv_2cv
10124
10125 Using various gambits, try to get a CV from an SV; in addition, try if
10126 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
10127 The flags in C<lref> are passed to gv_fetchsv.
10128
10129 =cut
10130 */
10131
10132 CV *
10133 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
10134 {
10135     GV *gv = NULL;
10136     CV *cv = NULL;
10137
10138     PERL_ARGS_ASSERT_SV_2CV;
10139
10140     if (!sv) {
10141         *st = NULL;
10142         *gvp = NULL;
10143         return NULL;
10144     }
10145     switch (SvTYPE(sv)) {
10146     case SVt_PVCV:
10147         *st = CvSTASH(sv);
10148         *gvp = NULL;
10149         return MUTABLE_CV(sv);
10150     case SVt_PVHV:
10151     case SVt_PVAV:
10152         *st = NULL;
10153         *gvp = NULL;
10154         return NULL;
10155     default:
10156         SvGETMAGIC(sv);
10157         if (SvROK(sv)) {
10158             if (SvAMAGIC(sv))
10159                 sv = amagic_deref_call(sv, to_cv_amg);
10160
10161             sv = SvRV(sv);
10162             if (SvTYPE(sv) == SVt_PVCV) {
10163                 cv = MUTABLE_CV(sv);
10164                 *gvp = NULL;
10165                 *st = CvSTASH(cv);
10166                 return cv;
10167             }
10168             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
10169                 gv = MUTABLE_GV(sv);
10170             else
10171                 Perl_croak(aTHX_ "Not a subroutine reference");
10172         }
10173         else if (isGV_with_GP(sv)) {
10174             gv = MUTABLE_GV(sv);
10175         }
10176         else {
10177             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
10178         }
10179         *gvp = gv;
10180         if (!gv) {
10181             *st = NULL;
10182             return NULL;
10183         }
10184         /* Some flags to gv_fetchsv mean don't really create the GV  */
10185         if (!isGV_with_GP(gv)) {
10186             *st = NULL;
10187             return NULL;
10188         }
10189         *st = GvESTASH(gv);
10190         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10191             /* XXX this is probably not what they think they're getting.
10192              * It has the same effect as "sub name;", i.e. just a forward
10193              * declaration! */
10194             newSTUB(gv,0);
10195         }
10196         return GvCVu(gv);
10197     }
10198 }
10199
10200 /*
10201 =for apidoc sv_true
10202
10203 Returns true if the SV has a true value by Perl's rules.
10204 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10205 instead use an in-line version.
10206
10207 =cut
10208 */
10209
10210 I32
10211 Perl_sv_true(pTHX_ SV *const sv)
10212 {
10213     if (!sv)
10214         return 0;
10215     if (SvPOK(sv)) {
10216         const XPV* const tXpv = (XPV*)SvANY(sv);
10217         if (tXpv &&
10218                 (tXpv->xpv_cur > 1 ||
10219                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10220             return 1;
10221         else
10222             return 0;
10223     }
10224     else {
10225         if (SvIOK(sv))
10226             return SvIVX(sv) != 0;
10227         else {
10228             if (SvNOK(sv))
10229                 return SvNVX(sv) != 0.0;
10230             else
10231                 return sv_2bool(sv);
10232         }
10233     }
10234 }
10235
10236 /*
10237 =for apidoc sv_pvn_force
10238
10239 Get a sensible string out of the SV somehow.
10240 A private implementation of the C<SvPV_force> macro for compilers which
10241 can't cope with complex macro expressions.  Always use the macro instead.
10242
10243 =for apidoc sv_pvn_force_flags
10244
10245 Get a sensible string out of the SV somehow.
10246 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10247 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10248 implemented in terms of this function.
10249 You normally want to use the various wrapper macros instead: see
10250 C<SvPV_force> and C<SvPV_force_nomg>
10251
10252 =cut
10253 */
10254
10255 char *
10256 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10257 {
10258     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10259
10260     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10261     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10262         sv_force_normal_flags(sv, 0);
10263
10264     if (SvPOK(sv)) {
10265         if (lp)
10266             *lp = SvCUR(sv);
10267     }
10268     else {
10269         char *s;
10270         STRLEN len;
10271  
10272         if (SvTYPE(sv) > SVt_PVLV
10273             || isGV_with_GP(sv))
10274             /* diag_listed_as: Can't coerce %s to %s in %s */
10275             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10276                 OP_DESC(PL_op));
10277         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10278         if (!s) {
10279           s = (char *)"";
10280         }
10281         if (lp)
10282             *lp = len;
10283
10284         if (SvTYPE(sv) < SVt_PV ||
10285             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10286             if (SvROK(sv))
10287                 sv_unref(sv);
10288             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10289             SvGROW(sv, len + 1);
10290             Move(s,SvPVX(sv),len,char);
10291             SvCUR_set(sv, len);
10292             SvPVX(sv)[len] = '\0';
10293         }
10294         if (!SvPOK(sv)) {
10295             SvPOK_on(sv);               /* validate pointer */
10296             SvTAINT(sv);
10297             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
10298                                   PTR2UV(sv),SvPVX_const(sv)));
10299         }
10300     }
10301     (void)SvPOK_only_UTF8(sv);
10302     return SvPVX_mutable(sv);
10303 }
10304
10305 /*
10306 =for apidoc sv_pvbyten_force
10307
10308 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10309 instead.
10310
10311 =cut
10312 */
10313
10314 char *
10315 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10316 {
10317     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10318
10319     sv_pvn_force(sv,lp);
10320     sv_utf8_downgrade(sv,0);
10321     *lp = SvCUR(sv);
10322     return SvPVX(sv);
10323 }
10324
10325 /*
10326 =for apidoc sv_pvutf8n_force
10327
10328 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10329 instead.
10330
10331 =cut
10332 */
10333
10334 char *
10335 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10336 {
10337     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10338
10339     sv_pvn_force(sv,0);
10340     sv_utf8_upgrade_nomg(sv);
10341     *lp = SvCUR(sv);
10342     return SvPVX(sv);
10343 }
10344
10345 /*
10346 =for apidoc sv_reftype
10347
10348 Returns a string describing what the SV is a reference to.
10349
10350 =cut
10351 */
10352
10353 const char *
10354 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10355 {
10356     PERL_ARGS_ASSERT_SV_REFTYPE;
10357     if (ob && SvOBJECT(sv)) {
10358         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10359     }
10360     else {
10361         /* WARNING - There is code, for instance in mg.c, that assumes that
10362          * the only reason that sv_reftype(sv,0) would return a string starting
10363          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10364          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10365          * this routine inside other subs, and it saves time.
10366          * Do not change this assumption without searching for "dodgy type check" in
10367          * the code.
10368          * - Yves */
10369         switch (SvTYPE(sv)) {
10370         case SVt_NULL:
10371         case SVt_IV:
10372         case SVt_NV:
10373         case SVt_PV:
10374         case SVt_PVIV:
10375         case SVt_PVNV:
10376         case SVt_PVMG:
10377                                 if (SvVOK(sv))
10378                                     return "VSTRING";
10379                                 if (SvROK(sv))
10380                                     return "REF";
10381                                 else
10382                                     return "SCALAR";
10383
10384         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10385                                 /* tied lvalues should appear to be
10386                                  * scalars for backwards compatibility */
10387                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10388                                     ? "SCALAR" : "LVALUE");
10389         case SVt_PVAV:          return "ARRAY";
10390         case SVt_PVHV:          return "HASH";
10391         case SVt_PVCV:          return "CODE";
10392         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10393                                     ? "GLOB" : "SCALAR");
10394         case SVt_PVFM:          return "FORMAT";
10395         case SVt_PVIO:          return "IO";
10396         case SVt_INVLIST:       return "INVLIST";
10397         case SVt_REGEXP:        return "REGEXP";
10398         default:                return "UNKNOWN";
10399         }
10400     }
10401 }
10402
10403 /*
10404 =for apidoc sv_ref
10405
10406 Returns a SV describing what the SV passed in is a reference to.
10407
10408 =cut
10409 */
10410
10411 SV *
10412 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10413 {
10414     PERL_ARGS_ASSERT_SV_REF;
10415
10416     if (!dst)
10417         dst = sv_newmortal();
10418
10419     if (ob && SvOBJECT(sv)) {
10420         HvNAME_get(SvSTASH(sv))
10421                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10422                     : sv_setpvn(dst, "__ANON__", 8);
10423     }
10424     else {
10425         const char * reftype = sv_reftype(sv, 0);
10426         sv_setpv(dst, reftype);
10427     }
10428     return dst;
10429 }
10430
10431 /*
10432 =for apidoc sv_isobject
10433
10434 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10435 object.  If the SV is not an RV, or if the object is not blessed, then this
10436 will return false.
10437
10438 =cut
10439 */
10440
10441 int
10442 Perl_sv_isobject(pTHX_ SV *sv)
10443 {
10444     if (!sv)
10445         return 0;
10446     SvGETMAGIC(sv);
10447     if (!SvROK(sv))
10448         return 0;
10449     sv = SvRV(sv);
10450     if (!SvOBJECT(sv))
10451         return 0;
10452     return 1;
10453 }
10454
10455 /*
10456 =for apidoc sv_isa
10457
10458 Returns a boolean indicating whether the SV is blessed into the specified
10459 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10460 an inheritance relationship.
10461
10462 =cut
10463 */
10464
10465 int
10466 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10467 {
10468     const char *hvname;
10469
10470     PERL_ARGS_ASSERT_SV_ISA;
10471
10472     if (!sv)
10473         return 0;
10474     SvGETMAGIC(sv);
10475     if (!SvROK(sv))
10476         return 0;
10477     sv = SvRV(sv);
10478     if (!SvOBJECT(sv))
10479         return 0;
10480     hvname = HvNAME_get(SvSTASH(sv));
10481     if (!hvname)
10482         return 0;
10483
10484     return strEQ(hvname, name);
10485 }
10486
10487 /*
10488 =for apidoc newSVrv
10489
10490 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10491 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10492 SV will be blessed in the specified package.  The new SV is returned and its
10493 reference count is 1.  The reference count 1 is owned by C<rv>.
10494
10495 =cut
10496 */
10497
10498 SV*
10499 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10500 {
10501     SV *sv;
10502
10503     PERL_ARGS_ASSERT_NEWSVRV;
10504
10505     new_SV(sv);
10506
10507     SV_CHECK_THINKFIRST_COW_DROP(rv);
10508
10509     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10510         const U32 refcnt = SvREFCNT(rv);
10511         SvREFCNT(rv) = 0;
10512         sv_clear(rv);
10513         SvFLAGS(rv) = 0;
10514         SvREFCNT(rv) = refcnt;
10515
10516         sv_upgrade(rv, SVt_IV);
10517     } else if (SvROK(rv)) {
10518         SvREFCNT_dec(SvRV(rv));
10519     } else {
10520         prepare_SV_for_RV(rv);
10521     }
10522
10523     SvOK_off(rv);
10524     SvRV_set(rv, sv);
10525     SvROK_on(rv);
10526
10527     if (classname) {
10528         HV* const stash = gv_stashpv(classname, GV_ADD);
10529         (void)sv_bless(rv, stash);
10530     }
10531     return sv;
10532 }
10533
10534 SV *
10535 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10536 {
10537     SV * const lv = newSV_type(SVt_PVLV);
10538     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10539     LvTYPE(lv) = 'y';
10540     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10541     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10542     LvSTARGOFF(lv) = ix;
10543     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10544     return lv;
10545 }
10546
10547 /*
10548 =for apidoc sv_setref_pv
10549
10550 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10551 argument will be upgraded to an RV.  That RV will be modified to point to
10552 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
10553 into the SV.  The C<classname> argument indicates the package for the
10554 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10555 will have a reference count of 1, and the RV will be returned.
10556
10557 Do not use with other Perl types such as HV, AV, SV, CV, because those
10558 objects will become corrupted by the pointer copy process.
10559
10560 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10561
10562 =cut
10563 */
10564
10565 SV*
10566 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10567 {
10568     PERL_ARGS_ASSERT_SV_SETREF_PV;
10569
10570     if (!pv) {
10571         sv_setsv(rv, &PL_sv_undef);
10572         SvSETMAGIC(rv);
10573     }
10574     else
10575         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10576     return rv;
10577 }
10578
10579 /*
10580 =for apidoc sv_setref_iv
10581
10582 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10583 argument will be upgraded to an RV.  That RV will be modified to point to
10584 the new SV.  The C<classname> argument indicates the package for the
10585 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10586 will have a reference count of 1, and the RV will be returned.
10587
10588 =cut
10589 */
10590
10591 SV*
10592 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10593 {
10594     PERL_ARGS_ASSERT_SV_SETREF_IV;
10595
10596     sv_setiv(newSVrv(rv,classname), iv);
10597     return rv;
10598 }
10599
10600 /*
10601 =for apidoc sv_setref_uv
10602
10603 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10604 argument will be upgraded to an RV.  That RV will be modified to point to
10605 the new SV.  The C<classname> argument indicates the package for the
10606 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10607 will have a reference count of 1, and the RV will be returned.
10608
10609 =cut
10610 */
10611
10612 SV*
10613 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10614 {
10615     PERL_ARGS_ASSERT_SV_SETREF_UV;
10616
10617     sv_setuv(newSVrv(rv,classname), uv);
10618     return rv;
10619 }
10620
10621 /*
10622 =for apidoc sv_setref_nv
10623
10624 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10625 argument will be upgraded to an RV.  That RV will be modified to point to
10626 the new SV.  The C<classname> argument indicates the package for the
10627 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10628 will have a reference count of 1, and the RV will be returned.
10629
10630 =cut
10631 */
10632
10633 SV*
10634 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10635 {
10636     PERL_ARGS_ASSERT_SV_SETREF_NV;
10637
10638     sv_setnv(newSVrv(rv,classname), nv);
10639     return rv;
10640 }
10641
10642 /*
10643 =for apidoc sv_setref_pvn
10644
10645 Copies a string into a new SV, optionally blessing the SV.  The length of the
10646 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10647 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10648 argument indicates the package for the blessing.  Set C<classname> to
10649 C<NULL> to avoid the blessing.  The new SV will have a reference count
10650 of 1, and the RV will be returned.
10651
10652 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10653
10654 =cut
10655 */
10656
10657 SV*
10658 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10659                    const char *const pv, const STRLEN n)
10660 {
10661     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10662
10663     sv_setpvn(newSVrv(rv,classname), pv, n);
10664     return rv;
10665 }
10666
10667 /*
10668 =for apidoc sv_bless
10669
10670 Blesses an SV into a specified package.  The SV must be an RV.  The package
10671 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10672 of the SV is unaffected.
10673
10674 =cut
10675 */
10676
10677 SV*
10678 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10679 {
10680     SV *tmpRef;
10681     HV *oldstash = NULL;
10682
10683     PERL_ARGS_ASSERT_SV_BLESS;
10684
10685     SvGETMAGIC(sv);
10686     if (!SvROK(sv))
10687         Perl_croak(aTHX_ "Can't bless non-reference value");
10688     tmpRef = SvRV(sv);
10689     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10690         if (SvREADONLY(tmpRef))
10691             Perl_croak_no_modify();
10692         if (SvOBJECT(tmpRef)) {
10693             oldstash = SvSTASH(tmpRef);
10694         }
10695     }
10696     SvOBJECT_on(tmpRef);
10697     SvUPGRADE(tmpRef, SVt_PVMG);
10698     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10699     SvREFCNT_dec(oldstash);
10700
10701     if(SvSMAGICAL(tmpRef))
10702         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10703             mg_set(tmpRef);
10704
10705
10706
10707     return sv;
10708 }
10709
10710 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10711  * as it is after unglobbing it.
10712  */
10713
10714 PERL_STATIC_INLINE void
10715 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10716 {
10717     void *xpvmg;
10718     HV *stash;
10719     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10720
10721     PERL_ARGS_ASSERT_SV_UNGLOB;
10722
10723     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10724     SvFAKE_off(sv);
10725     if (!(flags & SV_COW_DROP_PV))
10726         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10727
10728     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10729     if (GvGP(sv)) {
10730         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10731            && HvNAME_get(stash))
10732             mro_method_changed_in(stash);
10733         gp_free(MUTABLE_GV(sv));
10734     }
10735     if (GvSTASH(sv)) {
10736         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10737         GvSTASH(sv) = NULL;
10738     }
10739     GvMULTI_off(sv);
10740     if (GvNAME_HEK(sv)) {
10741         unshare_hek(GvNAME_HEK(sv));
10742     }
10743     isGV_with_GP_off(sv);
10744
10745     if(SvTYPE(sv) == SVt_PVGV) {
10746         /* need to keep SvANY(sv) in the right arena */
10747         xpvmg = new_XPVMG();
10748         StructCopy(SvANY(sv), xpvmg, XPVMG);
10749         del_XPVGV(SvANY(sv));
10750         SvANY(sv) = xpvmg;
10751
10752         SvFLAGS(sv) &= ~SVTYPEMASK;
10753         SvFLAGS(sv) |= SVt_PVMG;
10754     }
10755
10756     /* Intentionally not calling any local SET magic, as this isn't so much a
10757        set operation as merely an internal storage change.  */
10758     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10759     else sv_setsv_flags(sv, temp, 0);
10760
10761     if ((const GV *)sv == PL_last_in_gv)
10762         PL_last_in_gv = NULL;
10763     else if ((const GV *)sv == PL_statgv)
10764         PL_statgv = NULL;
10765 }
10766
10767 /*
10768 =for apidoc sv_unref_flags
10769
10770 Unsets the RV status of the SV, and decrements the reference count of
10771 whatever was being referenced by the RV.  This can almost be thought of
10772 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10773 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10774 (otherwise the decrementing is conditional on the reference count being
10775 different from one or the reference being a readonly SV).
10776 See C<SvROK_off>.
10777
10778 =cut
10779 */
10780
10781 void
10782 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10783 {
10784     SV* const target = SvRV(ref);
10785
10786     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10787
10788     if (SvWEAKREF(ref)) {
10789         sv_del_backref(target, ref);
10790         SvWEAKREF_off(ref);
10791         SvRV_set(ref, NULL);
10792         return;
10793     }
10794     SvRV_set(ref, NULL);
10795     SvROK_off(ref);
10796     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10797        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10798     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10799         SvREFCNT_dec_NN(target);
10800     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10801         sv_2mortal(target);     /* Schedule for freeing later */
10802 }
10803
10804 /*
10805 =for apidoc sv_untaint
10806
10807 Untaint an SV.  Use C<SvTAINTED_off> instead.
10808
10809 =cut
10810 */
10811
10812 void
10813 Perl_sv_untaint(pTHX_ SV *const sv)
10814 {
10815     PERL_ARGS_ASSERT_SV_UNTAINT;
10816     PERL_UNUSED_CONTEXT;
10817
10818     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10819         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10820         if (mg)
10821             mg->mg_len &= ~1;
10822     }
10823 }
10824
10825 /*
10826 =for apidoc sv_tainted
10827
10828 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10829
10830 =cut
10831 */
10832
10833 bool
10834 Perl_sv_tainted(pTHX_ SV *const sv)
10835 {
10836     PERL_ARGS_ASSERT_SV_TAINTED;
10837     PERL_UNUSED_CONTEXT;
10838
10839     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10840         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10841         if (mg && (mg->mg_len & 1) )
10842             return TRUE;
10843     }
10844     return FALSE;
10845 }
10846
10847 /*
10848 =for apidoc sv_setpviv
10849
10850 Copies an integer into the given SV, also updating its string value.
10851 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10852
10853 =cut
10854 */
10855
10856 void
10857 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10858 {
10859     char buf[TYPE_CHARS(UV)];
10860     char *ebuf;
10861     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10862
10863     PERL_ARGS_ASSERT_SV_SETPVIV;
10864
10865     sv_setpvn(sv, ptr, ebuf - ptr);
10866 }
10867
10868 /*
10869 =for apidoc sv_setpviv_mg
10870
10871 Like C<sv_setpviv>, but also handles 'set' magic.
10872
10873 =cut
10874 */
10875
10876 void
10877 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10878 {
10879     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10880
10881     sv_setpviv(sv, iv);
10882     SvSETMAGIC(sv);
10883 }
10884
10885 #if defined(PERL_IMPLICIT_CONTEXT)
10886
10887 /* pTHX_ magic can't cope with varargs, so this is a no-context
10888  * version of the main function, (which may itself be aliased to us).
10889  * Don't access this version directly.
10890  */
10891
10892 void
10893 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10894 {
10895     dTHX;
10896     va_list args;
10897
10898     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10899
10900     va_start(args, pat);
10901     sv_vsetpvf(sv, pat, &args);
10902     va_end(args);
10903 }
10904
10905 /* pTHX_ magic can't cope with varargs, so this is a no-context
10906  * version of the main function, (which may itself be aliased to us).
10907  * Don't access this version directly.
10908  */
10909
10910 void
10911 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10912 {
10913     dTHX;
10914     va_list args;
10915
10916     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10917
10918     va_start(args, pat);
10919     sv_vsetpvf_mg(sv, pat, &args);
10920     va_end(args);
10921 }
10922 #endif
10923
10924 /*
10925 =for apidoc sv_setpvf
10926
10927 Works like C<sv_catpvf> but copies the text into the SV instead of
10928 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10929
10930 =cut
10931 */
10932
10933 void
10934 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10935 {
10936     va_list args;
10937
10938     PERL_ARGS_ASSERT_SV_SETPVF;
10939
10940     va_start(args, pat);
10941     sv_vsetpvf(sv, pat, &args);
10942     va_end(args);
10943 }
10944
10945 /*
10946 =for apidoc sv_vsetpvf
10947
10948 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10949 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10950
10951 Usually used via its frontend C<sv_setpvf>.
10952
10953 =cut
10954 */
10955
10956 void
10957 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10958 {
10959     PERL_ARGS_ASSERT_SV_VSETPVF;
10960
10961     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10962 }
10963
10964 /*
10965 =for apidoc sv_setpvf_mg
10966
10967 Like C<sv_setpvf>, but also handles 'set' magic.
10968
10969 =cut
10970 */
10971
10972 void
10973 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10974 {
10975     va_list args;
10976
10977     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10978
10979     va_start(args, pat);
10980     sv_vsetpvf_mg(sv, pat, &args);
10981     va_end(args);
10982 }
10983
10984 /*
10985 =for apidoc sv_vsetpvf_mg
10986
10987 Like C<sv_vsetpvf>, but also handles 'set' magic.
10988
10989 Usually used via its frontend C<sv_setpvf_mg>.
10990
10991 =cut
10992 */
10993
10994 void
10995 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10996 {
10997     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10998
10999     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11000     SvSETMAGIC(sv);
11001 }
11002
11003 #if defined(PERL_IMPLICIT_CONTEXT)
11004
11005 /* pTHX_ magic can't cope with varargs, so this is a no-context
11006  * version of the main function, (which may itself be aliased to us).
11007  * Don't access this version directly.
11008  */
11009
11010 void
11011 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
11012 {
11013     dTHX;
11014     va_list args;
11015
11016     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
11017
11018     va_start(args, pat);
11019     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11020     va_end(args);
11021 }
11022
11023 /* pTHX_ magic can't cope with varargs, so this is a no-context
11024  * version of the main function, (which may itself be aliased to us).
11025  * Don't access this version directly.
11026  */
11027
11028 void
11029 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
11030 {
11031     dTHX;
11032     va_list args;
11033
11034     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
11035
11036     va_start(args, pat);
11037     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11038     SvSETMAGIC(sv);
11039     va_end(args);
11040 }
11041 #endif
11042
11043 /*
11044 =for apidoc sv_catpvf
11045
11046 Processes its arguments like C<sprintf> and appends the formatted
11047 output to an SV.  If the appended data contains "wide" characters
11048 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
11049 and characters >255 formatted with %c), the original SV might get
11050 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
11051 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
11052 valid UTF-8; if the original SV was bytes, the pattern should be too.
11053
11054 =cut */
11055
11056 void
11057 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
11058 {
11059     va_list args;
11060
11061     PERL_ARGS_ASSERT_SV_CATPVF;
11062
11063     va_start(args, pat);
11064     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11065     va_end(args);
11066 }
11067
11068 /*
11069 =for apidoc sv_vcatpvf
11070
11071 Processes its arguments like C<vsprintf> and appends the formatted output
11072 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
11073
11074 Usually used via its frontend C<sv_catpvf>.
11075
11076 =cut
11077 */
11078
11079 void
11080 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11081 {
11082     PERL_ARGS_ASSERT_SV_VCATPVF;
11083
11084     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11085 }
11086
11087 /*
11088 =for apidoc sv_catpvf_mg
11089
11090 Like C<sv_catpvf>, but also handles 'set' magic.
11091
11092 =cut
11093 */
11094
11095 void
11096 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
11097 {
11098     va_list args;
11099
11100     PERL_ARGS_ASSERT_SV_CATPVF_MG;
11101
11102     va_start(args, pat);
11103     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11104     SvSETMAGIC(sv);
11105     va_end(args);
11106 }
11107
11108 /*
11109 =for apidoc sv_vcatpvf_mg
11110
11111 Like C<sv_vcatpvf>, but also handles 'set' magic.
11112
11113 Usually used via its frontend C<sv_catpvf_mg>.
11114
11115 =cut
11116 */
11117
11118 void
11119 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11120 {
11121     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
11122
11123     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11124     SvSETMAGIC(sv);
11125 }
11126
11127 /*
11128 =for apidoc sv_vsetpvfn
11129
11130 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11131 appending it.
11132
11133 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11134
11135 =cut
11136 */
11137
11138 void
11139 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11140                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
11141 {
11142     PERL_ARGS_ASSERT_SV_VSETPVFN;
11143
11144     sv_setpvs(sv, "");
11145     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
11146 }
11147
11148
11149 /*
11150  * Warn of missing argument to sprintf, and then return a defined value
11151  * to avoid inappropriate "use of uninit" warnings [perl #71000].
11152  */
11153 STATIC SV*
11154 S_vcatpvfn_missing_argument(pTHX) {
11155     if (ckWARN(WARN_MISSING)) {
11156         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11157                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11158     }
11159     return &PL_sv_no;
11160 }
11161
11162
11163 STATIC I32
11164 S_expect_number(pTHX_ char **const pattern)
11165 {
11166     I32 var = 0;
11167
11168     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11169
11170     switch (**pattern) {
11171     case '1': case '2': case '3':
11172     case '4': case '5': case '6':
11173     case '7': case '8': case '9':
11174         var = *(*pattern)++ - '0';
11175         while (isDIGIT(**pattern)) {
11176             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
11177             if (tmp < var)
11178                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11179             var = tmp;
11180         }
11181     }
11182     return var;
11183 }
11184
11185 STATIC char *
11186 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11187 {
11188     const int neg = nv < 0;
11189     UV uv;
11190
11191     PERL_ARGS_ASSERT_F0CONVERT;
11192
11193     if (UNLIKELY(Perl_isinfnan(nv))) {
11194         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 'g', 0, 0);
11195         *len = n;
11196         return endbuf - n;
11197     }
11198     if (neg)
11199         nv = -nv;
11200     if (nv < UV_MAX) {
11201         char *p = endbuf;
11202         nv += 0.5;
11203         uv = (UV)nv;
11204         if (uv & 1 && uv == nv)
11205             uv--;                       /* Round to even */
11206         do {
11207             const unsigned dig = uv % 10;
11208             *--p = '0' + dig;
11209         } while (uv /= 10);
11210         if (neg)
11211             *--p = '-';
11212         *len = endbuf - p;
11213         return p;
11214     }
11215     return NULL;
11216 }
11217
11218
11219 /*
11220 =for apidoc sv_vcatpvfn
11221
11222 =for apidoc sv_vcatpvfn_flags
11223
11224 Processes its arguments like C<vsprintf> and appends the formatted output
11225 to an SV.  Uses an array of SVs if the C style variable argument list is
11226 missing (NULL).  When running with taint checks enabled, indicates via
11227 C<maybe_tainted> if results are untrustworthy (often due to the use of
11228 locales).
11229
11230 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
11231
11232 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11233
11234 =cut
11235 */
11236
11237 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
11238                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
11239                         vec_utf8 = DO_UTF8(vecsv);
11240
11241 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11242
11243 void
11244 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11245                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
11246 {
11247     PERL_ARGS_ASSERT_SV_VCATPVFN;
11248
11249     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11250 }
11251
11252 void
11253 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11254                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11255                        const U32 flags)
11256 {
11257     char *p;
11258     char *q;
11259     const char *patend;
11260     STRLEN origlen;
11261     I32 svix = 0;
11262     static const char nullstr[] = "(null)";
11263     SV *argsv = NULL;
11264     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11265     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11266     SV *nsv = NULL;
11267     /* Times 4: a decimal digit takes more than 3 binary digits.
11268      * NV_DIG: mantissa takes than many decimal digits.
11269      * Plus 32: Playing safe. */
11270     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11271     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11272     bool hexfp = FALSE; /* hexadecimal floating point? */
11273
11274     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
11275
11276     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11277     PERL_UNUSED_ARG(maybe_tainted);
11278
11279     if (flags & SV_GMAGIC)
11280         SvGETMAGIC(sv);
11281
11282     /* no matter what, this is a string now */
11283     (void)SvPV_force_nomg(sv, origlen);
11284
11285     /* special-case "", "%s", and "%-p" (SVf - see below) */
11286     if (patlen == 0) {
11287         if (svmax && ckWARN(WARN_REDUNDANT))
11288             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11289                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11290         return;
11291     }
11292     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11293         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11294             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11295                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11296
11297         if (args) {
11298             const char * const s = va_arg(*args, char*);
11299             sv_catpv_nomg(sv, s ? s : nullstr);
11300         }
11301         else if (svix < svmax) {
11302             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11303             SvGETMAGIC(*svargs);
11304             sv_catsv_nomg(sv, *svargs);
11305         }
11306         else
11307             S_vcatpvfn_missing_argument(aTHX);
11308         return;
11309     }
11310     if (args && patlen == 3 && pat[0] == '%' &&
11311                 pat[1] == '-' && pat[2] == 'p') {
11312         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11313             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11314                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11315         argsv = MUTABLE_SV(va_arg(*args, void*));
11316         sv_catsv_nomg(sv, argsv);
11317         return;
11318     }
11319
11320 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11321     /* special-case "%.<number>[gf]" */
11322     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11323          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11324         unsigned digits = 0;
11325         const char *pp;
11326
11327         pp = pat + 2;
11328         while (*pp >= '0' && *pp <= '9')
11329             digits = 10 * digits + (*pp++ - '0');
11330
11331         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11332            format the first argument and WARN_REDUNDANT if svmax > 1?
11333            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11334         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11335             const NV nv = SvNV(*svargs);
11336             if (LIKELY(!Perl_isinfnan(nv))) {
11337                 if (*pp == 'g') {
11338                     /* Add check for digits != 0 because it seems that some
11339                        gconverts are buggy in this case, and we don't yet have
11340                        a Configure test for this.  */
11341                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11342                         /* 0, point, slack */
11343                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11344                         SNPRINTF_G(nv, ebuf, size, digits);
11345                         sv_catpv_nomg(sv, ebuf);
11346                         if (*ebuf)      /* May return an empty string for digits==0 */
11347                             return;
11348                     }
11349                 } else if (!digits) {
11350                     STRLEN l;
11351
11352                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11353                         sv_catpvn_nomg(sv, p, l);
11354                         return;
11355                     }
11356                 }
11357             }
11358         }
11359     }
11360 #endif /* !USE_LONG_DOUBLE */
11361
11362     if (!args && svix < svmax && DO_UTF8(*svargs))
11363         has_utf8 = TRUE;
11364
11365     patend = (char*)pat + patlen;
11366     for (p = (char*)pat; p < patend; p = q) {
11367         bool alt = FALSE;
11368         bool left = FALSE;
11369         bool vectorize = FALSE;
11370         bool vectorarg = FALSE;
11371         bool vec_utf8 = FALSE;
11372         char fill = ' ';
11373         char plus = 0;
11374         char intsize = 0;
11375         STRLEN width = 0;
11376         STRLEN zeros = 0;
11377         bool has_precis = FALSE;
11378         STRLEN precis = 0;
11379         const I32 osvix = svix;
11380         bool is_utf8 = FALSE;  /* is this item utf8?   */
11381 #ifdef HAS_LDBL_SPRINTF_BUG
11382         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11383            with sfio - Allen <allens@cpan.org> */
11384         bool fix_ldbl_sprintf_bug = FALSE;
11385 #endif
11386
11387         char esignbuf[4];
11388         U8 utf8buf[UTF8_MAXBYTES+1];
11389         STRLEN esignlen = 0;
11390
11391         const char *eptr = NULL;
11392         const char *fmtstart;
11393         STRLEN elen = 0;
11394         SV *vecsv = NULL;
11395         const U8 *vecstr = NULL;
11396         STRLEN veclen = 0;
11397         char c = 0;
11398         int i;
11399         unsigned base = 0;
11400         IV iv = 0;
11401         UV uv = 0;
11402         /* We need a long double target in case HAS_LONG_DOUBLE,
11403          * even without USE_LONG_DOUBLE, so that we can printf with
11404          * long double formats, even without NV being long double.
11405          * But we call the target 'fv' instead of 'nv', since most of
11406          * the time it is not (most compilers these days recognize
11407          * "long double", even if only as a synonym for "double").
11408         */
11409 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11410         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11411         long double fv;
11412 #  ifdef Perl_isfinitel
11413 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11414 #  endif
11415 #  define FV_GF PERL_PRIgldbl
11416 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11417        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11418 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11419                                            double _dv = nv;  \
11420                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11421                               } STMT_END
11422 #    else
11423 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11424 #    endif
11425 #else
11426         NV fv;
11427 #  define FV_GF NVgf
11428 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11429 #endif
11430 #ifndef FV_ISFINITE
11431 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11432 #endif
11433         NV nv;
11434         STRLEN have;
11435         STRLEN need;
11436         STRLEN gap;
11437         const char *dotstr = ".";
11438         STRLEN dotstrlen = 1;
11439         I32 efix = 0; /* explicit format parameter index */
11440         I32 ewix = 0; /* explicit width index */
11441         I32 epix = 0; /* explicit precision index */
11442         I32 evix = 0; /* explicit vector index */
11443         bool asterisk = FALSE;
11444         bool infnan = FALSE;
11445
11446         /* echo everything up to the next format specification */
11447         for (q = p; q < patend && *q != '%'; ++q) ;
11448         if (q > p) {
11449             if (has_utf8 && !pat_utf8)
11450                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11451             else
11452                 sv_catpvn_nomg(sv, p, q - p);
11453             p = q;
11454         }
11455         if (q++ >= patend)
11456             break;
11457
11458         fmtstart = q;
11459
11460 /*
11461     We allow format specification elements in this order:
11462         \d+\$              explicit format parameter index
11463         [-+ 0#]+           flags
11464         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11465         0                  flag (as above): repeated to allow "v02"     
11466         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11467         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11468         [hlqLV]            size
11469     [%bcdefginopsuxDFOUX] format (mandatory)
11470 */
11471
11472         if (args) {
11473 /*  
11474         As of perl5.9.3, printf format checking is on by default.
11475         Internally, perl uses %p formats to provide an escape to
11476         some extended formatting.  This block deals with those
11477         extensions: if it does not match, (char*)q is reset and
11478         the normal format processing code is used.
11479
11480         Currently defined extensions are:
11481                 %p              include pointer address (standard)      
11482                 %-p     (SVf)   include an SV (previously %_)
11483                 %-<num>p        include an SV with precision <num>      
11484                 %2p             include a HEK
11485                 %3p             include a HEK with precision of 256
11486                 %4p             char* preceded by utf8 flag and length
11487                 %<num>p         (where num is 1 or > 4) reserved for future
11488                                 extensions
11489
11490         Robin Barker 2005-07-14 (but modified since)
11491
11492                 %1p     (VDf)   removed.  RMB 2007-10-19
11493 */
11494             char* r = q; 
11495             bool sv = FALSE;    
11496             STRLEN n = 0;
11497             if (*q == '-')
11498                 sv = *q++;
11499             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11500                 /* The argument has already gone through cBOOL, so the cast
11501                    is safe. */
11502                 is_utf8 = (bool)va_arg(*args, int);
11503                 elen = va_arg(*args, UV);
11504                 if ((IV)elen < 0) {
11505                     /* check if utf8 length is larger than 0 when cast to IV */
11506                     assert( (IV)elen >= 0 ); /* in DEBUGGING build we want to crash */
11507                     elen= 0; /* otherwise we want to treat this as an empty string */
11508                 }
11509                 eptr = va_arg(*args, char *);
11510                 q += sizeof(UTF8f)-1;
11511                 goto string;
11512             }
11513             n = expect_number(&q);
11514             if (*q++ == 'p') {
11515                 if (sv) {                       /* SVf */
11516                     if (n) {
11517                         precis = n;
11518                         has_precis = TRUE;
11519                     }
11520                     argsv = MUTABLE_SV(va_arg(*args, void*));
11521                     eptr = SvPV_const(argsv, elen);
11522                     if (DO_UTF8(argsv))
11523                         is_utf8 = TRUE;
11524                     goto string;
11525                 }
11526                 else if (n==2 || n==3) {        /* HEKf */
11527                     HEK * const hek = va_arg(*args, HEK *);
11528                     eptr = HEK_KEY(hek);
11529                     elen = HEK_LEN(hek);
11530                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11531                     if (n==3) precis = 256, has_precis = TRUE;
11532                     goto string;
11533                 }
11534                 else if (n) {
11535                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11536                                      "internal %%<num>p might conflict with future printf extensions");
11537                 }
11538             }
11539             q = r; 
11540         }
11541
11542         if ( (width = expect_number(&q)) ) {
11543             if (*q == '$') {
11544                 ++q;
11545                 efix = width;
11546                 if (!no_redundant_warning)
11547                     /* I've forgotten if it's a better
11548                        micro-optimization to always set this or to
11549                        only set it if it's unset */
11550                     no_redundant_warning = TRUE;
11551             } else {
11552                 goto gotwidth;
11553             }
11554         }
11555
11556         /* FLAGS */
11557
11558         while (*q) {
11559             switch (*q) {
11560             case ' ':
11561             case '+':
11562                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11563                     q++;
11564                 else
11565                     plus = *q++;
11566                 continue;
11567
11568             case '-':
11569                 left = TRUE;
11570                 q++;
11571                 continue;
11572
11573             case '0':
11574                 fill = *q++;
11575                 continue;
11576
11577             case '#':
11578                 alt = TRUE;
11579                 q++;
11580                 continue;
11581
11582             default:
11583                 break;
11584             }
11585             break;
11586         }
11587
11588       tryasterisk:
11589         if (*q == '*') {
11590             q++;
11591             if ( (ewix = expect_number(&q)) )
11592                 if (*q++ != '$')
11593                     goto unknown;
11594             asterisk = TRUE;
11595         }
11596         if (*q == 'v') {
11597             q++;
11598             if (vectorize)
11599                 goto unknown;
11600             if ((vectorarg = asterisk)) {
11601                 evix = ewix;
11602                 ewix = 0;
11603                 asterisk = FALSE;
11604             }
11605             vectorize = TRUE;
11606             goto tryasterisk;
11607         }
11608
11609         if (!asterisk)
11610         {
11611             if( *q == '0' )
11612                 fill = *q++;
11613             width = expect_number(&q);
11614         }
11615
11616         if (vectorize && vectorarg) {
11617             /* vectorizing, but not with the default "." */
11618             if (args)
11619                 vecsv = va_arg(*args, SV*);
11620             else if (evix) {
11621                 vecsv = (evix > 0 && evix <= svmax)
11622                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11623             } else {
11624                 vecsv = svix < svmax
11625                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11626             }
11627             dotstr = SvPV_const(vecsv, dotstrlen);
11628             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11629                bad with tied or overloaded values that return UTF8.  */
11630             if (DO_UTF8(vecsv))
11631                 is_utf8 = TRUE;
11632             else if (has_utf8) {
11633                 vecsv = sv_mortalcopy(vecsv);
11634                 sv_utf8_upgrade(vecsv);
11635                 dotstr = SvPV_const(vecsv, dotstrlen);
11636                 is_utf8 = TRUE;
11637             }               
11638         }
11639
11640         if (asterisk) {
11641             if (args)
11642                 i = va_arg(*args, int);
11643             else
11644                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11645                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11646             left |= (i < 0);
11647             width = (i < 0) ? -i : i;
11648         }
11649       gotwidth:
11650
11651         /* PRECISION */
11652
11653         if (*q == '.') {
11654             q++;
11655             if (*q == '*') {
11656                 q++;
11657                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11658                     goto unknown;
11659                 /* XXX: todo, support specified precision parameter */
11660                 if (epix)
11661                     goto unknown;
11662                 if (args)
11663                     i = va_arg(*args, int);
11664                 else
11665                     i = (ewix ? ewix <= svmax : svix < svmax)
11666                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11667                 precis = i;
11668                 has_precis = !(i < 0);
11669             }
11670             else {
11671                 precis = 0;
11672                 while (isDIGIT(*q))
11673                     precis = precis * 10 + (*q++ - '0');
11674                 has_precis = TRUE;
11675             }
11676         }
11677
11678         if (vectorize) {
11679             if (args) {
11680                 VECTORIZE_ARGS
11681             }
11682             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11683                 vecsv = svargs[efix ? efix-1 : svix++];
11684                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11685                 vec_utf8 = DO_UTF8(vecsv);
11686
11687                 /* if this is a version object, we need to convert
11688                  * back into v-string notation and then let the
11689                  * vectorize happen normally
11690                  */
11691                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11692                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11693                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11694                         "vector argument not supported with alpha versions");
11695                         goto vdblank;
11696                     }
11697                     vecsv = sv_newmortal();
11698                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11699                                  vecsv);
11700                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11701                     vec_utf8 = DO_UTF8(vecsv);
11702                 }
11703             }
11704             else {
11705               vdblank:
11706                 vecstr = (U8*)"";
11707                 veclen = 0;
11708             }
11709         }
11710
11711         /* SIZE */
11712
11713         switch (*q) {
11714 #ifdef WIN32
11715         case 'I':                       /* Ix, I32x, and I64x */
11716 #  ifdef USE_64_BIT_INT
11717             if (q[1] == '6' && q[2] == '4') {
11718                 q += 3;
11719                 intsize = 'q';
11720                 break;
11721             }
11722 #  endif
11723             if (q[1] == '3' && q[2] == '2') {
11724                 q += 3;
11725                 break;
11726             }
11727 #  ifdef USE_64_BIT_INT
11728             intsize = 'q';
11729 #  endif
11730             q++;
11731             break;
11732 #endif
11733 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11734     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11735         case 'L':                       /* Ld */
11736             /* FALLTHROUGH */
11737 #  ifdef USE_QUADMATH
11738         case 'Q':
11739             /* FALLTHROUGH */
11740 #  endif
11741 #  if IVSIZE >= 8
11742         case 'q':                       /* qd */
11743 #  endif
11744             intsize = 'q';
11745             q++;
11746             break;
11747 #endif
11748         case 'l':
11749             ++q;
11750 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11751     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11752             if (*q == 'l') {    /* lld, llf */
11753                 intsize = 'q';
11754                 ++q;
11755             }
11756             else
11757 #endif
11758                 intsize = 'l';
11759             break;
11760         case 'h':
11761             if (*++q == 'h') {  /* hhd, hhu */
11762                 intsize = 'c';
11763                 ++q;
11764             }
11765             else
11766                 intsize = 'h';
11767             break;
11768         case 'V':
11769         case 'z':
11770         case 't':
11771 #ifdef I_STDINT
11772         case 'j':
11773 #endif
11774             intsize = *q++;
11775             break;
11776         }
11777
11778         /* CONVERSION */
11779
11780         if (*q == '%') {
11781             eptr = q++;
11782             elen = 1;
11783             if (vectorize) {
11784                 c = '%';
11785                 goto unknown;
11786             }
11787             goto string;
11788         }
11789
11790         if (!vectorize && !args) {
11791             if (efix) {
11792                 const I32 i = efix-1;
11793                 argsv = (i >= 0 && i < svmax)
11794                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11795             } else {
11796                 argsv = (svix >= 0 && svix < svmax)
11797                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11798             }
11799         }
11800
11801         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11802             /* XXX va_arg(*args) case? need peek, use va_copy? */
11803             SvGETMAGIC(argsv);
11804             if (UNLIKELY(SvAMAGIC(argsv)))
11805                 argsv = sv_2num(argsv);
11806             infnan = UNLIKELY(isinfnansv(argsv));
11807         }
11808
11809         switch (c = *q++) {
11810
11811             /* STRINGS */
11812
11813         case 'c':
11814             if (vectorize)
11815                 goto unknown;
11816             if (infnan)
11817                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11818                            /* no va_arg() case */
11819                            SvNV_nomg(argsv), (int)c);
11820             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11821             if ((uv > 255 ||
11822                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11823                 && !IN_BYTES) {
11824                 eptr = (char*)utf8buf;
11825                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11826                 is_utf8 = TRUE;
11827             }
11828             else {
11829                 c = (char)uv;
11830                 eptr = &c;
11831                 elen = 1;
11832             }
11833             goto string;
11834
11835         case 's':
11836             if (vectorize)
11837                 goto unknown;
11838             if (args) {
11839                 eptr = va_arg(*args, char*);
11840                 if (eptr)
11841                     elen = strlen(eptr);
11842                 else {
11843                     eptr = (char *)nullstr;
11844                     elen = sizeof nullstr - 1;
11845                 }
11846             }
11847             else {
11848                 eptr = SvPV_const(argsv, elen);
11849                 if (DO_UTF8(argsv)) {
11850                     STRLEN old_precis = precis;
11851                     if (has_precis && precis < elen) {
11852                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11853                         STRLEN p = precis > ulen ? ulen : precis;
11854                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11855                                                         /* sticks at end */
11856                     }
11857                     if (width) { /* fudge width (can't fudge elen) */
11858                         if (has_precis && precis < elen)
11859                             width += precis - old_precis;
11860                         else
11861                             width +=
11862                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11863                     }
11864                     is_utf8 = TRUE;
11865                 }
11866             }
11867
11868         string:
11869             if (has_precis && precis < elen)
11870                 elen = precis;
11871             break;
11872
11873             /* INTEGERS */
11874
11875         case 'p':
11876             if (infnan) {
11877                 goto floating_point;
11878             }
11879             if (alt || vectorize)
11880                 goto unknown;
11881             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11882             base = 16;
11883             goto integer;
11884
11885         case 'D':
11886 #ifdef IV_IS_QUAD
11887             intsize = 'q';
11888 #else
11889             intsize = 'l';
11890 #endif
11891             /* FALLTHROUGH */
11892         case 'd':
11893         case 'i':
11894             if (infnan) {
11895                 goto floating_point;
11896             }
11897             if (vectorize) {
11898                 STRLEN ulen;
11899                 if (!veclen)
11900                     continue;
11901                 if (vec_utf8)
11902                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11903                                         UTF8_ALLOW_ANYUV);
11904                 else {
11905                     uv = *vecstr;
11906                     ulen = 1;
11907                 }
11908                 vecstr += ulen;
11909                 veclen -= ulen;
11910                 if (plus)
11911                      esignbuf[esignlen++] = plus;
11912             }
11913             else if (args) {
11914                 switch (intsize) {
11915                 case 'c':       iv = (char)va_arg(*args, int); break;
11916                 case 'h':       iv = (short)va_arg(*args, int); break;
11917                 case 'l':       iv = va_arg(*args, long); break;
11918                 case 'V':       iv = va_arg(*args, IV); break;
11919                 case 'z':       iv = va_arg(*args, SSize_t); break;
11920 #ifdef HAS_PTRDIFF_T
11921                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11922 #endif
11923                 default:        iv = va_arg(*args, int); break;
11924 #ifdef I_STDINT
11925                 case 'j':       iv = va_arg(*args, intmax_t); break;
11926 #endif
11927                 case 'q':
11928 #if IVSIZE >= 8
11929                                 iv = va_arg(*args, Quad_t); break;
11930 #else
11931                                 goto unknown;
11932 #endif
11933                 }
11934             }
11935             else {
11936                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11937                 switch (intsize) {
11938                 case 'c':       iv = (char)tiv; break;
11939                 case 'h':       iv = (short)tiv; break;
11940                 case 'l':       iv = (long)tiv; break;
11941                 case 'V':
11942                 default:        iv = tiv; break;
11943                 case 'q':
11944 #if IVSIZE >= 8
11945                                 iv = (Quad_t)tiv; break;
11946 #else
11947                                 goto unknown;
11948 #endif
11949                 }
11950             }
11951             if ( !vectorize )   /* we already set uv above */
11952             {
11953                 if (iv >= 0) {
11954                     uv = iv;
11955                     if (plus)
11956                         esignbuf[esignlen++] = plus;
11957                 }
11958                 else {
11959                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11960                     esignbuf[esignlen++] = '-';
11961                 }
11962             }
11963             base = 10;
11964             goto integer;
11965
11966         case 'U':
11967 #ifdef IV_IS_QUAD
11968             intsize = 'q';
11969 #else
11970             intsize = 'l';
11971 #endif
11972             /* FALLTHROUGH */
11973         case 'u':
11974             base = 10;
11975             goto uns_integer;
11976
11977         case 'B':
11978         case 'b':
11979             base = 2;
11980             goto uns_integer;
11981
11982         case 'O':
11983 #ifdef IV_IS_QUAD
11984             intsize = 'q';
11985 #else
11986             intsize = 'l';
11987 #endif
11988             /* FALLTHROUGH */
11989         case 'o':
11990             base = 8;
11991             goto uns_integer;
11992
11993         case 'X':
11994         case 'x':
11995             base = 16;
11996
11997         uns_integer:
11998             if (infnan) {
11999                 goto floating_point;
12000             }
12001             if (vectorize) {
12002                 STRLEN ulen;
12003         vector:
12004                 if (!veclen)
12005                     continue;
12006                 if (vec_utf8)
12007                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12008                                         UTF8_ALLOW_ANYUV);
12009                 else {
12010                     uv = *vecstr;
12011                     ulen = 1;
12012                 }
12013                 vecstr += ulen;
12014                 veclen -= ulen;
12015             }
12016             else if (args) {
12017                 switch (intsize) {
12018                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12019                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12020                 case 'l':  uv = va_arg(*args, unsigned long); break;
12021                 case 'V':  uv = va_arg(*args, UV); break;
12022                 case 'z':  uv = va_arg(*args, Size_t); break;
12023 #ifdef HAS_PTRDIFF_T
12024                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12025 #endif
12026 #ifdef I_STDINT
12027                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12028 #endif
12029                 default:   uv = va_arg(*args, unsigned); break;
12030                 case 'q':
12031 #if IVSIZE >= 8
12032                            uv = va_arg(*args, Uquad_t); break;
12033 #else
12034                            goto unknown;
12035 #endif
12036                 }
12037             }
12038             else {
12039                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12040                 switch (intsize) {
12041                 case 'c':       uv = (unsigned char)tuv; break;
12042                 case 'h':       uv = (unsigned short)tuv; break;
12043                 case 'l':       uv = (unsigned long)tuv; break;
12044                 case 'V':
12045                 default:        uv = tuv; break;
12046                 case 'q':
12047 #if IVSIZE >= 8
12048                                 uv = (Uquad_t)tuv; break;
12049 #else
12050                                 goto unknown;
12051 #endif
12052                 }
12053             }
12054
12055         integer:
12056             {
12057                 char *ptr = ebuf + sizeof ebuf;
12058                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12059                 unsigned dig;
12060                 zeros = 0;
12061
12062                 switch (base) {
12063                 case 16:
12064                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12065                     do {
12066                         dig = uv & 15;
12067                         *--ptr = p[dig];
12068                     } while (uv >>= 4);
12069                     if (tempalt) {
12070                         esignbuf[esignlen++] = '0';
12071                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12072                     }
12073                     break;
12074                 case 8:
12075                     do {
12076                         dig = uv & 7;
12077                         *--ptr = '0' + dig;
12078                     } while (uv >>= 3);
12079                     if (alt && *ptr != '0')
12080                         *--ptr = '0';
12081                     break;
12082                 case 2:
12083                     do {
12084                         dig = uv & 1;
12085                         *--ptr = '0' + dig;
12086                     } while (uv >>= 1);
12087                     if (tempalt) {
12088                         esignbuf[esignlen++] = '0';
12089                         esignbuf[esignlen++] = c;
12090                     }
12091                     break;
12092                 default:                /* it had better be ten or less */
12093                     do {
12094                         dig = uv % base;
12095                         *--ptr = '0' + dig;
12096                     } while (uv /= base);
12097                     break;
12098                 }
12099                 elen = (ebuf + sizeof ebuf) - ptr;
12100                 eptr = ptr;
12101                 if (has_precis) {
12102                     if (precis > elen)
12103                         zeros = precis - elen;
12104                     else if (precis == 0 && elen == 1 && *eptr == '0'
12105                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12106                         elen = 0;
12107
12108                 /* a precision nullifies the 0 flag. */
12109                     if (fill == '0')
12110                         fill = ' ';
12111                 }
12112             }
12113             break;
12114
12115             /* FLOATING POINT */
12116
12117         floating_point:
12118
12119         case 'F':
12120             c = 'f';            /* maybe %F isn't supported here */
12121             /* FALLTHROUGH */
12122         case 'e': case 'E':
12123         case 'f':
12124         case 'g': case 'G':
12125         case 'a': case 'A':
12126             if (vectorize)
12127                 goto unknown;
12128
12129             /* This is evil, but floating point is even more evil */
12130
12131             /* for SV-style calling, we can only get NV
12132                for C-style calling, we assume %f is double;
12133                for simplicity we allow any of %Lf, %llf, %qf for long double
12134             */
12135             switch (intsize) {
12136             case 'V':
12137 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12138                 intsize = 'q';
12139 #endif
12140                 break;
12141 /* [perl #20339] - we should accept and ignore %lf rather than die */
12142             case 'l':
12143                 /* FALLTHROUGH */
12144             default:
12145 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12146                 intsize = args ? 0 : 'q';
12147 #endif
12148                 break;
12149             case 'q':
12150 #if defined(HAS_LONG_DOUBLE)
12151                 break;
12152 #else
12153                 /* FALLTHROUGH */
12154 #endif
12155             case 'c':
12156             case 'h':
12157             case 'z':
12158             case 't':
12159             case 'j':
12160                 goto unknown;
12161             }
12162
12163             /* Now we need (long double) if intsize == 'q', else (double). */
12164             if (args) {
12165                 /* Note: do not pull NVs off the va_list with va_arg()
12166                  * (pull doubles instead) because if you have a build
12167                  * with long doubles, you would always be pulling long
12168                  * doubles, which would badly break anyone using only
12169                  * doubles (i.e. the majority of builds). In other
12170                  * words, you cannot mix doubles and long doubles.
12171                  * The only case where you can pull off long doubles
12172                  * is when the format specifier explicitly asks so with
12173                  * e.g. "%Lg". */
12174 #ifdef USE_QUADMATH
12175                 fv = intsize == 'q' ?
12176                     va_arg(*args, NV) : va_arg(*args, double);
12177                 nv = fv;
12178 #elif LONG_DOUBLESIZE > DOUBLESIZE
12179                 if (intsize == 'q') {
12180                     fv = va_arg(*args, long double);
12181                     nv = fv;
12182                 } else {
12183                     nv = va_arg(*args, double);
12184                     NV_TO_FV(nv, fv);
12185                 }
12186 #else
12187                 nv = va_arg(*args, double);
12188                 fv = nv;
12189 #endif
12190             }
12191             else
12192             {
12193                 if (!infnan) SvGETMAGIC(argsv);
12194                 nv = SvNV_nomg(argsv);
12195                 NV_TO_FV(nv, fv);
12196             }
12197
12198             need = 0;
12199             /* frexp() (or frexpl) has some unspecified behaviour for
12200              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12201             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12202                 i = PERL_INT_MIN;
12203                 (void)Perl_frexp((NV)fv, &i);
12204                 if (i == PERL_INT_MIN)
12205                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12206                 /* Do not set hexfp earlier since we want to printf
12207                  * Inf/NaN for Inf/NaN, not their hexfp. */
12208                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12209                 if (UNLIKELY(hexfp)) {
12210                     /* This seriously overshoots in most cases, but
12211                      * better the undershooting.  Firstly, all bytes
12212                      * of the NV are not mantissa, some of them are
12213                      * exponent.  Secondly, for the reasonably common
12214                      * long doubles case, the "80-bit extended", two
12215                      * or six bytes of the NV are unused. */
12216                     need +=
12217                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12218                         2 + /* "0x" */
12219                         1 + /* the very unlikely carry */
12220                         1 + /* "1" */
12221                         1 + /* "." */
12222                         2 * NVSIZE + /* 2 hexdigits for each byte */
12223                         2 + /* "p+" */
12224                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12225                         1;  /* \0 */
12226 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12227                     /* However, for the "double double", we need more.
12228                      * Since each double has their own exponent, the
12229                      * doubles may float (haha) rather far from each
12230                      * other, and the number of required bits is much
12231                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12232                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12233                      *
12234                      * Need 2 hexdigits for each byte. */
12235                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12236                     /* the size for the exponent already added */
12237 #endif
12238 #ifdef USE_LOCALE_NUMERIC
12239                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12240                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12241                             need += SvLEN(PL_numeric_radix_sv);
12242                         RESTORE_LC_NUMERIC();
12243 #endif
12244                 }
12245                 else if (i > 0) {
12246                     need = BIT_DIGITS(i);
12247                 } /* if i < 0, the number of digits is hard to predict. */
12248             } else if (UNLIKELY(Perl_isnan(nv))) {
12249                 need +=
12250                     3 + /* nan */
12251                     1 + /* 's', maybe */
12252                     1;  /* \0 */
12253
12254                 if (alt) {
12255                     /* NaN payload - all of it really only needed
12256                      * if we have a full payload. */
12257                     need +=
12258                         1 + /* '(' */
12259 #if NVSIZE == UVSIZE
12260                         /* 0x... */
12261                         2 + /* "0x" */
12262                         2 * (NV_MANT_REAL_DIG + 7) / 8 +
12263 #else
12264                         /* hexbytes \xHH */
12265                         2 + /* '...' */
12266                         4 * (NV_MANT_REAL_DIG + 7) / 8 +
12267 #endif
12268                         1;  /* ')' */
12269                 }
12270             }
12271             need += has_precis ? precis : 6; /* known default */
12272
12273             if (need < width)
12274                 need = width;
12275
12276 #ifdef HAS_LDBL_SPRINTF_BUG
12277             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12278                with sfio - Allen <allens@cpan.org> */
12279
12280 #  ifdef DBL_MAX
12281 #    define MY_DBL_MAX DBL_MAX
12282 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12283 #    if DOUBLESIZE >= 8
12284 #      define MY_DBL_MAX 1.7976931348623157E+308L
12285 #    else
12286 #      define MY_DBL_MAX 3.40282347E+38L
12287 #    endif
12288 #  endif
12289
12290 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12291 #    define MY_DBL_MAX_BUG 1L
12292 #  else
12293 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12294 #  endif
12295
12296 #  ifdef DBL_MIN
12297 #    define MY_DBL_MIN DBL_MIN
12298 #  else  /* XXX guessing! -Allen */
12299 #    if DOUBLESIZE >= 8
12300 #      define MY_DBL_MIN 2.2250738585072014E-308L
12301 #    else
12302 #      define MY_DBL_MIN 1.17549435E-38L
12303 #    endif
12304 #  endif
12305
12306             if ((intsize == 'q') && (c == 'f') &&
12307                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12308                 (need < DBL_DIG)) {
12309                 /* it's going to be short enough that
12310                  * long double precision is not needed */
12311
12312                 if ((fv <= 0L) && (fv >= -0L))
12313                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12314                 else {
12315                     /* would use Perl_fp_class as a double-check but not
12316                      * functional on IRIX - see perl.h comments */
12317
12318                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12319                         /* It's within the range that a double can represent */
12320 #if defined(DBL_MAX) && !defined(DBL_MIN)
12321                         if ((fv >= ((long double)1/DBL_MAX)) ||
12322                             (fv <= (-(long double)1/DBL_MAX)))
12323 #endif
12324                         fix_ldbl_sprintf_bug = TRUE;
12325                     }
12326                 }
12327                 if (fix_ldbl_sprintf_bug == TRUE) {
12328                     double temp;
12329
12330                     intsize = 0;
12331                     temp = (double)fv;
12332                     fv = (NV)temp;
12333                 }
12334             }
12335
12336 #  undef MY_DBL_MAX
12337 #  undef MY_DBL_MAX_BUG
12338 #  undef MY_DBL_MIN
12339
12340 #endif /* HAS_LDBL_SPRINTF_BUG */
12341
12342             need += 20; /* fudge factor */
12343             if (PL_efloatsize < need) {
12344                 Safefree(PL_efloatbuf);
12345                 PL_efloatsize = need + 20; /* more fudge */
12346                 Newx(PL_efloatbuf, PL_efloatsize, char);
12347                 PL_efloatbuf[0] = '\0';
12348             }
12349
12350             if ( !(width || left || plus || alt) && fill != '0'
12351                  && has_precis && intsize != 'q'        /* Shortcuts */
12352                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12353                 /* See earlier comment about buggy Gconvert when digits,
12354                    aka precis is 0  */
12355                 if ( c == 'g' && precis ) {
12356                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12357                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12358                     /* May return an empty string for digits==0 */
12359                     if (*PL_efloatbuf) {
12360                         elen = strlen(PL_efloatbuf);
12361                         goto float_converted;
12362                     }
12363                 } else if ( c == 'f' && !precis ) {
12364                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12365                         break;
12366                 }
12367             }
12368
12369             if (UNLIKELY(hexfp)) {
12370                 /* Hexadecimal floating point. */
12371                 char* p = PL_efloatbuf;
12372                 U8 vhex[VHEX_SIZE];
12373                 U8* v = vhex; /* working pointer to vhex */
12374                 U8* vend; /* pointer to one beyond last digit of vhex */
12375                 U8* vfnz = NULL; /* first non-zero */
12376                 const bool lower = (c == 'a');
12377                 /* At output the values of vhex (up to vend) will
12378                  * be mapped through the xdig to get the actual
12379                  * human-readable xdigits. */
12380                 const char* xdig = PL_hexdigit;
12381                 int zerotail = 0; /* how many extra zeros to append */
12382                 int exponent = 0; /* exponent of the floating point input */
12383
12384                 /* XXX: denormals, NaN, Inf.
12385                  *
12386                  * For example with denormals, (assuming the vanilla
12387                  * 64-bit double): the exponent is zero. 1xp-1074 is
12388                  * the smallest denormal and the smallest double, it
12389                  * should be output as 0x0.0000000000001p-1022 to
12390                  * match its internal structure. */
12391
12392                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12393                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12394
12395 #if NVSIZE > DOUBLESIZE
12396 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12397                 /* In this case there is an implicit bit,
12398                  * and therefore the exponent is shifted shift by one. */
12399                 exponent--;
12400 #  else
12401                 /* In this case there is no implicit bit,
12402                  * and the exponent is shifted by the first xdigit. */
12403                 exponent -= 4;
12404 #  endif
12405 #endif
12406
12407                 if (fv < 0)
12408                     *p++ = '-';
12409                 else if (plus)
12410                     *p++ = plus;
12411                 *p++ = '0';
12412                 if (lower) {
12413                     *p++ = 'x';
12414                 }
12415                 else {
12416                     *p++ = 'X';
12417                     xdig += 16; /* Use uppercase hex. */
12418                 }
12419
12420                 /* Find the first non-zero xdigit. */
12421                 for (v = vhex; v < vend; v++) {
12422                     if (*v) {
12423                         vfnz = v;
12424                         break;
12425                     }
12426                 }
12427
12428                 if (vfnz) {
12429                     U8* vlnz = NULL; /* The last non-zero. */
12430
12431                     /* Find the last non-zero xdigit. */
12432                     for (v = vend - 1; v >= vhex; v--) {
12433                         if (*v) {
12434                             vlnz = v;
12435                             break;
12436                         }
12437                     }
12438
12439 #if NVSIZE == DOUBLESIZE
12440                     if (fv != 0.0)
12441                         exponent--;
12442 #endif
12443
12444                     if (precis > 0) {
12445                         if ((SSize_t)(precis + 1) < vend - vhex) {
12446                             bool round;
12447
12448                             v = vhex + precis + 1;
12449                             /* Round away from zero: if the tail
12450                              * beyond the precis xdigits is equal to
12451                              * or greater than 0x8000... */
12452                             round = *v > 0x8;
12453                             if (!round && *v == 0x8) {
12454                                 for (v++; v < vend; v++) {
12455                                     if (*v) {
12456                                         round = TRUE;
12457                                         break;
12458                                     }
12459                                 }
12460                             }
12461                             if (round) {
12462                                 for (v = vhex + precis; v >= vhex; v--) {
12463                                     if (*v < 0xF) {
12464                                         (*v)++;
12465                                         break;
12466                                     }
12467                                     *v = 0;
12468                                     if (v == vhex) {
12469                                         /* If the carry goes all the way to
12470                                          * the front, we need to output
12471                                          * a single '1'. This goes against
12472                                          * the "xdigit and then radix"
12473                                          * but since this is "cannot happen"
12474                                          * category, that is probably good. */
12475                                         *p++ = xdig[1];
12476                                     }
12477                                 }
12478                             }
12479                             /* The new effective "last non zero". */
12480                             vlnz = vhex + precis;
12481                         }
12482                         else {
12483                             zerotail = precis - (vlnz - vhex);
12484                         }
12485                     }
12486
12487                     v = vhex;
12488                     *p++ = xdig[*v++];
12489
12490                     /* The radix is always output after the first
12491                      * non-zero xdigit, or if alt.  */
12492                     if (vfnz < vlnz || alt) {
12493 #ifndef USE_LOCALE_NUMERIC
12494                         *p++ = '.';
12495 #else
12496                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12497                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12498                             STRLEN n;
12499                             const char* r = SvPV(PL_numeric_radix_sv, n);
12500                             Copy(r, p, n, char);
12501                             p += n;
12502                         }
12503                         else {
12504                             *p++ = '.';
12505                         }
12506                         RESTORE_LC_NUMERIC();
12507 #endif
12508                     }
12509
12510                     while (v <= vlnz)
12511                         *p++ = xdig[*v++];
12512
12513                     while (zerotail--)
12514                         *p++ = '0';
12515                 }
12516                 else {
12517                     *p++ = '0';
12518                     exponent = 0;
12519                 }
12520
12521                 elen = p - PL_efloatbuf;
12522                 elen += my_snprintf(p, PL_efloatsize - elen,
12523                                     "%c%+d", lower ? 'p' : 'P',
12524                                     exponent);
12525
12526                 if (elen < width) {
12527                     if (left) {
12528                         /* Pad the back with spaces. */
12529                         memset(PL_efloatbuf + elen, ' ', width - elen);
12530                     }
12531                     else if (fill == '0') {
12532                         /* Insert the zeros between the "0x" and
12533                          * the digits, otherwise we end up with
12534                          * "0000xHHH..." */
12535                         STRLEN nzero = width - elen;
12536                         char* zerox = PL_efloatbuf + 2;
12537                         Move(zerox, zerox + nzero,  elen - 2, char);
12538                         memset(zerox, fill, nzero);
12539                     }
12540                     else {
12541                         /* Move it to the right. */
12542                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12543                              elen, char);
12544                         /* Pad the front with spaces. */
12545                         memset(PL_efloatbuf, ' ', width - elen);
12546                     }
12547                     elen = width;
12548                 }
12549             }
12550             else {
12551                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, c, plus, alt);
12552                 if (elen) {
12553                     /* Not affecting infnan output: precision, fill. */
12554                     if (elen < width) {
12555                         if (left) {
12556                             /* Pack the back with spaces. */
12557                             memset(PL_efloatbuf + elen, ' ', width - elen);
12558                         } else {
12559                             /* Move it to the right. */
12560                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12561                                  elen, char);
12562                             /* Pad the front with spaces. */
12563                             memset(PL_efloatbuf, ' ', width - elen);
12564                         }
12565                         elen = width;
12566                     }
12567                 }
12568             }
12569
12570             if (elen == 0) {
12571                 char *ptr = ebuf + sizeof ebuf;
12572                 *--ptr = '\0';
12573                 *--ptr = c;
12574 #if defined(USE_QUADMATH)
12575                 if (intsize == 'q') {
12576                     /* "g" -> "Qg" */
12577                     *--ptr = 'Q';
12578                 }
12579                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12580 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12581                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12582                  * not USE_LONG_DOUBLE and NVff.  In other words,
12583                  * this needs to work without USE_LONG_DOUBLE. */
12584                 if (intsize == 'q') {
12585                     /* Copy the one or more characters in a long double
12586                      * format before the 'base' ([efgEFG]) character to
12587                      * the format string. */
12588                     static char const ldblf[] = PERL_PRIfldbl;
12589                     char const *p = ldblf + sizeof(ldblf) - 3;
12590                     while (p >= ldblf) { *--ptr = *p--; }
12591                 }
12592 #endif
12593                 if (has_precis) {
12594                     base = precis;
12595                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12596                     *--ptr = '.';
12597                 }
12598                 if (width) {
12599                     base = width;
12600                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12601                 }
12602                 if (fill == '0')
12603                     *--ptr = fill;
12604                 if (left)
12605                     *--ptr = '-';
12606                 if (plus)
12607                     *--ptr = plus;
12608                 if (alt)
12609                     *--ptr = '#';
12610                 *--ptr = '%';
12611
12612                 /* No taint.  Otherwise we are in the strange situation
12613                  * where printf() taints but print($float) doesn't.
12614                  * --jhi */
12615
12616                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12617
12618                 /* hopefully the above makes ptr a very constrained format
12619                  * that is safe to use, even though it's not literal */
12620                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12621 #ifdef USE_QUADMATH
12622                 {
12623                     const char* qfmt = quadmath_format_single(ptr);
12624                     if (!qfmt)
12625                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12626                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12627                                              qfmt, nv);
12628                     if ((IV)elen == -1)
12629                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s|'", qfmt);
12630                     if (qfmt != ptr)
12631                         Safefree(qfmt);
12632                 }
12633 #elif defined(HAS_LONG_DOUBLE)
12634                 elen = ((intsize == 'q')
12635                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12636                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12637 #else
12638                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12639 #endif
12640                 GCC_DIAG_RESTORE;
12641             }
12642
12643         float_converted:
12644             eptr = PL_efloatbuf;
12645             assert((IV)elen > 0); /* here zero elen is bad */
12646
12647 #ifdef USE_LOCALE_NUMERIC
12648             /* If the decimal point character in the string is UTF-8, make the
12649              * output utf8 */
12650             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12651                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12652             {
12653                 is_utf8 = TRUE;
12654             }
12655 #endif
12656
12657             break;
12658
12659             /* SPECIAL */
12660
12661         case 'n':
12662             if (vectorize)
12663                 goto unknown;
12664             i = SvCUR(sv) - origlen;
12665             if (args) {
12666                 switch (intsize) {
12667                 case 'c':       *(va_arg(*args, char*)) = i; break;
12668                 case 'h':       *(va_arg(*args, short*)) = i; break;
12669                 default:        *(va_arg(*args, int*)) = i; break;
12670                 case 'l':       *(va_arg(*args, long*)) = i; break;
12671                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12672                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12673 #ifdef HAS_PTRDIFF_T
12674                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12675 #endif
12676 #ifdef I_STDINT
12677                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12678 #endif
12679                 case 'q':
12680 #if IVSIZE >= 8
12681                                 *(va_arg(*args, Quad_t*)) = i; break;
12682 #else
12683                                 goto unknown;
12684 #endif
12685                 }
12686             }
12687             else
12688                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12689             continue;   /* not "break" */
12690
12691             /* UNKNOWN */
12692
12693         default:
12694       unknown:
12695             if (!args
12696                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12697                 && ckWARN(WARN_PRINTF))
12698             {
12699                 SV * const msg = sv_newmortal();
12700                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12701                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12702                 if (fmtstart < patend) {
12703                     const char * const fmtend = q < patend ? q : patend;
12704                     const char * f;
12705                     sv_catpvs(msg, "\"%");
12706                     for (f = fmtstart; f < fmtend; f++) {
12707                         if (isPRINT(*f)) {
12708                             sv_catpvn_nomg(msg, f, 1);
12709                         } else {
12710                             Perl_sv_catpvf(aTHX_ msg,
12711                                            "\\%03"UVof, (UV)*f & 0xFF);
12712                         }
12713                     }
12714                     sv_catpvs(msg, "\"");
12715                 } else {
12716                     sv_catpvs(msg, "end of string");
12717                 }
12718                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12719             }
12720
12721             /* output mangled stuff ... */
12722             if (c == '\0')
12723                 --q;
12724             eptr = p;
12725             elen = q - p;
12726
12727             /* ... right here, because formatting flags should not apply */
12728             SvGROW(sv, SvCUR(sv) + elen + 1);
12729             p = SvEND(sv);
12730             Copy(eptr, p, elen, char);
12731             p += elen;
12732             *p = '\0';
12733             SvCUR_set(sv, p - SvPVX_const(sv));
12734             svix = osvix;
12735             continue;   /* not "break" */
12736         }
12737
12738         if (is_utf8 != has_utf8) {
12739             if (is_utf8) {
12740                 if (SvCUR(sv))
12741                     sv_utf8_upgrade(sv);
12742             }
12743             else {
12744                 const STRLEN old_elen = elen;
12745                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12746                 sv_utf8_upgrade(nsv);
12747                 eptr = SvPVX_const(nsv);
12748                 elen = SvCUR(nsv);
12749
12750                 if (width) { /* fudge width (can't fudge elen) */
12751                     width += elen - old_elen;
12752                 }
12753                 is_utf8 = TRUE;
12754             }
12755         }
12756
12757         assert((IV)elen >= 0); /* here zero elen is fine */
12758         have = esignlen + zeros + elen;
12759         if (have < zeros)
12760             croak_memory_wrap();
12761
12762         need = (have > width ? have : width);
12763         gap = need - have;
12764
12765         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12766             croak_memory_wrap();
12767         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12768         p = SvEND(sv);
12769         if (esignlen && fill == '0') {
12770             int i;
12771             for (i = 0; i < (int)esignlen; i++)
12772                 *p++ = esignbuf[i];
12773         }
12774         if (gap && !left) {
12775             memset(p, fill, gap);
12776             p += gap;
12777         }
12778         if (esignlen && fill != '0') {
12779             int i;
12780             for (i = 0; i < (int)esignlen; i++)
12781                 *p++ = esignbuf[i];
12782         }
12783         if (zeros) {
12784             int i;
12785             for (i = zeros; i; i--)
12786                 *p++ = '0';
12787         }
12788         if (elen) {
12789             Copy(eptr, p, elen, char);
12790             p += elen;
12791         }
12792         if (gap && left) {
12793             memset(p, ' ', gap);
12794             p += gap;
12795         }
12796         if (vectorize) {
12797             if (veclen) {
12798                 Copy(dotstr, p, dotstrlen, char);
12799                 p += dotstrlen;
12800             }
12801             else
12802                 vectorize = FALSE;              /* done iterating over vecstr */
12803         }
12804         if (is_utf8)
12805             has_utf8 = TRUE;
12806         if (has_utf8)
12807             SvUTF8_on(sv);
12808         *p = '\0';
12809         SvCUR_set(sv, p - SvPVX_const(sv));
12810         if (vectorize) {
12811             esignlen = 0;
12812             goto vector;
12813         }
12814     }
12815
12816     /* Now that we've consumed all our printf format arguments (svix)
12817      * do we have things left on the stack that we didn't use?
12818      */
12819     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12820         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12821                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12822     }
12823
12824     SvTAINT(sv);
12825
12826     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12827                                each iteration. */
12828 }
12829
12830 /* =========================================================================
12831
12832 =head1 Cloning an interpreter
12833
12834 =cut
12835
12836 All the macros and functions in this section are for the private use of
12837 the main function, perl_clone().
12838
12839 The foo_dup() functions make an exact copy of an existing foo thingy.
12840 During the course of a cloning, a hash table is used to map old addresses
12841 to new addresses.  The table is created and manipulated with the
12842 ptr_table_* functions.
12843
12844  * =========================================================================*/
12845
12846
12847 #if defined(USE_ITHREADS)
12848
12849 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12850 #ifndef GpREFCNT_inc
12851 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12852 #endif
12853
12854
12855 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12856    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12857    If this changes, please unmerge ss_dup.
12858    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12859 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12860 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12861 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12862 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12863 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12864 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12865 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12866 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12867 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12868 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12869 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12870 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12871 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12872
12873 /* clone a parser */
12874
12875 yy_parser *
12876 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12877 {
12878     yy_parser *parser;
12879
12880     PERL_ARGS_ASSERT_PARSER_DUP;
12881
12882     if (!proto)
12883         return NULL;
12884
12885     /* look for it in the table first */
12886     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12887     if (parser)
12888         return parser;
12889
12890     /* create anew and remember what it is */
12891     Newxz(parser, 1, yy_parser);
12892     ptr_table_store(PL_ptr_table, proto, parser);
12893
12894     /* XXX these not yet duped */
12895     parser->old_parser = NULL;
12896     parser->stack = NULL;
12897     parser->ps = NULL;
12898     parser->stack_size = 0;
12899     /* XXX parser->stack->state = 0; */
12900
12901     /* XXX eventually, just Copy() most of the parser struct ? */
12902
12903     parser->lex_brackets = proto->lex_brackets;
12904     parser->lex_casemods = proto->lex_casemods;
12905     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12906                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12907     parser->lex_casestack = savepvn(proto->lex_casestack,
12908                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12909     parser->lex_defer   = proto->lex_defer;
12910     parser->lex_dojoin  = proto->lex_dojoin;
12911     parser->lex_formbrack = proto->lex_formbrack;
12912     parser->lex_inpat   = proto->lex_inpat;
12913     parser->lex_inwhat  = proto->lex_inwhat;
12914     parser->lex_op      = proto->lex_op;
12915     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12916     parser->lex_starts  = proto->lex_starts;
12917     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12918     parser->multi_close = proto->multi_close;
12919     parser->multi_open  = proto->multi_open;
12920     parser->multi_start = proto->multi_start;
12921     parser->multi_end   = proto->multi_end;
12922     parser->preambled   = proto->preambled;
12923     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12924     parser->linestr     = sv_dup_inc(proto->linestr, param);
12925     parser->expect      = proto->expect;
12926     parser->copline     = proto->copline;
12927     parser->last_lop_op = proto->last_lop_op;
12928     parser->lex_state   = proto->lex_state;
12929     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12930     /* rsfp_filters entries have fake IoDIRP() */
12931     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12932     parser->in_my       = proto->in_my;
12933     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12934     parser->error_count = proto->error_count;
12935
12936
12937     parser->linestr     = sv_dup_inc(proto->linestr, param);
12938
12939     {
12940         char * const ols = SvPVX(proto->linestr);
12941         char * const ls  = SvPVX(parser->linestr);
12942
12943         parser->bufptr      = ls + (proto->bufptr >= ols ?
12944                                     proto->bufptr -  ols : 0);
12945         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12946                                     proto->oldbufptr -  ols : 0);
12947         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12948                                     proto->oldoldbufptr -  ols : 0);
12949         parser->linestart   = ls + (proto->linestart >= ols ?
12950                                     proto->linestart -  ols : 0);
12951         parser->last_uni    = ls + (proto->last_uni >= ols ?
12952                                     proto->last_uni -  ols : 0);
12953         parser->last_lop    = ls + (proto->last_lop >= ols ?
12954                                     proto->last_lop -  ols : 0);
12955
12956         parser->bufend      = ls + SvCUR(parser->linestr);
12957     }
12958
12959     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12960
12961
12962     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12963     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12964     parser->nexttoke    = proto->nexttoke;
12965
12966     /* XXX should clone saved_curcop here, but we aren't passed
12967      * proto_perl; so do it in perl_clone_using instead */
12968
12969     return parser;
12970 }
12971
12972
12973 /* duplicate a file handle */
12974
12975 PerlIO *
12976 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12977 {
12978     PerlIO *ret;
12979
12980     PERL_ARGS_ASSERT_FP_DUP;
12981     PERL_UNUSED_ARG(type);
12982
12983     if (!fp)
12984         return (PerlIO*)NULL;
12985
12986     /* look for it in the table first */
12987     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12988     if (ret)
12989         return ret;
12990
12991     /* create anew and remember what it is */
12992     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12993     ptr_table_store(PL_ptr_table, fp, ret);
12994     return ret;
12995 }
12996
12997 /* duplicate a directory handle */
12998
12999 DIR *
13000 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13001 {
13002     DIR *ret;
13003
13004 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13005     DIR *pwd;
13006     const Direntry_t *dirent;
13007     char smallbuf[256];
13008     char *name = NULL;
13009     STRLEN len = 0;
13010     long pos;
13011 #endif
13012
13013     PERL_UNUSED_CONTEXT;
13014     PERL_ARGS_ASSERT_DIRP_DUP;
13015
13016     if (!dp)
13017         return (DIR*)NULL;
13018
13019     /* look for it in the table first */
13020     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13021     if (ret)
13022         return ret;
13023
13024 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13025
13026     PERL_UNUSED_ARG(param);
13027
13028     /* create anew */
13029
13030     /* open the current directory (so we can switch back) */
13031     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13032
13033     /* chdir to our dir handle and open the present working directory */
13034     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13035         PerlDir_close(pwd);
13036         return (DIR *)NULL;
13037     }
13038     /* Now we should have two dir handles pointing to the same dir. */
13039
13040     /* Be nice to the calling code and chdir back to where we were. */
13041     /* XXX If this fails, then what? */
13042     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13043
13044     /* We have no need of the pwd handle any more. */
13045     PerlDir_close(pwd);
13046
13047 #ifdef DIRNAMLEN
13048 # define d_namlen(d) (d)->d_namlen
13049 #else
13050 # define d_namlen(d) strlen((d)->d_name)
13051 #endif
13052     /* Iterate once through dp, to get the file name at the current posi-
13053        tion. Then step back. */
13054     pos = PerlDir_tell(dp);
13055     if ((dirent = PerlDir_read(dp))) {
13056         len = d_namlen(dirent);
13057         if (len <= sizeof smallbuf) name = smallbuf;
13058         else Newx(name, len, char);
13059         Move(dirent->d_name, name, len, char);
13060     }
13061     PerlDir_seek(dp, pos);
13062
13063     /* Iterate through the new dir handle, till we find a file with the
13064        right name. */
13065     if (!dirent) /* just before the end */
13066         for(;;) {
13067             pos = PerlDir_tell(ret);
13068             if (PerlDir_read(ret)) continue; /* not there yet */
13069             PerlDir_seek(ret, pos); /* step back */
13070             break;
13071         }
13072     else {
13073         const long pos0 = PerlDir_tell(ret);
13074         for(;;) {
13075             pos = PerlDir_tell(ret);
13076             if ((dirent = PerlDir_read(ret))) {
13077                 if (len == (STRLEN)d_namlen(dirent)
13078                     && memEQ(name, dirent->d_name, len)) {
13079                     /* found it */
13080                     PerlDir_seek(ret, pos); /* step back */
13081                     break;
13082                 }
13083                 /* else we are not there yet; keep iterating */
13084             }
13085             else { /* This is not meant to happen. The best we can do is
13086                       reset the iterator to the beginning. */
13087                 PerlDir_seek(ret, pos0);
13088                 break;
13089             }
13090         }
13091     }
13092 #undef d_namlen
13093
13094     if (name && name != smallbuf)
13095         Safefree(name);
13096 #endif
13097
13098 #ifdef WIN32
13099     ret = win32_dirp_dup(dp, param);
13100 #endif
13101
13102     /* pop it in the pointer table */
13103     if (ret)
13104         ptr_table_store(PL_ptr_table, dp, ret);
13105
13106     return ret;
13107 }
13108
13109 /* duplicate a typeglob */
13110
13111 GP *
13112 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13113 {
13114     GP *ret;
13115
13116     PERL_ARGS_ASSERT_GP_DUP;
13117
13118     if (!gp)
13119         return (GP*)NULL;
13120     /* look for it in the table first */
13121     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13122     if (ret)
13123         return ret;
13124
13125     /* create anew and remember what it is */
13126     Newxz(ret, 1, GP);
13127     ptr_table_store(PL_ptr_table, gp, ret);
13128
13129     /* clone */
13130     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13131        on Newxz() to do this for us.  */
13132     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13133     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13134     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13135     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13136     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13137     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13138     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13139     ret->gp_cvgen       = gp->gp_cvgen;
13140     ret->gp_line        = gp->gp_line;
13141     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13142     return ret;
13143 }
13144
13145 /* duplicate a chain of magic */
13146
13147 MAGIC *
13148 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13149 {
13150     MAGIC *mgret = NULL;
13151     MAGIC **mgprev_p = &mgret;
13152
13153     PERL_ARGS_ASSERT_MG_DUP;
13154
13155     for (; mg; mg = mg->mg_moremagic) {
13156         MAGIC *nmg;
13157
13158         if ((param->flags & CLONEf_JOIN_IN)
13159                 && mg->mg_type == PERL_MAGIC_backref)
13160             /* when joining, we let the individual SVs add themselves to
13161              * backref as needed. */
13162             continue;
13163
13164         Newx(nmg, 1, MAGIC);
13165         *mgprev_p = nmg;
13166         mgprev_p = &(nmg->mg_moremagic);
13167
13168         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13169            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13170            from the original commit adding Perl_mg_dup() - revision 4538.
13171            Similarly there is the annotation "XXX random ptr?" next to the
13172            assignment to nmg->mg_ptr.  */
13173         *nmg = *mg;
13174
13175         /* FIXME for plugins
13176         if (nmg->mg_type == PERL_MAGIC_qr) {
13177             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13178         }
13179         else
13180         */
13181         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13182                           ? nmg->mg_type == PERL_MAGIC_backref
13183                                 /* The backref AV has its reference
13184                                  * count deliberately bumped by 1 */
13185                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13186                                                     nmg->mg_obj, param))
13187                                 : sv_dup_inc(nmg->mg_obj, param)
13188                           : sv_dup(nmg->mg_obj, param);
13189
13190         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13191             if (nmg->mg_len > 0) {
13192                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13193                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13194                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13195                 {
13196                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13197                     sv_dup_inc_multiple((SV**)(namtp->table),
13198                                         (SV**)(namtp->table), NofAMmeth, param);
13199                 }
13200             }
13201             else if (nmg->mg_len == HEf_SVKEY)
13202                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13203         }
13204         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13205             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13206         }
13207     }
13208     return mgret;
13209 }
13210
13211 #endif /* USE_ITHREADS */
13212
13213 struct ptr_tbl_arena {
13214     struct ptr_tbl_arena *next;
13215     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13216 };
13217
13218 /* create a new pointer-mapping table */
13219
13220 PTR_TBL_t *
13221 Perl_ptr_table_new(pTHX)
13222 {
13223     PTR_TBL_t *tbl;
13224     PERL_UNUSED_CONTEXT;
13225
13226     Newx(tbl, 1, PTR_TBL_t);
13227     tbl->tbl_max        = 511;
13228     tbl->tbl_items      = 0;
13229     tbl->tbl_arena      = NULL;
13230     tbl->tbl_arena_next = NULL;
13231     tbl->tbl_arena_end  = NULL;
13232     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13233     return tbl;
13234 }
13235
13236 #define PTR_TABLE_HASH(ptr) \
13237   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13238
13239 /* map an existing pointer using a table */
13240
13241 STATIC PTR_TBL_ENT_t *
13242 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13243 {
13244     PTR_TBL_ENT_t *tblent;
13245     const UV hash = PTR_TABLE_HASH(sv);
13246
13247     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13248
13249     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13250     for (; tblent; tblent = tblent->next) {
13251         if (tblent->oldval == sv)
13252             return tblent;
13253     }
13254     return NULL;
13255 }
13256
13257 void *
13258 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13259 {
13260     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13261
13262     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13263     PERL_UNUSED_CONTEXT;
13264
13265     return tblent ? tblent->newval : NULL;
13266 }
13267
13268 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13269  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13270  * the core's typical use of ptr_tables in thread cloning. */
13271
13272 void
13273 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13274 {
13275     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13276
13277     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13278     PERL_UNUSED_CONTEXT;
13279
13280     if (tblent) {
13281         tblent->newval = newsv;
13282     } else {
13283         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13284
13285         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13286             struct ptr_tbl_arena *new_arena;
13287
13288             Newx(new_arena, 1, struct ptr_tbl_arena);
13289             new_arena->next = tbl->tbl_arena;
13290             tbl->tbl_arena = new_arena;
13291             tbl->tbl_arena_next = new_arena->array;
13292             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13293         }
13294
13295         tblent = tbl->tbl_arena_next++;
13296
13297         tblent->oldval = oldsv;
13298         tblent->newval = newsv;
13299         tblent->next = tbl->tbl_ary[entry];
13300         tbl->tbl_ary[entry] = tblent;
13301         tbl->tbl_items++;
13302         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13303             ptr_table_split(tbl);
13304     }
13305 }
13306
13307 /* double the hash bucket size of an existing ptr table */
13308
13309 void
13310 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13311 {
13312     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13313     const UV oldsize = tbl->tbl_max + 1;
13314     UV newsize = oldsize * 2;
13315     UV i;
13316
13317     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13318     PERL_UNUSED_CONTEXT;
13319
13320     Renew(ary, newsize, PTR_TBL_ENT_t*);
13321     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13322     tbl->tbl_max = --newsize;
13323     tbl->tbl_ary = ary;
13324     for (i=0; i < oldsize; i++, ary++) {
13325         PTR_TBL_ENT_t **entp = ary;
13326         PTR_TBL_ENT_t *ent = *ary;
13327         PTR_TBL_ENT_t **curentp;
13328         if (!ent)
13329             continue;
13330         curentp = ary + oldsize;
13331         do {
13332             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13333                 *entp = ent->next;
13334                 ent->next = *curentp;
13335                 *curentp = ent;
13336             }
13337             else
13338                 entp = &ent->next;
13339             ent = *entp;
13340         } while (ent);
13341     }
13342 }
13343
13344 /* remove all the entries from a ptr table */
13345 /* Deprecated - will be removed post 5.14 */
13346
13347 void
13348 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13349 {
13350     PERL_UNUSED_CONTEXT;
13351     if (tbl && tbl->tbl_items) {
13352         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13353
13354         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
13355
13356         while (arena) {
13357             struct ptr_tbl_arena *next = arena->next;
13358
13359             Safefree(arena);
13360             arena = next;
13361         };
13362
13363         tbl->tbl_items = 0;
13364         tbl->tbl_arena = NULL;
13365         tbl->tbl_arena_next = NULL;
13366         tbl->tbl_arena_end = NULL;
13367     }
13368 }
13369
13370 /* clear and free a ptr table */
13371
13372 void
13373 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13374 {
13375     struct ptr_tbl_arena *arena;
13376
13377     PERL_UNUSED_CONTEXT;
13378
13379     if (!tbl) {
13380         return;
13381     }
13382
13383     arena = tbl->tbl_arena;
13384
13385     while (arena) {
13386         struct ptr_tbl_arena *next = arena->next;
13387
13388         Safefree(arena);
13389         arena = next;
13390     }
13391
13392     Safefree(tbl->tbl_ary);
13393     Safefree(tbl);
13394 }
13395
13396 #if defined(USE_ITHREADS)
13397
13398 void
13399 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13400 {
13401     PERL_ARGS_ASSERT_RVPV_DUP;
13402
13403     assert(!isREGEXP(sstr));
13404     if (SvROK(sstr)) {
13405         if (SvWEAKREF(sstr)) {
13406             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13407             if (param->flags & CLONEf_JOIN_IN) {
13408                 /* if joining, we add any back references individually rather
13409                  * than copying the whole backref array */
13410                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13411             }
13412         }
13413         else
13414             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13415     }
13416     else if (SvPVX_const(sstr)) {
13417         /* Has something there */
13418         if (SvLEN(sstr)) {
13419             /* Normal PV - clone whole allocated space */
13420             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13421             /* sstr may not be that normal, but actually copy on write.
13422                But we are a true, independent SV, so:  */
13423             SvIsCOW_off(dstr);
13424         }
13425         else {
13426             /* Special case - not normally malloced for some reason */
13427             if (isGV_with_GP(sstr)) {
13428                 /* Don't need to do anything here.  */
13429             }
13430             else if ((SvIsCOW(sstr))) {
13431                 /* A "shared" PV - clone it as "shared" PV */
13432                 SvPV_set(dstr,
13433                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13434                                          param)));
13435             }
13436             else {
13437                 /* Some other special case - random pointer */
13438                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13439             }
13440         }
13441     }
13442     else {
13443         /* Copy the NULL */
13444         SvPV_set(dstr, NULL);
13445     }
13446 }
13447
13448 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13449 static SV **
13450 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13451                       SSize_t items, CLONE_PARAMS *const param)
13452 {
13453     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13454
13455     while (items-- > 0) {
13456         *dest++ = sv_dup_inc(*source++, param);
13457     }
13458
13459     return dest;
13460 }
13461
13462 /* duplicate an SV of any type (including AV, HV etc) */
13463
13464 static SV *
13465 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13466 {
13467     dVAR;
13468     SV *dstr;
13469
13470     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13471
13472     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13473 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13474         abort();
13475 #endif
13476         return NULL;
13477     }
13478     /* look for it in the table first */
13479     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13480     if (dstr)
13481         return dstr;
13482
13483     if(param->flags & CLONEf_JOIN_IN) {
13484         /** We are joining here so we don't want do clone
13485             something that is bad **/
13486         if (SvTYPE(sstr) == SVt_PVHV) {
13487             const HEK * const hvname = HvNAME_HEK(sstr);
13488             if (hvname) {
13489                 /** don't clone stashes if they already exist **/
13490                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13491                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13492                 ptr_table_store(PL_ptr_table, sstr, dstr);
13493                 return dstr;
13494             }
13495         }
13496         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13497             HV *stash = GvSTASH(sstr);
13498             const HEK * hvname;
13499             if (stash && (hvname = HvNAME_HEK(stash))) {
13500                 /** don't clone GVs if they already exist **/
13501                 SV **svp;
13502                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13503                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13504                 svp = hv_fetch(
13505                         stash, GvNAME(sstr),
13506                         GvNAMEUTF8(sstr)
13507                             ? -GvNAMELEN(sstr)
13508                             :  GvNAMELEN(sstr),
13509                         0
13510                       );
13511                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13512                     ptr_table_store(PL_ptr_table, sstr, *svp);
13513                     return *svp;
13514                 }
13515             }
13516         }
13517     }
13518
13519     /* create anew and remember what it is */
13520     new_SV(dstr);
13521
13522 #ifdef DEBUG_LEAKING_SCALARS
13523     dstr->sv_debug_optype = sstr->sv_debug_optype;
13524     dstr->sv_debug_line = sstr->sv_debug_line;
13525     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13526     dstr->sv_debug_parent = (SV*)sstr;
13527     FREE_SV_DEBUG_FILE(dstr);
13528     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13529 #endif
13530
13531     ptr_table_store(PL_ptr_table, sstr, dstr);
13532
13533     /* clone */
13534     SvFLAGS(dstr)       = SvFLAGS(sstr);
13535     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13536     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13537
13538 #ifdef DEBUGGING
13539     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13540         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13541                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13542 #endif
13543
13544     /* don't clone objects whose class has asked us not to */
13545     if (SvOBJECT(sstr)
13546      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13547     {
13548         SvFLAGS(dstr) = 0;
13549         return dstr;
13550     }
13551
13552     switch (SvTYPE(sstr)) {
13553     case SVt_NULL:
13554         SvANY(dstr)     = NULL;
13555         break;
13556     case SVt_IV:
13557         SET_SVANY_FOR_BODYLESS_IV(dstr);
13558         if(SvROK(sstr)) {
13559             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13560         } else {
13561             SvIV_set(dstr, SvIVX(sstr));
13562         }
13563         break;
13564     case SVt_NV:
13565 #if NVSIZE <= IVSIZE
13566         SET_SVANY_FOR_BODYLESS_NV(dstr);
13567 #else
13568         SvANY(dstr)     = new_XNV();
13569 #endif
13570         SvNV_set(dstr, SvNVX(sstr));
13571         break;
13572     default:
13573         {
13574             /* These are all the types that need complex bodies allocating.  */
13575             void *new_body;
13576             const svtype sv_type = SvTYPE(sstr);
13577             const struct body_details *const sv_type_details
13578                 = bodies_by_type + sv_type;
13579
13580             switch (sv_type) {
13581             default:
13582                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13583                 break;
13584
13585             case SVt_PVGV:
13586             case SVt_PVIO:
13587             case SVt_PVFM:
13588             case SVt_PVHV:
13589             case SVt_PVAV:
13590             case SVt_PVCV:
13591             case SVt_PVLV:
13592             case SVt_REGEXP:
13593             case SVt_PVMG:
13594             case SVt_PVNV:
13595             case SVt_PVIV:
13596             case SVt_INVLIST:
13597             case SVt_PV:
13598                 assert(sv_type_details->body_size);
13599                 if (sv_type_details->arena) {
13600                     new_body_inline(new_body, sv_type);
13601                     new_body
13602                         = (void*)((char*)new_body - sv_type_details->offset);
13603                 } else {
13604                     new_body = new_NOARENA(sv_type_details);
13605                 }
13606             }
13607             assert(new_body);
13608             SvANY(dstr) = new_body;
13609
13610 #ifndef PURIFY
13611             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13612                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13613                  sv_type_details->copy, char);
13614 #else
13615             Copy(((char*)SvANY(sstr)),
13616                  ((char*)SvANY(dstr)),
13617                  sv_type_details->body_size + sv_type_details->offset, char);
13618 #endif
13619
13620             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13621                 && !isGV_with_GP(dstr)
13622                 && !isREGEXP(dstr)
13623                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13624                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13625
13626             /* The Copy above means that all the source (unduplicated) pointers
13627                are now in the destination.  We can check the flags and the
13628                pointers in either, but it's possible that there's less cache
13629                missing by always going for the destination.
13630                FIXME - instrument and check that assumption  */
13631             if (sv_type >= SVt_PVMG) {
13632                 if (SvMAGIC(dstr))
13633                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13634                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13635                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13636                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13637             }
13638
13639             /* The cast silences a GCC warning about unhandled types.  */
13640             switch ((int)sv_type) {
13641             case SVt_PV:
13642                 break;
13643             case SVt_PVIV:
13644                 break;
13645             case SVt_PVNV:
13646                 break;
13647             case SVt_PVMG:
13648                 break;
13649             case SVt_REGEXP:
13650               duprex:
13651                 /* FIXME for plugins */
13652                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13653                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13654                 break;
13655             case SVt_PVLV:
13656                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13657                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13658                     LvTARG(dstr) = dstr;
13659                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13660                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13661                 else
13662                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13663                 if (isREGEXP(sstr)) goto duprex;
13664             case SVt_PVGV:
13665                 /* non-GP case already handled above */
13666                 if(isGV_with_GP(sstr)) {
13667                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13668                     /* Don't call sv_add_backref here as it's going to be
13669                        created as part of the magic cloning of the symbol
13670                        table--unless this is during a join and the stash
13671                        is not actually being cloned.  */
13672                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13673                        at the point of this comment.  */
13674                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13675                     if (param->flags & CLONEf_JOIN_IN)
13676                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13677                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13678                     (void)GpREFCNT_inc(GvGP(dstr));
13679                 }
13680                 break;
13681             case SVt_PVIO:
13682                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13683                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13684                     /* I have no idea why fake dirp (rsfps)
13685                        should be treated differently but otherwise
13686                        we end up with leaks -- sky*/
13687                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13688                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13689                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13690                 } else {
13691                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13692                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13693                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13694                     if (IoDIRP(dstr)) {
13695                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13696                     } else {
13697                         NOOP;
13698                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13699                     }
13700                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13701                 }
13702                 if (IoOFP(dstr) == IoIFP(sstr))
13703                     IoOFP(dstr) = IoIFP(dstr);
13704                 else
13705                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13706                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13707                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13708                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13709                 break;
13710             case SVt_PVAV:
13711                 /* avoid cloning an empty array */
13712                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13713                     SV **dst_ary, **src_ary;
13714                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13715
13716                     src_ary = AvARRAY((const AV *)sstr);
13717                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13718                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13719                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13720                     AvALLOC((const AV *)dstr) = dst_ary;
13721                     if (AvREAL((const AV *)sstr)) {
13722                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13723                                                       param);
13724                     }
13725                     else {
13726                         while (items-- > 0)
13727                             *dst_ary++ = sv_dup(*src_ary++, param);
13728                     }
13729                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13730                     while (items-- > 0) {
13731                         *dst_ary++ = &PL_sv_undef;
13732                     }
13733                 }
13734                 else {
13735                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13736                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13737                     AvMAX(  (const AV *)dstr)   = -1;
13738                     AvFILLp((const AV *)dstr)   = -1;
13739                 }
13740                 break;
13741             case SVt_PVHV:
13742                 if (HvARRAY((const HV *)sstr)) {
13743                     STRLEN i = 0;
13744                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13745                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13746                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13747                     char *darray;
13748                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13749                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13750                         char);
13751                     HvARRAY(dstr) = (HE**)darray;
13752                     while (i <= sxhv->xhv_max) {
13753                         const HE * const source = HvARRAY(sstr)[i];
13754                         HvARRAY(dstr)[i] = source
13755                             ? he_dup(source, sharekeys, param) : 0;
13756                         ++i;
13757                     }
13758                     if (SvOOK(sstr)) {
13759                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13760                         struct xpvhv_aux * const daux = HvAUX(dstr);
13761                         /* This flag isn't copied.  */
13762                         SvOOK_on(dstr);
13763
13764                         if (saux->xhv_name_count) {
13765                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13766                             const I32 count
13767                              = saux->xhv_name_count < 0
13768                                 ? -saux->xhv_name_count
13769                                 :  saux->xhv_name_count;
13770                             HEK **shekp = sname + count;
13771                             HEK **dhekp;
13772                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13773                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13774                             while (shekp-- > sname) {
13775                                 dhekp--;
13776                                 *dhekp = hek_dup(*shekp, param);
13777                             }
13778                         }
13779                         else {
13780                             daux->xhv_name_u.xhvnameu_name
13781                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13782                                           param);
13783                         }
13784                         daux->xhv_name_count = saux->xhv_name_count;
13785
13786                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13787                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13788 #ifdef PERL_HASH_RANDOMIZE_KEYS
13789                         daux->xhv_rand = saux->xhv_rand;
13790                         daux->xhv_last_rand = saux->xhv_last_rand;
13791 #endif
13792                         daux->xhv_riter = saux->xhv_riter;
13793                         daux->xhv_eiter = saux->xhv_eiter
13794                             ? he_dup(saux->xhv_eiter,
13795                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13796                         /* backref array needs refcnt=2; see sv_add_backref */
13797                         daux->xhv_backreferences =
13798                             (param->flags & CLONEf_JOIN_IN)
13799                                 /* when joining, we let the individual GVs and
13800                                  * CVs add themselves to backref as
13801                                  * needed. This avoids pulling in stuff
13802                                  * that isn't required, and simplifies the
13803                                  * case where stashes aren't cloned back
13804                                  * if they already exist in the parent
13805                                  * thread */
13806                             ? NULL
13807                             : saux->xhv_backreferences
13808                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13809                                     ? MUTABLE_AV(SvREFCNT_inc(
13810                                           sv_dup_inc((const SV *)
13811                                             saux->xhv_backreferences, param)))
13812                                     : MUTABLE_AV(sv_dup((const SV *)
13813                                             saux->xhv_backreferences, param))
13814                                 : 0;
13815
13816                         daux->xhv_mro_meta = saux->xhv_mro_meta
13817                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13818                             : 0;
13819
13820                         /* Record stashes for possible cloning in Perl_clone(). */
13821                         if (HvNAME(sstr))
13822                             av_push(param->stashes, dstr);
13823                     }
13824                 }
13825                 else
13826                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13827                 break;
13828             case SVt_PVCV:
13829                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13830                     CvDEPTH(dstr) = 0;
13831                 }
13832                 /* FALLTHROUGH */
13833             case SVt_PVFM:
13834                 /* NOTE: not refcounted */
13835                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13836                     hv_dup(CvSTASH(dstr), param);
13837                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13838                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13839                 if (!CvISXSUB(dstr)) {
13840                     OP_REFCNT_LOCK;
13841                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13842                     OP_REFCNT_UNLOCK;
13843                     CvSLABBED_off(dstr);
13844                 } else if (CvCONST(dstr)) {
13845                     CvXSUBANY(dstr).any_ptr =
13846                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13847                 }
13848                 assert(!CvSLABBED(dstr));
13849                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13850                 if (CvNAMED(dstr))
13851                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13852                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13853                 /* don't dup if copying back - CvGV isn't refcounted, so the
13854                  * duped GV may never be freed. A bit of a hack! DAPM */
13855                 else
13856                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13857                     CvCVGV_RC(dstr)
13858                     ? gv_dup_inc(CvGV(sstr), param)
13859                     : (param->flags & CLONEf_JOIN_IN)
13860                         ? NULL
13861                         : gv_dup(CvGV(sstr), param);
13862
13863                 if (!CvISXSUB(sstr)) {
13864                     PADLIST * padlist = CvPADLIST(sstr);
13865                     if(padlist)
13866                         padlist = padlist_dup(padlist, param);
13867                     CvPADLIST_set(dstr, padlist);
13868                 } else
13869 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13870                     PoisonPADLIST(dstr);
13871
13872                 CvOUTSIDE(dstr) =
13873                     CvWEAKOUTSIDE(sstr)
13874                     ? cv_dup(    CvOUTSIDE(dstr), param)
13875                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13876                 break;
13877             }
13878         }
13879     }
13880
13881     return dstr;
13882  }
13883
13884 SV *
13885 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13886 {
13887     PERL_ARGS_ASSERT_SV_DUP_INC;
13888     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13889 }
13890
13891 SV *
13892 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13893 {
13894     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13895     PERL_ARGS_ASSERT_SV_DUP;
13896
13897     /* Track every SV that (at least initially) had a reference count of 0.
13898        We need to do this by holding an actual reference to it in this array.
13899        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13900        (akin to the stashes hash, and the perl stack), we come unstuck if
13901        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13902        thread) is manipulated in a CLONE method, because CLONE runs before the
13903        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13904        (and fix things up by giving each a reference via the temps stack).
13905        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13906        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13907        before the walk of unreferenced happens and a reference to that is SV
13908        added to the temps stack. At which point we have the same SV considered
13909        to be in use, and free to be re-used. Not good.
13910     */
13911     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13912         assert(param->unreferenced);
13913         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13914     }
13915
13916     return dstr;
13917 }
13918
13919 /* duplicate a context */
13920
13921 PERL_CONTEXT *
13922 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13923 {
13924     PERL_CONTEXT *ncxs;
13925
13926     PERL_ARGS_ASSERT_CX_DUP;
13927
13928     if (!cxs)
13929         return (PERL_CONTEXT*)NULL;
13930
13931     /* look for it in the table first */
13932     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13933     if (ncxs)
13934         return ncxs;
13935
13936     /* create anew and remember what it is */
13937     Newx(ncxs, max + 1, PERL_CONTEXT);
13938     ptr_table_store(PL_ptr_table, cxs, ncxs);
13939     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13940
13941     while (ix >= 0) {
13942         PERL_CONTEXT * const ncx = &ncxs[ix];
13943         if (CxTYPE(ncx) == CXt_SUBST) {
13944             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13945         }
13946         else {
13947             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13948             switch (CxTYPE(ncx)) {
13949             case CXt_SUB:
13950                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13951                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13952                                            : cv_dup(ncx->blk_sub.cv,param));
13953                 if(CxHASARGS(ncx)){
13954                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13955                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13956                 } else {
13957                     ncx->blk_sub.argarray = NULL;
13958                     ncx->blk_sub.savearray = NULL;
13959                 }
13960                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13961                                            ncx->blk_sub.oldcomppad);
13962                 break;
13963             case CXt_EVAL:
13964                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13965                                                       param);
13966                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13967                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13968                 break;
13969             case CXt_LOOP_LAZYSV:
13970                 ncx->blk_loop.state_u.lazysv.end
13971                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13972                 /* We are taking advantage of av_dup_inc and sv_dup_inc
13973                    actually being the same function, and order equivalence of
13974                    the two unions.
13975                    We can assert the later [but only at run time :-(]  */
13976                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13977                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13978             case CXt_LOOP_FOR:
13979                 ncx->blk_loop.state_u.ary.ary
13980                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13981             case CXt_LOOP_LAZYIV:
13982             case CXt_LOOP_PLAIN:
13983                 if (CxPADLOOP(ncx)) {
13984                     ncx->blk_loop.itervar_u.oldcomppad
13985                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13986                                         ncx->blk_loop.itervar_u.oldcomppad);
13987                 } else {
13988                     ncx->blk_loop.itervar_u.gv
13989                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13990                                     param);
13991                 }
13992                 break;
13993             case CXt_FORMAT:
13994                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13995                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13996                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13997                                                      param);
13998                 break;
13999             case CXt_BLOCK:
14000             case CXt_NULL:
14001             case CXt_WHEN:
14002             case CXt_GIVEN:
14003                 break;
14004             }
14005         }
14006         --ix;
14007     }
14008     return ncxs;
14009 }
14010
14011 /* duplicate a stack info structure */
14012
14013 PERL_SI *
14014 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14015 {
14016     PERL_SI *nsi;
14017
14018     PERL_ARGS_ASSERT_SI_DUP;
14019
14020     if (!si)
14021         return (PERL_SI*)NULL;
14022
14023     /* look for it in the table first */
14024     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14025     if (nsi)
14026         return nsi;
14027
14028     /* create anew and remember what it is */
14029     Newxz(nsi, 1, PERL_SI);
14030     ptr_table_store(PL_ptr_table, si, nsi);
14031
14032     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14033     nsi->si_cxix        = si->si_cxix;
14034     nsi->si_cxmax       = si->si_cxmax;
14035     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14036     nsi->si_type        = si->si_type;
14037     nsi->si_prev        = si_dup(si->si_prev, param);
14038     nsi->si_next        = si_dup(si->si_next, param);
14039     nsi->si_markoff     = si->si_markoff;
14040
14041     return nsi;
14042 }
14043
14044 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14045 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14046 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14047 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14048 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14049 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14050 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14051 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14052 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14053 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14054 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14055 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14056 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14057 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14058 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14059 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14060
14061 /* XXXXX todo */
14062 #define pv_dup_inc(p)   SAVEPV(p)
14063 #define pv_dup(p)       SAVEPV(p)
14064 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14065
14066 /* map any object to the new equivent - either something in the
14067  * ptr table, or something in the interpreter structure
14068  */
14069
14070 void *
14071 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14072 {
14073     void *ret;
14074
14075     PERL_ARGS_ASSERT_ANY_DUP;
14076
14077     if (!v)
14078         return (void*)NULL;
14079
14080     /* look for it in the table first */
14081     ret = ptr_table_fetch(PL_ptr_table, v);
14082     if (ret)
14083         return ret;
14084
14085     /* see if it is part of the interpreter structure */
14086     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14087         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14088     else {
14089         ret = v;
14090     }
14091
14092     return ret;
14093 }
14094
14095 /* duplicate the save stack */
14096
14097 ANY *
14098 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14099 {
14100     dVAR;
14101     ANY * const ss      = proto_perl->Isavestack;
14102     const I32 max       = proto_perl->Isavestack_max;
14103     I32 ix              = proto_perl->Isavestack_ix;
14104     ANY *nss;
14105     const SV *sv;
14106     const GV *gv;
14107     const AV *av;
14108     const HV *hv;
14109     void* ptr;
14110     int intval;
14111     long longval;
14112     GP *gp;
14113     IV iv;
14114     I32 i;
14115     char *c = NULL;
14116     void (*dptr) (void*);
14117     void (*dxptr) (pTHX_ void*);
14118
14119     PERL_ARGS_ASSERT_SS_DUP;
14120
14121     Newxz(nss, max, ANY);
14122
14123     while (ix > 0) {
14124         const UV uv = POPUV(ss,ix);
14125         const U8 type = (U8)uv & SAVE_MASK;
14126
14127         TOPUV(nss,ix) = uv;
14128         switch (type) {
14129         case SAVEt_CLEARSV:
14130         case SAVEt_CLEARPADRANGE:
14131             break;
14132         case SAVEt_HELEM:               /* hash element */
14133         case SAVEt_SV:                  /* scalar reference */
14134             sv = (const SV *)POPPTR(ss,ix);
14135             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14136             /* FALLTHROUGH */
14137         case SAVEt_ITEM:                        /* normal string */
14138         case SAVEt_GVSV:                        /* scalar slot in GV */
14139             sv = (const SV *)POPPTR(ss,ix);
14140             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14141             if (type == SAVEt_SV)
14142                 break;
14143             /* FALLTHROUGH */
14144         case SAVEt_FREESV:
14145         case SAVEt_MORTALIZESV:
14146         case SAVEt_READONLY_OFF:
14147             sv = (const SV *)POPPTR(ss,ix);
14148             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14149             break;
14150         case SAVEt_FREEPADNAME:
14151             ptr = POPPTR(ss,ix);
14152             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14153             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14154             break;
14155         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14156             c = (char*)POPPTR(ss,ix);
14157             TOPPTR(nss,ix) = savesharedpv(c);
14158             ptr = POPPTR(ss,ix);
14159             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14160             break;
14161         case SAVEt_GENERIC_SVREF:               /* generic sv */
14162         case SAVEt_SVREF:                       /* scalar reference */
14163             sv = (const SV *)POPPTR(ss,ix);
14164             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14165             if (type == SAVEt_SVREF)
14166                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14167             ptr = POPPTR(ss,ix);
14168             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14169             break;
14170         case SAVEt_GVSLOT:              /* any slot in GV */
14171             sv = (const SV *)POPPTR(ss,ix);
14172             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14173             ptr = POPPTR(ss,ix);
14174             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14175             sv = (const SV *)POPPTR(ss,ix);
14176             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14177             break;
14178         case SAVEt_HV:                          /* hash reference */
14179         case SAVEt_AV:                          /* array reference */
14180             sv = (const SV *) POPPTR(ss,ix);
14181             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14182             /* FALLTHROUGH */
14183         case SAVEt_COMPPAD:
14184         case SAVEt_NSTAB:
14185             sv = (const SV *) POPPTR(ss,ix);
14186             TOPPTR(nss,ix) = sv_dup(sv, param);
14187             break;
14188         case SAVEt_INT:                         /* int reference */
14189             ptr = POPPTR(ss,ix);
14190             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14191             intval = (int)POPINT(ss,ix);
14192             TOPINT(nss,ix) = intval;
14193             break;
14194         case SAVEt_LONG:                        /* long reference */
14195             ptr = POPPTR(ss,ix);
14196             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14197             longval = (long)POPLONG(ss,ix);
14198             TOPLONG(nss,ix) = longval;
14199             break;
14200         case SAVEt_I32:                         /* I32 reference */
14201             ptr = POPPTR(ss,ix);
14202             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14203             i = POPINT(ss,ix);
14204             TOPINT(nss,ix) = i;
14205             break;
14206         case SAVEt_IV:                          /* IV reference */
14207         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14208             ptr = POPPTR(ss,ix);
14209             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14210             iv = POPIV(ss,ix);
14211             TOPIV(nss,ix) = iv;
14212             break;
14213         case SAVEt_HPTR:                        /* HV* reference */
14214         case SAVEt_APTR:                        /* AV* reference */
14215         case SAVEt_SPTR:                        /* SV* reference */
14216             ptr = POPPTR(ss,ix);
14217             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14218             sv = (const SV *)POPPTR(ss,ix);
14219             TOPPTR(nss,ix) = sv_dup(sv, param);
14220             break;
14221         case SAVEt_VPTR:                        /* random* reference */
14222             ptr = POPPTR(ss,ix);
14223             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14224             /* FALLTHROUGH */
14225         case SAVEt_INT_SMALL:
14226         case SAVEt_I32_SMALL:
14227         case SAVEt_I16:                         /* I16 reference */
14228         case SAVEt_I8:                          /* I8 reference */
14229         case SAVEt_BOOL:
14230             ptr = POPPTR(ss,ix);
14231             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14232             break;
14233         case SAVEt_GENERIC_PVREF:               /* generic char* */
14234         case SAVEt_PPTR:                        /* char* reference */
14235             ptr = POPPTR(ss,ix);
14236             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14237             c = (char*)POPPTR(ss,ix);
14238             TOPPTR(nss,ix) = pv_dup(c);
14239             break;
14240         case SAVEt_GP:                          /* scalar reference */
14241             gp = (GP*)POPPTR(ss,ix);
14242             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14243             (void)GpREFCNT_inc(gp);
14244             gv = (const GV *)POPPTR(ss,ix);
14245             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14246             break;
14247         case SAVEt_FREEOP:
14248             ptr = POPPTR(ss,ix);
14249             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14250                 /* these are assumed to be refcounted properly */
14251                 OP *o;
14252                 switch (((OP*)ptr)->op_type) {
14253                 case OP_LEAVESUB:
14254                 case OP_LEAVESUBLV:
14255                 case OP_LEAVEEVAL:
14256                 case OP_LEAVE:
14257                 case OP_SCOPE:
14258                 case OP_LEAVEWRITE:
14259                     TOPPTR(nss,ix) = ptr;
14260                     o = (OP*)ptr;
14261                     OP_REFCNT_LOCK;
14262                     (void) OpREFCNT_inc(o);
14263                     OP_REFCNT_UNLOCK;
14264                     break;
14265                 default:
14266                     TOPPTR(nss,ix) = NULL;
14267                     break;
14268                 }
14269             }
14270             else
14271                 TOPPTR(nss,ix) = NULL;
14272             break;
14273         case SAVEt_FREECOPHH:
14274             ptr = POPPTR(ss,ix);
14275             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14276             break;
14277         case SAVEt_ADELETE:
14278             av = (const AV *)POPPTR(ss,ix);
14279             TOPPTR(nss,ix) = av_dup_inc(av, param);
14280             i = POPINT(ss,ix);
14281             TOPINT(nss,ix) = i;
14282             break;
14283         case SAVEt_DELETE:
14284             hv = (const HV *)POPPTR(ss,ix);
14285             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14286             i = POPINT(ss,ix);
14287             TOPINT(nss,ix) = i;
14288             /* FALLTHROUGH */
14289         case SAVEt_FREEPV:
14290             c = (char*)POPPTR(ss,ix);
14291             TOPPTR(nss,ix) = pv_dup_inc(c);
14292             break;
14293         case SAVEt_STACK_POS:           /* Position on Perl stack */
14294             i = POPINT(ss,ix);
14295             TOPINT(nss,ix) = i;
14296             break;
14297         case SAVEt_DESTRUCTOR:
14298             ptr = POPPTR(ss,ix);
14299             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14300             dptr = POPDPTR(ss,ix);
14301             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14302                                         any_dup(FPTR2DPTR(void *, dptr),
14303                                                 proto_perl));
14304             break;
14305         case SAVEt_DESTRUCTOR_X:
14306             ptr = POPPTR(ss,ix);
14307             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14308             dxptr = POPDXPTR(ss,ix);
14309             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14310                                          any_dup(FPTR2DPTR(void *, dxptr),
14311                                                  proto_perl));
14312             break;
14313         case SAVEt_REGCONTEXT:
14314         case SAVEt_ALLOC:
14315             ix -= uv >> SAVE_TIGHT_SHIFT;
14316             break;
14317         case SAVEt_AELEM:               /* array element */
14318             sv = (const SV *)POPPTR(ss,ix);
14319             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14320             i = POPINT(ss,ix);
14321             TOPINT(nss,ix) = i;
14322             av = (const AV *)POPPTR(ss,ix);
14323             TOPPTR(nss,ix) = av_dup_inc(av, param);
14324             break;
14325         case SAVEt_OP:
14326             ptr = POPPTR(ss,ix);
14327             TOPPTR(nss,ix) = ptr;
14328             break;
14329         case SAVEt_HINTS:
14330             ptr = POPPTR(ss,ix);
14331             ptr = cophh_copy((COPHH*)ptr);
14332             TOPPTR(nss,ix) = ptr;
14333             i = POPINT(ss,ix);
14334             TOPINT(nss,ix) = i;
14335             if (i & HINT_LOCALIZE_HH) {
14336                 hv = (const HV *)POPPTR(ss,ix);
14337                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14338             }
14339             break;
14340         case SAVEt_PADSV_AND_MORTALIZE:
14341             longval = (long)POPLONG(ss,ix);
14342             TOPLONG(nss,ix) = longval;
14343             ptr = POPPTR(ss,ix);
14344             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14345             sv = (const SV *)POPPTR(ss,ix);
14346             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14347             break;
14348         case SAVEt_SET_SVFLAGS:
14349             i = POPINT(ss,ix);
14350             TOPINT(nss,ix) = i;
14351             i = POPINT(ss,ix);
14352             TOPINT(nss,ix) = i;
14353             sv = (const SV *)POPPTR(ss,ix);
14354             TOPPTR(nss,ix) = sv_dup(sv, param);
14355             break;
14356         case SAVEt_COMPILE_WARNINGS:
14357             ptr = POPPTR(ss,ix);
14358             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14359             break;
14360         case SAVEt_PARSER:
14361             ptr = POPPTR(ss,ix);
14362             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14363             break;
14364         case SAVEt_GP_ALIASED_SV: {
14365             GP * gp_ptr = (GP *)POPPTR(ss,ix);
14366             GP * new_gp_ptr = gp_dup(gp_ptr, param);
14367             TOPPTR(nss,ix) = new_gp_ptr;
14368             new_gp_ptr->gp_refcnt++;
14369             break;
14370         }
14371         default:
14372             Perl_croak(aTHX_
14373                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14374         }
14375     }
14376
14377     return nss;
14378 }
14379
14380
14381 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14382  * flag to the result. This is done for each stash before cloning starts,
14383  * so we know which stashes want their objects cloned */
14384
14385 static void
14386 do_mark_cloneable_stash(pTHX_ SV *const sv)
14387 {
14388     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14389     if (hvname) {
14390         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14391         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14392         if (cloner && GvCV(cloner)) {
14393             dSP;
14394             UV status;
14395
14396             ENTER;
14397             SAVETMPS;
14398             PUSHMARK(SP);
14399             mXPUSHs(newSVhek(hvname));
14400             PUTBACK;
14401             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14402             SPAGAIN;
14403             status = POPu;
14404             PUTBACK;
14405             FREETMPS;
14406             LEAVE;
14407             if (status)
14408                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14409         }
14410     }
14411 }
14412
14413
14414
14415 /*
14416 =for apidoc perl_clone
14417
14418 Create and return a new interpreter by cloning the current one.
14419
14420 perl_clone takes these flags as parameters:
14421
14422 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
14423 without it we only clone the data and zero the stacks,
14424 with it we copy the stacks and the new perl interpreter is
14425 ready to run at the exact same point as the previous one.
14426 The pseudo-fork code uses COPY_STACKS while the
14427 threads->create doesn't.
14428
14429 CLONEf_KEEP_PTR_TABLE -
14430 perl_clone keeps a ptr_table with the pointer of the old
14431 variable as a key and the new variable as a value,
14432 this allows it to check if something has been cloned and not
14433 clone it again but rather just use the value and increase the
14434 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
14435 the ptr_table using the function
14436 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14437 reason to keep it around is if you want to dup some of your own
14438 variable who are outside the graph perl scans, example of this
14439 code is in threads.xs create.
14440
14441 CLONEf_CLONE_HOST -
14442 This is a win32 thing, it is ignored on unix, it tells perls
14443 win32host code (which is c++) to clone itself, this is needed on
14444 win32 if you want to run two threads at the same time,
14445 if you just want to do some stuff in a separate perl interpreter
14446 and then throw it away and return to the original one,
14447 you don't need to do anything.
14448
14449 =cut
14450 */
14451
14452 /* XXX the above needs expanding by someone who actually understands it ! */
14453 EXTERN_C PerlInterpreter *
14454 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14455
14456 PerlInterpreter *
14457 perl_clone(PerlInterpreter *proto_perl, UV flags)
14458 {
14459    dVAR;
14460 #ifdef PERL_IMPLICIT_SYS
14461
14462     PERL_ARGS_ASSERT_PERL_CLONE;
14463
14464    /* perlhost.h so we need to call into it
14465    to clone the host, CPerlHost should have a c interface, sky */
14466
14467    if (flags & CLONEf_CLONE_HOST) {
14468        return perl_clone_host(proto_perl,flags);
14469    }
14470    return perl_clone_using(proto_perl, flags,
14471                             proto_perl->IMem,
14472                             proto_perl->IMemShared,
14473                             proto_perl->IMemParse,
14474                             proto_perl->IEnv,
14475                             proto_perl->IStdIO,
14476                             proto_perl->ILIO,
14477                             proto_perl->IDir,
14478                             proto_perl->ISock,
14479                             proto_perl->IProc);
14480 }
14481
14482 PerlInterpreter *
14483 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14484                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14485                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14486                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14487                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14488                  struct IPerlProc* ipP)
14489 {
14490     /* XXX many of the string copies here can be optimized if they're
14491      * constants; they need to be allocated as common memory and just
14492      * their pointers copied. */
14493
14494     IV i;
14495     CLONE_PARAMS clone_params;
14496     CLONE_PARAMS* const param = &clone_params;
14497
14498     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14499
14500     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14501 #else           /* !PERL_IMPLICIT_SYS */
14502     IV i;
14503     CLONE_PARAMS clone_params;
14504     CLONE_PARAMS* param = &clone_params;
14505     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14506
14507     PERL_ARGS_ASSERT_PERL_CLONE;
14508 #endif          /* PERL_IMPLICIT_SYS */
14509
14510     /* for each stash, determine whether its objects should be cloned */
14511     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14512     PERL_SET_THX(my_perl);
14513
14514 #ifdef DEBUGGING
14515     PoisonNew(my_perl, 1, PerlInterpreter);
14516     PL_op = NULL;
14517     PL_curcop = NULL;
14518     PL_defstash = NULL; /* may be used by perl malloc() */
14519     PL_markstack = 0;
14520     PL_scopestack = 0;
14521     PL_scopestack_name = 0;
14522     PL_savestack = 0;
14523     PL_savestack_ix = 0;
14524     PL_savestack_max = -1;
14525     PL_sig_pending = 0;
14526     PL_parser = NULL;
14527     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14528     Zero(&PL_padname_undef, 1, PADNAME);
14529     Zero(&PL_padname_const, 1, PADNAME);
14530 #  ifdef DEBUG_LEAKING_SCALARS
14531     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14532 #  endif
14533 #else   /* !DEBUGGING */
14534     Zero(my_perl, 1, PerlInterpreter);
14535 #endif  /* DEBUGGING */
14536
14537 #ifdef PERL_IMPLICIT_SYS
14538     /* host pointers */
14539     PL_Mem              = ipM;
14540     PL_MemShared        = ipMS;
14541     PL_MemParse         = ipMP;
14542     PL_Env              = ipE;
14543     PL_StdIO            = ipStd;
14544     PL_LIO              = ipLIO;
14545     PL_Dir              = ipD;
14546     PL_Sock             = ipS;
14547     PL_Proc             = ipP;
14548 #endif          /* PERL_IMPLICIT_SYS */
14549
14550
14551     param->flags = flags;
14552     /* Nothing in the core code uses this, but we make it available to
14553        extensions (using mg_dup).  */
14554     param->proto_perl = proto_perl;
14555     /* Likely nothing will use this, but it is initialised to be consistent
14556        with Perl_clone_params_new().  */
14557     param->new_perl = my_perl;
14558     param->unreferenced = NULL;
14559
14560
14561     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14562
14563     PL_body_arenas = NULL;
14564     Zero(&PL_body_roots, 1, PL_body_roots);
14565     
14566     PL_sv_count         = 0;
14567     PL_sv_root          = NULL;
14568     PL_sv_arenaroot     = NULL;
14569
14570     PL_debug            = proto_perl->Idebug;
14571
14572     /* dbargs array probably holds garbage */
14573     PL_dbargs           = NULL;
14574
14575     PL_compiling = proto_perl->Icompiling;
14576
14577     /* pseudo environmental stuff */
14578     PL_origargc         = proto_perl->Iorigargc;
14579     PL_origargv         = proto_perl->Iorigargv;
14580
14581 #ifndef NO_TAINT_SUPPORT
14582     /* Set tainting stuff before PerlIO_debug can possibly get called */
14583     PL_tainting         = proto_perl->Itainting;
14584     PL_taint_warn       = proto_perl->Itaint_warn;
14585 #else
14586     PL_tainting         = FALSE;
14587     PL_taint_warn       = FALSE;
14588 #endif
14589
14590     PL_minus_c          = proto_perl->Iminus_c;
14591
14592     PL_localpatches     = proto_perl->Ilocalpatches;
14593     PL_splitstr         = proto_perl->Isplitstr;
14594     PL_minus_n          = proto_perl->Iminus_n;
14595     PL_minus_p          = proto_perl->Iminus_p;
14596     PL_minus_l          = proto_perl->Iminus_l;
14597     PL_minus_a          = proto_perl->Iminus_a;
14598     PL_minus_E          = proto_perl->Iminus_E;
14599     PL_minus_F          = proto_perl->Iminus_F;
14600     PL_doswitches       = proto_perl->Idoswitches;
14601     PL_dowarn           = proto_perl->Idowarn;
14602     PL_sawalias         = proto_perl->Isawalias;
14603 #ifdef PERL_SAWAMPERSAND
14604     PL_sawampersand     = proto_perl->Isawampersand;
14605 #endif
14606     PL_unsafe           = proto_perl->Iunsafe;
14607     PL_perldb           = proto_perl->Iperldb;
14608     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14609     PL_exit_flags       = proto_perl->Iexit_flags;
14610
14611     /* XXX time(&PL_basetime) when asked for? */
14612     PL_basetime         = proto_perl->Ibasetime;
14613
14614     PL_maxsysfd         = proto_perl->Imaxsysfd;
14615     PL_statusvalue      = proto_perl->Istatusvalue;
14616 #ifdef __VMS
14617     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14618 #else
14619     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14620 #endif
14621
14622     /* RE engine related */
14623     PL_regmatch_slab    = NULL;
14624     PL_reg_curpm        = NULL;
14625
14626     PL_sub_generation   = proto_perl->Isub_generation;
14627
14628     /* funky return mechanisms */
14629     PL_forkprocess      = proto_perl->Iforkprocess;
14630
14631     /* internal state */
14632     PL_maxo             = proto_perl->Imaxo;
14633
14634     PL_main_start       = proto_perl->Imain_start;
14635     PL_eval_root        = proto_perl->Ieval_root;
14636     PL_eval_start       = proto_perl->Ieval_start;
14637
14638     PL_filemode         = proto_perl->Ifilemode;
14639     PL_lastfd           = proto_perl->Ilastfd;
14640     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14641     PL_Argv             = NULL;
14642     PL_Cmd              = NULL;
14643     PL_gensym           = proto_perl->Igensym;
14644
14645     PL_laststatval      = proto_perl->Ilaststatval;
14646     PL_laststype        = proto_perl->Ilaststype;
14647     PL_mess_sv          = NULL;
14648
14649     PL_profiledata      = NULL;
14650
14651     PL_generation       = proto_perl->Igeneration;
14652
14653     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14654     PL_in_clean_all     = proto_perl->Iin_clean_all;
14655
14656     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14657     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14658     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14659     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14660     PL_nomemok          = proto_perl->Inomemok;
14661     PL_an               = proto_perl->Ian;
14662     PL_evalseq          = proto_perl->Ievalseq;
14663     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14664     PL_origalen         = proto_perl->Iorigalen;
14665
14666     PL_sighandlerp      = proto_perl->Isighandlerp;
14667
14668     PL_runops           = proto_perl->Irunops;
14669
14670     PL_subline          = proto_perl->Isubline;
14671
14672     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14673
14674 #ifdef FCRYPT
14675     PL_cryptseen        = proto_perl->Icryptseen;
14676 #endif
14677
14678 #ifdef USE_LOCALE_COLLATE
14679     PL_collation_ix     = proto_perl->Icollation_ix;
14680     PL_collation_standard       = proto_perl->Icollation_standard;
14681     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14682     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14683 #endif /* USE_LOCALE_COLLATE */
14684
14685 #ifdef USE_LOCALE_NUMERIC
14686     PL_numeric_standard = proto_perl->Inumeric_standard;
14687     PL_numeric_local    = proto_perl->Inumeric_local;
14688 #endif /* !USE_LOCALE_NUMERIC */
14689
14690     /* Did the locale setup indicate UTF-8? */
14691     PL_utf8locale       = proto_perl->Iutf8locale;
14692     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14693     /* Unicode features (see perlrun/-C) */
14694     PL_unicode          = proto_perl->Iunicode;
14695
14696     /* Pre-5.8 signals control */
14697     PL_signals          = proto_perl->Isignals;
14698
14699     /* times() ticks per second */
14700     PL_clocktick        = proto_perl->Iclocktick;
14701
14702     /* Recursion stopper for PerlIO_find_layer */
14703     PL_in_load_module   = proto_perl->Iin_load_module;
14704
14705     /* sort() routine */
14706     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14707
14708     /* Not really needed/useful since the reenrant_retint is "volatile",
14709      * but do it for consistency's sake. */
14710     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14711
14712     /* Hooks to shared SVs and locks. */
14713     PL_sharehook        = proto_perl->Isharehook;
14714     PL_lockhook         = proto_perl->Ilockhook;
14715     PL_unlockhook       = proto_perl->Iunlockhook;
14716     PL_threadhook       = proto_perl->Ithreadhook;
14717     PL_destroyhook      = proto_perl->Idestroyhook;
14718     PL_signalhook       = proto_perl->Isignalhook;
14719
14720     PL_globhook         = proto_perl->Iglobhook;
14721
14722     /* swatch cache */
14723     PL_last_swash_hv    = NULL; /* reinits on demand */
14724     PL_last_swash_klen  = 0;
14725     PL_last_swash_key[0]= '\0';
14726     PL_last_swash_tmps  = (U8*)NULL;
14727     PL_last_swash_slen  = 0;
14728
14729     PL_srand_called     = proto_perl->Isrand_called;
14730     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14731
14732     if (flags & CLONEf_COPY_STACKS) {
14733         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14734         PL_tmps_ix              = proto_perl->Itmps_ix;
14735         PL_tmps_max             = proto_perl->Itmps_max;
14736         PL_tmps_floor           = proto_perl->Itmps_floor;
14737
14738         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14739          * NOTE: unlike the others! */
14740         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14741         PL_scopestack_max       = proto_perl->Iscopestack_max;
14742
14743         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14744          * NOTE: unlike the others! */
14745         PL_savestack_ix         = proto_perl->Isavestack_ix;
14746         PL_savestack_max        = proto_perl->Isavestack_max;
14747     }
14748
14749     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14750     PL_top_env          = &PL_start_env;
14751
14752     PL_op               = proto_perl->Iop;
14753
14754     PL_Sv               = NULL;
14755     PL_Xpv              = (XPV*)NULL;
14756     my_perl->Ina        = proto_perl->Ina;
14757
14758     PL_statbuf          = proto_perl->Istatbuf;
14759     PL_statcache        = proto_perl->Istatcache;
14760
14761 #ifndef NO_TAINT_SUPPORT
14762     PL_tainted          = proto_perl->Itainted;
14763 #else
14764     PL_tainted          = FALSE;
14765 #endif
14766     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14767
14768     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14769
14770     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14771     PL_restartop        = proto_perl->Irestartop;
14772     PL_in_eval          = proto_perl->Iin_eval;
14773     PL_delaymagic       = proto_perl->Idelaymagic;
14774     PL_phase            = proto_perl->Iphase;
14775     PL_localizing       = proto_perl->Ilocalizing;
14776
14777     PL_hv_fetch_ent_mh  = NULL;
14778     PL_modcount         = proto_perl->Imodcount;
14779     PL_lastgotoprobe    = NULL;
14780     PL_dumpindent       = proto_perl->Idumpindent;
14781
14782     PL_efloatbuf        = NULL;         /* reinits on demand */
14783     PL_efloatsize       = 0;                    /* reinits on demand */
14784
14785     /* regex stuff */
14786
14787     PL_colorset         = 0;            /* reinits PL_colors[] */
14788     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14789
14790     /* Pluggable optimizer */
14791     PL_peepp            = proto_perl->Ipeepp;
14792     PL_rpeepp           = proto_perl->Irpeepp;
14793     /* op_free() hook */
14794     PL_opfreehook       = proto_perl->Iopfreehook;
14795
14796 #ifdef USE_REENTRANT_API
14797     /* XXX: things like -Dm will segfault here in perlio, but doing
14798      *  PERL_SET_CONTEXT(proto_perl);
14799      * breaks too many other things
14800      */
14801     Perl_reentrant_init(aTHX);
14802 #endif
14803
14804     /* create SV map for pointer relocation */
14805     PL_ptr_table = ptr_table_new();
14806
14807     /* initialize these special pointers as early as possible */
14808     init_constants();
14809     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14810     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14811     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14812     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14813                     &PL_padname_const);
14814
14815     /* create (a non-shared!) shared string table */
14816     PL_strtab           = newHV();
14817     HvSHAREKEYS_off(PL_strtab);
14818     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14819     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14820
14821     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14822
14823     /* This PV will be free'd special way so must set it same way op.c does */
14824     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14825     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14826
14827     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14828     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14829     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14830     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14831
14832     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14833     /* This makes no difference to the implementation, as it always pushes
14834        and shifts pointers to other SVs without changing their reference
14835        count, with the array becoming empty before it is freed. However, it
14836        makes it conceptually clear what is going on, and will avoid some
14837        work inside av.c, filling slots between AvFILL() and AvMAX() with
14838        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14839     AvREAL_off(param->stashes);
14840
14841     if (!(flags & CLONEf_COPY_STACKS)) {
14842         param->unreferenced = newAV();
14843     }
14844
14845 #ifdef PERLIO_LAYERS
14846     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14847     PerlIO_clone(aTHX_ proto_perl, param);
14848 #endif
14849
14850     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14851     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14852     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14853     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14854     PL_xsubfilename     = proto_perl->Ixsubfilename;
14855     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14856     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14857
14858     /* switches */
14859     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14860     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14861     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14862
14863     /* magical thingies */
14864
14865     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14866     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14867
14868     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14869     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14870     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14871
14872    
14873     /* Clone the regex array */
14874     /* ORANGE FIXME for plugins, probably in the SV dup code.
14875        newSViv(PTR2IV(CALLREGDUPE(
14876        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14877     */
14878     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14879     PL_regex_pad = AvARRAY(PL_regex_padav);
14880
14881     PL_stashpadmax      = proto_perl->Istashpadmax;
14882     PL_stashpadix       = proto_perl->Istashpadix ;
14883     Newx(PL_stashpad, PL_stashpadmax, HV *);
14884     {
14885         PADOFFSET o = 0;
14886         for (; o < PL_stashpadmax; ++o)
14887             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14888     }
14889
14890     /* shortcuts to various I/O objects */
14891     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14892     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14893     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14894     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14895     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14896     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14897     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14898
14899     /* shortcuts to regexp stuff */
14900     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14901
14902     /* shortcuts to misc objects */
14903     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14904
14905     /* shortcuts to debugging objects */
14906     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14907     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14908     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14909     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14910     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14911     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14912     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14913
14914     /* symbol tables */
14915     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14916     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14917     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14918     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14919     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14920
14921     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14922     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14923     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14924     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14925     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14926     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14927     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14928     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14929     PL_savebegin        = proto_perl->Isavebegin;
14930
14931     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14932
14933     /* subprocess state */
14934     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14935
14936     if (proto_perl->Iop_mask)
14937         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14938     else
14939         PL_op_mask      = NULL;
14940     /* PL_asserting        = proto_perl->Iasserting; */
14941
14942     /* current interpreter roots */
14943     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14944     OP_REFCNT_LOCK;
14945     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14946     OP_REFCNT_UNLOCK;
14947
14948     /* runtime control stuff */
14949     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14950
14951     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14952
14953     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14954
14955     /* interpreter atexit processing */
14956     PL_exitlistlen      = proto_perl->Iexitlistlen;
14957     if (PL_exitlistlen) {
14958         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14959         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14960     }
14961     else
14962         PL_exitlist     = (PerlExitListEntry*)NULL;
14963
14964     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14965     if (PL_my_cxt_size) {
14966         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14967         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14968 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14969         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14970         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14971 #endif
14972     }
14973     else {
14974         PL_my_cxt_list  = (void**)NULL;
14975 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14976         PL_my_cxt_keys  = (const char**)NULL;
14977 #endif
14978     }
14979     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14980     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14981     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14982     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14983
14984     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14985
14986     PAD_CLONE_VARS(proto_perl, param);
14987
14988 #ifdef HAVE_INTERP_INTERN
14989     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14990 #endif
14991
14992     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14993
14994 #ifdef PERL_USES_PL_PIDSTATUS
14995     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14996 #endif
14997     PL_osname           = SAVEPV(proto_perl->Iosname);
14998     PL_parser           = parser_dup(proto_perl->Iparser, param);
14999
15000     /* XXX this only works if the saved cop has already been cloned */
15001     if (proto_perl->Iparser) {
15002         PL_parser->saved_curcop = (COP*)any_dup(
15003                                     proto_perl->Iparser->saved_curcop,
15004                                     proto_perl);
15005     }
15006
15007     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15008
15009 #ifdef USE_LOCALE_CTYPE
15010     /* Should we warn if uses locale? */
15011     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15012 #endif
15013
15014 #ifdef USE_LOCALE_COLLATE
15015     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15016 #endif /* USE_LOCALE_COLLATE */
15017
15018 #ifdef USE_LOCALE_NUMERIC
15019     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15020     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15021 #endif /* !USE_LOCALE_NUMERIC */
15022
15023     /* Unicode inversion lists */
15024     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15025     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15026     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15027     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15028
15029     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15030     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15031
15032     /* utf8 character class swashes */
15033     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15034         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15035     }
15036     for (i = 0; i < POSIX_CC_COUNT; i++) {
15037         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15038     }
15039     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15040     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
15041     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
15042     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15043     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15044     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15045     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15046     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15047     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15048     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15049     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15050     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15051     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15052     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15053     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15054     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15055
15056     if (proto_perl->Ipsig_pend) {
15057         Newxz(PL_psig_pend, SIG_SIZE, int);
15058     }
15059     else {
15060         PL_psig_pend    = (int*)NULL;
15061     }
15062
15063     if (proto_perl->Ipsig_name) {
15064         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15065         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15066                             param);
15067         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15068     }
15069     else {
15070         PL_psig_ptr     = (SV**)NULL;
15071         PL_psig_name    = (SV**)NULL;
15072     }
15073
15074     if (flags & CLONEf_COPY_STACKS) {
15075         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15076         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15077                             PL_tmps_ix+1, param);
15078
15079         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15080         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15081         Newxz(PL_markstack, i, I32);
15082         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15083                                                   - proto_perl->Imarkstack);
15084         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15085                                                   - proto_perl->Imarkstack);
15086         Copy(proto_perl->Imarkstack, PL_markstack,
15087              PL_markstack_ptr - PL_markstack + 1, I32);
15088
15089         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15090          * NOTE: unlike the others! */
15091         Newxz(PL_scopestack, PL_scopestack_max, I32);
15092         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15093
15094 #ifdef DEBUGGING
15095         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15096         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15097 #endif
15098         /* reset stack AV to correct length before its duped via
15099          * PL_curstackinfo */
15100         AvFILLp(proto_perl->Icurstack) =
15101                             proto_perl->Istack_sp - proto_perl->Istack_base;
15102
15103         /* NOTE: si_dup() looks at PL_markstack */
15104         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15105
15106         /* PL_curstack          = PL_curstackinfo->si_stack; */
15107         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15108         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15109
15110         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15111         PL_stack_base           = AvARRAY(PL_curstack);
15112         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15113                                                    - proto_perl->Istack_base);
15114         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15115
15116         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15117         PL_savestack            = ss_dup(proto_perl, param);
15118     }
15119     else {
15120         init_stacks();
15121         ENTER;                  /* perl_destruct() wants to LEAVE; */
15122     }
15123
15124     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15125     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15126
15127     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15128     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15129     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15130     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15131     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15132     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15133
15134     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15135
15136     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15137     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15138     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15139
15140     PL_stashcache       = newHV();
15141
15142     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15143                                             proto_perl->Iwatchaddr);
15144     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15145     if (PL_debug && PL_watchaddr) {
15146         PerlIO_printf(Perl_debug_log,
15147           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15148           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15149           PTR2UV(PL_watchok));
15150     }
15151
15152     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15153     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15154     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15155
15156     /* Call the ->CLONE method, if it exists, for each of the stashes
15157        identified by sv_dup() above.
15158     */
15159     while(av_tindex(param->stashes) != -1) {
15160         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15161         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15162         if (cloner && GvCV(cloner)) {
15163             dSP;
15164             ENTER;
15165             SAVETMPS;
15166             PUSHMARK(SP);
15167             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15168             PUTBACK;
15169             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15170             FREETMPS;
15171             LEAVE;
15172         }
15173     }
15174
15175     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15176         ptr_table_free(PL_ptr_table);
15177         PL_ptr_table = NULL;
15178     }
15179
15180     if (!(flags & CLONEf_COPY_STACKS)) {
15181         unreferenced_to_tmp_stack(param->unreferenced);
15182     }
15183
15184     SvREFCNT_dec(param->stashes);
15185
15186     /* orphaned? eg threads->new inside BEGIN or use */
15187     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15188         SvREFCNT_inc_simple_void(PL_compcv);
15189         SAVEFREESV(PL_compcv);
15190     }
15191
15192     return my_perl;
15193 }
15194
15195 static void
15196 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15197 {
15198     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15199     
15200     if (AvFILLp(unreferenced) > -1) {
15201         SV **svp = AvARRAY(unreferenced);
15202         SV **const last = svp + AvFILLp(unreferenced);
15203         SSize_t count = 0;
15204
15205         do {
15206             if (SvREFCNT(*svp) == 1)
15207                 ++count;
15208         } while (++svp <= last);
15209
15210         EXTEND_MORTAL(count);
15211         svp = AvARRAY(unreferenced);
15212
15213         do {
15214             if (SvREFCNT(*svp) == 1) {
15215                 /* Our reference is the only one to this SV. This means that
15216                    in this thread, the scalar effectively has a 0 reference.
15217                    That doesn't work (cleanup never happens), so donate our
15218                    reference to it onto the save stack. */
15219                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15220             } else {
15221                 /* As an optimisation, because we are already walking the
15222                    entire array, instead of above doing either
15223                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15224                    release our reference to the scalar, so that at the end of
15225                    the array owns zero references to the scalars it happens to
15226                    point to. We are effectively converting the array from
15227                    AvREAL() on to AvREAL() off. This saves the av_clear()
15228                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15229                    walking the array a second time.  */
15230                 SvREFCNT_dec(*svp);
15231             }
15232
15233         } while (++svp <= last);
15234         AvREAL_off(unreferenced);
15235     }
15236     SvREFCNT_dec_NN(unreferenced);
15237 }
15238
15239 void
15240 Perl_clone_params_del(CLONE_PARAMS *param)
15241 {
15242     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15243        happy: */
15244     PerlInterpreter *const to = param->new_perl;
15245     dTHXa(to);
15246     PerlInterpreter *const was = PERL_GET_THX;
15247
15248     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15249
15250     if (was != to) {
15251         PERL_SET_THX(to);
15252     }
15253
15254     SvREFCNT_dec(param->stashes);
15255     if (param->unreferenced)
15256         unreferenced_to_tmp_stack(param->unreferenced);
15257
15258     Safefree(param);
15259
15260     if (was != to) {
15261         PERL_SET_THX(was);
15262     }
15263 }
15264
15265 CLONE_PARAMS *
15266 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15267 {
15268     dVAR;
15269     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15270        does a dTHX; to get the context from thread local storage.
15271        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15272        a version that passes in my_perl.  */
15273     PerlInterpreter *const was = PERL_GET_THX;
15274     CLONE_PARAMS *param;
15275
15276     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15277
15278     if (was != to) {
15279         PERL_SET_THX(to);
15280     }
15281
15282     /* Given that we've set the context, we can do this unshared.  */
15283     Newx(param, 1, CLONE_PARAMS);
15284
15285     param->flags = 0;
15286     param->proto_perl = from;
15287     param->new_perl = to;
15288     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15289     AvREAL_off(param->stashes);
15290     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15291
15292     if (was != to) {
15293         PERL_SET_THX(was);
15294     }
15295     return param;
15296 }
15297
15298 #endif /* USE_ITHREADS */
15299
15300 void
15301 Perl_init_constants(pTHX)
15302 {
15303     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15304     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15305     SvANY(&PL_sv_undef)         = NULL;
15306
15307     SvANY(&PL_sv_no)            = new_XPVNV();
15308     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15309     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15310                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15311                                   |SVp_POK|SVf_POK;
15312
15313     SvANY(&PL_sv_yes)           = new_XPVNV();
15314     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15315     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15316                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15317                                   |SVp_POK|SVf_POK;
15318
15319     SvPV_set(&PL_sv_no, (char*)PL_No);
15320     SvCUR_set(&PL_sv_no, 0);
15321     SvLEN_set(&PL_sv_no, 0);
15322     SvIV_set(&PL_sv_no, 0);
15323     SvNV_set(&PL_sv_no, 0);
15324
15325     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15326     SvCUR_set(&PL_sv_yes, 1);
15327     SvLEN_set(&PL_sv_yes, 0);
15328     SvIV_set(&PL_sv_yes, 1);
15329     SvNV_set(&PL_sv_yes, 1);
15330
15331     PadnamePV(&PL_padname_const) = (char *)PL_No;
15332 }
15333
15334 /*
15335 =head1 Unicode Support
15336
15337 =for apidoc sv_recode_to_utf8
15338
15339 The encoding is assumed to be an Encode object, on entry the PV
15340 of the sv is assumed to be octets in that encoding, and the sv
15341 will be converted into Unicode (and UTF-8).
15342
15343 If the sv already is UTF-8 (or if it is not POK), or if the encoding
15344 is not a reference, nothing is done to the sv.  If the encoding is not
15345 an C<Encode::XS> Encoding object, bad things will happen.
15346 (See F<lib/encoding.pm> and L<Encode>.)
15347
15348 The PV of the sv is returned.
15349
15350 =cut */
15351
15352 char *
15353 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15354 {
15355     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15356
15357     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15358         SV *uni;
15359         STRLEN len;
15360         const char *s;
15361         dSP;
15362         SV *nsv = sv;
15363         ENTER;
15364         PUSHSTACK;
15365         SAVETMPS;
15366         if (SvPADTMP(nsv)) {
15367             nsv = sv_newmortal();
15368             SvSetSV_nosteal(nsv, sv);
15369         }
15370         PUSHMARK(sp);
15371         EXTEND(SP, 3);
15372         PUSHs(encoding);
15373         PUSHs(nsv);
15374 /*
15375   NI-S 2002/07/09
15376   Passing sv_yes is wrong - it needs to be or'ed set of constants
15377   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15378   remove converted chars from source.
15379
15380   Both will default the value - let them.
15381
15382         XPUSHs(&PL_sv_yes);
15383 */
15384         PUTBACK;
15385         call_method("decode", G_SCALAR);
15386         SPAGAIN;
15387         uni = POPs;
15388         PUTBACK;
15389         s = SvPV_const(uni, len);
15390         if (s != SvPVX_const(sv)) {
15391             SvGROW(sv, len + 1);
15392             Move(s, SvPVX(sv), len + 1, char);
15393             SvCUR_set(sv, len);
15394         }
15395         FREETMPS;
15396         POPSTACK;
15397         LEAVE;
15398         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15399             /* clear pos and any utf8 cache */
15400             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15401             if (mg)
15402                 mg->mg_len = -1;
15403             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15404                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15405         }
15406         SvUTF8_on(sv);
15407         return SvPVX(sv);
15408     }
15409     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15410 }
15411
15412 /*
15413 =for apidoc sv_cat_decode
15414
15415 The encoding is assumed to be an Encode object, the PV of the ssv is
15416 assumed to be octets in that encoding and decoding the input starts
15417 from the position which (PV + *offset) pointed to.  The dsv will be
15418 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
15419 when the string tstr appears in decoding output or the input ends on
15420 the PV of the ssv.  The value which the offset points will be modified
15421 to the last input position on the ssv.
15422
15423 Returns TRUE if the terminator was found, else returns FALSE.
15424
15425 =cut */
15426
15427 bool
15428 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15429                    SV *ssv, int *offset, char *tstr, int tlen)
15430 {
15431     bool ret = FALSE;
15432
15433     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15434
15435     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
15436         SV *offsv;
15437         dSP;
15438         ENTER;
15439         SAVETMPS;
15440         PUSHMARK(sp);
15441         EXTEND(SP, 6);
15442         PUSHs(encoding);
15443         PUSHs(dsv);
15444         PUSHs(ssv);
15445         offsv = newSViv(*offset);
15446         mPUSHs(offsv);
15447         mPUSHp(tstr, tlen);
15448         PUTBACK;
15449         call_method("cat_decode", G_SCALAR);
15450         SPAGAIN;
15451         ret = SvTRUE(TOPs);
15452         *offset = SvIV(offsv);
15453         PUTBACK;
15454         FREETMPS;
15455         LEAVE;
15456     }
15457     else
15458         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15459     return ret;
15460
15461 }
15462
15463 /* ---------------------------------------------------------------------
15464  *
15465  * support functions for report_uninit()
15466  */
15467
15468 /* the maxiumum size of array or hash where we will scan looking
15469  * for the undefined element that triggered the warning */
15470
15471 #define FUV_MAX_SEARCH_SIZE 1000
15472
15473 /* Look for an entry in the hash whose value has the same SV as val;
15474  * If so, return a mortal copy of the key. */
15475
15476 STATIC SV*
15477 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15478 {
15479     dVAR;
15480     HE **array;
15481     I32 i;
15482
15483     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15484
15485     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15486                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15487         return NULL;
15488
15489     array = HvARRAY(hv);
15490
15491     for (i=HvMAX(hv); i>=0; i--) {
15492         HE *entry;
15493         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15494             if (HeVAL(entry) != val)
15495                 continue;
15496             if (    HeVAL(entry) == &PL_sv_undef ||
15497                     HeVAL(entry) == &PL_sv_placeholder)
15498                 continue;
15499             if (!HeKEY(entry))
15500                 return NULL;
15501             if (HeKLEN(entry) == HEf_SVKEY)
15502                 return sv_mortalcopy(HeKEY_sv(entry));
15503             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15504         }
15505     }
15506     return NULL;
15507 }
15508
15509 /* Look for an entry in the array whose value has the same SV as val;
15510  * If so, return the index, otherwise return -1. */
15511
15512 STATIC I32
15513 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15514 {
15515     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15516
15517     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15518                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15519         return -1;
15520
15521     if (val != &PL_sv_undef) {
15522         SV ** const svp = AvARRAY(av);
15523         I32 i;
15524
15525         for (i=AvFILLp(av); i>=0; i--)
15526             if (svp[i] == val)
15527                 return i;
15528     }
15529     return -1;
15530 }
15531
15532 /* varname(): return the name of a variable, optionally with a subscript.
15533  * If gv is non-zero, use the name of that global, along with gvtype (one
15534  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15535  * targ.  Depending on the value of the subscript_type flag, return:
15536  */
15537
15538 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15539 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15540 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15541 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15542
15543 SV*
15544 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15545         const SV *const keyname, I32 aindex, int subscript_type)
15546 {
15547
15548     SV * const name = sv_newmortal();
15549     if (gv && isGV(gv)) {
15550         char buffer[2];
15551         buffer[0] = gvtype;
15552         buffer[1] = 0;
15553
15554         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15555
15556         gv_fullname4(name, gv, buffer, 0);
15557
15558         if ((unsigned int)SvPVX(name)[1] <= 26) {
15559             buffer[0] = '^';
15560             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15561
15562             /* Swap the 1 unprintable control character for the 2 byte pretty
15563                version - ie substr($name, 1, 1) = $buffer; */
15564             sv_insert(name, 1, 1, buffer, 2);
15565         }
15566     }
15567     else {
15568         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15569         PADNAME *sv;
15570
15571         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15572
15573         if (!cv || !CvPADLIST(cv))
15574             return NULL;
15575         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15576         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15577         SvUTF8_on(name);
15578     }
15579
15580     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15581         SV * const sv = newSV(0);
15582         *SvPVX(name) = '$';
15583         Perl_sv_catpvf(aTHX_ name, "{%s}",
15584             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15585                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15586         SvREFCNT_dec_NN(sv);
15587     }
15588     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15589         *SvPVX(name) = '$';
15590         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15591     }
15592     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15593         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15594         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15595     }
15596
15597     return name;
15598 }
15599
15600
15601 /*
15602 =for apidoc find_uninit_var
15603
15604 Find the name of the undefined variable (if any) that caused the operator
15605 to issue a "Use of uninitialized value" warning.
15606 If match is true, only return a name if its value matches uninit_sv.
15607 So roughly speaking, if a unary operator (such as OP_COS) generates a
15608 warning, then following the direct child of the op may yield an
15609 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15610 other hand, with OP_ADD there are two branches to follow, so we only print
15611 the variable name if we get an exact match.
15612 desc_p points to a string pointer holding the description of the op.
15613 This may be updated if needed.
15614
15615 The name is returned as a mortal SV.
15616
15617 Assumes that PL_op is the op that originally triggered the error, and that
15618 PL_comppad/PL_curpad points to the currently executing pad.
15619
15620 =cut
15621 */
15622
15623 STATIC SV *
15624 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15625                   bool match, const char **desc_p)
15626 {
15627     dVAR;
15628     SV *sv;
15629     const GV *gv;
15630     const OP *o, *o2, *kid;
15631
15632     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15633
15634     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15635                             uninit_sv == &PL_sv_placeholder)))
15636         return NULL;
15637
15638     switch (obase->op_type) {
15639
15640     case OP_RV2AV:
15641     case OP_RV2HV:
15642     case OP_PADAV:
15643     case OP_PADHV:
15644       {
15645         const bool pad  = (    obase->op_type == OP_PADAV
15646                             || obase->op_type == OP_PADHV
15647                             || obase->op_type == OP_PADRANGE
15648                           );
15649
15650         const bool hash = (    obase->op_type == OP_PADHV
15651                             || obase->op_type == OP_RV2HV
15652                             || (obase->op_type == OP_PADRANGE
15653                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15654                           );
15655         I32 index = 0;
15656         SV *keysv = NULL;
15657         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15658
15659         if (pad) { /* @lex, %lex */
15660             sv = PAD_SVl(obase->op_targ);
15661             gv = NULL;
15662         }
15663         else {
15664             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15665             /* @global, %global */
15666                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15667                 if (!gv)
15668                     break;
15669                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15670             }
15671             else if (obase == PL_op) /* @{expr}, %{expr} */
15672                 return find_uninit_var(cUNOPx(obase)->op_first,
15673                                                 uninit_sv, match, desc_p);
15674             else /* @{expr}, %{expr} as a sub-expression */
15675                 return NULL;
15676         }
15677
15678         /* attempt to find a match within the aggregate */
15679         if (hash) {
15680             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15681             if (keysv)
15682                 subscript_type = FUV_SUBSCRIPT_HASH;
15683         }
15684         else {
15685             index = find_array_subscript((const AV *)sv, uninit_sv);
15686             if (index >= 0)
15687                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15688         }
15689
15690         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15691             break;
15692
15693         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15694                                     keysv, index, subscript_type);
15695       }
15696
15697     case OP_RV2SV:
15698         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15699             /* $global */
15700             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15701             if (!gv || !GvSTASH(gv))
15702                 break;
15703             if (match && (GvSV(gv) != uninit_sv))
15704                 break;
15705             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15706         }
15707         /* ${expr} */
15708         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15709
15710     case OP_PADSV:
15711         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15712             break;
15713         return varname(NULL, '$', obase->op_targ,
15714                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15715
15716     case OP_GVSV:
15717         gv = cGVOPx_gv(obase);
15718         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15719             break;
15720         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15721
15722     case OP_AELEMFAST_LEX:
15723         if (match) {
15724             SV **svp;
15725             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15726             if (!av || SvRMAGICAL(av))
15727                 break;
15728             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15729             if (!svp || *svp != uninit_sv)
15730                 break;
15731         }
15732         return varname(NULL, '$', obase->op_targ,
15733                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15734     case OP_AELEMFAST:
15735         {
15736             gv = cGVOPx_gv(obase);
15737             if (!gv)
15738                 break;
15739             if (match) {
15740                 SV **svp;
15741                 AV *const av = GvAV(gv);
15742                 if (!av || SvRMAGICAL(av))
15743                     break;
15744                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15745                 if (!svp || *svp != uninit_sv)
15746                     break;
15747             }
15748             return varname(gv, '$', 0,
15749                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15750         }
15751         NOT_REACHED; /* NOTREACHED */
15752
15753     case OP_EXISTS:
15754         o = cUNOPx(obase)->op_first;
15755         if (!o || o->op_type != OP_NULL ||
15756                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15757             break;
15758         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15759
15760     case OP_AELEM:
15761     case OP_HELEM:
15762     {
15763         bool negate = FALSE;
15764
15765         if (PL_op == obase)
15766             /* $a[uninit_expr] or $h{uninit_expr} */
15767             return find_uninit_var(cBINOPx(obase)->op_last,
15768                                                 uninit_sv, match, desc_p);
15769
15770         gv = NULL;
15771         o = cBINOPx(obase)->op_first;
15772         kid = cBINOPx(obase)->op_last;
15773
15774         /* get the av or hv, and optionally the gv */
15775         sv = NULL;
15776         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15777             sv = PAD_SV(o->op_targ);
15778         }
15779         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15780                 && cUNOPo->op_first->op_type == OP_GV)
15781         {
15782             gv = cGVOPx_gv(cUNOPo->op_first);
15783             if (!gv)
15784                 break;
15785             sv = o->op_type
15786                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15787         }
15788         if (!sv)
15789             break;
15790
15791         if (kid && kid->op_type == OP_NEGATE) {
15792             negate = TRUE;
15793             kid = cUNOPx(kid)->op_first;
15794         }
15795
15796         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15797             /* index is constant */
15798             SV* kidsv;
15799             if (negate) {
15800                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15801                 sv_catsv(kidsv, cSVOPx_sv(kid));
15802             }
15803             else
15804                 kidsv = cSVOPx_sv(kid);
15805             if (match) {
15806                 if (SvMAGICAL(sv))
15807                     break;
15808                 if (obase->op_type == OP_HELEM) {
15809                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15810                     if (!he || HeVAL(he) != uninit_sv)
15811                         break;
15812                 }
15813                 else {
15814                     SV * const  opsv = cSVOPx_sv(kid);
15815                     const IV  opsviv = SvIV(opsv);
15816                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15817                         negate ? - opsviv : opsviv,
15818                         FALSE);
15819                     if (!svp || *svp != uninit_sv)
15820                         break;
15821                 }
15822             }
15823             if (obase->op_type == OP_HELEM)
15824                 return varname(gv, '%', o->op_targ,
15825                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15826             else
15827                 return varname(gv, '@', o->op_targ, NULL,
15828                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15829                     FUV_SUBSCRIPT_ARRAY);
15830         }
15831         else  {
15832             /* index is an expression;
15833              * attempt to find a match within the aggregate */
15834             if (obase->op_type == OP_HELEM) {
15835                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15836                 if (keysv)
15837                     return varname(gv, '%', o->op_targ,
15838                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15839             }
15840             else {
15841                 const I32 index
15842                     = find_array_subscript((const AV *)sv, uninit_sv);
15843                 if (index >= 0)
15844                     return varname(gv, '@', o->op_targ,
15845                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15846             }
15847             if (match)
15848                 break;
15849             return varname(gv,
15850                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15851                 ? '@' : '%'),
15852                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15853         }
15854         NOT_REACHED; /* NOTREACHED */
15855     }
15856
15857     case OP_MULTIDEREF: {
15858         /* If we were executing OP_MULTIDEREF when the undef warning
15859          * triggered, then it must be one of the index values within
15860          * that triggered it. If not, then the only possibility is that
15861          * the value retrieved by the last aggregate lookup might be the
15862          * culprit. For the former, we set PL_multideref_pc each time before
15863          * using an index, so work though the item list until we reach
15864          * that point. For the latter, just work through the entire item
15865          * list; the last aggregate retrieved will be the candidate.
15866          */
15867
15868         /* the named aggregate, if any */
15869         PADOFFSET agg_targ = 0;
15870         GV       *agg_gv   = NULL;
15871         /* the last-seen index */
15872         UV        index_type;
15873         PADOFFSET index_targ;
15874         GV       *index_gv;
15875         IV        index_const_iv = 0; /* init for spurious compiler warn */
15876         SV       *index_const_sv;
15877         int       depth = 0;  /* how many array/hash lookups we've done */
15878
15879         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15880         UNOP_AUX_item *last = NULL;
15881         UV actions = items->uv;
15882         bool is_hv;
15883
15884         if (PL_op == obase) {
15885             last = PL_multideref_pc;
15886             assert(last >= items && last <= items + items[-1].uv);
15887         }
15888
15889         assert(actions);
15890
15891         while (1) {
15892             is_hv = FALSE;
15893             switch (actions & MDEREF_ACTION_MASK) {
15894
15895             case MDEREF_reload:
15896                 actions = (++items)->uv;
15897                 continue;
15898
15899             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15900                 is_hv = TRUE;
15901                 /* FALLTHROUGH */
15902             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15903                 agg_targ = (++items)->pad_offset;
15904                 agg_gv = NULL;
15905                 break;
15906
15907             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15908                 is_hv = TRUE;
15909                 /* FALLTHROUGH */
15910             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15911                 agg_targ = 0;
15912                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15913                 assert(isGV_with_GP(agg_gv));
15914                 break;
15915
15916             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15917             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15918                 ++items;
15919                 /* FALLTHROUGH */
15920             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15921             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15922                 agg_targ = 0;
15923                 agg_gv   = NULL;
15924                 is_hv    = TRUE;
15925                 break;
15926
15927             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15928             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15929                 ++items;
15930                 /* FALLTHROUGH */
15931             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15932             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15933                 agg_targ = 0;
15934                 agg_gv   = NULL;
15935             } /* switch */
15936
15937             index_targ     = 0;
15938             index_gv       = NULL;
15939             index_const_sv = NULL;
15940
15941             index_type = (actions & MDEREF_INDEX_MASK);
15942             switch (index_type) {
15943             case MDEREF_INDEX_none:
15944                 break;
15945             case MDEREF_INDEX_const:
15946                 if (is_hv)
15947                     index_const_sv = UNOP_AUX_item_sv(++items)
15948                 else
15949                     index_const_iv = (++items)->iv;
15950                 break;
15951             case MDEREF_INDEX_padsv:
15952                 index_targ = (++items)->pad_offset;
15953                 break;
15954             case MDEREF_INDEX_gvsv:
15955                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15956                 assert(isGV_with_GP(index_gv));
15957                 break;
15958             }
15959
15960             if (index_type != MDEREF_INDEX_none)
15961                 depth++;
15962
15963             if (   index_type == MDEREF_INDEX_none
15964                 || (actions & MDEREF_FLAG_last)
15965                 || (last && items == last)
15966             )
15967                 break;
15968
15969             actions >>= MDEREF_SHIFT;
15970         } /* while */
15971
15972         if (PL_op == obase) {
15973             /* index was undef */
15974
15975             *desc_p = (    (actions & MDEREF_FLAG_last)
15976                         && (obase->op_private
15977                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15978                         ?
15979                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15980                                 ? "exists"
15981                                 : "delete"
15982                         : is_hv ? "hash element" : "array element";
15983             assert(index_type != MDEREF_INDEX_none);
15984             if (index_gv)
15985                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15986             if (index_targ)
15987                 return varname(NULL, '$', index_targ,
15988                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15989             assert(is_hv); /* AV index is an IV and can't be undef */
15990             /* can a const HV index ever be undef? */
15991             return NULL;
15992         }
15993
15994         /* the SV returned by pp_multideref() was undef, if anything was */
15995
15996         if (depth != 1)
15997             break;
15998
15999         if (agg_targ)
16000             sv = PAD_SV(agg_targ);
16001         else if (agg_gv)
16002             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16003         else
16004             break;
16005
16006         if (index_type == MDEREF_INDEX_const) {
16007             if (match) {
16008                 if (SvMAGICAL(sv))
16009                     break;
16010                 if (is_hv) {
16011                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16012                     if (!he || HeVAL(he) != uninit_sv)
16013                         break;
16014                 }
16015                 else {
16016                     SV * const * const svp =
16017                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16018                     if (!svp || *svp != uninit_sv)
16019                         break;
16020                 }
16021             }
16022             return is_hv
16023                 ? varname(agg_gv, '%', agg_targ,
16024                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16025                 : varname(agg_gv, '@', agg_targ,
16026                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16027         }
16028         else  {
16029             /* index is an var */
16030             if (is_hv) {
16031                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16032                 if (keysv)
16033                     return varname(agg_gv, '%', agg_targ,
16034                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16035             }
16036             else {
16037                 const I32 index
16038                     = find_array_subscript((const AV *)sv, uninit_sv);
16039                 if (index >= 0)
16040                     return varname(agg_gv, '@', agg_targ,
16041                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16042             }
16043             if (match)
16044                 break;
16045             return varname(agg_gv,
16046                 is_hv ? '%' : '@',
16047                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16048         }
16049         NOT_REACHED; /* NOTREACHED */
16050     }
16051
16052     case OP_AASSIGN:
16053         /* only examine RHS */
16054         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16055                                                                 match, desc_p);
16056
16057     case OP_OPEN:
16058         o = cUNOPx(obase)->op_first;
16059         if (   o->op_type == OP_PUSHMARK
16060            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16061         )
16062             o = OpSIBLING(o);
16063
16064         if (!OpHAS_SIBLING(o)) {
16065             /* one-arg version of open is highly magical */
16066
16067             if (o->op_type == OP_GV) { /* open FOO; */
16068                 gv = cGVOPx_gv(o);
16069                 if (match && GvSV(gv) != uninit_sv)
16070                     break;
16071                 return varname(gv, '$', 0,
16072                             NULL, 0, FUV_SUBSCRIPT_NONE);
16073             }
16074             /* other possibilities not handled are:
16075              * open $x; or open my $x;  should return '${*$x}'
16076              * open expr;               should return '$'.expr ideally
16077              */
16078              break;
16079         }
16080         goto do_op;
16081
16082     /* ops where $_ may be an implicit arg */
16083     case OP_TRANS:
16084     case OP_TRANSR:
16085     case OP_SUBST:
16086     case OP_MATCH:
16087         if ( !(obase->op_flags & OPf_STACKED)) {
16088             if (uninit_sv == DEFSV)
16089                 return newSVpvs_flags("$_", SVs_TEMP);
16090             else if (obase->op_targ
16091                   && uninit_sv == PAD_SVl(obase->op_targ))
16092                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16093                                FUV_SUBSCRIPT_NONE);
16094         }
16095         goto do_op;
16096
16097     case OP_PRTF:
16098     case OP_PRINT:
16099     case OP_SAY:
16100         match = 1; /* print etc can return undef on defined args */
16101         /* skip filehandle as it can't produce 'undef' warning  */
16102         o = cUNOPx(obase)->op_first;
16103         if ((obase->op_flags & OPf_STACKED)
16104             &&
16105                (   o->op_type == OP_PUSHMARK
16106                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16107             o = OpSIBLING(OpSIBLING(o));
16108         goto do_op2;
16109
16110
16111     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16112     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16113
16114         /* the following ops are capable of returning PL_sv_undef even for
16115          * defined arg(s) */
16116
16117     case OP_BACKTICK:
16118     case OP_PIPE_OP:
16119     case OP_FILENO:
16120     case OP_BINMODE:
16121     case OP_TIED:
16122     case OP_GETC:
16123     case OP_SYSREAD:
16124     case OP_SEND:
16125     case OP_IOCTL:
16126     case OP_SOCKET:
16127     case OP_SOCKPAIR:
16128     case OP_BIND:
16129     case OP_CONNECT:
16130     case OP_LISTEN:
16131     case OP_ACCEPT:
16132     case OP_SHUTDOWN:
16133     case OP_SSOCKOPT:
16134     case OP_GETPEERNAME:
16135     case OP_FTRREAD:
16136     case OP_FTRWRITE:
16137     case OP_FTREXEC:
16138     case OP_FTROWNED:
16139     case OP_FTEREAD:
16140     case OP_FTEWRITE:
16141     case OP_FTEEXEC:
16142     case OP_FTEOWNED:
16143     case OP_FTIS:
16144     case OP_FTZERO:
16145     case OP_FTSIZE:
16146     case OP_FTFILE:
16147     case OP_FTDIR:
16148     case OP_FTLINK:
16149     case OP_FTPIPE:
16150     case OP_FTSOCK:
16151     case OP_FTBLK:
16152     case OP_FTCHR:
16153     case OP_FTTTY:
16154     case OP_FTSUID:
16155     case OP_FTSGID:
16156     case OP_FTSVTX:
16157     case OP_FTTEXT:
16158     case OP_FTBINARY:
16159     case OP_FTMTIME:
16160     case OP_FTATIME:
16161     case OP_FTCTIME:
16162     case OP_READLINK:
16163     case OP_OPEN_DIR:
16164     case OP_READDIR:
16165     case OP_TELLDIR:
16166     case OP_SEEKDIR:
16167     case OP_REWINDDIR:
16168     case OP_CLOSEDIR:
16169     case OP_GMTIME:
16170     case OP_ALARM:
16171     case OP_SEMGET:
16172     case OP_GETLOGIN:
16173     case OP_UNDEF:
16174     case OP_SUBSTR:
16175     case OP_AEACH:
16176     case OP_EACH:
16177     case OP_SORT:
16178     case OP_CALLER:
16179     case OP_DOFILE:
16180     case OP_PROTOTYPE:
16181     case OP_NCMP:
16182     case OP_SMARTMATCH:
16183     case OP_UNPACK:
16184     case OP_SYSOPEN:
16185     case OP_SYSSEEK:
16186         match = 1;
16187         goto do_op;
16188
16189     case OP_ENTERSUB:
16190     case OP_GOTO:
16191         /* XXX tmp hack: these two may call an XS sub, and currently
16192           XS subs don't have a SUB entry on the context stack, so CV and
16193           pad determination goes wrong, and BAD things happen. So, just
16194           don't try to determine the value under those circumstances.
16195           Need a better fix at dome point. DAPM 11/2007 */
16196         break;
16197
16198     case OP_FLIP:
16199     case OP_FLOP:
16200     {
16201         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16202         if (gv && GvSV(gv) == uninit_sv)
16203             return newSVpvs_flags("$.", SVs_TEMP);
16204         goto do_op;
16205     }
16206
16207     case OP_POS:
16208         /* def-ness of rval pos() is independent of the def-ness of its arg */
16209         if ( !(obase->op_flags & OPf_MOD))
16210             break;
16211
16212     case OP_SCHOMP:
16213     case OP_CHOMP:
16214         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16215             return newSVpvs_flags("${$/}", SVs_TEMP);
16216         /* FALLTHROUGH */
16217
16218     default:
16219     do_op:
16220         if (!(obase->op_flags & OPf_KIDS))
16221             break;
16222         o = cUNOPx(obase)->op_first;
16223         
16224     do_op2:
16225         if (!o)
16226             break;
16227
16228         /* This loop checks all the kid ops, skipping any that cannot pos-
16229          * sibly be responsible for the uninitialized value; i.e., defined
16230          * constants and ops that return nothing.  If there is only one op
16231          * left that is not skipped, then we *know* it is responsible for
16232          * the uninitialized value.  If there is more than one op left, we
16233          * have to look for an exact match in the while() loop below.
16234          * Note that we skip padrange, because the individual pad ops that
16235          * it replaced are still in the tree, so we work on them instead.
16236          */
16237         o2 = NULL;
16238         for (kid=o; kid; kid = OpSIBLING(kid)) {
16239             const OPCODE type = kid->op_type;
16240             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16241               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16242               || (type == OP_PUSHMARK)
16243               || (type == OP_PADRANGE)
16244             )
16245             continue;
16246
16247             if (o2) { /* more than one found */
16248                 o2 = NULL;
16249                 break;
16250             }
16251             o2 = kid;
16252         }
16253         if (o2)
16254             return find_uninit_var(o2, uninit_sv, match, desc_p);
16255
16256         /* scan all args */
16257         while (o) {
16258             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16259             if (sv)
16260                 return sv;
16261             o = OpSIBLING(o);
16262         }
16263         break;
16264     }
16265     return NULL;
16266 }
16267
16268
16269 /*
16270 =for apidoc report_uninit
16271
16272 Print appropriate "Use of uninitialized variable" warning.
16273
16274 =cut
16275 */
16276
16277 void
16278 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16279 {
16280     if (PL_op) {
16281         SV* varname = NULL;
16282         const char *desc;
16283
16284         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16285                 ? "join or string"
16286                 : OP_DESC(PL_op);
16287         if (uninit_sv && PL_curpad) {
16288             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16289             if (varname)
16290                 sv_insert(varname, 0, 0, " ", 1);
16291         }
16292         /* PL_warn_uninit_sv is constant */
16293         GCC_DIAG_IGNORE(-Wformat-nonliteral);
16294         /* diag_listed_as: Use of uninitialized value%s */
16295         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16296                 SVfARG(varname ? varname : &PL_sv_no),
16297                 " in ", desc);
16298         GCC_DIAG_RESTORE;
16299     }
16300     else {
16301         /* PL_warn_uninit is constant */
16302         GCC_DIAG_IGNORE(-Wformat-nonliteral);
16303         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16304                     "", "", "");
16305         GCC_DIAG_RESTORE;
16306     }
16307 }
16308
16309 /*
16310  * Local variables:
16311  * c-indentation-style: bsd
16312  * c-basic-offset: 4
16313  * indent-tabs-mode: nil
16314  * End:
16315  *
16316  * ex: set ts=8 sts=4 sw=4 et:
16317  */