This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl_langinfo.h: Fix typo in comment
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =head1 Allocation and deallocation of SVs.
134 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135 sv, av, hv...) contains type and reference count information, and for
136 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137 contains fields specific to each type.  Some types store all they need
138 in the head, so don't have a body.
139
140 In all but the most memory-paranoid configurations (ex: PURIFY), heads
141 and bodies are allocated out of arenas, which by default are
142 approximately 4K chunks of memory parcelled up into N heads or bodies.
143 Sv-bodies are allocated by their sv-type, guaranteeing size
144 consistency needed to allocate safely from arrays.
145
146 For SV-heads, the first slot in each arena is reserved, and holds a
147 link to the next arena, some flags, and a note of the number of slots.
148 Snaked through each arena chain is a linked list of free items; when
149 this becomes empty, an extra arena is allocated and divided up into N
150 items which are threaded into the free list.
151
152 SV-bodies are similar, but they use arena-sets by default, which
153 separate the link and info from the arena itself, and reclaim the 1st
154 slot in the arena.  SV-bodies are further described later.
155
156 The following global variables are associated with arenas:
157
158  PL_sv_arenaroot     pointer to list of SV arenas
159  PL_sv_root          pointer to list of free SV structures
160
161  PL_body_arenas      head of linked-list of body arenas
162  PL_body_roots[]     array of pointers to list of free bodies of svtype
163                      arrays are indexed by the svtype needed
164
165 A few special SV heads are not allocated from an arena, but are
166 instead directly created in the interpreter structure, eg PL_sv_undef.
167 The size of arenas can be changed from the default by setting
168 PERL_ARENA_SIZE appropriately at compile time.
169
170 The SV arena serves the secondary purpose of allowing still-live SVs
171 to be located and destroyed during final cleanup.
172
173 At the lowest level, the macros new_SV() and del_SV() grab and free
174 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
175 to return the SV to the free list with error checking.) new_SV() calls
176 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177 SVs in the free list have their SvTYPE field set to all ones.
178
179 At the time of very final cleanup, sv_free_arenas() is called from
180 perl_destruct() to physically free all the arenas allocated since the
181 start of the interpreter.
182
183 The function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live - ie which has an SvTYPE
185 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186 following functions (specified as [function that calls visit()] / [function
187 called by visit() for each SV]):
188
189     sv_report_used() / do_report_used()
190                         dump all remaining SVs (debugging aid)
191
192     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193                       do_clean_named_io_objs(),do_curse()
194                         Attempt to free all objects pointed to by RVs,
195                         try to do the same for all objects indir-
196                         ectly referenced by typeglobs too, and
197                         then do a final sweep, cursing any
198                         objects that remain.  Called once from
199                         perl_destruct(), prior to calling sv_clean_all()
200                         below.
201
202     sv_clean_all() / do_clean_all()
203                         SvREFCNT_dec(sv) each remaining SV, possibly
204                         triggering an sv_free(). It also sets the
205                         SVf_BREAK flag on the SV to indicate that the
206                         refcnt has been artificially lowered, and thus
207                         stopping sv_free() from giving spurious warnings
208                         about SVs which unexpectedly have a refcnt
209                         of zero.  called repeatedly from perl_destruct()
210                         until there are no SVs left.
211
212 =head2 Arena allocator API Summary
213
214 Private API to rest of sv.c
215
216     new_SV(),  del_SV(),
217
218     new_XPVNV(), del_XPVGV(),
219     etc
220
221 Public API:
222
223     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225 =cut
226
227  * ========================================================================= */
228
229 /*
230  * "A time to plant, and a time to uproot what was planted..."
231  */
232
233 #ifdef PERL_MEM_LOG
234 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
235             Perl_mem_log_new_sv(sv, file, line, func)
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
237             Perl_mem_log_del_sv(sv, file, line, func)
238 #else
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
240 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
241 #endif
242
243 #ifdef DEBUG_LEAKING_SCALARS
244 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246     } STMT_END
247 #  define DEBUG_SV_SERIAL(sv)                                               \
248     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
249             PTR2UV(sv), (long)(sv)->sv_debug_serial))
250 #else
251 #  define FREE_SV_DEBUG_FILE(sv)
252 #  define DEBUG_SV_SERIAL(sv)   NOOP
253 #endif
254
255 #ifdef PERL_POISON
256 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
257 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258 /* Whilst I'd love to do this, it seems that things like to check on
259    unreferenced scalars
260 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
261 */
262 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
263                                 PoisonNew(&SvREFCNT(sv), 1, U32)
264 #else
265 #  define SvARENA_CHAIN(sv)     SvANY(sv)
266 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
267 #  define POISON_SV_HEAD(sv)
268 #endif
269
270 /* Mark an SV head as unused, and add to free list.
271  *
272  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273  * its refcount artificially decremented during global destruction, so
274  * there may be dangling pointers to it. The last thing we want in that
275  * case is for it to be reused. */
276
277 #define plant_SV(p) \
278     STMT_START {                                        \
279         const U32 old_flags = SvFLAGS(p);                       \
280         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
281         DEBUG_SV_SERIAL(p);                             \
282         FREE_SV_DEBUG_FILE(p);                          \
283         POISON_SV_HEAD(p);                              \
284         SvFLAGS(p) = SVTYPEMASK;                        \
285         if (!(old_flags & SVf_BREAK)) {         \
286             SvARENA_CHAIN_SET(p, PL_sv_root);   \
287             PL_sv_root = (p);                           \
288         }                                               \
289         --PL_sv_count;                                  \
290     } STMT_END
291
292 #define uproot_SV(p) \
293     STMT_START {                                        \
294         (p) = PL_sv_root;                               \
295         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
296         ++PL_sv_count;                                  \
297     } STMT_END
298
299
300 /* make some more SVs by adding another arena */
301
302 STATIC SV*
303 S_more_sv(pTHX)
304 {
305     SV* sv;
306     char *chunk;                /* must use New here to match call to */
307     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
308     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309     uproot_SV(sv);
310     return sv;
311 }
312
313 /* new_SV(): return a new, empty SV head */
314
315 #ifdef DEBUG_LEAKING_SCALARS
316 /* provide a real function for a debugger to play with */
317 STATIC SV*
318 S_new_SV(pTHX_ const char *file, int line, const char *func)
319 {
320     SV* sv;
321
322     if (PL_sv_root)
323         uproot_SV(sv);
324     else
325         sv = S_more_sv(aTHX);
326     SvANY(sv) = 0;
327     SvREFCNT(sv) = 1;
328     SvFLAGS(sv) = 0;
329     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331                 ? PL_parser->copline
332                 :  PL_curcop
333                     ? CopLINE(PL_curcop)
334                     : 0
335             );
336     sv->sv_debug_inpad = 0;
337     sv->sv_debug_parent = NULL;
338     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340     sv->sv_debug_serial = PL_sv_serial++;
341
342     MEM_LOG_NEW_SV(sv, file, line, func);
343     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
344             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346     return sv;
347 }
348 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350 #else
351 #  define new_SV(p) \
352     STMT_START {                                        \
353         if (PL_sv_root)                                 \
354             uproot_SV(p);                               \
355         else                                            \
356             (p) = S_more_sv(aTHX);                      \
357         SvANY(p) = 0;                                   \
358         SvREFCNT(p) = 1;                                \
359         SvFLAGS(p) = 0;                                 \
360         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
361     } STMT_END
362 #endif
363
364
365 /* del_SV(): return an empty SV head to the free list */
366
367 #ifdef DEBUGGING
368
369 #define del_SV(p) \
370     STMT_START {                                        \
371         if (DEBUG_D_TEST)                               \
372             del_sv(p);                                  \
373         else                                            \
374             plant_SV(p);                                \
375     } STMT_END
376
377 STATIC void
378 S_del_sv(pTHX_ SV *p)
379 {
380     PERL_ARGS_ASSERT_DEL_SV;
381
382     if (DEBUG_D_TEST) {
383         SV* sva;
384         bool ok = 0;
385         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386             const SV * const sv = sva + 1;
387             const SV * const svend = &sva[SvREFCNT(sva)];
388             if (p >= sv && p < svend) {
389                 ok = 1;
390                 break;
391             }
392         }
393         if (!ok) {
394             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395                              "Attempt to free non-arena SV: 0x%" UVxf
396                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397             return;
398         }
399     }
400     plant_SV(p);
401 }
402
403 #else /* ! DEBUGGING */
404
405 #define del_SV(p)   plant_SV(p)
406
407 #endif /* DEBUGGING */
408
409
410 /*
411 =head1 SV Manipulation Functions
412
413 =for apidoc sv_add_arena
414
415 Given a chunk of memory, link it to the head of the list of arenas,
416 and split it into a list of free SVs.
417
418 =cut
419 */
420
421 static void
422 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423 {
424     SV *const sva = MUTABLE_SV(ptr);
425     SV* sv;
426     SV* svend;
427
428     PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430     /* The first SV in an arena isn't an SV. */
431     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
432     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
433     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
434
435     PL_sv_arenaroot = sva;
436     PL_sv_root = sva + 1;
437
438     svend = &sva[SvREFCNT(sva) - 1];
439     sv = sva + 1;
440     while (sv < svend) {
441         SvARENA_CHAIN_SET(sv, (sv + 1));
442 #ifdef DEBUGGING
443         SvREFCNT(sv) = 0;
444 #endif
445         /* Must always set typemask because it's always checked in on cleanup
446            when the arenas are walked looking for objects.  */
447         SvFLAGS(sv) = SVTYPEMASK;
448         sv++;
449     }
450     SvARENA_CHAIN_SET(sv, 0);
451 #ifdef DEBUGGING
452     SvREFCNT(sv) = 0;
453 #endif
454     SvFLAGS(sv) = SVTYPEMASK;
455 }
456
457 /* visit(): call the named function for each non-free SV in the arenas
458  * whose flags field matches the flags/mask args. */
459
460 STATIC I32
461 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462 {
463     SV* sva;
464     I32 visited = 0;
465
466     PERL_ARGS_ASSERT_VISIT;
467
468     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469         const SV * const svend = &sva[SvREFCNT(sva)];
470         SV* sv;
471         for (sv = sva + 1; sv < svend; ++sv) {
472             if (SvTYPE(sv) != (svtype)SVTYPEMASK
473                     && (sv->sv_flags & mask) == flags
474                     && SvREFCNT(sv))
475             {
476                 (*f)(aTHX_ sv);
477                 ++visited;
478             }
479         }
480     }
481     return visited;
482 }
483
484 #ifdef DEBUGGING
485
486 /* called by sv_report_used() for each live SV */
487
488 static void
489 do_report_used(pTHX_ SV *const sv)
490 {
491     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492         PerlIO_printf(Perl_debug_log, "****\n");
493         sv_dump(sv);
494     }
495 }
496 #endif
497
498 /*
499 =for apidoc sv_report_used
500
501 Dump the contents of all SVs not yet freed (debugging aid).
502
503 =cut
504 */
505
506 void
507 Perl_sv_report_used(pTHX)
508 {
509 #ifdef DEBUGGING
510     visit(do_report_used, 0, 0);
511 #else
512     PERL_UNUSED_CONTEXT;
513 #endif
514 }
515
516 /* called by sv_clean_objs() for each live SV */
517
518 static void
519 do_clean_objs(pTHX_ SV *const ref)
520 {
521     assert (SvROK(ref));
522     {
523         SV * const target = SvRV(ref);
524         if (SvOBJECT(target)) {
525             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526             if (SvWEAKREF(ref)) {
527                 sv_del_backref(target, ref);
528                 SvWEAKREF_off(ref);
529                 SvRV_set(ref, NULL);
530             } else {
531                 SvROK_off(ref);
532                 SvRV_set(ref, NULL);
533                 SvREFCNT_dec_NN(target);
534             }
535         }
536     }
537 }
538
539
540 /* clear any slots in a GV which hold objects - except IO;
541  * called by sv_clean_objs() for each live GV */
542
543 static void
544 do_clean_named_objs(pTHX_ SV *const sv)
545 {
546     SV *obj;
547     assert(SvTYPE(sv) == SVt_PVGV);
548     assert(isGV_with_GP(sv));
549     if (!GvGP(sv))
550         return;
551
552     /* freeing GP entries may indirectly free the current GV;
553      * hold onto it while we mess with the GP slots */
554     SvREFCNT_inc(sv);
555
556     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557         DEBUG_D((PerlIO_printf(Perl_debug_log,
558                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559         GvSV(sv) = NULL;
560         SvREFCNT_dec_NN(obj);
561     }
562     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563         DEBUG_D((PerlIO_printf(Perl_debug_log,
564                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565         GvAV(sv) = NULL;
566         SvREFCNT_dec_NN(obj);
567     }
568     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569         DEBUG_D((PerlIO_printf(Perl_debug_log,
570                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571         GvHV(sv) = NULL;
572         SvREFCNT_dec_NN(obj);
573     }
574     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575         DEBUG_D((PerlIO_printf(Perl_debug_log,
576                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577         GvCV_set(sv, NULL);
578         SvREFCNT_dec_NN(obj);
579     }
580     SvREFCNT_dec_NN(sv); /* undo the inc above */
581 }
582
583 /* clear any IO slots in a GV which hold objects (except stderr, defout);
584  * called by sv_clean_objs() for each live GV */
585
586 static void
587 do_clean_named_io_objs(pTHX_ SV *const sv)
588 {
589     SV *obj;
590     assert(SvTYPE(sv) == SVt_PVGV);
591     assert(isGV_with_GP(sv));
592     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593         return;
594
595     SvREFCNT_inc(sv);
596     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597         DEBUG_D((PerlIO_printf(Perl_debug_log,
598                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599         GvIOp(sv) = NULL;
600         SvREFCNT_dec_NN(obj);
601     }
602     SvREFCNT_dec_NN(sv); /* undo the inc above */
603 }
604
605 /* Void wrapper to pass to visit() */
606 static void
607 do_curse(pTHX_ SV * const sv) {
608     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610         return;
611     (void)curse(sv, 0);
612 }
613
614 /*
615 =for apidoc sv_clean_objs
616
617 Attempt to destroy all objects not yet freed.
618
619 =cut
620 */
621
622 void
623 Perl_sv_clean_objs(pTHX)
624 {
625     GV *olddef, *olderr;
626     PL_in_clean_objs = TRUE;
627     visit(do_clean_objs, SVf_ROK, SVf_ROK);
628     /* Some barnacles may yet remain, clinging to typeglobs.
629      * Run the non-IO destructors first: they may want to output
630      * error messages, close files etc */
631     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     /* And if there are some very tenacious barnacles clinging to arrays,
634        closures, or what have you.... */
635     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636     olddef = PL_defoutgv;
637     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638     if (olddef && isGV_with_GP(olddef))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640     olderr = PL_stderrgv;
641     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642     if (olderr && isGV_with_GP(olderr))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644     SvREFCNT_dec(olddef);
645     PL_in_clean_objs = FALSE;
646 }
647
648 /* called by sv_clean_all() for each live SV */
649
650 static void
651 do_clean_all(pTHX_ SV *const sv)
652 {
653     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654         /* don't clean pid table and strtab */
655         return;
656     }
657     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
658     SvFLAGS(sv) |= SVf_BREAK;
659     SvREFCNT_dec_NN(sv);
660 }
661
662 /*
663 =for apidoc sv_clean_all
664
665 Decrement the refcnt of each remaining SV, possibly triggering a
666 cleanup.  This function may have to be called multiple times to free
667 SVs which are in complex self-referential hierarchies.
668
669 =cut
670 */
671
672 I32
673 Perl_sv_clean_all(pTHX)
674 {
675     I32 cleaned;
676     PL_in_clean_all = TRUE;
677     cleaned = visit(do_clean_all, 0,0);
678     return cleaned;
679 }
680
681 /*
682   ARENASETS: a meta-arena implementation which separates arena-info
683   into struct arena_set, which contains an array of struct
684   arena_descs, each holding info for a single arena.  By separating
685   the meta-info from the arena, we recover the 1st slot, formerly
686   borrowed for list management.  The arena_set is about the size of an
687   arena, avoiding the needless malloc overhead of a naive linked-list.
688
689   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690   memory in the last arena-set (1/2 on average).  In trade, we get
691   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692   smaller types).  The recovery of the wasted space allows use of
693   small arenas for large, rare body types, by changing array* fields
694   in body_details_by_type[] below.
695 */
696 struct arena_desc {
697     char       *arena;          /* the raw storage, allocated aligned */
698     size_t      size;           /* its size ~4k typ */
699     svtype      utype;          /* bodytype stored in arena */
700 };
701
702 struct arena_set;
703
704 /* Get the maximum number of elements in set[] such that struct arena_set
705    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706    therefore likely to be 1 aligned memory page.  */
707
708 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711 struct arena_set {
712     struct arena_set* next;
713     unsigned int   set_size;    /* ie ARENAS_PER_SET */
714     unsigned int   curr;        /* index of next available arena-desc */
715     struct arena_desc set[ARENAS_PER_SET];
716 };
717
718 /*
719 =for apidoc sv_free_arenas
720
721 Deallocate the memory used by all arenas.  Note that all the individual SV
722 heads and bodies within the arenas must already have been freed.
723
724 =cut
725
726 */
727 void
728 Perl_sv_free_arenas(pTHX)
729 {
730     SV* sva;
731     SV* svanext;
732     unsigned int i;
733
734     /* Free arenas here, but be careful about fake ones.  (We assume
735        contiguity of the fake ones with the corresponding real ones.) */
736
737     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738         svanext = MUTABLE_SV(SvANY(sva));
739         while (svanext && SvFAKE(svanext))
740             svanext = MUTABLE_SV(SvANY(svanext));
741
742         if (!SvFAKE(sva))
743             Safefree(sva);
744     }
745
746     {
747         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749         while (aroot) {
750             struct arena_set *current = aroot;
751             i = aroot->curr;
752             while (i--) {
753                 assert(aroot->set[i].arena);
754                 Safefree(aroot->set[i].arena);
755             }
756             aroot = aroot->next;
757             Safefree(current);
758         }
759     }
760     PL_body_arenas = 0;
761
762     i = PERL_ARENA_ROOTS_SIZE;
763     while (i--)
764         PL_body_roots[i] = 0;
765
766     PL_sv_arenaroot = 0;
767     PL_sv_root = 0;
768 }
769
770 /*
771   Here are mid-level routines that manage the allocation of bodies out
772   of the various arenas.  There are 5 kinds of arenas:
773
774   1. SV-head arenas, which are discussed and handled above
775   2. regular body arenas
776   3. arenas for reduced-size bodies
777   4. Hash-Entry arenas
778
779   Arena types 2 & 3 are chained by body-type off an array of
780   arena-root pointers, which is indexed by svtype.  Some of the
781   larger/less used body types are malloced singly, since a large
782   unused block of them is wasteful.  Also, several svtypes dont have
783   bodies; the data fits into the sv-head itself.  The arena-root
784   pointer thus has a few unused root-pointers (which may be hijacked
785   later for arena types 4,5)
786
787   3 differs from 2 as an optimization; some body types have several
788   unused fields in the front of the structure (which are kept in-place
789   for consistency).  These bodies can be allocated in smaller chunks,
790   because the leading fields arent accessed.  Pointers to such bodies
791   are decremented to point at the unused 'ghost' memory, knowing that
792   the pointers are used with offsets to the real memory.
793
794
795 =head1 SV-Body Allocation
796
797 =cut
798
799 Allocation of SV-bodies is similar to SV-heads, differing as follows;
800 the allocation mechanism is used for many body types, so is somewhat
801 more complicated, it uses arena-sets, and has no need for still-live
802 SV detection.
803
804 At the outermost level, (new|del)_X*V macros return bodies of the
805 appropriate type.  These macros call either (new|del)_body_type or
806 (new|del)_body_allocated macro pairs, depending on specifics of the
807 type.  Most body types use the former pair, the latter pair is used to
808 allocate body types with "ghost fields".
809
810 "ghost fields" are fields that are unused in certain types, and
811 consequently don't need to actually exist.  They are declared because
812 they're part of a "base type", which allows use of functions as
813 methods.  The simplest examples are AVs and HVs, 2 aggregate types
814 which don't use the fields which support SCALAR semantics.
815
816 For these types, the arenas are carved up into appropriately sized
817 chunks, we thus avoid wasted memory for those unaccessed members.
818 When bodies are allocated, we adjust the pointer back in memory by the
819 size of the part not allocated, so it's as if we allocated the full
820 structure.  (But things will all go boom if you write to the part that
821 is "not there", because you'll be overwriting the last members of the
822 preceding structure in memory.)
823
824 We calculate the correction using the STRUCT_OFFSET macro on the first
825 member present.  If the allocated structure is smaller (no initial NV
826 actually allocated) then the net effect is to subtract the size of the NV
827 from the pointer, to return a new pointer as if an initial NV were actually
828 allocated.  (We were using structures named *_allocated for this, but
829 this turned out to be a subtle bug, because a structure without an NV
830 could have a lower alignment constraint, but the compiler is allowed to
831 optimised accesses based on the alignment constraint of the actual pointer
832 to the full structure, for example, using a single 64 bit load instruction
833 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
834
835 This is the same trick as was used for NV and IV bodies.  Ironically it
836 doesn't need to be used for NV bodies any more, because NV is now at
837 the start of the structure.  IV bodies, and also in some builds NV bodies,
838 don't need it either, because they are no longer allocated.
839
840 In turn, the new_body_* allocators call S_new_body(), which invokes
841 new_body_inline macro, which takes a lock, and takes a body off the
842 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
843 necessary to refresh an empty list.  Then the lock is released, and
844 the body is returned.
845
846 Perl_more_bodies allocates a new arena, and carves it up into an array of N
847 bodies, which it strings into a linked list.  It looks up arena-size
848 and body-size from the body_details table described below, thus
849 supporting the multiple body-types.
850
851 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
852 the (new|del)_X*V macros are mapped directly to malloc/free.
853
854 For each sv-type, struct body_details bodies_by_type[] carries
855 parameters which control these aspects of SV handling:
856
857 Arena_size determines whether arenas are used for this body type, and if
858 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
859 zero, forcing individual mallocs and frees.
860
861 Body_size determines how big a body is, and therefore how many fit into
862 each arena.  Offset carries the body-pointer adjustment needed for
863 "ghost fields", and is used in *_allocated macros.
864
865 But its main purpose is to parameterize info needed in
866 Perl_sv_upgrade().  The info here dramatically simplifies the function
867 vs the implementation in 5.8.8, making it table-driven.  All fields
868 are used for this, except for arena_size.
869
870 For the sv-types that have no bodies, arenas are not used, so those
871 PL_body_roots[sv_type] are unused, and can be overloaded.  In
872 something of a special case, SVt_NULL is borrowed for HE arenas;
873 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
874 bodies_by_type[SVt_NULL] slot is not used, as the table is not
875 available in hv.c.
876
877 */
878
879 struct body_details {
880     U8 body_size;       /* Size to allocate  */
881     U8 copy;            /* Size of structure to copy (may be shorter)  */
882     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
883     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
884     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
885     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
886     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
887     U32 arena_size;                 /* Size of arena to allocate */
888 };
889
890 #define HADNV FALSE
891 #define NONV TRUE
892
893
894 #ifdef PURIFY
895 /* With -DPURFIY we allocate everything directly, and don't use arenas.
896    This seems a rather elegant way to simplify some of the code below.  */
897 #define HASARENA FALSE
898 #else
899 #define HASARENA TRUE
900 #endif
901 #define NOARENA FALSE
902
903 /* Size the arenas to exactly fit a given number of bodies.  A count
904    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
905    simplifying the default.  If count > 0, the arena is sized to fit
906    only that many bodies, allowing arenas to be used for large, rare
907    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
908    limited by PERL_ARENA_SIZE, so we can safely oversize the
909    declarations.
910  */
911 #define FIT_ARENA0(body_size)                           \
912     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
913 #define FIT_ARENAn(count,body_size)                     \
914     ( count * body_size <= PERL_ARENA_SIZE)             \
915     ? count * body_size                                 \
916     : FIT_ARENA0 (body_size)
917 #define FIT_ARENA(count,body_size)                      \
918    (U32)(count                                          \
919     ? FIT_ARENAn (count, body_size)                     \
920     : FIT_ARENA0 (body_size))
921
922 /* Calculate the length to copy. Specifically work out the length less any
923    final padding the compiler needed to add.  See the comment in sv_upgrade
924    for why copying the padding proved to be a bug.  */
925
926 #define copy_length(type, last_member) \
927         STRUCT_OFFSET(type, last_member) \
928         + sizeof (((type*)SvANY((const SV *)0))->last_member)
929
930 static const struct body_details bodies_by_type[] = {
931     /* HEs use this offset for their arena.  */
932     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
933
934     /* IVs are in the head, so the allocation size is 0.  */
935     { 0,
936       sizeof(IV), /* This is used to copy out the IV body.  */
937       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
938       NOARENA /* IVS don't need an arena  */, 0
939     },
940
941 #if NVSIZE <= IVSIZE
942     { 0, sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, NOARENA, 0 },
945 #else
946     { sizeof(NV), sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949 #endif
950
951     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
952       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
953       + STRUCT_OFFSET(XPV, xpv_cur),
954       SVt_PV, FALSE, NONV, HASARENA,
955       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
956
957     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
958       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
959       + STRUCT_OFFSET(XPV, xpv_cur),
960       SVt_INVLIST, TRUE, NONV, HASARENA,
961       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
962
963     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PVIV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_PVNV, FALSE, HADNV, HASARENA,
973       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
976       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
977
978     { sizeof(regexp),
979       sizeof(regexp),
980       0,
981       SVt_REGEXP, TRUE, NONV, HASARENA,
982       FIT_ARENA(0, sizeof(regexp))
983     },
984
985     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
986       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
987     
988     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
989       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
990
991     { sizeof(XPVAV),
992       copy_length(XPVAV, xav_alloc),
993       0,
994       SVt_PVAV, TRUE, NONV, HASARENA,
995       FIT_ARENA(0, sizeof(XPVAV)) },
996
997     { sizeof(XPVHV),
998       copy_length(XPVHV, xhv_max),
999       0,
1000       SVt_PVHV, TRUE, NONV, HASARENA,
1001       FIT_ARENA(0, sizeof(XPVHV)) },
1002
1003     { sizeof(XPVCV),
1004       sizeof(XPVCV),
1005       0,
1006       SVt_PVCV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(XPVCV)) },
1008
1009     { sizeof(XPVFM),
1010       sizeof(XPVFM),
1011       0,
1012       SVt_PVFM, TRUE, NONV, NOARENA,
1013       FIT_ARENA(20, sizeof(XPVFM)) },
1014
1015     { sizeof(XPVIO),
1016       sizeof(XPVIO),
1017       0,
1018       SVt_PVIO, TRUE, NONV, HASARENA,
1019       FIT_ARENA(24, sizeof(XPVIO)) },
1020 };
1021
1022 #define new_body_allocated(sv_type)             \
1023     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1024              - bodies_by_type[sv_type].offset)
1025
1026 /* return a thing to the free list */
1027
1028 #define del_body(thing, root)                           \
1029     STMT_START {                                        \
1030         void ** const thing_copy = (void **)thing;      \
1031         *thing_copy = *root;                            \
1032         *root = (void*)thing_copy;                      \
1033     } STMT_END
1034
1035 #ifdef PURIFY
1036 #if !(NVSIZE <= IVSIZE)
1037 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1038 #endif
1039 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1040 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1041
1042 #define del_XPVGV(p)    safefree(p)
1043
1044 #else /* !PURIFY */
1045
1046 #if !(NVSIZE <= IVSIZE)
1047 #  define new_XNV()     new_body_allocated(SVt_NV)
1048 #endif
1049 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1050 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1051
1052 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1053                                  &PL_body_roots[SVt_PVGV])
1054
1055 #endif /* PURIFY */
1056
1057 /* no arena for you! */
1058
1059 #define new_NOARENA(details) \
1060         safemalloc((details)->body_size + (details)->offset)
1061 #define new_NOARENAZ(details) \
1062         safecalloc((details)->body_size + (details)->offset, 1)
1063
1064 void *
1065 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1066                   const size_t arena_size)
1067 {
1068     void ** const root = &PL_body_roots[sv_type];
1069     struct arena_desc *adesc;
1070     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1071     unsigned int curr;
1072     char *start;
1073     const char *end;
1074     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1075 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1076     dVAR;
1077 #endif
1078 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1079     static bool done_sanity_check;
1080
1081     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1082      * variables like done_sanity_check. */
1083     if (!done_sanity_check) {
1084         unsigned int i = SVt_LAST;
1085
1086         done_sanity_check = TRUE;
1087
1088         while (i--)
1089             assert (bodies_by_type[i].type == i);
1090     }
1091 #endif
1092
1093     assert(arena_size);
1094
1095     /* may need new arena-set to hold new arena */
1096     if (!aroot || aroot->curr >= aroot->set_size) {
1097         struct arena_set *newroot;
1098         Newxz(newroot, 1, struct arena_set);
1099         newroot->set_size = ARENAS_PER_SET;
1100         newroot->next = aroot;
1101         aroot = newroot;
1102         PL_body_arenas = (void *) newroot;
1103         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1104     }
1105
1106     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1107     curr = aroot->curr++;
1108     adesc = &(aroot->set[curr]);
1109     assert(!adesc->arena);
1110     
1111     Newx(adesc->arena, good_arena_size, char);
1112     adesc->size = good_arena_size;
1113     adesc->utype = sv_type;
1114     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1115                           curr, (void*)adesc->arena, (UV)good_arena_size));
1116
1117     start = (char *) adesc->arena;
1118
1119     /* Get the address of the byte after the end of the last body we can fit.
1120        Remember, this is integer division:  */
1121     end = start + good_arena_size / body_size * body_size;
1122
1123     /* computed count doesn't reflect the 1st slot reservation */
1124 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1125     DEBUG_m(PerlIO_printf(Perl_debug_log,
1126                           "arena %p end %p arena-size %d (from %d) type %d "
1127                           "size %d ct %d\n",
1128                           (void*)start, (void*)end, (int)good_arena_size,
1129                           (int)arena_size, sv_type, (int)body_size,
1130                           (int)good_arena_size / (int)body_size));
1131 #else
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1134                           (void*)start, (void*)end,
1135                           (int)arena_size, sv_type, (int)body_size,
1136                           (int)good_arena_size / (int)body_size));
1137 #endif
1138     *root = (void *)start;
1139
1140     while (1) {
1141         /* Where the next body would start:  */
1142         char * const next = start + body_size;
1143
1144         if (next >= end) {
1145             /* This is the last body:  */
1146             assert(next == end);
1147
1148             *(void **)start = 0;
1149             return *root;
1150         }
1151
1152         *(void**) start = (void *)next;
1153         start = next;
1154     }
1155 }
1156
1157 /* grab a new thing from the free list, allocating more if necessary.
1158    The inline version is used for speed in hot routines, and the
1159    function using it serves the rest (unless PURIFY).
1160 */
1161 #define new_body_inline(xpv, sv_type) \
1162     STMT_START { \
1163         void ** const r3wt = &PL_body_roots[sv_type]; \
1164         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1165           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1166                                              bodies_by_type[sv_type].body_size,\
1167                                              bodies_by_type[sv_type].arena_size)); \
1168         *(r3wt) = *(void**)(xpv); \
1169     } STMT_END
1170
1171 #ifndef PURIFY
1172
1173 STATIC void *
1174 S_new_body(pTHX_ const svtype sv_type)
1175 {
1176     void *xpv;
1177     new_body_inline(xpv, sv_type);
1178     return xpv;
1179 }
1180
1181 #endif
1182
1183 static const struct body_details fake_rv =
1184     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1185
1186 /*
1187 =for apidoc sv_upgrade
1188
1189 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1190 SV, then copies across as much information as possible from the old body.
1191 It croaks if the SV is already in a more complex form than requested.  You
1192 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1193 before calling C<sv_upgrade>, and hence does not croak.  See also
1194 C<L</svtype>>.
1195
1196 =cut
1197 */
1198
1199 void
1200 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1201 {
1202     void*       old_body;
1203     void*       new_body;
1204     const svtype old_type = SvTYPE(sv);
1205     const struct body_details *new_type_details;
1206     const struct body_details *old_type_details
1207         = bodies_by_type + old_type;
1208     SV *referent = NULL;
1209
1210     PERL_ARGS_ASSERT_SV_UPGRADE;
1211
1212     if (old_type == new_type)
1213         return;
1214
1215     /* This clause was purposefully added ahead of the early return above to
1216        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1217        inference by Nick I-S that it would fix other troublesome cases. See
1218        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1219
1220        Given that shared hash key scalars are no longer PVIV, but PV, there is
1221        no longer need to unshare so as to free up the IVX slot for its proper
1222        purpose. So it's safe to move the early return earlier.  */
1223
1224     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1225         sv_force_normal_flags(sv, 0);
1226     }
1227
1228     old_body = SvANY(sv);
1229
1230     /* Copying structures onto other structures that have been neatly zeroed
1231        has a subtle gotcha. Consider XPVMG
1232
1233        +------+------+------+------+------+-------+-------+
1234        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1235        +------+------+------+------+------+-------+-------+
1236        0      4      8     12     16     20      24      28
1237
1238        where NVs are aligned to 8 bytes, so that sizeof that structure is
1239        actually 32 bytes long, with 4 bytes of padding at the end:
1240
1241        +------+------+------+------+------+-------+-------+------+
1242        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1243        +------+------+------+------+------+-------+-------+------+
1244        0      4      8     12     16     20      24      28     32
1245
1246        so what happens if you allocate memory for this structure:
1247
1248        +------+------+------+------+------+-------+-------+------+------+...
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1250        +------+------+------+------+------+-------+-------+------+------+...
1251        0      4      8     12     16     20      24      28     32     36
1252
1253        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1254        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1255        started out as zero once, but it's quite possible that it isn't. So now,
1256        rather than a nicely zeroed GP, you have it pointing somewhere random.
1257        Bugs ensue.
1258
1259        (In fact, GP ends up pointing at a previous GP structure, because the
1260        principle cause of the padding in XPVMG getting garbage is a copy of
1261        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1262        this happens to be moot because XPVGV has been re-ordered, with GP
1263        no longer after STASH)
1264
1265        So we are careful and work out the size of used parts of all the
1266        structures.  */
1267
1268     switch (old_type) {
1269     case SVt_NULL:
1270         break;
1271     case SVt_IV:
1272         if (SvROK(sv)) {
1273             referent = SvRV(sv);
1274             old_type_details = &fake_rv;
1275             if (new_type == SVt_NV)
1276                 new_type = SVt_PVNV;
1277         } else {
1278             if (new_type < SVt_PVIV) {
1279                 new_type = (new_type == SVt_NV)
1280                     ? SVt_PVNV : SVt_PVIV;
1281             }
1282         }
1283         break;
1284     case SVt_NV:
1285         if (new_type < SVt_PVNV) {
1286             new_type = SVt_PVNV;
1287         }
1288         break;
1289     case SVt_PV:
1290         assert(new_type > SVt_PV);
1291         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1292         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1293         break;
1294     case SVt_PVIV:
1295         break;
1296     case SVt_PVNV:
1297         break;
1298     case SVt_PVMG:
1299         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1300            there's no way that it can be safely upgraded, because perl.c
1301            expects to Safefree(SvANY(PL_mess_sv))  */
1302         assert(sv != PL_mess_sv);
1303         break;
1304     default:
1305         if (UNLIKELY(old_type_details->cant_upgrade))
1306             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308     }
1309
1310     if (UNLIKELY(old_type > new_type))
1311         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312                 (int)old_type, (int)new_type);
1313
1314     new_type_details = bodies_by_type + new_type;
1315
1316     SvFLAGS(sv) &= ~SVTYPEMASK;
1317     SvFLAGS(sv) |= new_type;
1318
1319     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320        the return statements above will have triggered.  */
1321     assert (new_type != SVt_NULL);
1322     switch (new_type) {
1323     case SVt_IV:
1324         assert(old_type == SVt_NULL);
1325         SET_SVANY_FOR_BODYLESS_IV(sv);
1326         SvIV_set(sv, 0);
1327         return;
1328     case SVt_NV:
1329         assert(old_type == SVt_NULL);
1330 #if NVSIZE <= IVSIZE
1331         SET_SVANY_FOR_BODYLESS_NV(sv);
1332 #else
1333         SvANY(sv) = new_XNV();
1334 #endif
1335         SvNV_set(sv, 0);
1336         return;
1337     case SVt_PVHV:
1338     case SVt_PVAV:
1339         assert(new_type_details->body_size);
1340
1341 #ifndef PURIFY  
1342         assert(new_type_details->arena);
1343         assert(new_type_details->arena_size);
1344         /* This points to the start of the allocated area.  */
1345         new_body_inline(new_body, new_type);
1346         Zero(new_body, new_type_details->body_size, char);
1347         new_body = ((char *)new_body) - new_type_details->offset;
1348 #else
1349         /* We always allocated the full length item with PURIFY. To do this
1350            we fake things so that arena is false for all 16 types..  */
1351         new_body = new_NOARENAZ(new_type_details);
1352 #endif
1353         SvANY(sv) = new_body;
1354         if (new_type == SVt_PVAV) {
1355             AvMAX(sv)   = -1;
1356             AvFILLp(sv) = -1;
1357             AvREAL_only(sv);
1358             if (old_type_details->body_size) {
1359                 AvALLOC(sv) = 0;
1360             } else {
1361                 /* It will have been zeroed when the new body was allocated.
1362                    Lets not write to it, in case it confuses a write-back
1363                    cache.  */
1364             }
1365         } else {
1366             assert(!SvOK(sv));
1367             SvOK_off(sv);
1368 #ifndef NODEFAULT_SHAREKEYS
1369             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1370 #endif
1371             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1372             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1373         }
1374
1375         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1376            The target created by newSVrv also is, and it can have magic.
1377            However, it never has SvPVX set.
1378         */
1379         if (old_type == SVt_IV) {
1380             assert(!SvROK(sv));
1381         } else if (old_type >= SVt_PV) {
1382             assert(SvPVX_const(sv) == 0);
1383         }
1384
1385         if (old_type >= SVt_PVMG) {
1386             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1387             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1388         } else {
1389             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1390         }
1391         break;
1392
1393     case SVt_PVIV:
1394         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1395            no route from NV to PVIV, NOK can never be true  */
1396         assert(!SvNOKp(sv));
1397         assert(!SvNOK(sv));
1398         /* FALLTHROUGH */
1399     case SVt_PVIO:
1400     case SVt_PVFM:
1401     case SVt_PVGV:
1402     case SVt_PVCV:
1403     case SVt_PVLV:
1404     case SVt_INVLIST:
1405     case SVt_REGEXP:
1406     case SVt_PVMG:
1407     case SVt_PVNV:
1408     case SVt_PV:
1409
1410         assert(new_type_details->body_size);
1411         /* We always allocated the full length item with PURIFY. To do this
1412            we fake things so that arena is false for all 16 types..  */
1413         if(new_type_details->arena) {
1414             /* This points to the start of the allocated area.  */
1415             new_body_inline(new_body, new_type);
1416             Zero(new_body, new_type_details->body_size, char);
1417             new_body = ((char *)new_body) - new_type_details->offset;
1418         } else {
1419             new_body = new_NOARENAZ(new_type_details);
1420         }
1421         SvANY(sv) = new_body;
1422
1423         if (old_type_details->copy) {
1424             /* There is now the potential for an upgrade from something without
1425                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1426             int offset = old_type_details->offset;
1427             int length = old_type_details->copy;
1428
1429             if (new_type_details->offset > old_type_details->offset) {
1430                 const int difference
1431                     = new_type_details->offset - old_type_details->offset;
1432                 offset += difference;
1433                 length -= difference;
1434             }
1435             assert (length >= 0);
1436                 
1437             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438                  char);
1439         }
1440
1441 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1442         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1444          * NV slot, but the new one does, then we need to initialise the
1445          * freshly created NV slot with whatever the correct bit pattern is
1446          * for 0.0  */
1447         if (old_type_details->zero_nv && !new_type_details->zero_nv
1448             && !isGV_with_GP(sv))
1449             SvNV_set(sv, 0);
1450 #endif
1451
1452         if (UNLIKELY(new_type == SVt_PVIO)) {
1453             IO * const io = MUTABLE_IO(sv);
1454             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456             SvOBJECT_on(io);
1457             /* Clear the stashcache because a new IO could overrule a package
1458                name */
1459             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460             hv_clear(PL_stashcache);
1461
1462             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463             IoPAGE_LEN(sv) = 60;
1464         }
1465         if (old_type < SVt_PV) {
1466             /* referent will be NULL unless the old type was SVt_IV emulating
1467                SVt_RV */
1468             sv->sv_u.svu_rv = referent;
1469         }
1470         break;
1471     default:
1472         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1473                    (unsigned long)new_type);
1474     }
1475
1476     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1477        and sometimes SVt_NV */
1478     if (old_type_details->body_size) {
1479 #ifdef PURIFY
1480         safefree(old_body);
1481 #else
1482         /* Note that there is an assumption that all bodies of types that
1483            can be upgraded came from arenas. Only the more complex non-
1484            upgradable types are allowed to be directly malloc()ed.  */
1485         assert(old_type_details->arena);
1486         del_body((void*)((char*)old_body + old_type_details->offset),
1487                  &PL_body_roots[old_type]);
1488 #endif
1489     }
1490 }
1491
1492 /*
1493 =for apidoc sv_backoff
1494
1495 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1496 wrapper instead.
1497
1498 =cut
1499 */
1500
1501 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1502    prior to 5.23.4 this function always returned 0
1503 */
1504
1505 void
1506 Perl_sv_backoff(SV *const sv)
1507 {
1508     STRLEN delta;
1509     const char * const s = SvPVX_const(sv);
1510
1511     PERL_ARGS_ASSERT_SV_BACKOFF;
1512
1513     assert(SvOOK(sv));
1514     assert(SvTYPE(sv) != SVt_PVHV);
1515     assert(SvTYPE(sv) != SVt_PVAV);
1516
1517     SvOOK_offset(sv, delta);
1518     
1519     SvLEN_set(sv, SvLEN(sv) + delta);
1520     SvPV_set(sv, SvPVX(sv) - delta);
1521     SvFLAGS(sv) &= ~SVf_OOK;
1522     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1523     return;
1524 }
1525
1526
1527 /* forward declaration */
1528 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1529
1530
1531 /*
1532 =for apidoc sv_grow
1533
1534 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1535 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1536 Use the C<SvGROW> wrapper instead.
1537
1538 =cut
1539 */
1540
1541
1542 char *
1543 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1544 {
1545     char *s;
1546
1547     PERL_ARGS_ASSERT_SV_GROW;
1548
1549     if (SvROK(sv))
1550         sv_unref(sv);
1551     if (SvTYPE(sv) < SVt_PV) {
1552         sv_upgrade(sv, SVt_PV);
1553         s = SvPVX_mutable(sv);
1554     }
1555     else if (SvOOK(sv)) {       /* pv is offset? */
1556         sv_backoff(sv);
1557         s = SvPVX_mutable(sv);
1558         if (newlen > SvLEN(sv))
1559             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1560     }
1561     else
1562     {
1563         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1564         s = SvPVX_mutable(sv);
1565     }
1566
1567 #ifdef PERL_COPY_ON_WRITE
1568     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1569      * to store the COW count. So in general, allocate one more byte than
1570      * asked for, to make it likely this byte is always spare: and thus
1571      * make more strings COW-able.
1572      *
1573      * Only increment if the allocation isn't MEM_SIZE_MAX,
1574      * otherwise it will wrap to 0.
1575      */
1576     if ( newlen != MEM_SIZE_MAX )
1577         newlen++;
1578 #endif
1579
1580 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1581 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1582 #endif
1583
1584     if (newlen > SvLEN(sv)) {           /* need more room? */
1585         STRLEN minlen = SvCUR(sv);
1586         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1587         if (newlen < minlen)
1588             newlen = minlen;
1589 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1590
1591         /* Don't round up on the first allocation, as odds are pretty good that
1592          * the initial request is accurate as to what is really needed */
1593         if (SvLEN(sv)) {
1594             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1595             if (rounded > newlen)
1596                 newlen = rounded;
1597         }
1598 #endif
1599         if (SvLEN(sv) && s) {
1600             s = (char*)saferealloc(s, newlen);
1601         }
1602         else {
1603             s = (char*)safemalloc(newlen);
1604             if (SvPVX_const(sv) && SvCUR(sv)) {
1605                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1606             }
1607         }
1608         SvPV_set(sv, s);
1609 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1610         /* Do this here, do it once, do it right, and then we will never get
1611            called back into sv_grow() unless there really is some growing
1612            needed.  */
1613         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1614 #else
1615         SvLEN_set(sv, newlen);
1616 #endif
1617     }
1618     return s;
1619 }
1620
1621 /*
1622 =for apidoc sv_setiv
1623
1624 Copies an integer into the given SV, upgrading first if necessary.
1625 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1626
1627 =cut
1628 */
1629
1630 void
1631 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1632 {
1633     PERL_ARGS_ASSERT_SV_SETIV;
1634
1635     SV_CHECK_THINKFIRST_COW_DROP(sv);
1636     switch (SvTYPE(sv)) {
1637     case SVt_NULL:
1638     case SVt_NV:
1639         sv_upgrade(sv, SVt_IV);
1640         break;
1641     case SVt_PV:
1642         sv_upgrade(sv, SVt_PVIV);
1643         break;
1644
1645     case SVt_PVGV:
1646         if (!isGV_with_GP(sv))
1647             break;
1648         /* FALLTHROUGH */
1649     case SVt_PVAV:
1650     case SVt_PVHV:
1651     case SVt_PVCV:
1652     case SVt_PVFM:
1653     case SVt_PVIO:
1654         /* diag_listed_as: Can't coerce %s to %s in %s */
1655         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1656                    OP_DESC(PL_op));
1657         NOT_REACHED; /* NOTREACHED */
1658         break;
1659     default: NOOP;
1660     }
1661     (void)SvIOK_only(sv);                       /* validate number */
1662     SvIV_set(sv, i);
1663     SvTAINT(sv);
1664 }
1665
1666 /*
1667 =for apidoc sv_setiv_mg
1668
1669 Like C<sv_setiv>, but also handles 'set' magic.
1670
1671 =cut
1672 */
1673
1674 void
1675 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1676 {
1677     PERL_ARGS_ASSERT_SV_SETIV_MG;
1678
1679     sv_setiv(sv,i);
1680     SvSETMAGIC(sv);
1681 }
1682
1683 /*
1684 =for apidoc sv_setuv
1685
1686 Copies an unsigned integer into the given SV, upgrading first if necessary.
1687 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1688
1689 =cut
1690 */
1691
1692 void
1693 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1694 {
1695     PERL_ARGS_ASSERT_SV_SETUV;
1696
1697     /* With the if statement to ensure that integers are stored as IVs whenever
1698        possible:
1699        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1700
1701        without
1702        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1703
1704        If you wish to remove the following if statement, so that this routine
1705        (and its callers) always return UVs, please benchmark to see what the
1706        effect is. Modern CPUs may be different. Or may not :-)
1707     */
1708     if (u <= (UV)IV_MAX) {
1709        sv_setiv(sv, (IV)u);
1710        return;
1711     }
1712     sv_setiv(sv, 0);
1713     SvIsUV_on(sv);
1714     SvUV_set(sv, u);
1715 }
1716
1717 /*
1718 =for apidoc sv_setuv_mg
1719
1720 Like C<sv_setuv>, but also handles 'set' magic.
1721
1722 =cut
1723 */
1724
1725 void
1726 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1727 {
1728     PERL_ARGS_ASSERT_SV_SETUV_MG;
1729
1730     sv_setuv(sv,u);
1731     SvSETMAGIC(sv);
1732 }
1733
1734 /*
1735 =for apidoc sv_setnv
1736
1737 Copies a double into the given SV, upgrading first if necessary.
1738 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1739
1740 =cut
1741 */
1742
1743 void
1744 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1745 {
1746     PERL_ARGS_ASSERT_SV_SETNV;
1747
1748     SV_CHECK_THINKFIRST_COW_DROP(sv);
1749     switch (SvTYPE(sv)) {
1750     case SVt_NULL:
1751     case SVt_IV:
1752         sv_upgrade(sv, SVt_NV);
1753         break;
1754     case SVt_PV:
1755     case SVt_PVIV:
1756         sv_upgrade(sv, SVt_PVNV);
1757         break;
1758
1759     case SVt_PVGV:
1760         if (!isGV_with_GP(sv))
1761             break;
1762         /* FALLTHROUGH */
1763     case SVt_PVAV:
1764     case SVt_PVHV:
1765     case SVt_PVCV:
1766     case SVt_PVFM:
1767     case SVt_PVIO:
1768         /* diag_listed_as: Can't coerce %s to %s in %s */
1769         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1770                    OP_DESC(PL_op));
1771         NOT_REACHED; /* NOTREACHED */
1772         break;
1773     default: NOOP;
1774     }
1775     SvNV_set(sv, num);
1776     (void)SvNOK_only(sv);                       /* validate number */
1777     SvTAINT(sv);
1778 }
1779
1780 /*
1781 =for apidoc sv_setnv_mg
1782
1783 Like C<sv_setnv>, but also handles 'set' magic.
1784
1785 =cut
1786 */
1787
1788 void
1789 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1790 {
1791     PERL_ARGS_ASSERT_SV_SETNV_MG;
1792
1793     sv_setnv(sv,num);
1794     SvSETMAGIC(sv);
1795 }
1796
1797 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1798  * not incrementable warning display.
1799  * Originally part of S_not_a_number().
1800  * The return value may be != tmpbuf.
1801  */
1802
1803 STATIC const char *
1804 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1805     const char *pv;
1806
1807      PERL_ARGS_ASSERT_SV_DISPLAY;
1808
1809      if (DO_UTF8(sv)) {
1810           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1811           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1812      } else {
1813           char *d = tmpbuf;
1814           const char * const limit = tmpbuf + tmpbuf_size - 8;
1815           /* each *s can expand to 4 chars + "...\0",
1816              i.e. need room for 8 chars */
1817         
1818           const char *s = SvPVX_const(sv);
1819           const char * const end = s + SvCUR(sv);
1820           for ( ; s < end && d < limit; s++ ) {
1821                int ch = *s & 0xFF;
1822                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1823                     *d++ = 'M';
1824                     *d++ = '-';
1825
1826                     /* Map to ASCII "equivalent" of Latin1 */
1827                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1828                }
1829                if (ch == '\n') {
1830                     *d++ = '\\';
1831                     *d++ = 'n';
1832                }
1833                else if (ch == '\r') {
1834                     *d++ = '\\';
1835                     *d++ = 'r';
1836                }
1837                else if (ch == '\f') {
1838                     *d++ = '\\';
1839                     *d++ = 'f';
1840                }
1841                else if (ch == '\\') {
1842                     *d++ = '\\';
1843                     *d++ = '\\';
1844                }
1845                else if (ch == '\0') {
1846                     *d++ = '\\';
1847                     *d++ = '0';
1848                }
1849                else if (isPRINT_LC(ch))
1850                     *d++ = ch;
1851                else {
1852                     *d++ = '^';
1853                     *d++ = toCTRL(ch);
1854                }
1855           }
1856           if (s < end) {
1857                *d++ = '.';
1858                *d++ = '.';
1859                *d++ = '.';
1860           }
1861           *d = '\0';
1862           pv = tmpbuf;
1863     }
1864
1865     return pv;
1866 }
1867
1868 /* Print an "isn't numeric" warning, using a cleaned-up,
1869  * printable version of the offending string
1870  */
1871
1872 STATIC void
1873 S_not_a_number(pTHX_ SV *const sv)
1874 {
1875      char tmpbuf[64];
1876      const char *pv;
1877
1878      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1879
1880      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1881
1882     if (PL_op)
1883         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1884                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1885                     "Argument \"%s\" isn't numeric in %s", pv,
1886                     OP_DESC(PL_op));
1887     else
1888         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1889                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1890                     "Argument \"%s\" isn't numeric", pv);
1891 }
1892
1893 STATIC void
1894 S_not_incrementable(pTHX_ SV *const sv) {
1895      char tmpbuf[64];
1896      const char *pv;
1897
1898      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1899
1900      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1901
1902      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1903                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1904 }
1905
1906 /*
1907 =for apidoc looks_like_number
1908
1909 Test if the content of an SV looks like a number (or is a number).
1910 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1911 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1912 ignored.
1913
1914 =cut
1915 */
1916
1917 I32
1918 Perl_looks_like_number(pTHX_ SV *const sv)
1919 {
1920     const char *sbegin;
1921     STRLEN len;
1922     int numtype;
1923
1924     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1925
1926     if (SvPOK(sv) || SvPOKp(sv)) {
1927         sbegin = SvPV_nomg_const(sv, len);
1928     }
1929     else
1930         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1931     numtype = grok_number(sbegin, len, NULL);
1932     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1933 }
1934
1935 STATIC bool
1936 S_glob_2number(pTHX_ GV * const gv)
1937 {
1938     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1939
1940     /* We know that all GVs stringify to something that is not-a-number,
1941         so no need to test that.  */
1942     if (ckWARN(WARN_NUMERIC))
1943     {
1944         SV *const buffer = sv_newmortal();
1945         gv_efullname3(buffer, gv, "*");
1946         not_a_number(buffer);
1947     }
1948     /* We just want something true to return, so that S_sv_2iuv_common
1949         can tail call us and return true.  */
1950     return TRUE;
1951 }
1952
1953 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1954    until proven guilty, assume that things are not that bad... */
1955
1956 /*
1957    NV_PRESERVES_UV:
1958
1959    As 64 bit platforms often have an NV that doesn't preserve all bits of
1960    an IV (an assumption perl has been based on to date) it becomes necessary
1961    to remove the assumption that the NV always carries enough precision to
1962    recreate the IV whenever needed, and that the NV is the canonical form.
1963    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1964    precision as a side effect of conversion (which would lead to insanity
1965    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1966    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1967       where precision was lost, and IV/UV/NV slots that have a valid conversion
1968       which has lost no precision
1969    2) to ensure that if a numeric conversion to one form is requested that
1970       would lose precision, the precise conversion (or differently
1971       imprecise conversion) is also performed and cached, to prevent
1972       requests for different numeric formats on the same SV causing
1973       lossy conversion chains. (lossless conversion chains are perfectly
1974       acceptable (still))
1975
1976
1977    flags are used:
1978    SvIOKp is true if the IV slot contains a valid value
1979    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1980    SvNOKp is true if the NV slot contains a valid value
1981    SvNOK  is true only if the NV value is accurate
1982
1983    so
1984    while converting from PV to NV, check to see if converting that NV to an
1985    IV(or UV) would lose accuracy over a direct conversion from PV to
1986    IV(or UV). If it would, cache both conversions, return NV, but mark
1987    SV as IOK NOKp (ie not NOK).
1988
1989    While converting from PV to IV, check to see if converting that IV to an
1990    NV would lose accuracy over a direct conversion from PV to NV. If it
1991    would, cache both conversions, flag similarly.
1992
1993    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1994    correctly because if IV & NV were set NV *always* overruled.
1995    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1996    changes - now IV and NV together means that the two are interchangeable:
1997    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1998
1999    The benefit of this is that operations such as pp_add know that if
2000    SvIOK is true for both left and right operands, then integer addition
2001    can be used instead of floating point (for cases where the result won't
2002    overflow). Before, floating point was always used, which could lead to
2003    loss of precision compared with integer addition.
2004
2005    * making IV and NV equal status should make maths accurate on 64 bit
2006      platforms
2007    * may speed up maths somewhat if pp_add and friends start to use
2008      integers when possible instead of fp. (Hopefully the overhead in
2009      looking for SvIOK and checking for overflow will not outweigh the
2010      fp to integer speedup)
2011    * will slow down integer operations (callers of SvIV) on "inaccurate"
2012      values, as the change from SvIOK to SvIOKp will cause a call into
2013      sv_2iv each time rather than a macro access direct to the IV slot
2014    * should speed up number->string conversion on integers as IV is
2015      favoured when IV and NV are equally accurate
2016
2017    ####################################################################
2018    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2019    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2020    On the other hand, SvUOK is true iff UV.
2021    ####################################################################
2022
2023    Your mileage will vary depending your CPU's relative fp to integer
2024    performance ratio.
2025 */
2026
2027 #ifndef NV_PRESERVES_UV
2028 #  define IS_NUMBER_UNDERFLOW_IV 1
2029 #  define IS_NUMBER_UNDERFLOW_UV 2
2030 #  define IS_NUMBER_IV_AND_UV    2
2031 #  define IS_NUMBER_OVERFLOW_IV  4
2032 #  define IS_NUMBER_OVERFLOW_UV  5
2033
2034 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2035
2036 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2037 STATIC int
2038 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2039 #  ifdef DEBUGGING
2040                        , I32 numtype
2041 #  endif
2042                        )
2043 {
2044     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2045     PERL_UNUSED_CONTEXT;
2046
2047     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));
2048     if (SvNVX(sv) < (NV)IV_MIN) {
2049         (void)SvIOKp_on(sv);
2050         (void)SvNOK_on(sv);
2051         SvIV_set(sv, IV_MIN);
2052         return IS_NUMBER_UNDERFLOW_IV;
2053     }
2054     if (SvNVX(sv) > (NV)UV_MAX) {
2055         (void)SvIOKp_on(sv);
2056         (void)SvNOK_on(sv);
2057         SvIsUV_on(sv);
2058         SvUV_set(sv, UV_MAX);
2059         return IS_NUMBER_OVERFLOW_UV;
2060     }
2061     (void)SvIOKp_on(sv);
2062     (void)SvNOK_on(sv);
2063     /* Can't use strtol etc to convert this string.  (See truth table in
2064        sv_2iv  */
2065     if (SvNVX(sv) <= (UV)IV_MAX) {
2066         SvIV_set(sv, I_V(SvNVX(sv)));
2067         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2068             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2069         } else {
2070             /* Integer is imprecise. NOK, IOKp */
2071         }
2072         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2073     }
2074     SvIsUV_on(sv);
2075     SvUV_set(sv, U_V(SvNVX(sv)));
2076     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2077         if (SvUVX(sv) == UV_MAX) {
2078             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2079                possibly be preserved by NV. Hence, it must be overflow.
2080                NOK, IOKp */
2081             return IS_NUMBER_OVERFLOW_UV;
2082         }
2083         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2084     } else {
2085         /* Integer is imprecise. NOK, IOKp */
2086     }
2087     return IS_NUMBER_OVERFLOW_IV;
2088 }
2089 #endif /* !NV_PRESERVES_UV*/
2090
2091 /* If numtype is infnan, set the NV of the sv accordingly.
2092  * If numtype is anything else, try setting the NV using Atof(PV). */
2093 #ifdef USING_MSVC6
2094 #  pragma warning(push)
2095 #  pragma warning(disable:4756;disable:4056)
2096 #endif
2097 static void
2098 S_sv_setnv(pTHX_ SV* sv, int numtype)
2099 {
2100     bool pok = cBOOL(SvPOK(sv));
2101     bool nok = FALSE;
2102 #ifdef NV_INF
2103     if ((numtype & IS_NUMBER_INFINITY)) {
2104         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2105         nok = TRUE;
2106     } else
2107 #endif
2108 #ifdef NV_NAN
2109     if ((numtype & IS_NUMBER_NAN)) {
2110         SvNV_set(sv, NV_NAN);
2111         nok = TRUE;
2112     } else
2113 #endif
2114     if (pok) {
2115         SvNV_set(sv, Atof(SvPVX_const(sv)));
2116         /* Purposefully no true nok here, since we don't want to blow
2117          * away the possible IOK/UV of an existing sv. */
2118     }
2119     if (nok) {
2120         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2121         if (pok)
2122             SvPOK_on(sv); /* PV is okay, though. */
2123     }
2124 }
2125 #ifdef USING_MSVC6
2126 #  pragma warning(pop)
2127 #endif
2128
2129 STATIC bool
2130 S_sv_2iuv_common(pTHX_ SV *const sv)
2131 {
2132     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2133
2134     if (SvNOKp(sv)) {
2135         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2136          * without also getting a cached IV/UV from it at the same time
2137          * (ie PV->NV conversion should detect loss of accuracy and cache
2138          * IV or UV at same time to avoid this. */
2139         /* IV-over-UV optimisation - choose to cache IV if possible */
2140
2141         if (SvTYPE(sv) == SVt_NV)
2142             sv_upgrade(sv, SVt_PVNV);
2143
2144         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2145         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2146            certainly cast into the IV range at IV_MAX, whereas the correct
2147            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2148            cases go to UV */
2149 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2150         if (Perl_isnan(SvNVX(sv))) {
2151             SvUV_set(sv, 0);
2152             SvIsUV_on(sv);
2153             return FALSE;
2154         }
2155 #endif
2156         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2157             SvIV_set(sv, I_V(SvNVX(sv)));
2158             if (SvNVX(sv) == (NV) SvIVX(sv)
2159 #ifndef NV_PRESERVES_UV
2160                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2161                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2162                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2163                 /* Don't flag it as "accurately an integer" if the number
2164                    came from a (by definition imprecise) NV operation, and
2165                    we're outside the range of NV integer precision */
2166 #endif
2167                 ) {
2168                 if (SvNOK(sv))
2169                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2170                 else {
2171                     /* scalar has trailing garbage, eg "42a" */
2172                 }
2173                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2174                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2175                                       PTR2UV(sv),
2176                                       SvNVX(sv),
2177                                       SvIVX(sv)));
2178
2179             } else {
2180                 /* IV not precise.  No need to convert from PV, as NV
2181                    conversion would already have cached IV if it detected
2182                    that PV->IV would be better than PV->NV->IV
2183                    flags already correct - don't set public IOK.  */
2184                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2185                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2186                                       PTR2UV(sv),
2187                                       SvNVX(sv),
2188                                       SvIVX(sv)));
2189             }
2190             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2191                but the cast (NV)IV_MIN rounds to a the value less (more
2192                negative) than IV_MIN which happens to be equal to SvNVX ??
2193                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2194                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2195                (NV)UVX == NVX are both true, but the values differ. :-(
2196                Hopefully for 2s complement IV_MIN is something like
2197                0x8000000000000000 which will be exact. NWC */
2198         }
2199         else {
2200             SvUV_set(sv, U_V(SvNVX(sv)));
2201             if (
2202                 (SvNVX(sv) == (NV) SvUVX(sv))
2203 #ifndef  NV_PRESERVES_UV
2204                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2205                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2206                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2207                 /* Don't flag it as "accurately an integer" if the number
2208                    came from a (by definition imprecise) NV operation, and
2209                    we're outside the range of NV integer precision */
2210 #endif
2211                 && SvNOK(sv)
2212                 )
2213                 SvIOK_on(sv);
2214             SvIsUV_on(sv);
2215             DEBUG_c(PerlIO_printf(Perl_debug_log,
2216                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2217                                   PTR2UV(sv),
2218                                   SvUVX(sv),
2219                                   SvUVX(sv)));
2220         }
2221     }
2222     else if (SvPOKp(sv)) {
2223         UV value;
2224         int numtype;
2225         const char *s = SvPVX_const(sv);
2226         const STRLEN cur = SvCUR(sv);
2227
2228         /* short-cut for a single digit string like "1" */
2229
2230         if (cur == 1) {
2231             char c = *s;
2232             if (isDIGIT(c)) {
2233                 if (SvTYPE(sv) < SVt_PVIV)
2234                     sv_upgrade(sv, SVt_PVIV);
2235                 (void)SvIOK_on(sv);
2236                 SvIV_set(sv, (IV)(c - '0'));
2237                 return FALSE;
2238             }
2239         }
2240
2241         numtype = grok_number(s, cur, &value);
2242         /* We want to avoid a possible problem when we cache an IV/ a UV which
2243            may be later translated to an NV, and the resulting NV is not
2244            the same as the direct translation of the initial string
2245            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2246            be careful to ensure that the value with the .456 is around if the
2247            NV value is requested in the future).
2248         
2249            This means that if we cache such an IV/a UV, we need to cache the
2250            NV as well.  Moreover, we trade speed for space, and do not
2251            cache the NV if we are sure it's not needed.
2252          */
2253
2254         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2255         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2256              == IS_NUMBER_IN_UV) {
2257             /* It's definitely an integer, only upgrade to PVIV */
2258             if (SvTYPE(sv) < SVt_PVIV)
2259                 sv_upgrade(sv, SVt_PVIV);
2260             (void)SvIOK_on(sv);
2261         } else if (SvTYPE(sv) < SVt_PVNV)
2262             sv_upgrade(sv, SVt_PVNV);
2263
2264         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2265             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2266                 not_a_number(sv);
2267             S_sv_setnv(aTHX_ sv, numtype);
2268             return FALSE;
2269         }
2270
2271         /* If NVs preserve UVs then we only use the UV value if we know that
2272            we aren't going to call atof() below. If NVs don't preserve UVs
2273            then the value returned may have more precision than atof() will
2274            return, even though value isn't perfectly accurate.  */
2275         if ((numtype & (IS_NUMBER_IN_UV
2276 #ifdef NV_PRESERVES_UV
2277                         | IS_NUMBER_NOT_INT
2278 #endif
2279             )) == IS_NUMBER_IN_UV) {
2280             /* This won't turn off the public IOK flag if it was set above  */
2281             (void)SvIOKp_on(sv);
2282
2283             if (!(numtype & IS_NUMBER_NEG)) {
2284                 /* positive */;
2285                 if (value <= (UV)IV_MAX) {
2286                     SvIV_set(sv, (IV)value);
2287                 } else {
2288                     /* it didn't overflow, and it was positive. */
2289                     SvUV_set(sv, value);
2290                     SvIsUV_on(sv);
2291                 }
2292             } else {
2293                 /* 2s complement assumption  */
2294                 if (value <= (UV)IV_MIN) {
2295                     SvIV_set(sv, value == (UV)IV_MIN
2296                                     ? IV_MIN : -(IV)value);
2297                 } else {
2298                     /* Too negative for an IV.  This is a double upgrade, but
2299                        I'm assuming it will be rare.  */
2300                     if (SvTYPE(sv) < SVt_PVNV)
2301                         sv_upgrade(sv, SVt_PVNV);
2302                     SvNOK_on(sv);
2303                     SvIOK_off(sv);
2304                     SvIOKp_on(sv);
2305                     SvNV_set(sv, -(NV)value);
2306                     SvIV_set(sv, IV_MIN);
2307                 }
2308             }
2309         }
2310         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2311            will be in the previous block to set the IV slot, and the next
2312            block to set the NV slot.  So no else here.  */
2313         
2314         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2315             != IS_NUMBER_IN_UV) {
2316             /* It wasn't an (integer that doesn't overflow the UV). */
2317             S_sv_setnv(aTHX_ sv, numtype);
2318
2319             if (! numtype && ckWARN(WARN_NUMERIC))
2320                 not_a_number(sv);
2321
2322             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2323                                   PTR2UV(sv), SvNVX(sv)));
2324
2325 #ifdef NV_PRESERVES_UV
2326             (void)SvIOKp_on(sv);
2327             (void)SvNOK_on(sv);
2328 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2329             if (Perl_isnan(SvNVX(sv))) {
2330                 SvUV_set(sv, 0);
2331                 SvIsUV_on(sv);
2332                 return FALSE;
2333             }
2334 #endif
2335             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2336                 SvIV_set(sv, I_V(SvNVX(sv)));
2337                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2338                     SvIOK_on(sv);
2339                 } else {
2340                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2341                 }
2342                 /* UV will not work better than IV */
2343             } else {
2344                 if (SvNVX(sv) > (NV)UV_MAX) {
2345                     SvIsUV_on(sv);
2346                     /* Integer is inaccurate. NOK, IOKp, is UV */
2347                     SvUV_set(sv, UV_MAX);
2348                 } else {
2349                     SvUV_set(sv, U_V(SvNVX(sv)));
2350                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2351                        NV preservse UV so can do correct comparison.  */
2352                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2353                         SvIOK_on(sv);
2354                     } else {
2355                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2356                     }
2357                 }
2358                 SvIsUV_on(sv);
2359             }
2360 #else /* NV_PRESERVES_UV */
2361             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2362                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2363                 /* The IV/UV slot will have been set from value returned by
2364                    grok_number above.  The NV slot has just been set using
2365                    Atof.  */
2366                 SvNOK_on(sv);
2367                 assert (SvIOKp(sv));
2368             } else {
2369                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2370                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2371                     /* Small enough to preserve all bits. */
2372                     (void)SvIOKp_on(sv);
2373                     SvNOK_on(sv);
2374                     SvIV_set(sv, I_V(SvNVX(sv)));
2375                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2376                         SvIOK_on(sv);
2377                     /* Assumption: first non-preserved integer is < IV_MAX,
2378                        this NV is in the preserved range, therefore: */
2379                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2380                           < (UV)IV_MAX)) {
2381                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%" NVgf " U_V is 0x%" UVxf ", IV_MAX is 0x%" UVxf "\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2382                     }
2383                 } else {
2384                     /* IN_UV NOT_INT
2385                          0      0       already failed to read UV.
2386                          0      1       already failed to read UV.
2387                          1      0       you won't get here in this case. IV/UV
2388                                         slot set, public IOK, Atof() unneeded.
2389                          1      1       already read UV.
2390                        so there's no point in sv_2iuv_non_preserve() attempting
2391                        to use atol, strtol, strtoul etc.  */
2392 #  ifdef DEBUGGING
2393                     sv_2iuv_non_preserve (sv, numtype);
2394 #  else
2395                     sv_2iuv_non_preserve (sv);
2396 #  endif
2397                 }
2398             }
2399 #endif /* NV_PRESERVES_UV */
2400         /* It might be more code efficient to go through the entire logic above
2401            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2402            gets complex and potentially buggy, so more programmer efficient
2403            to do it this way, by turning off the public flags:  */
2404         if (!numtype)
2405             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2406         }
2407     }
2408     else  {
2409         if (isGV_with_GP(sv))
2410             return glob_2number(MUTABLE_GV(sv));
2411
2412         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2413                 report_uninit(sv);
2414         if (SvTYPE(sv) < SVt_IV)
2415             /* Typically the caller expects that sv_any is not NULL now.  */
2416             sv_upgrade(sv, SVt_IV);
2417         /* Return 0 from the caller.  */
2418         return TRUE;
2419     }
2420     return FALSE;
2421 }
2422
2423 /*
2424 =for apidoc sv_2iv_flags
2425
2426 Return the integer value of an SV, doing any necessary string
2427 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2428 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 IV
2434 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2435 {
2436     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2437
2438     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2439          && SvTYPE(sv) != SVt_PVFM);
2440
2441     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2442         mg_get(sv);
2443
2444     if (SvROK(sv)) {
2445         if (SvAMAGIC(sv)) {
2446             SV * tmpstr;
2447             if (flags & SV_SKIP_OVERLOAD)
2448                 return 0;
2449             tmpstr = AMG_CALLunary(sv, numer_amg);
2450             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2451                 return SvIV(tmpstr);
2452             }
2453         }
2454         return PTR2IV(SvRV(sv));
2455     }
2456
2457     if (SvVALID(sv) || isREGEXP(sv)) {
2458         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2459            must not let them cache IVs.
2460            In practice they are extremely unlikely to actually get anywhere
2461            accessible by user Perl code - the only way that I'm aware of is when
2462            a constant subroutine which is used as the second argument to index.
2463
2464            Regexps have no SvIVX and SvNVX fields.
2465         */
2466         assert(SvPOKp(sv));
2467         {
2468             UV value;
2469             const char * const ptr =
2470                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2471             const int numtype
2472                 = grok_number(ptr, SvCUR(sv), &value);
2473
2474             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2475                 == IS_NUMBER_IN_UV) {
2476                 /* It's definitely an integer */
2477                 if (numtype & IS_NUMBER_NEG) {
2478                     if (value < (UV)IV_MIN)
2479                         return -(IV)value;
2480                 } else {
2481                     if (value < (UV)IV_MAX)
2482                         return (IV)value;
2483                 }
2484             }
2485
2486             /* Quite wrong but no good choices. */
2487             if ((numtype & IS_NUMBER_INFINITY)) {
2488                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2489             } else if ((numtype & IS_NUMBER_NAN)) {
2490                 return 0; /* So wrong. */
2491             }
2492
2493             if (!numtype) {
2494                 if (ckWARN(WARN_NUMERIC))
2495                     not_a_number(sv);
2496             }
2497             return I_V(Atof(ptr));
2498         }
2499     }
2500
2501     if (SvTHINKFIRST(sv)) {
2502         if (SvREADONLY(sv) && !SvOK(sv)) {
2503             if (ckWARN(WARN_UNINITIALIZED))
2504                 report_uninit(sv);
2505             return 0;
2506         }
2507     }
2508
2509     if (!SvIOKp(sv)) {
2510         if (S_sv_2iuv_common(aTHX_ sv))
2511             return 0;
2512     }
2513
2514     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2515         PTR2UV(sv),SvIVX(sv)));
2516     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2517 }
2518
2519 /*
2520 =for apidoc sv_2uv_flags
2521
2522 Return the unsigned integer value of an SV, doing any necessary string
2523 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2524 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2525
2526 =cut
2527 */
2528
2529 UV
2530 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2531 {
2532     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2533
2534     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2535         mg_get(sv);
2536
2537     if (SvROK(sv)) {
2538         if (SvAMAGIC(sv)) {
2539             SV *tmpstr;
2540             if (flags & SV_SKIP_OVERLOAD)
2541                 return 0;
2542             tmpstr = AMG_CALLunary(sv, numer_amg);
2543             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2544                 return SvUV(tmpstr);
2545             }
2546         }
2547         return PTR2UV(SvRV(sv));
2548     }
2549
2550     if (SvVALID(sv) || isREGEXP(sv)) {
2551         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2552            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2553            Regexps have no SvIVX and SvNVX fields. */
2554         assert(SvPOKp(sv));
2555         {
2556             UV value;
2557             const char * const ptr =
2558                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2559             const int numtype
2560                 = grok_number(ptr, SvCUR(sv), &value);
2561
2562             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563                 == IS_NUMBER_IN_UV) {
2564                 /* It's definitely an integer */
2565                 if (!(numtype & IS_NUMBER_NEG))
2566                     return value;
2567             }
2568
2569             /* Quite wrong but no good choices. */
2570             if ((numtype & IS_NUMBER_INFINITY)) {
2571                 return UV_MAX; /* So wrong. */
2572             } else if ((numtype & IS_NUMBER_NAN)) {
2573                 return 0; /* So wrong. */
2574             }
2575
2576             if (!numtype) {
2577                 if (ckWARN(WARN_NUMERIC))
2578                     not_a_number(sv);
2579             }
2580             return U_V(Atof(ptr));
2581         }
2582     }
2583
2584     if (SvTHINKFIRST(sv)) {
2585         if (SvREADONLY(sv) && !SvOK(sv)) {
2586             if (ckWARN(WARN_UNINITIALIZED))
2587                 report_uninit(sv);
2588             return 0;
2589         }
2590     }
2591
2592     if (!SvIOKp(sv)) {
2593         if (S_sv_2iuv_common(aTHX_ sv))
2594             return 0;
2595     }
2596
2597     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2598                           PTR2UV(sv),SvUVX(sv)));
2599     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2600 }
2601
2602 /*
2603 =for apidoc sv_2nv_flags
2604
2605 Return the num value of an SV, doing any necessary string or integer
2606 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2607 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2608
2609 =cut
2610 */
2611
2612 NV
2613 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2614 {
2615     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2616
2617     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2618          && SvTYPE(sv) != SVt_PVFM);
2619     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2620         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2621            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2622            Regexps have no SvIVX and SvNVX fields.  */
2623         const char *ptr;
2624         if (flags & SV_GMAGIC)
2625             mg_get(sv);
2626         if (SvNOKp(sv))
2627             return SvNVX(sv);
2628         if (SvPOKp(sv) && !SvIOKp(sv)) {
2629             ptr = SvPVX_const(sv);
2630             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2631                 !grok_number(ptr, SvCUR(sv), NULL))
2632                 not_a_number(sv);
2633             return Atof(ptr);
2634         }
2635         if (SvIOKp(sv)) {
2636             if (SvIsUV(sv))
2637                 return (NV)SvUVX(sv);
2638             else
2639                 return (NV)SvIVX(sv);
2640         }
2641         if (SvROK(sv)) {
2642             goto return_rok;
2643         }
2644         assert(SvTYPE(sv) >= SVt_PVMG);
2645         /* This falls through to the report_uninit near the end of the
2646            function. */
2647     } else if (SvTHINKFIRST(sv)) {
2648         if (SvROK(sv)) {
2649         return_rok:
2650             if (SvAMAGIC(sv)) {
2651                 SV *tmpstr;
2652                 if (flags & SV_SKIP_OVERLOAD)
2653                     return 0;
2654                 tmpstr = AMG_CALLunary(sv, numer_amg);
2655                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2656                     return SvNV(tmpstr);
2657                 }
2658             }
2659             return PTR2NV(SvRV(sv));
2660         }
2661         if (SvREADONLY(sv) && !SvOK(sv)) {
2662             if (ckWARN(WARN_UNINITIALIZED))
2663                 report_uninit(sv);
2664             return 0.0;
2665         }
2666     }
2667     if (SvTYPE(sv) < SVt_NV) {
2668         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2669         sv_upgrade(sv, SVt_NV);
2670         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2671         DEBUG_c({
2672             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2673             STORE_LC_NUMERIC_SET_STANDARD();
2674             PerlIO_printf(Perl_debug_log,
2675                           "0x%" UVxf " num(%" NVgf ")\n",
2676                           PTR2UV(sv), SvNVX(sv));
2677             RESTORE_LC_NUMERIC();
2678         });
2679         CLANG_DIAG_RESTORE_STMT;
2680
2681     }
2682     else if (SvTYPE(sv) < SVt_PVNV)
2683         sv_upgrade(sv, SVt_PVNV);
2684     if (SvNOKp(sv)) {
2685         return SvNVX(sv);
2686     }
2687     if (SvIOKp(sv)) {
2688         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2689 #ifdef NV_PRESERVES_UV
2690         if (SvIOK(sv))
2691             SvNOK_on(sv);
2692         else
2693             SvNOKp_on(sv);
2694 #else
2695         /* Only set the public NV OK flag if this NV preserves the IV  */
2696         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2697         if (SvIOK(sv) &&
2698             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2699                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2700             SvNOK_on(sv);
2701         else
2702             SvNOKp_on(sv);
2703 #endif
2704     }
2705     else if (SvPOKp(sv)) {
2706         UV value;
2707         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2708         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2709             not_a_number(sv);
2710 #ifdef NV_PRESERVES_UV
2711         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2712             == IS_NUMBER_IN_UV) {
2713             /* It's definitely an integer */
2714             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2715         } else {
2716             S_sv_setnv(aTHX_ sv, numtype);
2717         }
2718         if (numtype)
2719             SvNOK_on(sv);
2720         else
2721             SvNOKp_on(sv);
2722 #else
2723         SvNV_set(sv, Atof(SvPVX_const(sv)));
2724         /* Only set the public NV OK flag if this NV preserves the value in
2725            the PV at least as well as an IV/UV would.
2726            Not sure how to do this 100% reliably. */
2727         /* if that shift count is out of range then Configure's test is
2728            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2729            UV_BITS */
2730         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2731             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2732             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2733         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2734             /* Can't use strtol etc to convert this string, so don't try.
2735                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2736             SvNOK_on(sv);
2737         } else {
2738             /* value has been set.  It may not be precise.  */
2739             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2740                 /* 2s complement assumption for (UV)IV_MIN  */
2741                 SvNOK_on(sv); /* Integer is too negative.  */
2742             } else {
2743                 SvNOKp_on(sv);
2744                 SvIOKp_on(sv);
2745
2746                 if (numtype & IS_NUMBER_NEG) {
2747                     /* -IV_MIN is undefined, but we should never reach
2748                      * this point with both IS_NUMBER_NEG and value ==
2749                      * (UV)IV_MIN */
2750                     assert(value != (UV)IV_MIN);
2751                     SvIV_set(sv, -(IV)value);
2752                 } else if (value <= (UV)IV_MAX) {
2753                     SvIV_set(sv, (IV)value);
2754                 } else {
2755                     SvUV_set(sv, value);
2756                     SvIsUV_on(sv);
2757                 }
2758
2759                 if (numtype & IS_NUMBER_NOT_INT) {
2760                     /* I believe that even if the original PV had decimals,
2761                        they are lost beyond the limit of the FP precision.
2762                        However, neither is canonical, so both only get p
2763                        flags.  NWC, 2000/11/25 */
2764                     /* Both already have p flags, so do nothing */
2765                 } else {
2766                     const NV nv = SvNVX(sv);
2767                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2768                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2769                         if (SvIVX(sv) == I_V(nv)) {
2770                             SvNOK_on(sv);
2771                         } else {
2772                             /* It had no "." so it must be integer.  */
2773                         }
2774                         SvIOK_on(sv);
2775                     } else {
2776                         /* between IV_MAX and NV(UV_MAX).
2777                            Could be slightly > UV_MAX */
2778
2779                         if (numtype & IS_NUMBER_NOT_INT) {
2780                             /* UV and NV both imprecise.  */
2781                         } else {
2782                             const UV nv_as_uv = U_V(nv);
2783
2784                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2785                                 SvNOK_on(sv);
2786                             }
2787                             SvIOK_on(sv);
2788                         }
2789                     }
2790                 }
2791             }
2792         }
2793         /* It might be more code efficient to go through the entire logic above
2794            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2795            gets complex and potentially buggy, so more programmer efficient
2796            to do it this way, by turning off the public flags:  */
2797         if (!numtype)
2798             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2799 #endif /* NV_PRESERVES_UV */
2800     }
2801     else  {
2802         if (isGV_with_GP(sv)) {
2803             glob_2number(MUTABLE_GV(sv));
2804             return 0.0;
2805         }
2806
2807         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2808             report_uninit(sv);
2809         assert (SvTYPE(sv) >= SVt_NV);
2810         /* Typically the caller expects that sv_any is not NULL now.  */
2811         /* XXX Ilya implies that this is a bug in callers that assume this
2812            and ideally should be fixed.  */
2813         return 0.0;
2814     }
2815     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2816     DEBUG_c({
2817         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2818         STORE_LC_NUMERIC_SET_STANDARD();
2819         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2820                       PTR2UV(sv), SvNVX(sv));
2821         RESTORE_LC_NUMERIC();
2822     });
2823     CLANG_DIAG_RESTORE_STMT;
2824     return SvNVX(sv);
2825 }
2826
2827 /*
2828 =for apidoc sv_2num
2829
2830 Return an SV with the numeric value of the source SV, doing any necessary
2831 reference or overload conversion.  The caller is expected to have handled
2832 get-magic already.
2833
2834 =cut
2835 */
2836
2837 SV *
2838 Perl_sv_2num(pTHX_ SV *const sv)
2839 {
2840     PERL_ARGS_ASSERT_SV_2NUM;
2841
2842     if (!SvROK(sv))
2843         return sv;
2844     if (SvAMAGIC(sv)) {
2845         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2846         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2847         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2848             return sv_2num(tmpsv);
2849     }
2850     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2851 }
2852
2853 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2854  * UV as a string towards the end of buf, and return pointers to start and
2855  * end of it.
2856  *
2857  * We assume that buf is at least TYPE_CHARS(UV) long.
2858  */
2859
2860 static char *
2861 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2862 {
2863     char *ptr = buf + TYPE_CHARS(UV);
2864     char * const ebuf = ptr;
2865     int sign;
2866
2867     PERL_ARGS_ASSERT_UIV_2BUF;
2868
2869     if (is_uv)
2870         sign = 0;
2871     else if (iv >= 0) {
2872         uv = iv;
2873         sign = 0;
2874     } else {
2875         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2876         sign = 1;
2877     }
2878     do {
2879         *--ptr = '0' + (char)(uv % 10);
2880     } while (uv /= 10);
2881     if (sign)
2882         *--ptr = '-';
2883     *peob = ebuf;
2884     return ptr;
2885 }
2886
2887 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2888  * infinity or a not-a-number, writes the appropriate strings to the
2889  * buffer, including a zero byte.  On success returns the written length,
2890  * excluding the zero byte, on failure (not an infinity, not a nan)
2891  * returns zero, assert-fails on maxlen being too short.
2892  *
2893  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2894  * shared string constants we point to, instead of generating a new
2895  * string for each instance. */
2896 STATIC size_t
2897 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2898     char* s = buffer;
2899     assert(maxlen >= 4);
2900     if (Perl_isinf(nv)) {
2901         if (nv < 0) {
2902             if (maxlen < 5) /* "-Inf\0"  */
2903                 return 0;
2904             *s++ = '-';
2905         } else if (plus) {
2906             *s++ = '+';
2907         }
2908         *s++ = 'I';
2909         *s++ = 'n';
2910         *s++ = 'f';
2911     }
2912     else if (Perl_isnan(nv)) {
2913         *s++ = 'N';
2914         *s++ = 'a';
2915         *s++ = 'N';
2916         /* XXX optionally output the payload mantissa bits as
2917          * "(unsigned)" (to match the nan("...") C99 function,
2918          * or maybe as "(0xhhh...)"  would make more sense...
2919          * provide a format string so that the user can decide?
2920          * NOTE: would affect the maxlen and assert() logic.*/
2921     }
2922     else {
2923       return 0;
2924     }
2925     assert((s == buffer + 3) || (s == buffer + 4));
2926     *s = 0;
2927     return s - buffer;
2928 }
2929
2930 /*
2931 =for apidoc sv_2pv_flags
2932
2933 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2934 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2935 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2936 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2937
2938 =cut
2939 */
2940
2941 char *
2942 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2943 {
2944     char *s;
2945
2946     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2947
2948     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2949          && SvTYPE(sv) != SVt_PVFM);
2950     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2951         mg_get(sv);
2952     if (SvROK(sv)) {
2953         if (SvAMAGIC(sv)) {
2954             SV *tmpstr;
2955             if (flags & SV_SKIP_OVERLOAD)
2956                 return NULL;
2957             tmpstr = AMG_CALLunary(sv, string_amg);
2958             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2959             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2960                 /* Unwrap this:  */
2961                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2962                  */
2963
2964                 char *pv;
2965                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2966                     if (flags & SV_CONST_RETURN) {
2967                         pv = (char *) SvPVX_const(tmpstr);
2968                     } else {
2969                         pv = (flags & SV_MUTABLE_RETURN)
2970                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2971                     }
2972                     if (lp)
2973                         *lp = SvCUR(tmpstr);
2974                 } else {
2975                     pv = sv_2pv_flags(tmpstr, lp, flags);
2976                 }
2977                 if (SvUTF8(tmpstr))
2978                     SvUTF8_on(sv);
2979                 else
2980                     SvUTF8_off(sv);
2981                 return pv;
2982             }
2983         }
2984         {
2985             STRLEN len;
2986             char *retval;
2987             char *buffer;
2988             SV *const referent = SvRV(sv);
2989
2990             if (!referent) {
2991                 len = 7;
2992                 retval = buffer = savepvn("NULLREF", len);
2993             } else if (SvTYPE(referent) == SVt_REGEXP &&
2994                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2995                         amagic_is_enabled(string_amg))) {
2996                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2997
2998                 assert(re);
2999                         
3000                 /* If the regex is UTF-8 we want the containing scalar to
3001                    have an UTF-8 flag too */
3002                 if (RX_UTF8(re))
3003                     SvUTF8_on(sv);
3004                 else
3005                     SvUTF8_off(sv);     
3006
3007                 if (lp)
3008                     *lp = RX_WRAPLEN(re);
3009  
3010                 return RX_WRAPPED(re);
3011             } else {
3012                 const char *const typestr = sv_reftype(referent, 0);
3013                 const STRLEN typelen = strlen(typestr);
3014                 UV addr = PTR2UV(referent);
3015                 const char *stashname = NULL;
3016                 STRLEN stashnamelen = 0; /* hush, gcc */
3017                 const char *buffer_end;
3018
3019                 if (SvOBJECT(referent)) {
3020                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3021
3022                     if (name) {
3023                         stashname = HEK_KEY(name);
3024                         stashnamelen = HEK_LEN(name);
3025
3026                         if (HEK_UTF8(name)) {
3027                             SvUTF8_on(sv);
3028                         } else {
3029                             SvUTF8_off(sv);
3030                         }
3031                     } else {
3032                         stashname = "__ANON__";
3033                         stashnamelen = 8;
3034                     }
3035                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3036                         + 2 * sizeof(UV) + 2 /* )\0 */;
3037                 } else {
3038                     len = typelen + 3 /* (0x */
3039                         + 2 * sizeof(UV) + 2 /* )\0 */;
3040                 }
3041
3042                 Newx(buffer, len, char);
3043                 buffer_end = retval = buffer + len;
3044
3045                 /* Working backwards  */
3046                 *--retval = '\0';
3047                 *--retval = ')';
3048                 do {
3049                     *--retval = PL_hexdigit[addr & 15];
3050                 } while (addr >>= 4);
3051                 *--retval = 'x';
3052                 *--retval = '0';
3053                 *--retval = '(';
3054
3055                 retval -= typelen;
3056                 memcpy(retval, typestr, typelen);
3057
3058                 if (stashname) {
3059                     *--retval = '=';
3060                     retval -= stashnamelen;
3061                     memcpy(retval, stashname, stashnamelen);
3062                 }
3063                 /* retval may not necessarily have reached the start of the
3064                    buffer here.  */
3065                 assert (retval >= buffer);
3066
3067                 len = buffer_end - retval - 1; /* -1 for that \0  */
3068             }
3069             if (lp)
3070                 *lp = len;
3071             SAVEFREEPV(buffer);
3072             return retval;
3073         }
3074     }
3075
3076     if (SvPOKp(sv)) {
3077         if (lp)
3078             *lp = SvCUR(sv);
3079         if (flags & SV_MUTABLE_RETURN)
3080             return SvPVX_mutable(sv);
3081         if (flags & SV_CONST_RETURN)
3082             return (char *)SvPVX_const(sv);
3083         return SvPVX(sv);
3084     }
3085
3086     if (SvIOK(sv)) {
3087         /* I'm assuming that if both IV and NV are equally valid then
3088            converting the IV is going to be more efficient */
3089         const U32 isUIOK = SvIsUV(sv);
3090         char buf[TYPE_CHARS(UV)];
3091         char *ebuf, *ptr;
3092         STRLEN len;
3093
3094         if (SvTYPE(sv) < SVt_PVIV)
3095             sv_upgrade(sv, SVt_PVIV);
3096         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3097         len = ebuf - ptr;
3098         /* inlined from sv_setpvn */
3099         s = SvGROW_mutable(sv, len + 1);
3100         Move(ptr, s, len, char);
3101         s += len;
3102         *s = '\0';
3103         SvPOK_on(sv);
3104     }
3105     else if (SvNOK(sv)) {
3106         if (SvTYPE(sv) < SVt_PVNV)
3107             sv_upgrade(sv, SVt_PVNV);
3108         if (SvNVX(sv) == 0.0
3109 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3110             && !Perl_isnan(SvNVX(sv))
3111 #endif
3112         ) {
3113             s = SvGROW_mutable(sv, 2);
3114             *s++ = '0';
3115             *s = '\0';
3116         } else {
3117             STRLEN len;
3118             STRLEN size = 5; /* "-Inf\0" */
3119
3120             s = SvGROW_mutable(sv, size);
3121             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3122             if (len > 0) {
3123                 s += len;
3124                 SvPOK_on(sv);
3125             }
3126             else {
3127                 /* some Xenix systems wipe out errno here */
3128                 dSAVE_ERRNO;
3129
3130                 size =
3131                     1 + /* sign */
3132                     1 + /* "." */
3133                     NV_DIG +
3134                     1 + /* "e" */
3135                     1 + /* sign */
3136                     5 + /* exponent digits */
3137                     1 + /* \0 */
3138                     2; /* paranoia */
3139
3140                 s = SvGROW_mutable(sv, size);
3141 #ifndef USE_LOCALE_NUMERIC
3142                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3143
3144                 SvPOK_on(sv);
3145 #else
3146                 {
3147                     bool local_radix;
3148                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3149                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3150
3151                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3152                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3153                         size += SvCUR(PL_numeric_radix_sv) - 1;
3154                         s = SvGROW_mutable(sv, size);
3155                     }
3156
3157                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3158
3159                     /* If the radix character is UTF-8, and actually is in the
3160                      * output, turn on the UTF-8 flag for the scalar */
3161                     if (   local_radix
3162                         && SvUTF8(PL_numeric_radix_sv)
3163                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3164                     {
3165                         SvUTF8_on(sv);
3166                     }
3167
3168                     RESTORE_LC_NUMERIC();
3169                 }
3170
3171                 /* We don't call SvPOK_on(), because it may come to
3172                  * pass that the locale changes so that the
3173                  * stringification we just did is no longer correct.  We
3174                  * will have to re-stringify every time it is needed */
3175 #endif
3176                 RESTORE_ERRNO;
3177             }
3178             while (*s) s++;
3179         }
3180     }
3181     else if (isGV_with_GP(sv)) {
3182         GV *const gv = MUTABLE_GV(sv);
3183         SV *const buffer = sv_newmortal();
3184
3185         gv_efullname3(buffer, gv, "*");
3186
3187         assert(SvPOK(buffer));
3188         if (SvUTF8(buffer))
3189             SvUTF8_on(sv);
3190         else
3191             SvUTF8_off(sv);
3192         if (lp)
3193             *lp = SvCUR(buffer);
3194         return SvPVX(buffer);
3195     }
3196     else {
3197         if (lp)
3198             *lp = 0;
3199         if (flags & SV_UNDEF_RETURNS_NULL)
3200             return NULL;
3201         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3202             report_uninit(sv);
3203         /* Typically the caller expects that sv_any is not NULL now.  */
3204         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3205             sv_upgrade(sv, SVt_PV);
3206         return (char *)"";
3207     }
3208
3209     {
3210         const STRLEN len = s - SvPVX_const(sv);
3211         if (lp) 
3212             *lp = len;
3213         SvCUR_set(sv, len);
3214     }
3215     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3216                           PTR2UV(sv),SvPVX_const(sv)));
3217     if (flags & SV_CONST_RETURN)
3218         return (char *)SvPVX_const(sv);
3219     if (flags & SV_MUTABLE_RETURN)
3220         return SvPVX_mutable(sv);
3221     return SvPVX(sv);
3222 }
3223
3224 /*
3225 =for apidoc sv_copypv
3226
3227 Copies a stringified representation of the source SV into the
3228 destination SV.  Automatically performs any necessary C<mg_get> and
3229 coercion of numeric values into strings.  Guaranteed to preserve
3230 C<UTF8> flag even from overloaded objects.  Similar in nature to
3231 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3232 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3233 would lose the UTF-8'ness of the PV.
3234
3235 =for apidoc sv_copypv_nomg
3236
3237 Like C<sv_copypv>, but doesn't invoke get magic first.
3238
3239 =for apidoc sv_copypv_flags
3240
3241 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3242 has the C<SV_GMAGIC> bit set.
3243
3244 =cut
3245 */
3246
3247 void
3248 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3249 {
3250     STRLEN len;
3251     const char *s;
3252
3253     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3254
3255     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3256     sv_setpvn(dsv,s,len);
3257     if (SvUTF8(ssv))
3258         SvUTF8_on(dsv);
3259     else
3260         SvUTF8_off(dsv);
3261 }
3262
3263 /*
3264 =for apidoc sv_2pvbyte
3265
3266 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3267 to its length.  May cause the SV to be downgraded from UTF-8 as a
3268 side-effect.
3269
3270 Usually accessed via the C<SvPVbyte> macro.
3271
3272 =cut
3273 */
3274
3275 char *
3276 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3277 {
3278     PERL_ARGS_ASSERT_SV_2PVBYTE;
3279
3280     SvGETMAGIC(sv);
3281     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3282      || isGV_with_GP(sv) || SvROK(sv)) {
3283         SV *sv2 = sv_newmortal();
3284         sv_copypv_nomg(sv2,sv);
3285         sv = sv2;
3286     }
3287     sv_utf8_downgrade(sv,0);
3288     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3289 }
3290
3291 /*
3292 =for apidoc sv_2pvutf8
3293
3294 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3295 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3296
3297 Usually accessed via the C<SvPVutf8> macro.
3298
3299 =cut
3300 */
3301
3302 char *
3303 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3304 {
3305     PERL_ARGS_ASSERT_SV_2PVUTF8;
3306
3307     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3308      || isGV_with_GP(sv) || SvROK(sv))
3309         sv = sv_mortalcopy(sv);
3310     else
3311         SvGETMAGIC(sv);
3312     sv_utf8_upgrade_nomg(sv);
3313     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3314 }
3315
3316
3317 /*
3318 =for apidoc sv_2bool
3319
3320 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3321 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3322 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3323
3324 =for apidoc sv_2bool_flags
3325
3326 This function is only used by C<sv_true()> and friends,  and only if
3327 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3328 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3329
3330
3331 =cut
3332 */
3333
3334 bool
3335 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3336 {
3337     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3338
3339     restart:
3340     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3341
3342     if (!SvOK(sv))
3343         return 0;
3344     if (SvROK(sv)) {
3345         if (SvAMAGIC(sv)) {
3346             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3347             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3348                 bool svb;
3349                 sv = tmpsv;
3350                 if(SvGMAGICAL(sv)) {
3351                     flags = SV_GMAGIC;
3352                     goto restart; /* call sv_2bool */
3353                 }
3354                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3355                 else if(!SvOK(sv)) {
3356                     svb = 0;
3357                 }
3358                 else if(SvPOK(sv)) {
3359                     svb = SvPVXtrue(sv);
3360                 }
3361                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3362                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3363                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3364                 }
3365                 else {
3366                     flags = 0;
3367                     goto restart; /* call sv_2bool_nomg */
3368                 }
3369                 return cBOOL(svb);
3370             }
3371         }
3372         assert(SvRV(sv));
3373         return TRUE;
3374     }
3375     if (isREGEXP(sv))
3376         return
3377           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3378
3379     if (SvNOK(sv) && !SvPOK(sv))
3380         return SvNVX(sv) != 0.0;
3381
3382     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3383 }
3384
3385 /*
3386 =for apidoc sv_utf8_upgrade
3387
3388 Converts the PV of an SV to its UTF-8-encoded form.
3389 Forces the SV to string form if it is not already.
3390 Will C<mg_get> on C<sv> if appropriate.
3391 Always sets the C<SvUTF8> flag to avoid future validity checks even
3392 if the whole string is the same in UTF-8 as not.
3393 Returns the number of bytes in the converted string
3394
3395 This is not a general purpose byte encoding to Unicode interface:
3396 use the Encode extension for that.
3397
3398 =for apidoc sv_utf8_upgrade_nomg
3399
3400 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3401
3402 =for apidoc sv_utf8_upgrade_flags
3403
3404 Converts the PV of an SV to its UTF-8-encoded form.
3405 Forces the SV to string form if it is not already.
3406 Always sets the SvUTF8 flag to avoid future validity checks even
3407 if all the bytes are invariant in UTF-8.
3408 If C<flags> has C<SV_GMAGIC> bit set,
3409 will C<mg_get> on C<sv> if appropriate, else not.
3410
3411 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3412
3413 Returns the number of bytes in the converted string.
3414
3415 This is not a general purpose byte encoding to Unicode interface:
3416 use the Encode extension for that.
3417
3418 =for apidoc sv_utf8_upgrade_flags_grow
3419
3420 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3421 the number of unused bytes the string of C<sv> is guaranteed to have free after
3422 it upon return.  This allows the caller to reserve extra space that it intends
3423 to fill, to avoid extra grows.
3424
3425 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3426 are implemented in terms of this function.
3427
3428 Returns the number of bytes in the converted string (not including the spares).
3429
3430 =cut
3431
3432 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3433 C<NUL> isn't guaranteed due to having other routines do the work in some input
3434 cases, or if the input is already flagged as being in utf8.
3435
3436 */
3437
3438 STRLEN
3439 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3440 {
3441     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3442
3443     if (sv == &PL_sv_undef)
3444         return 0;
3445     if (!SvPOK_nog(sv)) {
3446         STRLEN len = 0;
3447         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3448             (void) sv_2pv_flags(sv,&len, flags);
3449             if (SvUTF8(sv)) {
3450                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3451                 return len;
3452             }
3453         } else {
3454             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3455         }
3456     }
3457
3458     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3459      * compiled and individual nodes will remain non-utf8 even if the
3460      * stringified version of the pattern gets upgraded. Whether the
3461      * PVX of a REGEXP should be grown or we should just croak, I don't
3462      * know - DAPM */
3463     if (SvUTF8(sv) || isREGEXP(sv)) {
3464         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3465         return SvCUR(sv);
3466     }
3467
3468     if (SvIsCOW(sv)) {
3469         S_sv_uncow(aTHX_ sv, 0);
3470     }
3471
3472     if (SvCUR(sv) == 0) {
3473         if (extra) SvGROW(sv, extra);
3474     } else { /* Assume Latin-1/EBCDIC */
3475         /* This function could be much more efficient if we
3476          * had a FLAG in SVs to signal if there are any variant
3477          * chars in the PV.  Given that there isn't such a flag
3478          * make the loop as fast as possible. */
3479         U8 * s = (U8 *) SvPVX_const(sv);
3480         U8 *t = s;
3481         
3482         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3483
3484             /* utf8 conversion not needed because all are invariants.  Mark
3485              * as UTF-8 even if no variant - saves scanning loop */
3486             SvUTF8_on(sv);
3487             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3488             return SvCUR(sv);
3489         }
3490
3491         /* Here, there is at least one variant (t points to the first one), so
3492          * the string should be converted to utf8.  Everything from 's' to
3493          * 't - 1' will occupy only 1 byte each on output.
3494          *
3495          * Note that the incoming SV may not have a trailing '\0', as certain
3496          * code in pp_formline can send us partially built SVs.
3497          *
3498          * There are two main ways to convert.  One is to create a new string
3499          * and go through the input starting from the beginning, appending each
3500          * converted value onto the new string as we go along.  Going this
3501          * route, it's probably best to initially allocate enough space in the
3502          * string rather than possibly running out of space and having to
3503          * reallocate and then copy what we've done so far.  Since everything
3504          * from 's' to 't - 1' is invariant, the destination can be initialized
3505          * with these using a fast memory copy.  To be sure to allocate enough
3506          * space, one could use the worst case scenario, where every remaining
3507          * byte expands to two under UTF-8, or one could parse it and count
3508          * exactly how many do expand.
3509          *
3510          * The other way is to unconditionally parse the remainder of the
3511          * string to figure out exactly how big the expanded string will be,
3512          * growing if needed.  Then start at the end of the string and place
3513          * the character there at the end of the unfilled space in the expanded
3514          * one, working backwards until reaching 't'.
3515          *
3516          * The problem with assuming the worst case scenario is that for very
3517          * long strings, we could allocate much more memory than actually
3518          * needed, which can create performance problems.  If we have to parse
3519          * anyway, the second method is the winner as it may avoid an extra
3520          * copy.  The code used to use the first method under some
3521          * circumstances, but now that there is faster variant counting on
3522          * ASCII platforms, the second method is used exclusively, eliminating
3523          * some code that no longer has to be maintained. */
3524
3525         {
3526             /* Count the total number of variants there are.  We can start
3527              * just beyond the first one, which is known to be at 't' */
3528             const Size_t invariant_length = t - s;
3529             U8 * e = (U8 *) SvEND(sv);
3530
3531             /* The length of the left overs, plus 1. */
3532             const Size_t remaining_length_p1 = e - t;
3533
3534             /* We expand by 1 for the variant at 't' and one for each remaining
3535              * variant (we start looking at 't+1') */
3536             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3537
3538             /* +1 = trailing NUL */
3539             Size_t need = SvCUR(sv) + expansion + extra + 1;
3540             U8 * d;
3541
3542             /* Grow if needed */
3543             if (SvLEN(sv) < need) {
3544                 t = invariant_length + (U8*) SvGROW(sv, need);
3545                 e = t + remaining_length_p1;
3546             }
3547             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3548
3549             /* Set the NUL at the end */
3550             d = (U8 *) SvEND(sv);
3551             *d-- = '\0';
3552
3553             /* Having decremented d, it points to the position to put the
3554              * very last byte of the expanded string.  Go backwards through
3555              * the string, copying and expanding as we go, stopping when we
3556              * get to the part that is invariant the rest of the way down */
3557
3558             e--;
3559             while (e >= t) {
3560                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3561                     *d-- = *e;
3562                 } else {
3563                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3564                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3565                 }
3566                 e--;
3567             }
3568
3569             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3570                 /* Update pos. We do it at the end rather than during
3571                  * the upgrade, to avoid slowing down the common case
3572                  * (upgrade without pos).
3573                  * pos can be stored as either bytes or characters.  Since
3574                  * this was previously a byte string we can just turn off
3575                  * the bytes flag. */
3576                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3577                 if (mg) {
3578                     mg->mg_flags &= ~MGf_BYTES;
3579                 }
3580                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3581                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3582             }
3583         }
3584     }
3585
3586     SvUTF8_on(sv);
3587     return SvCUR(sv);
3588 }
3589
3590 /*
3591 =for apidoc sv_utf8_downgrade
3592
3593 Attempts to convert the PV of an SV from characters to bytes.
3594 If the PV contains a character that cannot fit
3595 in a byte, this conversion will fail;
3596 in this case, either returns false or, if C<fail_ok> is not
3597 true, croaks.
3598
3599 This is not a general purpose Unicode to byte encoding interface:
3600 use the C<Encode> extension for that.
3601
3602 =cut
3603 */
3604
3605 bool
3606 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3607 {
3608     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3609
3610     if (SvPOKp(sv) && SvUTF8(sv)) {
3611         if (SvCUR(sv)) {
3612             U8 *s;
3613             STRLEN len;
3614             int mg_flags = SV_GMAGIC;
3615
3616             if (SvIsCOW(sv)) {
3617                 S_sv_uncow(aTHX_ sv, 0);
3618             }
3619             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3620                 /* update pos */
3621                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3622                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3623                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3624                                                 SV_GMAGIC|SV_CONST_RETURN);
3625                         mg_flags = 0; /* sv_pos_b2u does get magic */
3626                 }
3627                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3628                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3629
3630             }
3631             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3632
3633             if (!utf8_to_bytes(s, &len)) {
3634                 if (fail_ok)
3635                     return FALSE;
3636                 else {
3637                     if (PL_op)
3638                         Perl_croak(aTHX_ "Wide character in %s",
3639                                    OP_DESC(PL_op));
3640                     else
3641                         Perl_croak(aTHX_ "Wide character");
3642                 }
3643             }
3644             SvCUR_set(sv, len);
3645         }
3646     }
3647     SvUTF8_off(sv);
3648     return TRUE;
3649 }
3650
3651 /*
3652 =for apidoc sv_utf8_encode
3653
3654 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3655 flag off so that it looks like octets again.
3656
3657 =cut
3658 */
3659
3660 void
3661 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3662 {
3663     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3664
3665     if (SvREADONLY(sv)) {
3666         sv_force_normal_flags(sv, 0);
3667     }
3668     (void) sv_utf8_upgrade(sv);
3669     SvUTF8_off(sv);
3670 }
3671
3672 /*
3673 =for apidoc sv_utf8_decode
3674
3675 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3676 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3677 so that it looks like a character.  If the PV contains only single-byte
3678 characters, the C<SvUTF8> flag stays off.
3679 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3680
3681 =cut
3682 */
3683
3684 bool
3685 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3686 {
3687     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3688
3689     if (SvPOKp(sv)) {
3690         const U8 *start, *c, *first_variant;
3691
3692         /* The octets may have got themselves encoded - get them back as
3693          * bytes
3694          */
3695         if (!sv_utf8_downgrade(sv, TRUE))
3696             return FALSE;
3697
3698         /* it is actually just a matter of turning the utf8 flag on, but
3699          * we want to make sure everything inside is valid utf8 first.
3700          */
3701         c = start = (const U8 *) SvPVX_const(sv);
3702         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3703             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3704                 return FALSE;
3705             SvUTF8_on(sv);
3706         }
3707         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3708             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3709                    after this, clearing pos.  Does anything on CPAN
3710                    need this? */
3711             /* adjust pos to the start of a UTF8 char sequence */
3712             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3713             if (mg) {
3714                 I32 pos = mg->mg_len;
3715                 if (pos > 0) {
3716                     for (c = start + pos; c > start; c--) {
3717                         if (UTF8_IS_START(*c))
3718                             break;
3719                     }
3720                     mg->mg_len  = c - start;
3721                 }
3722             }
3723             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3724                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3725         }
3726     }
3727     return TRUE;
3728 }
3729
3730 /*
3731 =for apidoc sv_setsv
3732
3733 Copies the contents of the source SV C<ssv> into the destination SV
3734 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3735 function if the source SV needs to be reused.  Does not handle 'set' magic on
3736 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3737 performs a copy-by-value, obliterating any previous content of the
3738 destination.
3739
3740 You probably want to use one of the assortment of wrappers, such as
3741 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3742 C<SvSetMagicSV_nosteal>.
3743
3744 =for apidoc sv_setsv_flags
3745
3746 Copies the contents of the source SV C<ssv> into the destination SV
3747 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3748 function if the source SV needs to be reused.  Does not handle 'set' magic.
3749 Loosely speaking, it performs a copy-by-value, obliterating any previous
3750 content of the destination.
3751 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3752 C<ssv> if appropriate, else not.  If the C<flags>
3753 parameter has the C<SV_NOSTEAL> bit set then the
3754 buffers of temps will not be stolen.  C<sv_setsv>
3755 and C<sv_setsv_nomg> are implemented in terms of this function.
3756
3757 You probably want to use one of the assortment of wrappers, such as
3758 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3759 C<SvSetMagicSV_nosteal>.
3760
3761 This is the primary function for copying scalars, and most other
3762 copy-ish functions and macros use this underneath.
3763
3764 =cut
3765 */
3766
3767 static void
3768 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3769 {
3770     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3771     HV *old_stash = NULL;
3772
3773     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3774
3775     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3776         const char * const name = GvNAME(sstr);
3777         const STRLEN len = GvNAMELEN(sstr);
3778         {
3779             if (dtype >= SVt_PV) {
3780                 SvPV_free(dstr);
3781                 SvPV_set(dstr, 0);
3782                 SvLEN_set(dstr, 0);
3783                 SvCUR_set(dstr, 0);
3784             }
3785             SvUPGRADE(dstr, SVt_PVGV);
3786             (void)SvOK_off(dstr);
3787             isGV_with_GP_on(dstr);
3788         }
3789         GvSTASH(dstr) = GvSTASH(sstr);
3790         if (GvSTASH(dstr))
3791             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3792         gv_name_set(MUTABLE_GV(dstr), name, len,
3793                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3794         SvFAKE_on(dstr);        /* can coerce to non-glob */
3795     }
3796
3797     if(GvGP(MUTABLE_GV(sstr))) {
3798         /* If source has method cache entry, clear it */
3799         if(GvCVGEN(sstr)) {
3800             SvREFCNT_dec(GvCV(sstr));
3801             GvCV_set(sstr, NULL);
3802             GvCVGEN(sstr) = 0;
3803         }
3804         /* If source has a real method, then a method is
3805            going to change */
3806         else if(
3807          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3808         ) {
3809             mro_changes = 1;
3810         }
3811     }
3812
3813     /* If dest already had a real method, that's a change as well */
3814     if(
3815         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3816      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3817     ) {
3818         mro_changes = 1;
3819     }
3820
3821     /* We don't need to check the name of the destination if it was not a
3822        glob to begin with. */
3823     if(dtype == SVt_PVGV) {
3824         const char * const name = GvNAME((const GV *)dstr);
3825         const STRLEN len = GvNAMELEN(dstr);
3826         if(memEQs(name, len, "ISA")
3827          /* The stash may have been detached from the symbol table, so
3828             check its name. */
3829          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3830         )
3831             mro_changes = 2;
3832         else {
3833             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3834              || (len == 1 && name[0] == ':')) {
3835                 mro_changes = 3;
3836
3837                 /* Set aside the old stash, so we can reset isa caches on
3838                    its subclasses. */
3839                 if((old_stash = GvHV(dstr)))
3840                     /* Make sure we do not lose it early. */
3841                     SvREFCNT_inc_simple_void_NN(
3842                      sv_2mortal((SV *)old_stash)
3843                     );
3844             }
3845         }
3846
3847         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3848     }
3849
3850     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3851      * so temporarily protect it */
3852     ENTER;
3853     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3854     gp_free(MUTABLE_GV(dstr));
3855     GvINTRO_off(dstr);          /* one-shot flag */
3856     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3857     LEAVE;
3858
3859     if (SvTAINTED(sstr))
3860         SvTAINT(dstr);
3861     if (GvIMPORTED(dstr) != GVf_IMPORTED
3862         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3863         {
3864             GvIMPORTED_on(dstr);
3865         }
3866     GvMULTI_on(dstr);
3867     if(mro_changes == 2) {
3868       if (GvAV((const GV *)sstr)) {
3869         MAGIC *mg;
3870         SV * const sref = (SV *)GvAV((const GV *)dstr);
3871         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3872             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3873                 AV * const ary = newAV();
3874                 av_push(ary, mg->mg_obj); /* takes the refcount */
3875                 mg->mg_obj = (SV *)ary;
3876             }
3877             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3878         }
3879         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3880       }
3881       mro_isa_changed_in(GvSTASH(dstr));
3882     }
3883     else if(mro_changes == 3) {
3884         HV * const stash = GvHV(dstr);
3885         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3886             mro_package_moved(
3887                 stash, old_stash,
3888                 (GV *)dstr, 0
3889             );
3890     }
3891     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3892     if (GvIO(dstr) && dtype == SVt_PVGV) {
3893         DEBUG_o(Perl_deb(aTHX_
3894                         "glob_assign_glob clearing PL_stashcache\n"));
3895         /* It's a cache. It will rebuild itself quite happily.
3896            It's a lot of effort to work out exactly which key (or keys)
3897            might be invalidated by the creation of the this file handle.
3898          */
3899         hv_clear(PL_stashcache);
3900     }
3901     return;
3902 }
3903
3904 void
3905 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3906 {
3907     SV * const sref = SvRV(sstr);
3908     SV *dref;
3909     const int intro = GvINTRO(dstr);
3910     SV **location;
3911     U8 import_flag = 0;
3912     const U32 stype = SvTYPE(sref);
3913
3914     PERL_ARGS_ASSERT_GV_SETREF;
3915
3916     if (intro) {
3917         GvINTRO_off(dstr);      /* one-shot flag */
3918         GvLINE(dstr) = CopLINE(PL_curcop);
3919         GvEGV(dstr) = MUTABLE_GV(dstr);
3920     }
3921     GvMULTI_on(dstr);
3922     switch (stype) {
3923     case SVt_PVCV:
3924         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3925         import_flag = GVf_IMPORTED_CV;
3926         goto common;
3927     case SVt_PVHV:
3928         location = (SV **) &GvHV(dstr);
3929         import_flag = GVf_IMPORTED_HV;
3930         goto common;
3931     case SVt_PVAV:
3932         location = (SV **) &GvAV(dstr);
3933         import_flag = GVf_IMPORTED_AV;
3934         goto common;
3935     case SVt_PVIO:
3936         location = (SV **) &GvIOp(dstr);
3937         goto common;
3938     case SVt_PVFM:
3939         location = (SV **) &GvFORM(dstr);
3940         goto common;
3941     default:
3942         location = &GvSV(dstr);
3943         import_flag = GVf_IMPORTED_SV;
3944     common:
3945         if (intro) {
3946             if (stype == SVt_PVCV) {
3947                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3948                 if (GvCVGEN(dstr)) {
3949                     SvREFCNT_dec(GvCV(dstr));
3950                     GvCV_set(dstr, NULL);
3951                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3952                 }
3953             }
3954             /* SAVEt_GVSLOT takes more room on the savestack and has more
3955                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3956                leave_scope needs access to the GV so it can reset method
3957                caches.  We must use SAVEt_GVSLOT whenever the type is
3958                SVt_PVCV, even if the stash is anonymous, as the stash may
3959                gain a name somehow before leave_scope. */
3960             if (stype == SVt_PVCV) {
3961                 /* There is no save_pushptrptrptr.  Creating it for this
3962                    one call site would be overkill.  So inline the ss add
3963                    routines here. */
3964                 dSS_ADD;
3965                 SS_ADD_PTR(dstr);
3966                 SS_ADD_PTR(location);
3967                 SS_ADD_PTR(SvREFCNT_inc(*location));
3968                 SS_ADD_UV(SAVEt_GVSLOT);
3969                 SS_ADD_END(4);
3970             }
3971             else SAVEGENERICSV(*location);
3972         }
3973         dref = *location;
3974         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3975             CV* const cv = MUTABLE_CV(*location);
3976             if (cv) {
3977                 if (!GvCVGEN((const GV *)dstr) &&
3978                     (CvROOT(cv) || CvXSUB(cv)) &&
3979                     /* redundant check that avoids creating the extra SV
3980                        most of the time: */
3981                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3982                     {
3983                         SV * const new_const_sv =
3984                             CvCONST((const CV *)sref)
3985                                  ? cv_const_sv((const CV *)sref)
3986                                  : NULL;
3987                         HV * const stash = GvSTASH((const GV *)dstr);
3988                         report_redefined_cv(
3989                            sv_2mortal(
3990                              stash
3991                                ? Perl_newSVpvf(aTHX_
3992                                     "%" HEKf "::%" HEKf,
3993                                     HEKfARG(HvNAME_HEK(stash)),
3994                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3995                                : Perl_newSVpvf(aTHX_
3996                                     "%" HEKf,
3997                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3998                            ),
3999                            cv,
4000                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4001                         );
4002                     }
4003                 if (!intro)
4004                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4005                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4006                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4007                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4008             }
4009             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4010             GvASSUMECV_on(dstr);
4011             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4012                 if (intro && GvREFCNT(dstr) > 1) {
4013                     /* temporary remove extra savestack's ref */
4014                     --GvREFCNT(dstr);
4015                     gv_method_changed(dstr);
4016                     ++GvREFCNT(dstr);
4017                 }
4018                 else gv_method_changed(dstr);
4019             }
4020         }
4021         *location = SvREFCNT_inc_simple_NN(sref);
4022         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4023             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4024             GvFLAGS(dstr) |= import_flag;
4025         }
4026
4027         if (stype == SVt_PVHV) {
4028             const char * const name = GvNAME((GV*)dstr);
4029             const STRLEN len = GvNAMELEN(dstr);
4030             if (
4031                 (
4032                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4033                 || (len == 1 && name[0] == ':')
4034                 )
4035              && (!dref || HvENAME_get(dref))
4036             ) {
4037                 mro_package_moved(
4038                     (HV *)sref, (HV *)dref,
4039                     (GV *)dstr, 0
4040                 );
4041             }
4042         }
4043         else if (
4044             stype == SVt_PVAV && sref != dref
4045          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4046          /* The stash may have been detached from the symbol table, so
4047             check its name before doing anything. */
4048          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4049         ) {
4050             MAGIC *mg;
4051             MAGIC * const omg = dref && SvSMAGICAL(dref)
4052                                  ? mg_find(dref, PERL_MAGIC_isa)
4053                                  : NULL;
4054             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4055                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4056                     AV * const ary = newAV();
4057                     av_push(ary, mg->mg_obj); /* takes the refcount */
4058                     mg->mg_obj = (SV *)ary;
4059                 }
4060                 if (omg) {
4061                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4062                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4063                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4064                         while (items--)
4065                             av_push(
4066                              (AV *)mg->mg_obj,
4067                              SvREFCNT_inc_simple_NN(*svp++)
4068                             );
4069                     }
4070                     else
4071                         av_push(
4072                          (AV *)mg->mg_obj,
4073                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4074                         );
4075                 }
4076                 else
4077                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4078             }
4079             else
4080             {
4081                 SSize_t i;
4082                 sv_magic(
4083                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4084                 );
4085                 for (i = 0; i <= AvFILL(sref); ++i) {
4086                     SV **elem = av_fetch ((AV*)sref, i, 0);
4087                     if (elem) {
4088                         sv_magic(
4089                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4090                         );
4091                     }
4092                 }
4093                 mg = mg_find(sref, PERL_MAGIC_isa);
4094             }
4095             /* Since the *ISA assignment could have affected more than
4096                one stash, don't call mro_isa_changed_in directly, but let
4097                magic_clearisa do it for us, as it already has the logic for
4098                dealing with globs vs arrays of globs. */
4099             assert(mg);
4100             Perl_magic_clearisa(aTHX_ NULL, mg);
4101         }
4102         else if (stype == SVt_PVIO) {
4103             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4104             /* It's a cache. It will rebuild itself quite happily.
4105                It's a lot of effort to work out exactly which key (or keys)
4106                might be invalidated by the creation of the this file handle.
4107             */
4108             hv_clear(PL_stashcache);
4109         }
4110         break;
4111     }
4112     if (!intro) SvREFCNT_dec(dref);
4113     if (SvTAINTED(sstr))
4114         SvTAINT(dstr);
4115     return;
4116 }
4117
4118
4119
4120
4121 #ifdef PERL_DEBUG_READONLY_COW
4122 # include <sys/mman.h>
4123
4124 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4125 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4126 # endif
4127
4128 void
4129 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4130 {
4131     struct perl_memory_debug_header * const header =
4132         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4133     const MEM_SIZE len = header->size;
4134     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4135 # ifdef PERL_TRACK_MEMPOOL
4136     if (!header->readonly) header->readonly = 1;
4137 # endif
4138     if (mprotect(header, len, PROT_READ))
4139         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4140                          header, len, errno);
4141 }
4142
4143 static void
4144 S_sv_buf_to_rw(pTHX_ SV *sv)
4145 {
4146     struct perl_memory_debug_header * const header =
4147         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4148     const MEM_SIZE len = header->size;
4149     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4150     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4151         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4152                          header, len, errno);
4153 # ifdef PERL_TRACK_MEMPOOL
4154     header->readonly = 0;
4155 # endif
4156 }
4157
4158 #else
4159 # define sv_buf_to_ro(sv)       NOOP
4160 # define sv_buf_to_rw(sv)       NOOP
4161 #endif
4162
4163 void
4164 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4165 {
4166     U32 sflags;
4167     int dtype;
4168     svtype stype;
4169     unsigned int both_type;
4170
4171     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4172
4173     if (UNLIKELY( sstr == dstr ))
4174         return;
4175
4176     if (UNLIKELY( !sstr ))
4177         sstr = &PL_sv_undef;
4178
4179     stype = SvTYPE(sstr);
4180     dtype = SvTYPE(dstr);
4181     both_type = (stype | dtype);
4182
4183     /* with these values, we can check that both SVs are NULL/IV (and not
4184      * freed) just by testing the or'ed types */
4185     STATIC_ASSERT_STMT(SVt_NULL == 0);
4186     STATIC_ASSERT_STMT(SVt_IV   == 1);
4187     if (both_type <= 1) {
4188         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4189          * special-casing */
4190         U32 sflags;
4191         U32 new_dflags;
4192         SV *old_rv = NULL;
4193
4194         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4195         if (SvREADONLY(dstr))
4196             Perl_croak_no_modify();
4197         if (SvROK(dstr)) {
4198             if (SvWEAKREF(dstr))
4199                 sv_unref_flags(dstr, 0);
4200             else
4201                 old_rv = SvRV(dstr);
4202         }
4203
4204         assert(!SvGMAGICAL(sstr));
4205         assert(!SvGMAGICAL(dstr));
4206
4207         sflags = SvFLAGS(sstr);
4208         if (sflags & (SVf_IOK|SVf_ROK)) {
4209             SET_SVANY_FOR_BODYLESS_IV(dstr);
4210             new_dflags = SVt_IV;
4211
4212             if (sflags & SVf_ROK) {
4213                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4214                 new_dflags |= SVf_ROK;
4215             }
4216             else {
4217                 /* both src and dst are <= SVt_IV, so sv_any points to the
4218                  * head; so access the head directly
4219                  */
4220                 assert(    &(sstr->sv_u.svu_iv)
4221                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4222                 assert(    &(dstr->sv_u.svu_iv)
4223                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4224                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4225                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4226             }
4227         }
4228         else {
4229             new_dflags = dtype; /* turn off everything except the type */
4230         }
4231         SvFLAGS(dstr) = new_dflags;
4232         SvREFCNT_dec(old_rv);
4233
4234         return;
4235     }
4236
4237     if (UNLIKELY(both_type == SVTYPEMASK)) {
4238         if (SvIS_FREED(dstr)) {
4239             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4240                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4241         }
4242         if (SvIS_FREED(sstr)) {
4243             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4244                        (void*)sstr, (void*)dstr);
4245         }
4246     }
4247
4248
4249
4250     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4251     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4252
4253     /* There's a lot of redundancy below but we're going for speed here */
4254
4255     switch (stype) {
4256     case SVt_NULL:
4257       undef_sstr:
4258         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4259             (void)SvOK_off(dstr);
4260             return;
4261         }
4262         break;
4263     case SVt_IV:
4264         if (SvIOK(sstr)) {
4265             switch (dtype) {
4266             case SVt_NULL:
4267                 /* For performance, we inline promoting to type SVt_IV. */
4268                 /* We're starting from SVt_NULL, so provided that define is
4269                  * actual 0, we don't have to unset any SV type flags
4270                  * to promote to SVt_IV. */
4271                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4272                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4273                 SvFLAGS(dstr) |= SVt_IV;
4274                 break;
4275             case SVt_NV:
4276             case SVt_PV:
4277                 sv_upgrade(dstr, SVt_PVIV);
4278                 break;
4279             case SVt_PVGV:
4280             case SVt_PVLV:
4281                 goto end_of_first_switch;
4282             }
4283             (void)SvIOK_only(dstr);
4284             SvIV_set(dstr,  SvIVX(sstr));
4285             if (SvIsUV(sstr))
4286                 SvIsUV_on(dstr);
4287             /* SvTAINTED can only be true if the SV has taint magic, which in
4288                turn means that the SV type is PVMG (or greater). This is the
4289                case statement for SVt_IV, so this cannot be true (whatever gcov
4290                may say).  */
4291             assert(!SvTAINTED(sstr));
4292             return;
4293         }
4294         if (!SvROK(sstr))
4295             goto undef_sstr;
4296         if (dtype < SVt_PV && dtype != SVt_IV)
4297             sv_upgrade(dstr, SVt_IV);
4298         break;
4299
4300     case SVt_NV:
4301         if (LIKELY( SvNOK(sstr) )) {
4302             switch (dtype) {
4303             case SVt_NULL:
4304             case SVt_IV:
4305                 sv_upgrade(dstr, SVt_NV);
4306                 break;
4307             case SVt_PV:
4308             case SVt_PVIV:
4309                 sv_upgrade(dstr, SVt_PVNV);
4310                 break;
4311             case SVt_PVGV:
4312             case SVt_PVLV:
4313                 goto end_of_first_switch;
4314             }
4315             SvNV_set(dstr, SvNVX(sstr));
4316             (void)SvNOK_only(dstr);
4317             /* SvTAINTED can only be true if the SV has taint magic, which in
4318                turn means that the SV type is PVMG (or greater). This is the
4319                case statement for SVt_NV, so this cannot be true (whatever gcov
4320                may say).  */
4321             assert(!SvTAINTED(sstr));
4322             return;
4323         }
4324         goto undef_sstr;
4325
4326     case SVt_PV:
4327         if (dtype < SVt_PV)
4328             sv_upgrade(dstr, SVt_PV);
4329         break;
4330     case SVt_PVIV:
4331         if (dtype < SVt_PVIV)
4332             sv_upgrade(dstr, SVt_PVIV);
4333         break;
4334     case SVt_PVNV:
4335         if (dtype < SVt_PVNV)
4336             sv_upgrade(dstr, SVt_PVNV);
4337         break;
4338     default:
4339         {
4340         const char * const type = sv_reftype(sstr,0);
4341         if (PL_op)
4342             /* diag_listed_as: Bizarre copy of %s */
4343             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4344         else
4345             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4346         }
4347         NOT_REACHED; /* NOTREACHED */
4348
4349     case SVt_REGEXP:
4350       upgregexp:
4351         if (dtype < SVt_REGEXP)
4352             sv_upgrade(dstr, SVt_REGEXP);
4353         break;
4354
4355         case SVt_INVLIST:
4356     case SVt_PVLV:
4357     case SVt_PVGV:
4358     case SVt_PVMG:
4359         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4360             mg_get(sstr);
4361             if (SvTYPE(sstr) != stype)
4362                 stype = SvTYPE(sstr);
4363         }
4364         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4365                     glob_assign_glob(dstr, sstr, dtype);
4366                     return;
4367         }
4368         if (stype == SVt_PVLV)
4369         {
4370             if (isREGEXP(sstr)) goto upgregexp;
4371             SvUPGRADE(dstr, SVt_PVNV);
4372         }
4373         else
4374             SvUPGRADE(dstr, (svtype)stype);
4375     }
4376  end_of_first_switch:
4377
4378     /* dstr may have been upgraded.  */
4379     dtype = SvTYPE(dstr);
4380     sflags = SvFLAGS(sstr);
4381
4382     if (UNLIKELY( dtype == SVt_PVCV )) {
4383         /* Assigning to a subroutine sets the prototype.  */
4384         if (SvOK(sstr)) {
4385             STRLEN len;
4386             const char *const ptr = SvPV_const(sstr, len);
4387
4388             SvGROW(dstr, len + 1);
4389             Copy(ptr, SvPVX(dstr), len + 1, char);
4390             SvCUR_set(dstr, len);
4391             SvPOK_only(dstr);
4392             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4393             CvAUTOLOAD_off(dstr);
4394         } else {
4395             SvOK_off(dstr);
4396         }
4397     }
4398     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4399              || dtype == SVt_PVFM))
4400     {
4401         const char * const type = sv_reftype(dstr,0);
4402         if (PL_op)
4403             /* diag_listed_as: Cannot copy to %s */
4404             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4405         else
4406             Perl_croak(aTHX_ "Cannot copy to %s", type);
4407     } else if (sflags & SVf_ROK) {
4408         if (isGV_with_GP(dstr)
4409             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4410             sstr = SvRV(sstr);
4411             if (sstr == dstr) {
4412                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4413                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4414                 {
4415                     GvIMPORTED_on(dstr);
4416                 }
4417                 GvMULTI_on(dstr);
4418                 return;
4419             }
4420             glob_assign_glob(dstr, sstr, dtype);
4421             return;
4422         }
4423
4424         if (dtype >= SVt_PV) {
4425             if (isGV_with_GP(dstr)) {
4426                 gv_setref(dstr, sstr);
4427                 return;
4428             }
4429             if (SvPVX_const(dstr)) {
4430                 SvPV_free(dstr);
4431                 SvLEN_set(dstr, 0);
4432                 SvCUR_set(dstr, 0);
4433             }
4434         }
4435         (void)SvOK_off(dstr);
4436         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4437         SvFLAGS(dstr) |= sflags & SVf_ROK;
4438         assert(!(sflags & SVp_NOK));
4439         assert(!(sflags & SVp_IOK));
4440         assert(!(sflags & SVf_NOK));
4441         assert(!(sflags & SVf_IOK));
4442     }
4443     else if (isGV_with_GP(dstr)) {
4444         if (!(sflags & SVf_OK)) {
4445             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4446                            "Undefined value assigned to typeglob");
4447         }
4448         else {
4449             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4450             if (dstr != (const SV *)gv) {
4451                 const char * const name = GvNAME((const GV *)dstr);
4452                 const STRLEN len = GvNAMELEN(dstr);
4453                 HV *old_stash = NULL;
4454                 bool reset_isa = FALSE;
4455                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4456                  || (len == 1 && name[0] == ':')) {
4457                     /* Set aside the old stash, so we can reset isa caches
4458                        on its subclasses. */
4459                     if((old_stash = GvHV(dstr))) {
4460                         /* Make sure we do not lose it early. */
4461                         SvREFCNT_inc_simple_void_NN(
4462                          sv_2mortal((SV *)old_stash)
4463                         );
4464                     }
4465                     reset_isa = TRUE;
4466                 }
4467
4468                 if (GvGP(dstr)) {
4469                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4470                     gp_free(MUTABLE_GV(dstr));
4471                 }
4472                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4473
4474                 if (reset_isa) {
4475                     HV * const stash = GvHV(dstr);
4476                     if(
4477                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4478                     )
4479                         mro_package_moved(
4480                          stash, old_stash,
4481                          (GV *)dstr, 0
4482                         );
4483                 }
4484             }
4485         }
4486     }
4487     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4488           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4489         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4490     }
4491     else if (sflags & SVp_POK) {
4492         const STRLEN cur = SvCUR(sstr);
4493         const STRLEN len = SvLEN(sstr);
4494
4495         /*
4496          * We have three basic ways to copy the string:
4497          *
4498          *  1. Swipe
4499          *  2. Copy-on-write
4500          *  3. Actual copy
4501          * 
4502          * Which we choose is based on various factors.  The following
4503          * things are listed in order of speed, fastest to slowest:
4504          *  - Swipe
4505          *  - Copying a short string
4506          *  - Copy-on-write bookkeeping
4507          *  - malloc
4508          *  - Copying a long string
4509          * 
4510          * We swipe the string (steal the string buffer) if the SV on the
4511          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4512          * big win on long strings.  It should be a win on short strings if
4513          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4514          * slow things down, as SvPVX_const(sstr) would have been freed
4515          * soon anyway.
4516          * 
4517          * We also steal the buffer from a PADTMP (operator target) if it
4518          * is â€˜long enough’.  For short strings, a swipe does not help
4519          * here, as it causes more malloc calls the next time the target
4520          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4521          * be allocated it is still not worth swiping PADTMPs for short
4522          * strings, as the savings here are small.
4523          * 
4524          * If swiping is not an option, then we see whether it is
4525          * worth using copy-on-write.  If the lhs already has a buf-
4526          * fer big enough and the string is short, we skip it and fall back
4527          * to method 3, since memcpy is faster for short strings than the
4528          * later bookkeeping overhead that copy-on-write entails.
4529
4530          * If the rhs is not a copy-on-write string yet, then we also
4531          * consider whether the buffer is too large relative to the string
4532          * it holds.  Some operations such as readline allocate a large
4533          * buffer in the expectation of reusing it.  But turning such into
4534          * a COW buffer is counter-productive because it increases memory
4535          * usage by making readline allocate a new large buffer the sec-
4536          * ond time round.  So, if the buffer is too large, again, we use
4537          * method 3 (copy).
4538          * 
4539          * Finally, if there is no buffer on the left, or the buffer is too 
4540          * small, then we use copy-on-write and make both SVs share the
4541          * string buffer.
4542          *
4543          */
4544
4545         /* Whichever path we take through the next code, we want this true,
4546            and doing it now facilitates the COW check.  */
4547         (void)SvPOK_only(dstr);
4548
4549         if (
4550                  (              /* Either ... */
4551                                 /* slated for free anyway (and not COW)? */
4552                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4553                                 /* or a swipable TARG */
4554                  || ((sflags &
4555                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4556                        == SVs_PADTMP
4557                                 /* whose buffer is worth stealing */
4558                      && CHECK_COWBUF_THRESHOLD(cur,len)
4559                     )
4560                  ) &&
4561                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4562                  (!(flags & SV_NOSTEAL)) &&
4563                                         /* and we're allowed to steal temps */
4564                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4565                  len)             /* and really is a string */
4566         {       /* Passes the swipe test.  */
4567             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4568                 SvPV_free(dstr);
4569             SvPV_set(dstr, SvPVX_mutable(sstr));
4570             SvLEN_set(dstr, SvLEN(sstr));
4571             SvCUR_set(dstr, SvCUR(sstr));
4572
4573             SvTEMP_off(dstr);
4574             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4575             SvPV_set(sstr, NULL);
4576             SvLEN_set(sstr, 0);
4577             SvCUR_set(sstr, 0);
4578             SvTEMP_off(sstr);
4579         }
4580         else if (flags & SV_COW_SHARED_HASH_KEYS
4581               &&
4582 #ifdef PERL_COPY_ON_WRITE
4583                  (sflags & SVf_IsCOW
4584                    ? (!len ||
4585                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4586                           /* If this is a regular (non-hek) COW, only so
4587                              many COW "copies" are possible. */
4588                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4589                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4590                      && !(SvFLAGS(dstr) & SVf_BREAK)
4591                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4592                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4593                     ))
4594 #else
4595                  sflags & SVf_IsCOW
4596               && !(SvFLAGS(dstr) & SVf_BREAK)
4597 #endif
4598             ) {
4599             /* Either it's a shared hash key, or it's suitable for
4600                copy-on-write.  */
4601 #ifdef DEBUGGING
4602             if (DEBUG_C_TEST) {
4603                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4604                 sv_dump(sstr);
4605                 sv_dump(dstr);
4606             }
4607 #endif
4608 #ifdef PERL_ANY_COW
4609             if (!(sflags & SVf_IsCOW)) {
4610                     SvIsCOW_on(sstr);
4611                     CowREFCNT(sstr) = 0;
4612             }
4613 #endif
4614             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4615                 SvPV_free(dstr);
4616             }
4617
4618 #ifdef PERL_ANY_COW
4619             if (len) {
4620                     if (sflags & SVf_IsCOW) {
4621                         sv_buf_to_rw(sstr);
4622                     }
4623                     CowREFCNT(sstr)++;
4624                     SvPV_set(dstr, SvPVX_mutable(sstr));
4625                     sv_buf_to_ro(sstr);
4626             } else
4627 #endif
4628             {
4629                     /* SvIsCOW_shared_hash */
4630                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4631                                           "Copy on write: Sharing hash\n"));
4632
4633                     assert (SvTYPE(dstr) >= SVt_PV);
4634                     SvPV_set(dstr,
4635                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4636             }
4637             SvLEN_set(dstr, len);
4638             SvCUR_set(dstr, cur);
4639             SvIsCOW_on(dstr);
4640         } else {
4641             /* Failed the swipe test, and we cannot do copy-on-write either.
4642                Have to copy the string.  */
4643             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4644             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4645             SvCUR_set(dstr, cur);
4646             *SvEND(dstr) = '\0';
4647         }
4648         if (sflags & SVp_NOK) {
4649             SvNV_set(dstr, SvNVX(sstr));
4650         }
4651         if (sflags & SVp_IOK) {
4652             SvIV_set(dstr, SvIVX(sstr));
4653             if (sflags & SVf_IVisUV)
4654                 SvIsUV_on(dstr);
4655         }
4656         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4657         {
4658             const MAGIC * const smg = SvVSTRING_mg(sstr);
4659             if (smg) {
4660                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4661                          smg->mg_ptr, smg->mg_len);
4662                 SvRMAGICAL_on(dstr);
4663             }
4664         }
4665     }
4666     else if (sflags & (SVp_IOK|SVp_NOK)) {
4667         (void)SvOK_off(dstr);
4668         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4669         if (sflags & SVp_IOK) {
4670             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4671             SvIV_set(dstr, SvIVX(sstr));
4672         }
4673         if (sflags & SVp_NOK) {
4674             SvNV_set(dstr, SvNVX(sstr));
4675         }
4676     }
4677     else {
4678         if (isGV_with_GP(sstr)) {
4679             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4680         }
4681         else
4682             (void)SvOK_off(dstr);
4683     }
4684     if (SvTAINTED(sstr))
4685         SvTAINT(dstr);
4686 }
4687
4688
4689 /*
4690 =for apidoc sv_set_undef
4691
4692 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4693 Doesn't handle set magic.
4694
4695 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4696 buffer, unlike C<undef $sv>.
4697
4698 Introduced in perl 5.25.12.
4699
4700 =cut
4701 */
4702
4703 void
4704 Perl_sv_set_undef(pTHX_ SV *sv)
4705 {
4706     U32 type = SvTYPE(sv);
4707
4708     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4709
4710     /* shortcut, NULL, IV, RV */
4711
4712     if (type <= SVt_IV) {
4713         assert(!SvGMAGICAL(sv));
4714         if (SvREADONLY(sv)) {
4715             /* does undeffing PL_sv_undef count as modifying a read-only
4716              * variable? Some XS code does this */
4717             if (sv == &PL_sv_undef)
4718                 return;
4719             Perl_croak_no_modify();
4720         }
4721
4722         if (SvROK(sv)) {
4723             if (SvWEAKREF(sv))
4724                 sv_unref_flags(sv, 0);
4725             else {
4726                 SV *rv = SvRV(sv);
4727                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4728                 SvREFCNT_dec_NN(rv);
4729                 return;
4730             }
4731         }
4732         SvFLAGS(sv) = type; /* quickly turn off all flags */
4733         return;
4734     }
4735
4736     if (SvIS_FREED(sv))
4737         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4738             (void *)sv);
4739
4740     SV_CHECK_THINKFIRST_COW_DROP(sv);
4741
4742     if (isGV_with_GP(sv))
4743         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4744                        "Undefined value assigned to typeglob");
4745     else
4746         SvOK_off(sv);
4747 }
4748
4749
4750
4751 /*
4752 =for apidoc sv_setsv_mg
4753
4754 Like C<sv_setsv>, but also handles 'set' magic.
4755
4756 =cut
4757 */
4758
4759 void
4760 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4761 {
4762     PERL_ARGS_ASSERT_SV_SETSV_MG;
4763
4764     sv_setsv(dstr,sstr);
4765     SvSETMAGIC(dstr);
4766 }
4767
4768 #ifdef PERL_ANY_COW
4769 #  define SVt_COW SVt_PV
4770 SV *
4771 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4772 {
4773     STRLEN cur = SvCUR(sstr);
4774     STRLEN len = SvLEN(sstr);
4775     char *new_pv;
4776 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4777     const bool already = cBOOL(SvIsCOW(sstr));
4778 #endif
4779
4780     PERL_ARGS_ASSERT_SV_SETSV_COW;
4781 #ifdef DEBUGGING
4782     if (DEBUG_C_TEST) {
4783         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4784                       (void*)sstr, (void*)dstr);
4785         sv_dump(sstr);
4786         if (dstr)
4787                     sv_dump(dstr);
4788     }
4789 #endif
4790     if (dstr) {
4791         if (SvTHINKFIRST(dstr))
4792             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4793         else if (SvPVX_const(dstr))
4794             Safefree(SvPVX_mutable(dstr));
4795     }
4796     else
4797         new_SV(dstr);
4798     SvUPGRADE(dstr, SVt_COW);
4799
4800     assert (SvPOK(sstr));
4801     assert (SvPOKp(sstr));
4802
4803     if (SvIsCOW(sstr)) {
4804
4805         if (SvLEN(sstr) == 0) {
4806             /* source is a COW shared hash key.  */
4807             DEBUG_C(PerlIO_printf(Perl_debug_log,
4808                                   "Fast copy on write: Sharing hash\n"));
4809             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4810             goto common_exit;
4811         }
4812         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4813         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4814     } else {
4815         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4816         SvUPGRADE(sstr, SVt_COW);
4817         SvIsCOW_on(sstr);
4818         DEBUG_C(PerlIO_printf(Perl_debug_log,
4819                               "Fast copy on write: Converting sstr to COW\n"));
4820         CowREFCNT(sstr) = 0;    
4821     }
4822 #  ifdef PERL_DEBUG_READONLY_COW
4823     if (already) sv_buf_to_rw(sstr);
4824 #  endif
4825     CowREFCNT(sstr)++;  
4826     new_pv = SvPVX_mutable(sstr);
4827     sv_buf_to_ro(sstr);
4828
4829   common_exit:
4830     SvPV_set(dstr, new_pv);
4831     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4832     if (SvUTF8(sstr))
4833         SvUTF8_on(dstr);
4834     SvLEN_set(dstr, len);
4835     SvCUR_set(dstr, cur);
4836 #ifdef DEBUGGING
4837     if (DEBUG_C_TEST)
4838                 sv_dump(dstr);
4839 #endif
4840     return dstr;
4841 }
4842 #endif
4843
4844 /*
4845 =for apidoc sv_setpv_bufsize
4846
4847 Sets the SV to be a string of cur bytes length, with at least
4848 len bytes available. Ensures that there is a null byte at SvEND.
4849 Returns a char * pointer to the SvPV buffer.
4850
4851 =cut
4852 */
4853
4854 char *
4855 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4856 {
4857     char *pv;
4858
4859     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4860
4861     SV_CHECK_THINKFIRST_COW_DROP(sv);
4862     SvUPGRADE(sv, SVt_PV);
4863     pv = SvGROW(sv, len + 1);
4864     SvCUR_set(sv, cur);
4865     *(SvEND(sv))= '\0';
4866     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4867
4868     SvTAINT(sv);
4869     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4870     return pv;
4871 }
4872
4873 /*
4874 =for apidoc sv_setpvn
4875
4876 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4877 The C<len> parameter indicates the number of
4878 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4879 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4880
4881 =cut
4882 */
4883
4884 void
4885 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4886 {
4887     char *dptr;
4888
4889     PERL_ARGS_ASSERT_SV_SETPVN;
4890
4891     SV_CHECK_THINKFIRST_COW_DROP(sv);
4892     if (isGV_with_GP(sv))
4893         Perl_croak_no_modify();
4894     if (!ptr) {
4895         (void)SvOK_off(sv);
4896         return;
4897     }
4898     else {
4899         /* len is STRLEN which is unsigned, need to copy to signed */
4900         const IV iv = len;
4901         if (iv < 0)
4902             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4903                        IVdf, iv);
4904     }
4905     SvUPGRADE(sv, SVt_PV);
4906
4907     dptr = SvGROW(sv, len + 1);
4908     Move(ptr,dptr,len,char);
4909     dptr[len] = '\0';
4910     SvCUR_set(sv, len);
4911     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4912     SvTAINT(sv);
4913     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4914 }
4915
4916 /*
4917 =for apidoc sv_setpvn_mg
4918
4919 Like C<sv_setpvn>, but also handles 'set' magic.
4920
4921 =cut
4922 */
4923
4924 void
4925 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4926 {
4927     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4928
4929     sv_setpvn(sv,ptr,len);
4930     SvSETMAGIC(sv);
4931 }
4932
4933 /*
4934 =for apidoc sv_setpv
4935
4936 Copies a string into an SV.  The string must be terminated with a C<NUL>
4937 character, and not contain embeded C<NUL>'s.
4938 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4939
4940 =cut
4941 */
4942
4943 void
4944 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4945 {
4946     STRLEN len;
4947
4948     PERL_ARGS_ASSERT_SV_SETPV;
4949
4950     SV_CHECK_THINKFIRST_COW_DROP(sv);
4951     if (!ptr) {
4952         (void)SvOK_off(sv);
4953         return;
4954     }
4955     len = strlen(ptr);
4956     SvUPGRADE(sv, SVt_PV);
4957
4958     SvGROW(sv, len + 1);
4959     Move(ptr,SvPVX(sv),len+1,char);
4960     SvCUR_set(sv, len);
4961     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4962     SvTAINT(sv);
4963     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4964 }
4965
4966 /*
4967 =for apidoc sv_setpv_mg
4968
4969 Like C<sv_setpv>, but also handles 'set' magic.
4970
4971 =cut
4972 */
4973
4974 void
4975 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4976 {
4977     PERL_ARGS_ASSERT_SV_SETPV_MG;
4978
4979     sv_setpv(sv,ptr);
4980     SvSETMAGIC(sv);
4981 }
4982
4983 void
4984 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4985 {
4986     PERL_ARGS_ASSERT_SV_SETHEK;
4987
4988     if (!hek) {
4989         return;
4990     }
4991
4992     if (HEK_LEN(hek) == HEf_SVKEY) {
4993         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4994         return;
4995     } else {
4996         const int flags = HEK_FLAGS(hek);
4997         if (flags & HVhek_WASUTF8) {
4998             STRLEN utf8_len = HEK_LEN(hek);
4999             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5000             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5001             SvUTF8_on(sv);
5002             return;
5003         } else if (flags & HVhek_UNSHARED) {
5004             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5005             if (HEK_UTF8(hek))
5006                 SvUTF8_on(sv);
5007             else SvUTF8_off(sv);
5008             return;
5009         }
5010         {
5011             SV_CHECK_THINKFIRST_COW_DROP(sv);
5012             SvUPGRADE(sv, SVt_PV);
5013             SvPV_free(sv);
5014             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5015             SvCUR_set(sv, HEK_LEN(hek));
5016             SvLEN_set(sv, 0);
5017             SvIsCOW_on(sv);
5018             SvPOK_on(sv);
5019             if (HEK_UTF8(hek))
5020                 SvUTF8_on(sv);
5021             else SvUTF8_off(sv);
5022             return;
5023         }
5024     }
5025 }
5026
5027
5028 /*
5029 =for apidoc sv_usepvn_flags
5030
5031 Tells an SV to use C<ptr> to find its string value.  Normally the
5032 string is stored inside the SV, but sv_usepvn allows the SV to use an
5033 outside string.  C<ptr> should point to memory that was allocated
5034 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5035 the start of a C<Newx>-ed block of memory, and not a pointer to the
5036 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5037 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5038 string length, C<len>, must be supplied.  By default this function
5039 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5040 so that pointer should not be freed or used by the programmer after
5041 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5042 that pointer (e.g. ptr + 1) be used.
5043
5044 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5045 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5046 and the realloc
5047 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5048 C<len>, and already meets the requirements for storing in C<SvPVX>).
5049
5050 =cut
5051 */
5052
5053 void
5054 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5055 {
5056     STRLEN allocate;
5057
5058     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5059
5060     SV_CHECK_THINKFIRST_COW_DROP(sv);
5061     SvUPGRADE(sv, SVt_PV);
5062     if (!ptr) {
5063         (void)SvOK_off(sv);
5064         if (flags & SV_SMAGIC)
5065             SvSETMAGIC(sv);
5066         return;
5067     }
5068     if (SvPVX_const(sv))
5069         SvPV_free(sv);
5070
5071 #ifdef DEBUGGING
5072     if (flags & SV_HAS_TRAILING_NUL)
5073         assert(ptr[len] == '\0');
5074 #endif
5075
5076     allocate = (flags & SV_HAS_TRAILING_NUL)
5077         ? len + 1 :
5078 #ifdef Perl_safesysmalloc_size
5079         len + 1;
5080 #else 
5081         PERL_STRLEN_ROUNDUP(len + 1);
5082 #endif
5083     if (flags & SV_HAS_TRAILING_NUL) {
5084         /* It's long enough - do nothing.
5085            Specifically Perl_newCONSTSUB is relying on this.  */
5086     } else {
5087 #ifdef DEBUGGING
5088         /* Force a move to shake out bugs in callers.  */
5089         char *new_ptr = (char*)safemalloc(allocate);
5090         Copy(ptr, new_ptr, len, char);
5091         PoisonFree(ptr,len,char);
5092         Safefree(ptr);
5093         ptr = new_ptr;
5094 #else
5095         ptr = (char*) saferealloc (ptr, allocate);
5096 #endif
5097     }
5098 #ifdef Perl_safesysmalloc_size
5099     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5100 #else
5101     SvLEN_set(sv, allocate);
5102 #endif
5103     SvCUR_set(sv, len);
5104     SvPV_set(sv, ptr);
5105     if (!(flags & SV_HAS_TRAILING_NUL)) {
5106         ptr[len] = '\0';
5107     }
5108     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5109     SvTAINT(sv);
5110     if (flags & SV_SMAGIC)
5111         SvSETMAGIC(sv);
5112 }
5113
5114
5115 static void
5116 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5117 {
5118     assert(SvIsCOW(sv));
5119     {
5120 #ifdef PERL_ANY_COW
5121         const char * const pvx = SvPVX_const(sv);
5122         const STRLEN len = SvLEN(sv);
5123         const STRLEN cur = SvCUR(sv);
5124
5125 #ifdef DEBUGGING
5126         if (DEBUG_C_TEST) {
5127                 PerlIO_printf(Perl_debug_log,
5128                               "Copy on write: Force normal %ld\n",
5129                               (long) flags);
5130                 sv_dump(sv);
5131         }
5132 #endif
5133         SvIsCOW_off(sv);
5134 # ifdef PERL_COPY_ON_WRITE
5135         if (len) {
5136             /* Must do this first, since the CowREFCNT uses SvPVX and
5137             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5138             the only owner left of the buffer. */
5139             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5140             {
5141                 U8 cowrefcnt = CowREFCNT(sv);
5142                 if(cowrefcnt != 0) {
5143                     cowrefcnt--;
5144                     CowREFCNT(sv) = cowrefcnt;
5145                     sv_buf_to_ro(sv);
5146                     goto copy_over;
5147                 }
5148             }
5149             /* Else we are the only owner of the buffer. */
5150         }
5151         else
5152 # endif
5153         {
5154             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5155             copy_over:
5156             SvPV_set(sv, NULL);
5157             SvCUR_set(sv, 0);
5158             SvLEN_set(sv, 0);
5159             if (flags & SV_COW_DROP_PV) {
5160                 /* OK, so we don't need to copy our buffer.  */
5161                 SvPOK_off(sv);
5162             } else {
5163                 SvGROW(sv, cur + 1);
5164                 Move(pvx,SvPVX(sv),cur,char);
5165                 SvCUR_set(sv, cur);
5166                 *SvEND(sv) = '\0';
5167             }
5168             if (len) {
5169             } else {
5170                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5171             }
5172 #ifdef DEBUGGING
5173             if (DEBUG_C_TEST)
5174                 sv_dump(sv);
5175 #endif
5176         }
5177 #else
5178             const char * const pvx = SvPVX_const(sv);
5179             const STRLEN len = SvCUR(sv);
5180             SvIsCOW_off(sv);
5181             SvPV_set(sv, NULL);
5182             SvLEN_set(sv, 0);
5183             if (flags & SV_COW_DROP_PV) {
5184                 /* OK, so we don't need to copy our buffer.  */
5185                 SvPOK_off(sv);
5186             } else {
5187                 SvGROW(sv, len + 1);
5188                 Move(pvx,SvPVX(sv),len,char);
5189                 *SvEND(sv) = '\0';
5190             }
5191             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5192 #endif
5193     }
5194 }
5195
5196
5197 /*
5198 =for apidoc sv_force_normal_flags
5199
5200 Undo various types of fakery on an SV, where fakery means
5201 "more than" a string: if the PV is a shared string, make
5202 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5203 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5204 we do the copy, and is also used locally; if this is a
5205 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5206 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5207 C<SvPOK_off> rather than making a copy.  (Used where this
5208 scalar is about to be set to some other value.)  In addition,
5209 the C<flags> parameter gets passed to C<sv_unref_flags()>
5210 when unreffing.  C<sv_force_normal> calls this function
5211 with flags set to 0.
5212
5213 This function is expected to be used to signal to perl that this SV is
5214 about to be written to, and any extra book-keeping needs to be taken care
5215 of.  Hence, it croaks on read-only values.
5216
5217 =cut
5218 */
5219
5220 void
5221 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5222 {
5223     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5224
5225     if (SvREADONLY(sv))
5226         Perl_croak_no_modify();
5227     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5228         S_sv_uncow(aTHX_ sv, flags);
5229     if (SvROK(sv))
5230         sv_unref_flags(sv, flags);
5231     else if (SvFAKE(sv) && isGV_with_GP(sv))
5232         sv_unglob(sv, flags);
5233     else if (SvFAKE(sv) && isREGEXP(sv)) {
5234         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5235            to sv_unglob. We only need it here, so inline it.  */
5236         const bool islv = SvTYPE(sv) == SVt_PVLV;
5237         const svtype new_type =
5238           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5239         SV *const temp = newSV_type(new_type);
5240         regexp *old_rx_body;
5241
5242         if (new_type == SVt_PVMG) {
5243             SvMAGIC_set(temp, SvMAGIC(sv));
5244             SvMAGIC_set(sv, NULL);
5245             SvSTASH_set(temp, SvSTASH(sv));
5246             SvSTASH_set(sv, NULL);
5247         }
5248         if (!islv)
5249             SvCUR_set(temp, SvCUR(sv));
5250         /* Remember that SvPVX is in the head, not the body. */
5251         assert(ReANY((REGEXP *)sv)->mother_re);
5252
5253         if (islv) {
5254             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5255              * whose xpvlenu_rx field points to the regex body */
5256             XPV *xpv = (XPV*)(SvANY(sv));
5257             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5258             xpv->xpv_len_u.xpvlenu_rx = NULL;
5259         }
5260         else
5261             old_rx_body = ReANY((REGEXP *)sv);
5262
5263         /* Their buffer is already owned by someone else. */
5264         if (flags & SV_COW_DROP_PV) {
5265             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5266                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5267                a union with xpvlenu_rx) */
5268             assert(!SvLEN(islv ? sv : temp));
5269             sv->sv_u.svu_pv = 0;
5270         }
5271         else {
5272             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5273             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5274             SvPOK_on(sv);
5275         }
5276
5277         /* Now swap the rest of the bodies. */
5278
5279         SvFAKE_off(sv);
5280         if (!islv) {
5281             SvFLAGS(sv) &= ~SVTYPEMASK;
5282             SvFLAGS(sv) |= new_type;
5283             SvANY(sv) = SvANY(temp);
5284         }
5285
5286         SvFLAGS(temp) &= ~(SVTYPEMASK);
5287         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5288         SvANY(temp) = old_rx_body;
5289
5290         SvREFCNT_dec_NN(temp);
5291     }
5292     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5293 }
5294
5295 /*
5296 =for apidoc sv_chop
5297
5298 Efficient removal of characters from the beginning of the string buffer.
5299 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5300 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5301 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5302 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5303
5304 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5305 refer to the same chunk of data.
5306
5307 The unfortunate similarity of this function's name to that of Perl's C<chop>
5308 operator is strictly coincidental.  This function works from the left;
5309 C<chop> works from the right.
5310
5311 =cut
5312 */
5313
5314 void
5315 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5316 {
5317     STRLEN delta;
5318     STRLEN old_delta;
5319     U8 *p;
5320 #ifdef DEBUGGING
5321     const U8 *evacp;
5322     STRLEN evacn;
5323 #endif
5324     STRLEN max_delta;
5325
5326     PERL_ARGS_ASSERT_SV_CHOP;
5327
5328     if (!ptr || !SvPOKp(sv))
5329         return;
5330     delta = ptr - SvPVX_const(sv);
5331     if (!delta) {
5332         /* Nothing to do.  */
5333         return;
5334     }
5335     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5336     if (delta > max_delta)
5337         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5338                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5339     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5340     SV_CHECK_THINKFIRST(sv);
5341     SvPOK_only_UTF8(sv);
5342
5343     if (!SvOOK(sv)) {
5344         if (!SvLEN(sv)) { /* make copy of shared string */
5345             const char *pvx = SvPVX_const(sv);
5346             const STRLEN len = SvCUR(sv);
5347             SvGROW(sv, len + 1);
5348             Move(pvx,SvPVX(sv),len,char);
5349             *SvEND(sv) = '\0';
5350         }
5351         SvOOK_on(sv);
5352         old_delta = 0;
5353     } else {
5354         SvOOK_offset(sv, old_delta);
5355     }
5356     SvLEN_set(sv, SvLEN(sv) - delta);
5357     SvCUR_set(sv, SvCUR(sv) - delta);
5358     SvPV_set(sv, SvPVX(sv) + delta);
5359
5360     p = (U8 *)SvPVX_const(sv);
5361
5362 #ifdef DEBUGGING
5363     /* how many bytes were evacuated?  we will fill them with sentinel
5364        bytes, except for the part holding the new offset of course. */
5365     evacn = delta;
5366     if (old_delta)
5367         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5368     assert(evacn);
5369     assert(evacn <= delta + old_delta);
5370     evacp = p - evacn;
5371 #endif
5372
5373     /* This sets 'delta' to the accumulated value of all deltas so far */
5374     delta += old_delta;
5375     assert(delta);
5376
5377     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5378      * the string; otherwise store a 0 byte there and store 'delta' just prior
5379      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5380      * portion of the chopped part of the string */
5381     if (delta < 0x100) {
5382         *--p = (U8) delta;
5383     } else {
5384         *--p = 0;
5385         p -= sizeof(STRLEN);
5386         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5387     }
5388
5389 #ifdef DEBUGGING
5390     /* Fill the preceding buffer with sentinals to verify that no-one is
5391        using it.  */
5392     while (p > evacp) {
5393         --p;
5394         *p = (U8)PTR2UV(p);
5395     }
5396 #endif
5397 }
5398
5399 /*
5400 =for apidoc sv_catpvn
5401
5402 Concatenates the string onto the end of the string which is in the SV.
5403 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5404 status set, then the bytes appended should be valid UTF-8.
5405 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5406
5407 =for apidoc sv_catpvn_flags
5408
5409 Concatenates the string onto the end of the string which is in the SV.  The
5410 C<len> indicates number of bytes to copy.
5411
5412 By default, the string appended is assumed to be valid UTF-8 if the SV has
5413 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5414 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5415 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5416 string appended will be upgraded to UTF-8 if necessary.
5417
5418 If C<flags> has the C<SV_SMAGIC> bit set, will
5419 C<mg_set> on C<dsv> afterwards if appropriate.
5420 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5421 in terms of this function.
5422
5423 =cut
5424 */
5425
5426 void
5427 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5428 {
5429     STRLEN dlen;
5430     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5431
5432     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5433     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5434
5435     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5436       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5437          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5438          dlen = SvCUR(dsv);
5439       }
5440       else SvGROW(dsv, dlen + slen + 3);
5441       if (sstr == dstr)
5442         sstr = SvPVX_const(dsv);
5443       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5444       SvCUR_set(dsv, SvCUR(dsv) + slen);
5445     }
5446     else {
5447         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5448         const char * const send = sstr + slen;
5449         U8 *d;
5450
5451         /* Something this code does not account for, which I think is
5452            impossible; it would require the same pv to be treated as
5453            bytes *and* utf8, which would indicate a bug elsewhere. */
5454         assert(sstr != dstr);
5455
5456         SvGROW(dsv, dlen + slen * 2 + 3);
5457         d = (U8 *)SvPVX(dsv) + dlen;
5458
5459         while (sstr < send) {
5460             append_utf8_from_native_byte(*sstr, &d);
5461             sstr++;
5462         }
5463         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5464     }
5465     *SvEND(dsv) = '\0';
5466     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5467     SvTAINT(dsv);
5468     if (flags & SV_SMAGIC)
5469         SvSETMAGIC(dsv);
5470 }
5471
5472 /*
5473 =for apidoc sv_catsv
5474
5475 Concatenates the string from SV C<ssv> onto the end of the string in SV
5476 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5477 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5478 and C<L</sv_catsv_nomg>>.
5479
5480 =for apidoc sv_catsv_flags
5481
5482 Concatenates the string from SV C<ssv> onto the end of the string in SV
5483 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5484 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5485 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5486 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5487 and C<sv_catsv_mg> are implemented in terms of this function.
5488
5489 =cut */
5490
5491 void
5492 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5493 {
5494     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5495
5496     if (ssv) {
5497         STRLEN slen;
5498         const char *spv = SvPV_flags_const(ssv, slen, flags);
5499         if (flags & SV_GMAGIC)
5500                 SvGETMAGIC(dsv);
5501         sv_catpvn_flags(dsv, spv, slen,
5502                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5503         if (flags & SV_SMAGIC)
5504                 SvSETMAGIC(dsv);
5505     }
5506 }
5507
5508 /*
5509 =for apidoc sv_catpv
5510
5511 Concatenates the C<NUL>-terminated string onto the end of the string which is
5512 in the SV.
5513 If the SV has the UTF-8 status set, then the bytes appended should be
5514 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5515 C<L</sv_catpv_mg>>.
5516
5517 =cut */
5518
5519 void
5520 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5521 {
5522     STRLEN len;
5523     STRLEN tlen;
5524     char *junk;
5525
5526     PERL_ARGS_ASSERT_SV_CATPV;
5527
5528     if (!ptr)
5529         return;
5530     junk = SvPV_force(sv, tlen);
5531     len = strlen(ptr);
5532     SvGROW(sv, tlen + len + 1);
5533     if (ptr == junk)
5534         ptr = SvPVX_const(sv);
5535     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5536     SvCUR_set(sv, SvCUR(sv) + len);
5537     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5538     SvTAINT(sv);
5539 }
5540
5541 /*
5542 =for apidoc sv_catpv_flags
5543
5544 Concatenates the C<NUL>-terminated string onto the end of the string which is
5545 in the SV.
5546 If the SV has the UTF-8 status set, then the bytes appended should
5547 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5548 on the modified SV if appropriate.
5549
5550 =cut
5551 */
5552
5553 void
5554 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5555 {
5556     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5557     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5558 }
5559
5560 /*
5561 =for apidoc sv_catpv_mg
5562
5563 Like C<sv_catpv>, but also handles 'set' magic.
5564
5565 =cut
5566 */
5567
5568 void
5569 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5570 {
5571     PERL_ARGS_ASSERT_SV_CATPV_MG;
5572
5573     sv_catpv(sv,ptr);
5574     SvSETMAGIC(sv);
5575 }
5576
5577 /*
5578 =for apidoc newSV
5579
5580 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5581 bytes of preallocated string space the SV should have.  An extra byte for a
5582 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5583 space is allocated.)  The reference count for the new SV is set to 1.
5584
5585 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5586 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5587 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5588 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5589 modules supporting older perls.
5590
5591 =cut
5592 */
5593
5594 SV *
5595 Perl_newSV(pTHX_ const STRLEN len)
5596 {
5597     SV *sv;
5598
5599     new_SV(sv);
5600     if (len) {
5601         sv_grow(sv, len + 1);
5602     }
5603     return sv;
5604 }
5605 /*
5606 =for apidoc sv_magicext
5607
5608 Adds magic to an SV, upgrading it if necessary.  Applies the
5609 supplied C<vtable> and returns a pointer to the magic added.
5610
5611 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5612 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5613 one instance of the same C<how>.
5614
5615 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5616 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5617 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5618 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5619
5620 (This is now used as a subroutine by C<sv_magic>.)
5621
5622 =cut
5623 */
5624 MAGIC * 
5625 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5626                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5627 {
5628     MAGIC* mg;
5629
5630     PERL_ARGS_ASSERT_SV_MAGICEXT;
5631
5632     SvUPGRADE(sv, SVt_PVMG);
5633     Newxz(mg, 1, MAGIC);
5634     mg->mg_moremagic = SvMAGIC(sv);
5635     SvMAGIC_set(sv, mg);
5636
5637     /* Sometimes a magic contains a reference loop, where the sv and
5638        object refer to each other.  To prevent a reference loop that
5639        would prevent such objects being freed, we look for such loops
5640        and if we find one we avoid incrementing the object refcount.
5641
5642        Note we cannot do this to avoid self-tie loops as intervening RV must
5643        have its REFCNT incremented to keep it in existence.
5644
5645     */
5646     if (!obj || obj == sv ||
5647         how == PERL_MAGIC_arylen ||
5648         how == PERL_MAGIC_regdata ||
5649         how == PERL_MAGIC_regdatum ||
5650         how == PERL_MAGIC_symtab ||
5651         (SvTYPE(obj) == SVt_PVGV &&
5652             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5653              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5654              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5655     {
5656         mg->mg_obj = obj;
5657     }
5658     else {
5659         mg->mg_obj = SvREFCNT_inc_simple(obj);
5660         mg->mg_flags |= MGf_REFCOUNTED;
5661     }
5662
5663     /* Normal self-ties simply pass a null object, and instead of
5664        using mg_obj directly, use the SvTIED_obj macro to produce a
5665        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5666        with an RV obj pointing to the glob containing the PVIO.  In
5667        this case, to avoid a reference loop, we need to weaken the
5668        reference.
5669     */
5670
5671     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5672         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5673     {
5674       sv_rvweaken(obj);
5675     }
5676
5677     mg->mg_type = how;
5678     mg->mg_len = namlen;
5679     if (name) {
5680         if (namlen > 0)
5681             mg->mg_ptr = savepvn(name, namlen);
5682         else if (namlen == HEf_SVKEY) {
5683             /* Yes, this is casting away const. This is only for the case of
5684                HEf_SVKEY. I think we need to document this aberation of the
5685                constness of the API, rather than making name non-const, as
5686                that change propagating outwards a long way.  */
5687             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5688         } else
5689             mg->mg_ptr = (char *) name;
5690     }
5691     mg->mg_virtual = (MGVTBL *) vtable;
5692
5693     mg_magical(sv);
5694     return mg;
5695 }
5696
5697 MAGIC *
5698 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5699 {
5700     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5701     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5702         /* This sv is only a delegate.  //g magic must be attached to
5703            its target. */
5704         vivify_defelem(sv);
5705         sv = LvTARG(sv);
5706     }
5707     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5708                        &PL_vtbl_mglob, 0, 0);
5709 }
5710
5711 /*
5712 =for apidoc sv_magic
5713
5714 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5715 necessary, then adds a new magic item of type C<how> to the head of the
5716 magic list.
5717
5718 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5719 handling of the C<name> and C<namlen> arguments.
5720
5721 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5722 to add more than one instance of the same C<how>.
5723
5724 =cut
5725 */
5726
5727 void
5728 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5729              const char *const name, const I32 namlen)
5730 {
5731     const MGVTBL *vtable;
5732     MAGIC* mg;
5733     unsigned int flags;
5734     unsigned int vtable_index;
5735
5736     PERL_ARGS_ASSERT_SV_MAGIC;
5737
5738     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5739         || ((flags = PL_magic_data[how]),
5740             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5741             > magic_vtable_max))
5742         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5743
5744     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5745        Useful for attaching extension internal data to perl vars.
5746        Note that multiple extensions may clash if magical scalars
5747        etc holding private data from one are passed to another. */
5748
5749     vtable = (vtable_index == magic_vtable_max)
5750         ? NULL : PL_magic_vtables + vtable_index;
5751
5752     if (SvREADONLY(sv)) {
5753         if (
5754             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5755            )
5756         {
5757             Perl_croak_no_modify();
5758         }
5759     }
5760     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5761         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5762             /* sv_magic() refuses to add a magic of the same 'how' as an
5763                existing one
5764              */
5765             if (how == PERL_MAGIC_taint)
5766                 mg->mg_len |= 1;
5767             return;
5768         }
5769     }
5770
5771     /* Force pos to be stored as characters, not bytes. */
5772     if (SvMAGICAL(sv) && DO_UTF8(sv)
5773       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5774       && mg->mg_len != -1
5775       && mg->mg_flags & MGf_BYTES) {
5776         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5777                                                SV_CONST_RETURN);
5778         mg->mg_flags &= ~MGf_BYTES;
5779     }
5780
5781     /* Rest of work is done else where */
5782     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5783
5784     switch (how) {
5785     case PERL_MAGIC_taint:
5786         mg->mg_len = 1;
5787         break;
5788     case PERL_MAGIC_ext:
5789     case PERL_MAGIC_dbfile:
5790         SvRMAGICAL_on(sv);
5791         break;
5792     }
5793 }
5794
5795 static int
5796 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5797 {
5798     MAGIC* mg;
5799     MAGIC** mgp;
5800
5801     assert(flags <= 1);
5802
5803     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5804         return 0;
5805     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5806     for (mg = *mgp; mg; mg = *mgp) {
5807         const MGVTBL* const virt = mg->mg_virtual;
5808         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5809             *mgp = mg->mg_moremagic;
5810             if (virt && virt->svt_free)
5811                 virt->svt_free(aTHX_ sv, mg);
5812             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5813                 if (mg->mg_len > 0)
5814                     Safefree(mg->mg_ptr);
5815                 else if (mg->mg_len == HEf_SVKEY)
5816                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5817                 else if (mg->mg_type == PERL_MAGIC_utf8)
5818                     Safefree(mg->mg_ptr);
5819             }
5820             if (mg->mg_flags & MGf_REFCOUNTED)
5821                 SvREFCNT_dec(mg->mg_obj);
5822             Safefree(mg);
5823         }
5824         else
5825             mgp = &mg->mg_moremagic;
5826     }
5827     if (SvMAGIC(sv)) {
5828         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5829             mg_magical(sv);     /*    else fix the flags now */
5830     }
5831     else
5832         SvMAGICAL_off(sv);
5833
5834     return 0;
5835 }
5836
5837 /*
5838 =for apidoc sv_unmagic
5839
5840 Removes all magic of type C<type> from an SV.
5841
5842 =cut
5843 */
5844
5845 int
5846 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5847 {
5848     PERL_ARGS_ASSERT_SV_UNMAGIC;
5849     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5850 }
5851
5852 /*
5853 =for apidoc sv_unmagicext
5854
5855 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5856
5857 =cut
5858 */
5859
5860 int
5861 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5862 {
5863     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5864     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5865 }
5866
5867 /*
5868 =for apidoc sv_rvweaken
5869
5870 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5871 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5872 push a back-reference to this RV onto the array of backreferences
5873 associated with that magic.  If the RV is magical, set magic will be
5874 called after the RV is cleared.  Silently ignores C<undef> and warns
5875 on already-weak references.
5876
5877 =cut
5878 */
5879
5880 SV *
5881 Perl_sv_rvweaken(pTHX_ SV *const sv)
5882 {
5883     SV *tsv;
5884
5885     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5886
5887     if (!SvOK(sv))  /* let undefs pass */
5888         return sv;
5889     if (!SvROK(sv))
5890         Perl_croak(aTHX_ "Can't weaken a nonreference");
5891     else if (SvWEAKREF(sv)) {
5892         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5893         return sv;
5894     }
5895     else if (SvREADONLY(sv)) croak_no_modify();
5896     tsv = SvRV(sv);
5897     Perl_sv_add_backref(aTHX_ tsv, sv);
5898     SvWEAKREF_on(sv);
5899     SvREFCNT_dec_NN(tsv);
5900     return sv;
5901 }
5902
5903 /*
5904 =for apidoc sv_rvunweaken
5905
5906 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5907 the backreference to this RV from the array of backreferences
5908 associated with the target SV, increment the refcount of the target.
5909 Silently ignores C<undef> and warns on non-weak references.
5910
5911 =cut
5912 */
5913
5914 SV *
5915 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5916 {
5917     SV *tsv;
5918
5919     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5920
5921     if (!SvOK(sv)) /* let undefs pass */
5922         return sv;
5923     if (!SvROK(sv))
5924         Perl_croak(aTHX_ "Can't unweaken a nonreference");
5925     else if (!SvWEAKREF(sv)) {
5926         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
5927         return sv;
5928     }
5929     else if (SvREADONLY(sv)) croak_no_modify();
5930
5931     tsv = SvRV(sv);
5932     SvWEAKREF_off(sv);
5933     SvROK_on(sv);
5934     SvREFCNT_inc_NN(tsv);
5935     Perl_sv_del_backref(aTHX_ tsv, sv);
5936     return sv;
5937 }
5938
5939 /*
5940 =for apidoc sv_get_backrefs
5941
5942 If C<sv> is the target of a weak reference then it returns the back
5943 references structure associated with the sv; otherwise return C<NULL>.
5944
5945 When returning a non-null result the type of the return is relevant. If it
5946 is an AV then the elements of the AV are the weak reference RVs which
5947 point at this item. If it is any other type then the item itself is the
5948 weak reference.
5949
5950 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5951 C<Perl_sv_kill_backrefs()>
5952
5953 =cut
5954 */
5955
5956 SV *
5957 Perl_sv_get_backrefs(SV *const sv)
5958 {
5959     SV *backrefs= NULL;
5960
5961     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5962
5963     /* find slot to store array or singleton backref */
5964
5965     if (SvTYPE(sv) == SVt_PVHV) {
5966         if (SvOOK(sv)) {
5967             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5968             backrefs = (SV *)iter->xhv_backreferences;
5969         }
5970     } else if (SvMAGICAL(sv)) {
5971         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5972         if (mg)
5973             backrefs = mg->mg_obj;
5974     }
5975     return backrefs;
5976 }
5977
5978 /* Give tsv backref magic if it hasn't already got it, then push a
5979  * back-reference to sv onto the array associated with the backref magic.
5980  *
5981  * As an optimisation, if there's only one backref and it's not an AV,
5982  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5983  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5984  * active.)
5985  */
5986
5987 /* A discussion about the backreferences array and its refcount:
5988  *
5989  * The AV holding the backreferences is pointed to either as the mg_obj of
5990  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5991  * xhv_backreferences field. The array is created with a refcount
5992  * of 2. This means that if during global destruction the array gets
5993  * picked on before its parent to have its refcount decremented by the
5994  * random zapper, it won't actually be freed, meaning it's still there for
5995  * when its parent gets freed.
5996  *
5997  * When the parent SV is freed, the extra ref is killed by
5998  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5999  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6000  *
6001  * When a single backref SV is stored directly, it is not reference
6002  * counted.
6003  */
6004
6005 void
6006 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6007 {
6008     SV **svp;
6009     AV *av = NULL;
6010     MAGIC *mg = NULL;
6011
6012     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6013
6014     /* find slot to store array or singleton backref */
6015
6016     if (SvTYPE(tsv) == SVt_PVHV) {
6017         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6018     } else {
6019         if (SvMAGICAL(tsv))
6020             mg = mg_find(tsv, PERL_MAGIC_backref);
6021         if (!mg)
6022             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6023         svp = &(mg->mg_obj);
6024     }
6025
6026     /* create or retrieve the array */
6027
6028     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6029         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6030     ) {
6031         /* create array */
6032         if (mg)
6033             mg->mg_flags |= MGf_REFCOUNTED;
6034         av = newAV();
6035         AvREAL_off(av);
6036         SvREFCNT_inc_simple_void_NN(av);
6037         /* av now has a refcnt of 2; see discussion above */
6038         av_extend(av, *svp ? 2 : 1);
6039         if (*svp) {
6040             /* move single existing backref to the array */
6041             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6042         }
6043         *svp = (SV*)av;
6044     }
6045     else {
6046         av = MUTABLE_AV(*svp);
6047         if (!av) {
6048             /* optimisation: store single backref directly in HvAUX or mg_obj */
6049             *svp = sv;
6050             return;
6051         }
6052         assert(SvTYPE(av) == SVt_PVAV);
6053         if (AvFILLp(av) >= AvMAX(av)) {
6054             av_extend(av, AvFILLp(av)+1);
6055         }
6056     }
6057     /* push new backref */
6058     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6059 }
6060
6061 /* delete a back-reference to ourselves from the backref magic associated
6062  * with the SV we point to.
6063  */
6064
6065 void
6066 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6067 {
6068     SV **svp = NULL;
6069
6070     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6071
6072     if (SvTYPE(tsv) == SVt_PVHV) {
6073         if (SvOOK(tsv))
6074             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6075     }
6076     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6077         /* It's possible for the the last (strong) reference to tsv to have
6078            become freed *before* the last thing holding a weak reference.
6079            If both survive longer than the backreferences array, then when
6080            the referent's reference count drops to 0 and it is freed, it's
6081            not able to chase the backreferences, so they aren't NULLed.
6082
6083            For example, a CV holds a weak reference to its stash. If both the
6084            CV and the stash survive longer than the backreferences array,
6085            and the CV gets picked for the SvBREAK() treatment first,
6086            *and* it turns out that the stash is only being kept alive because
6087            of an our variable in the pad of the CV, then midway during CV
6088            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6089            It ends up pointing to the freed HV. Hence it's chased in here, and
6090            if this block wasn't here, it would hit the !svp panic just below.
6091
6092            I don't believe that "better" destruction ordering is going to help
6093            here - during global destruction there's always going to be the
6094            chance that something goes out of order. We've tried to make it
6095            foolproof before, and it only resulted in evolutionary pressure on
6096            fools. Which made us look foolish for our hubris. :-(
6097         */
6098         return;
6099     }
6100     else {
6101         MAGIC *const mg
6102             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6103         svp =  mg ? &(mg->mg_obj) : NULL;
6104     }
6105
6106     if (!svp)
6107         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6108     if (!*svp) {
6109         /* It's possible that sv is being freed recursively part way through the
6110            freeing of tsv. If this happens, the backreferences array of tsv has
6111            already been freed, and so svp will be NULL. If this is the case,
6112            we should not panic. Instead, nothing needs doing, so return.  */
6113         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6114             return;
6115         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6116                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6117     }
6118
6119     if (SvTYPE(*svp) == SVt_PVAV) {
6120 #ifdef DEBUGGING
6121         int count = 1;
6122 #endif
6123         AV * const av = (AV*)*svp;
6124         SSize_t fill;
6125         assert(!SvIS_FREED(av));
6126         fill = AvFILLp(av);
6127         assert(fill > -1);
6128         svp = AvARRAY(av);
6129         /* for an SV with N weak references to it, if all those
6130          * weak refs are deleted, then sv_del_backref will be called
6131          * N times and O(N^2) compares will be done within the backref
6132          * array. To ameliorate this potential slowness, we:
6133          * 1) make sure this code is as tight as possible;
6134          * 2) when looking for SV, look for it at both the head and tail of the
6135          *    array first before searching the rest, since some create/destroy
6136          *    patterns will cause the backrefs to be freed in order.
6137          */
6138         if (*svp == sv) {
6139             AvARRAY(av)++;
6140             AvMAX(av)--;
6141         }
6142         else {
6143             SV **p = &svp[fill];
6144             SV *const topsv = *p;
6145             if (topsv != sv) {
6146 #ifdef DEBUGGING
6147                 count = 0;
6148 #endif
6149                 while (--p > svp) {
6150                     if (*p == sv) {
6151                         /* We weren't the last entry.
6152                            An unordered list has this property that you
6153                            can take the last element off the end to fill
6154                            the hole, and it's still an unordered list :-)
6155                         */
6156                         *p = topsv;
6157 #ifdef DEBUGGING
6158                         count++;
6159 #else
6160                         break; /* should only be one */
6161 #endif
6162                     }
6163                 }
6164             }
6165         }
6166         assert(count ==1);
6167         AvFILLp(av) = fill-1;
6168     }
6169     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6170         /* freed AV; skip */
6171     }
6172     else {
6173         /* optimisation: only a single backref, stored directly */
6174         if (*svp != sv)
6175             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6176                        (void*)*svp, (void*)sv);
6177         *svp = NULL;
6178     }
6179
6180 }
6181
6182 void
6183 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6184 {
6185     SV **svp;
6186     SV **last;
6187     bool is_array;
6188
6189     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6190
6191     if (!av)
6192         return;
6193
6194     /* after multiple passes through Perl_sv_clean_all() for a thingy
6195      * that has badly leaked, the backref array may have gotten freed,
6196      * since we only protect it against 1 round of cleanup */
6197     if (SvIS_FREED(av)) {
6198         if (PL_in_clean_all) /* All is fair */
6199             return;
6200         Perl_croak(aTHX_
6201                    "panic: magic_killbackrefs (freed backref AV/SV)");
6202     }
6203
6204
6205     is_array = (SvTYPE(av) == SVt_PVAV);
6206     if (is_array) {
6207         assert(!SvIS_FREED(av));
6208         svp = AvARRAY(av);
6209         if (svp)
6210             last = svp + AvFILLp(av);
6211     }
6212     else {
6213         /* optimisation: only a single backref, stored directly */
6214         svp = (SV**)&av;
6215         last = svp;
6216     }
6217
6218     if (svp) {
6219         while (svp <= last) {
6220             if (*svp) {
6221                 SV *const referrer = *svp;
6222                 if (SvWEAKREF(referrer)) {
6223                     /* XXX Should we check that it hasn't changed? */
6224                     assert(SvROK(referrer));
6225                     SvRV_set(referrer, 0);
6226                     SvOK_off(referrer);
6227                     SvWEAKREF_off(referrer);
6228                     SvSETMAGIC(referrer);
6229                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6230                            SvTYPE(referrer) == SVt_PVLV) {
6231                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6232                     /* You lookin' at me?  */
6233                     assert(GvSTASH(referrer));
6234                     assert(GvSTASH(referrer) == (const HV *)sv);
6235                     GvSTASH(referrer) = 0;
6236                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6237                            SvTYPE(referrer) == SVt_PVFM) {
6238                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6239                         /* You lookin' at me?  */
6240                         assert(CvSTASH(referrer));
6241                         assert(CvSTASH(referrer) == (const HV *)sv);
6242                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6243                     }
6244                     else {
6245                         assert(SvTYPE(sv) == SVt_PVGV);
6246                         /* You lookin' at me?  */
6247                         assert(CvGV(referrer));
6248                         assert(CvGV(referrer) == (const GV *)sv);
6249                         anonymise_cv_maybe(MUTABLE_GV(sv),
6250                                                 MUTABLE_CV(referrer));
6251                     }
6252
6253                 } else {
6254                     Perl_croak(aTHX_
6255                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6256                                (UV)SvFLAGS(referrer));
6257                 }
6258
6259                 if (is_array)
6260                     *svp = NULL;
6261             }
6262             svp++;
6263         }
6264     }
6265     if (is_array) {
6266         AvFILLp(av) = -1;
6267         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6268     }
6269     return;
6270 }
6271
6272 /*
6273 =for apidoc sv_insert
6274
6275 Inserts a string at the specified offset/length within the SV.  Similar to
6276 the Perl C<substr()> function.  Handles get magic.
6277
6278 =for apidoc sv_insert_flags
6279
6280 Same as C<sv_insert>, but the extra C<flags> are passed to the
6281 C<SvPV_force_flags> that applies to C<bigstr>.
6282
6283 =cut
6284 */
6285
6286 void
6287 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6288 {
6289     char *big;
6290     char *mid;
6291     char *midend;
6292     char *bigend;
6293     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6294     STRLEN curlen;
6295
6296     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6297
6298     SvPV_force_flags(bigstr, curlen, flags);
6299     (void)SvPOK_only_UTF8(bigstr);
6300
6301     if (little >= SvPVX(bigstr) &&
6302         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6303         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6304            or little...little+littlelen might overlap offset...offset+len we make a copy
6305         */
6306         little = savepvn(little, littlelen);
6307         SAVEFREEPV(little);
6308     }
6309
6310     if (offset + len > curlen) {
6311         SvGROW(bigstr, offset+len+1);
6312         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6313         SvCUR_set(bigstr, offset+len);
6314     }
6315
6316     SvTAINT(bigstr);
6317     i = littlelen - len;
6318     if (i > 0) {                        /* string might grow */
6319         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6320         mid = big + offset + len;
6321         midend = bigend = big + SvCUR(bigstr);
6322         bigend += i;
6323         *bigend = '\0';
6324         while (midend > mid)            /* shove everything down */
6325             *--bigend = *--midend;
6326         Move(little,big+offset,littlelen,char);
6327         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6328         SvSETMAGIC(bigstr);
6329         return;
6330     }
6331     else if (i == 0) {
6332         Move(little,SvPVX(bigstr)+offset,len,char);
6333         SvSETMAGIC(bigstr);
6334         return;
6335     }
6336
6337     big = SvPVX(bigstr);
6338     mid = big + offset;
6339     midend = mid + len;
6340     bigend = big + SvCUR(bigstr);
6341
6342     if (midend > bigend)
6343         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6344                    midend, bigend);
6345
6346     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6347         if (littlelen) {
6348             Move(little, mid, littlelen,char);
6349             mid += littlelen;
6350         }
6351         i = bigend - midend;
6352         if (i > 0) {
6353             Move(midend, mid, i,char);
6354             mid += i;
6355         }
6356         *mid = '\0';
6357         SvCUR_set(bigstr, mid - big);
6358     }
6359     else if ((i = mid - big)) { /* faster from front */
6360         midend -= littlelen;
6361         mid = midend;
6362         Move(big, midend - i, i, char);
6363         sv_chop(bigstr,midend-i);
6364         if (littlelen)
6365             Move(little, mid, littlelen,char);
6366     }
6367     else if (littlelen) {
6368         midend -= littlelen;
6369         sv_chop(bigstr,midend);
6370         Move(little,midend,littlelen,char);
6371     }
6372     else {
6373         sv_chop(bigstr,midend);
6374     }
6375     SvSETMAGIC(bigstr);
6376 }
6377
6378 /*
6379 =for apidoc sv_replace
6380
6381 Make the first argument a copy of the second, then delete the original.
6382 The target SV physically takes over ownership of the body of the source SV
6383 and inherits its flags; however, the target keeps any magic it owns,
6384 and any magic in the source is discarded.
6385 Note that this is a rather specialist SV copying operation; most of the
6386 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6387
6388 =cut
6389 */
6390
6391 void
6392 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6393 {
6394     const U32 refcnt = SvREFCNT(sv);
6395
6396     PERL_ARGS_ASSERT_SV_REPLACE;
6397
6398     SV_CHECK_THINKFIRST_COW_DROP(sv);
6399     if (SvREFCNT(nsv) != 1) {
6400         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6401                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6402     }
6403     if (SvMAGICAL(sv)) {
6404         if (SvMAGICAL(nsv))
6405             mg_free(nsv);
6406         else
6407             sv_upgrade(nsv, SVt_PVMG);
6408         SvMAGIC_set(nsv, SvMAGIC(sv));
6409         SvFLAGS(nsv) |= SvMAGICAL(sv);
6410         SvMAGICAL_off(sv);
6411         SvMAGIC_set(sv, NULL);
6412     }
6413     SvREFCNT(sv) = 0;
6414     sv_clear(sv);
6415     assert(!SvREFCNT(sv));
6416 #ifdef DEBUG_LEAKING_SCALARS
6417     sv->sv_flags  = nsv->sv_flags;
6418     sv->sv_any    = nsv->sv_any;
6419     sv->sv_refcnt = nsv->sv_refcnt;
6420     sv->sv_u      = nsv->sv_u;
6421 #else
6422     StructCopy(nsv,sv,SV);
6423 #endif
6424     if(SvTYPE(sv) == SVt_IV) {
6425         SET_SVANY_FOR_BODYLESS_IV(sv);
6426     }
6427         
6428
6429     SvREFCNT(sv) = refcnt;
6430     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6431     SvREFCNT(nsv) = 0;
6432     del_SV(nsv);
6433 }
6434
6435 /* We're about to free a GV which has a CV that refers back to us.
6436  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6437  * field) */
6438
6439 STATIC void
6440 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6441 {
6442     SV *gvname;
6443     GV *anongv;
6444
6445     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6446
6447     /* be assertive! */
6448     assert(SvREFCNT(gv) == 0);
6449     assert(isGV(gv) && isGV_with_GP(gv));
6450     assert(GvGP(gv));
6451     assert(!CvANON(cv));
6452     assert(CvGV(cv) == gv);
6453     assert(!CvNAMED(cv));
6454
6455     /* will the CV shortly be freed by gp_free() ? */
6456     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6457         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6458         return;
6459     }
6460
6461     /* if not, anonymise: */
6462     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6463                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6464                     : newSVpvn_flags( "__ANON__", 8, 0 );
6465     sv_catpvs(gvname, "::__ANON__");
6466     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6467     SvREFCNT_dec_NN(gvname);
6468
6469     CvANON_on(cv);
6470     CvCVGV_RC_on(cv);
6471     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6472 }
6473
6474
6475 /*
6476 =for apidoc sv_clear
6477
6478 Clear an SV: call any destructors, free up any memory used by the body,
6479 and free the body itself.  The SV's head is I<not> freed, although
6480 its type is set to all 1's so that it won't inadvertently be assumed
6481 to be live during global destruction etc.
6482 This function should only be called when C<REFCNT> is zero.  Most of the time
6483 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6484 instead.
6485
6486 =cut
6487 */
6488
6489 void
6490 Perl_sv_clear(pTHX_ SV *const orig_sv)
6491 {
6492     dVAR;
6493     HV *stash;
6494     U32 type;
6495     const struct body_details *sv_type_details;
6496     SV* iter_sv = NULL;
6497     SV* next_sv = NULL;
6498     SV *sv = orig_sv;
6499     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6500                               Not strictly necessary */
6501
6502     PERL_ARGS_ASSERT_SV_CLEAR;
6503
6504     /* within this loop, sv is the SV currently being freed, and
6505      * iter_sv is the most recent AV or whatever that's being iterated
6506      * over to provide more SVs */
6507
6508     while (sv) {
6509
6510         type = SvTYPE(sv);
6511
6512         assert(SvREFCNT(sv) == 0);
6513         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6514
6515         if (type <= SVt_IV) {
6516             /* See the comment in sv.h about the collusion between this
6517              * early return and the overloading of the NULL slots in the
6518              * size table.  */
6519             if (SvROK(sv))
6520                 goto free_rv;
6521             SvFLAGS(sv) &= SVf_BREAK;
6522             SvFLAGS(sv) |= SVTYPEMASK;
6523             goto free_head;
6524         }
6525
6526         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6527            for another purpose  */
6528         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6529
6530         if (type >= SVt_PVMG) {
6531             if (SvOBJECT(sv)) {
6532                 if (!curse(sv, 1)) goto get_next_sv;
6533                 type = SvTYPE(sv); /* destructor may have changed it */
6534             }
6535             /* Free back-references before magic, in case the magic calls
6536              * Perl code that has weak references to sv. */
6537             if (type == SVt_PVHV) {
6538                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6539                 if (SvMAGIC(sv))
6540                     mg_free(sv);
6541             }
6542             else if (SvMAGIC(sv)) {
6543                 /* Free back-references before other types of magic. */
6544                 sv_unmagic(sv, PERL_MAGIC_backref);
6545                 mg_free(sv);
6546             }
6547             SvMAGICAL_off(sv);
6548         }
6549         switch (type) {
6550             /* case SVt_INVLIST: */
6551         case SVt_PVIO:
6552             if (IoIFP(sv) &&
6553                 IoIFP(sv) != PerlIO_stdin() &&
6554                 IoIFP(sv) != PerlIO_stdout() &&
6555                 IoIFP(sv) != PerlIO_stderr() &&
6556                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6557             {
6558                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6559                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6560                           IoTYPE(sv) == IoTYPE_RDWR   ||
6561                           IoTYPE(sv) == IoTYPE_APPEND));
6562             }
6563             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6564                 PerlDir_close(IoDIRP(sv));
6565             IoDIRP(sv) = (DIR*)NULL;
6566             Safefree(IoTOP_NAME(sv));
6567             Safefree(IoFMT_NAME(sv));
6568             Safefree(IoBOTTOM_NAME(sv));
6569             if ((const GV *)sv == PL_statgv)
6570                 PL_statgv = NULL;
6571             goto freescalar;
6572         case SVt_REGEXP:
6573             /* FIXME for plugins */
6574             pregfree2((REGEXP*) sv);
6575             goto freescalar;
6576         case SVt_PVCV:
6577         case SVt_PVFM:
6578             cv_undef(MUTABLE_CV(sv));
6579             /* If we're in a stash, we don't own a reference to it.
6580              * However it does have a back reference to us, which needs to
6581              * be cleared.  */
6582             if ((stash = CvSTASH(sv)))
6583                 sv_del_backref(MUTABLE_SV(stash), sv);
6584             goto freescalar;
6585         case SVt_PVHV:
6586             if (PL_last_swash_hv == (const HV *)sv) {
6587                 PL_last_swash_hv = NULL;
6588             }
6589             if (HvTOTALKEYS((HV*)sv) > 0) {
6590                 const HEK *hek;
6591                 /* this statement should match the one at the beginning of
6592                  * hv_undef_flags() */
6593                 if (   PL_phase != PERL_PHASE_DESTRUCT
6594                     && (hek = HvNAME_HEK((HV*)sv)))
6595                 {
6596                     if (PL_stashcache) {
6597                         DEBUG_o(Perl_deb(aTHX_
6598                             "sv_clear clearing PL_stashcache for '%" HEKf
6599                             "'\n",
6600                              HEKfARG(hek)));
6601                         (void)hv_deletehek(PL_stashcache,
6602                                            hek, G_DISCARD);
6603                     }
6604                     hv_name_set((HV*)sv, NULL, 0, 0);
6605                 }
6606
6607                 /* save old iter_sv in unused SvSTASH field */
6608                 assert(!SvOBJECT(sv));
6609                 SvSTASH(sv) = (HV*)iter_sv;
6610                 iter_sv = sv;
6611
6612                 /* save old hash_index in unused SvMAGIC field */
6613                 assert(!SvMAGICAL(sv));
6614                 assert(!SvMAGIC(sv));
6615                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6616                 hash_index = 0;
6617
6618                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6619                 goto get_next_sv; /* process this new sv */
6620             }
6621             /* free empty hash */
6622             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6623             assert(!HvARRAY((HV*)sv));
6624             break;
6625         case SVt_PVAV:
6626             {
6627                 AV* av = MUTABLE_AV(sv);
6628                 if (PL_comppad == av) {
6629                     PL_comppad = NULL;
6630                     PL_curpad = NULL;
6631                 }
6632                 if (AvREAL(av) && AvFILLp(av) > -1) {
6633                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6634                     /* save old iter_sv in top-most slot of AV,
6635                      * and pray that it doesn't get wiped in the meantime */
6636                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6637                     iter_sv = sv;
6638                     goto get_next_sv; /* process this new sv */
6639                 }
6640                 Safefree(AvALLOC(av));
6641             }
6642
6643             break;
6644         case SVt_PVLV:
6645             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6646                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6647                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6648                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6649             }
6650             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6651                 SvREFCNT_dec(LvTARG(sv));
6652             if (isREGEXP(sv)) {
6653                 /* SvLEN points to a regex body. Free the body, then
6654                  * set SvLEN to whatever value was in the now-freed
6655                  * regex body. The PVX buffer is shared by multiple re's
6656                  * and only freed once, by the re whose len in non-null */
6657                 STRLEN len = ReANY(sv)->xpv_len;
6658                 pregfree2((REGEXP*) sv);
6659                 SvLEN_set((sv), len);
6660                 goto freescalar;
6661             }
6662             /* FALLTHROUGH */
6663         case SVt_PVGV:
6664             if (isGV_with_GP(sv)) {
6665                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6666                    && HvENAME_get(stash))
6667                     mro_method_changed_in(stash);
6668                 gp_free(MUTABLE_GV(sv));
6669                 if (GvNAME_HEK(sv))
6670                     unshare_hek(GvNAME_HEK(sv));
6671                 /* If we're in a stash, we don't own a reference to it.
6672                  * However it does have a back reference to us, which
6673                  * needs to be cleared.  */
6674                 if ((stash = GvSTASH(sv)))
6675                         sv_del_backref(MUTABLE_SV(stash), sv);
6676             }
6677             /* FIXME. There are probably more unreferenced pointers to SVs
6678              * in the interpreter struct that we should check and tidy in
6679              * a similar fashion to this:  */
6680             /* See also S_sv_unglob, which does the same thing. */
6681             if ((const GV *)sv == PL_last_in_gv)
6682                 PL_last_in_gv = NULL;
6683             else if ((const GV *)sv == PL_statgv)
6684                 PL_statgv = NULL;
6685             else if ((const GV *)sv == PL_stderrgv)
6686                 PL_stderrgv = NULL;
6687             /* FALLTHROUGH */
6688         case SVt_PVMG:
6689         case SVt_PVNV:
6690         case SVt_PVIV:
6691         case SVt_INVLIST:
6692         case SVt_PV:
6693           freescalar:
6694             /* Don't bother with SvOOK_off(sv); as we're only going to
6695              * free it.  */
6696             if (SvOOK(sv)) {
6697                 STRLEN offset;
6698                 SvOOK_offset(sv, offset);
6699                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6700                 /* Don't even bother with turning off the OOK flag.  */
6701             }
6702             if (SvROK(sv)) {
6703             free_rv:
6704                 {
6705                     SV * const target = SvRV(sv);
6706                     if (SvWEAKREF(sv))
6707                         sv_del_backref(target, sv);
6708                     else
6709                         next_sv = target;
6710                 }
6711             }
6712 #ifdef PERL_ANY_COW
6713             else if (SvPVX_const(sv)
6714                      && !(SvTYPE(sv) == SVt_PVIO
6715                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6716             {
6717                 if (SvIsCOW(sv)) {
6718 #ifdef DEBUGGING
6719                     if (DEBUG_C_TEST) {
6720                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6721                         sv_dump(sv);
6722                     }
6723 #endif
6724                     if (SvLEN(sv)) {
6725                         if (CowREFCNT(sv)) {
6726                             sv_buf_to_rw(sv);
6727                             CowREFCNT(sv)--;
6728                             sv_buf_to_ro(sv);
6729                             SvLEN_set(sv, 0);
6730                         }
6731                     } else {
6732                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6733                     }
6734
6735                 }
6736                 if (SvLEN(sv)) {
6737                     Safefree(SvPVX_mutable(sv));
6738                 }
6739             }
6740 #else
6741             else if (SvPVX_const(sv) && SvLEN(sv)
6742                      && !(SvTYPE(sv) == SVt_PVIO
6743                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6744                 Safefree(SvPVX_mutable(sv));
6745             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6746                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6747             }
6748 #endif
6749             break;
6750         case SVt_NV:
6751             break;
6752         }
6753
6754       free_body:
6755
6756         SvFLAGS(sv) &= SVf_BREAK;
6757         SvFLAGS(sv) |= SVTYPEMASK;
6758
6759         sv_type_details = bodies_by_type + type;
6760         if (sv_type_details->arena) {
6761             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6762                      &PL_body_roots[type]);
6763         }
6764         else if (sv_type_details->body_size) {
6765             safefree(SvANY(sv));
6766         }
6767
6768       free_head:
6769         /* caller is responsible for freeing the head of the original sv */
6770         if (sv != orig_sv && !SvREFCNT(sv))
6771             del_SV(sv);
6772
6773         /* grab and free next sv, if any */
6774       get_next_sv:
6775         while (1) {
6776             sv = NULL;
6777             if (next_sv) {
6778                 sv = next_sv;
6779                 next_sv = NULL;
6780             }
6781             else if (!iter_sv) {
6782                 break;
6783             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6784                 AV *const av = (AV*)iter_sv;
6785                 if (AvFILLp(av) > -1) {
6786                     sv = AvARRAY(av)[AvFILLp(av)--];
6787                 }
6788                 else { /* no more elements of current AV to free */
6789                     sv = iter_sv;
6790                     type = SvTYPE(sv);
6791                     /* restore previous value, squirrelled away */
6792                     iter_sv = AvARRAY(av)[AvMAX(av)];
6793                     Safefree(AvALLOC(av));
6794                     goto free_body;
6795                 }
6796             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6797                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6798                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6799                     /* no more elements of current HV to free */
6800                     sv = iter_sv;
6801                     type = SvTYPE(sv);
6802                     /* Restore previous values of iter_sv and hash_index,
6803                      * squirrelled away */
6804                     assert(!SvOBJECT(sv));
6805                     iter_sv = (SV*)SvSTASH(sv);
6806                     assert(!SvMAGICAL(sv));
6807                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6808 #ifdef DEBUGGING
6809                     /* perl -DA does not like rubbish in SvMAGIC. */
6810                     SvMAGIC_set(sv, 0);
6811 #endif
6812
6813                     /* free any remaining detritus from the hash struct */
6814                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6815                     assert(!HvARRAY((HV*)sv));
6816                     goto free_body;
6817                 }
6818             }
6819
6820             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6821
6822             if (!sv)
6823                 continue;
6824             if (!SvREFCNT(sv)) {
6825                 sv_free(sv);
6826                 continue;
6827             }
6828             if (--(SvREFCNT(sv)))
6829                 continue;
6830 #ifdef DEBUGGING
6831             if (SvTEMP(sv)) {
6832                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6833                          "Attempt to free temp prematurely: SV 0x%" UVxf
6834                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6835                 continue;
6836             }
6837 #endif
6838             if (SvIMMORTAL(sv)) {
6839                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6840                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6841                 continue;
6842             }
6843             break;
6844         } /* while 1 */
6845
6846     } /* while sv */
6847 }
6848
6849 /* This routine curses the sv itself, not the object referenced by sv. So
6850    sv does not have to be ROK. */
6851
6852 static bool
6853 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6854     PERL_ARGS_ASSERT_CURSE;
6855     assert(SvOBJECT(sv));
6856
6857     if (PL_defstash &&  /* Still have a symbol table? */
6858         SvDESTROYABLE(sv))
6859     {
6860         dSP;
6861         HV* stash;
6862         do {
6863           stash = SvSTASH(sv);
6864           assert(SvTYPE(stash) == SVt_PVHV);
6865           if (HvNAME(stash)) {
6866             CV* destructor = NULL;
6867             struct mro_meta *meta;
6868
6869             assert (SvOOK(stash));
6870
6871             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6872                          HvNAME(stash)) );
6873
6874             /* don't make this an initialization above the assert, since it needs
6875                an AUX structure */
6876             meta = HvMROMETA(stash);
6877             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6878                 destructor = meta->destroy;
6879                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6880                              (void *)destructor, HvNAME(stash)) );
6881             }
6882             else {
6883                 bool autoload = FALSE;
6884                 GV *gv =
6885                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6886                 if (gv)
6887                     destructor = GvCV(gv);
6888                 if (!destructor) {
6889                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6890                                          GV_AUTOLOAD_ISMETHOD);
6891                     if (gv)
6892                         destructor = GvCV(gv);
6893                     if (destructor)
6894                         autoload = TRUE;
6895                 }
6896                 /* we don't cache AUTOLOAD for DESTROY, since this code
6897                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6898                    equivalent for XS AUTOLOADs */
6899                 if (!autoload) {
6900                     meta->destroy_gen = PL_sub_generation;
6901                     meta->destroy = destructor;
6902
6903                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6904                                       (void *)destructor, HvNAME(stash)) );
6905                 }
6906                 else {
6907                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6908                                       HvNAME(stash)) );
6909                 }
6910             }
6911             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6912             if (destructor
6913                 /* A constant subroutine can have no side effects, so
6914                    don't bother calling it.  */
6915                 && !CvCONST(destructor)
6916                 /* Don't bother calling an empty destructor or one that
6917                    returns immediately. */
6918                 && (CvISXSUB(destructor)
6919                 || (CvSTART(destructor)
6920                     && (CvSTART(destructor)->op_next->op_type
6921                                         != OP_LEAVESUB)
6922                     && (CvSTART(destructor)->op_next->op_type
6923                                         != OP_PUSHMARK
6924                         || CvSTART(destructor)->op_next->op_next->op_type
6925                                         != OP_RETURN
6926                        )
6927                    ))
6928                )
6929             {
6930                 SV* const tmpref = newRV(sv);
6931                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6932                 ENTER;
6933                 PUSHSTACKi(PERLSI_DESTROY);
6934                 EXTEND(SP, 2);
6935                 PUSHMARK(SP);
6936                 PUSHs(tmpref);
6937                 PUTBACK;
6938                 call_sv(MUTABLE_SV(destructor),
6939                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6940                 POPSTACK;
6941                 SPAGAIN;
6942                 LEAVE;
6943                 if(SvREFCNT(tmpref) < 2) {
6944                     /* tmpref is not kept alive! */
6945                     SvREFCNT(sv)--;
6946                     SvRV_set(tmpref, NULL);
6947                     SvROK_off(tmpref);
6948                 }
6949                 SvREFCNT_dec_NN(tmpref);
6950             }
6951           }
6952         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6953
6954
6955         if (check_refcnt && SvREFCNT(sv)) {
6956             if (PL_in_clean_objs)
6957                 Perl_croak(aTHX_
6958                   "DESTROY created new reference to dead object '%" HEKf "'",
6959                    HEKfARG(HvNAME_HEK(stash)));
6960             /* DESTROY gave object new lease on life */
6961             return FALSE;
6962         }
6963     }
6964
6965     if (SvOBJECT(sv)) {
6966         HV * const stash = SvSTASH(sv);
6967         /* Curse before freeing the stash, as freeing the stash could cause
6968            a recursive call into S_curse. */
6969         SvOBJECT_off(sv);       /* Curse the object. */
6970         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6971         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6972     }
6973     return TRUE;
6974 }
6975
6976 /*
6977 =for apidoc sv_newref
6978
6979 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6980 instead.
6981
6982 =cut
6983 */
6984
6985 SV *
6986 Perl_sv_newref(pTHX_ SV *const sv)
6987 {
6988     PERL_UNUSED_CONTEXT;
6989     if (sv)
6990         (SvREFCNT(sv))++;
6991     return sv;
6992 }
6993
6994 /*
6995 =for apidoc sv_free
6996
6997 Decrement an SV's reference count, and if it drops to zero, call
6998 C<sv_clear> to invoke destructors and free up any memory used by
6999 the body; finally, deallocating the SV's head itself.
7000 Normally called via a wrapper macro C<SvREFCNT_dec>.
7001
7002 =cut
7003 */
7004
7005 void
7006 Perl_sv_free(pTHX_ SV *const sv)
7007 {
7008     SvREFCNT_dec(sv);
7009 }
7010
7011
7012 /* Private helper function for SvREFCNT_dec().
7013  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7014
7015 void
7016 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7017 {
7018     dVAR;
7019
7020     PERL_ARGS_ASSERT_SV_FREE2;
7021
7022     if (LIKELY( rc == 1 )) {
7023         /* normal case */
7024         SvREFCNT(sv) = 0;
7025
7026 #ifdef DEBUGGING
7027         if (SvTEMP(sv)) {
7028             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7029                              "Attempt to free temp prematurely: SV 0x%" UVxf
7030                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7031             return;
7032         }
7033 #endif
7034         if (SvIMMORTAL(sv)) {
7035             /* make sure SvREFCNT(sv)==0 happens very seldom */
7036             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7037             return;
7038         }
7039         sv_clear(sv);
7040         if (! SvREFCNT(sv)) /* may have have been resurrected */
7041             del_SV(sv);
7042         return;
7043     }
7044
7045     /* handle exceptional cases */
7046
7047     assert(rc == 0);
7048
7049     if (SvFLAGS(sv) & SVf_BREAK)
7050         /* this SV's refcnt has been artificially decremented to
7051          * trigger cleanup */
7052         return;
7053     if (PL_in_clean_all) /* All is fair */
7054         return;
7055     if (SvIMMORTAL(sv)) {
7056         /* make sure SvREFCNT(sv)==0 happens very seldom */
7057         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7058         return;
7059     }
7060     if (ckWARN_d(WARN_INTERNAL)) {
7061 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7062         Perl_dump_sv_child(aTHX_ sv);
7063 #else
7064     #ifdef DEBUG_LEAKING_SCALARS
7065         sv_dump(sv);
7066     #endif
7067 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7068         if (PL_warnhook == PERL_WARNHOOK_FATAL
7069             || ckDEAD(packWARN(WARN_INTERNAL))) {
7070             /* Don't let Perl_warner cause us to escape our fate:  */
7071             abort();
7072         }
7073 #endif
7074         /* This may not return:  */
7075         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7076                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7077                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7078 #endif
7079     }
7080 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7081     abort();
7082 #endif
7083
7084 }
7085
7086
7087 /*
7088 =for apidoc sv_len
7089
7090 Returns the length of the string in the SV.  Handles magic and type
7091 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7092 gives raw access to the C<xpv_cur> slot.
7093
7094 =cut
7095 */
7096
7097 STRLEN
7098 Perl_sv_len(pTHX_ SV *const sv)
7099 {
7100     STRLEN len;
7101
7102     if (!sv)
7103         return 0;
7104
7105     (void)SvPV_const(sv, len);
7106     return len;
7107 }
7108
7109 /*
7110 =for apidoc sv_len_utf8
7111
7112 Returns the number of characters in the string in an SV, counting wide
7113 UTF-8 bytes as a single character.  Handles magic and type coercion.
7114
7115 =cut
7116 */
7117
7118 /*
7119  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7120  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7121  * (Note that the mg_len is not the length of the mg_ptr field.
7122  * This allows the cache to store the character length of the string without
7123  * needing to malloc() extra storage to attach to the mg_ptr.)
7124  *
7125  */
7126
7127 STRLEN
7128 Perl_sv_len_utf8(pTHX_ SV *const sv)
7129 {
7130     if (!sv)
7131         return 0;
7132
7133     SvGETMAGIC(sv);
7134     return sv_len_utf8_nomg(sv);
7135 }
7136
7137 STRLEN
7138 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7139 {
7140     STRLEN len;
7141     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7142
7143     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7144
7145     if (PL_utf8cache && SvUTF8(sv)) {
7146             STRLEN ulen;
7147             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7148
7149             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7150                 if (mg->mg_len != -1)
7151                     ulen = mg->mg_len;
7152                 else {
7153                     /* We can use the offset cache for a headstart.
7154                        The longer value is stored in the first pair.  */
7155                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7156
7157                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7158                                                        s + len);
7159                 }
7160                 
7161                 if (PL_utf8cache < 0) {
7162                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7163                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7164                 }
7165             }
7166             else {
7167                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7168                 utf8_mg_len_cache_update(sv, &mg, ulen);
7169             }
7170             return ulen;
7171     }
7172     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7173 }
7174
7175 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7176    offset.  */
7177 static STRLEN
7178 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7179                       STRLEN *const uoffset_p, bool *const at_end)
7180 {
7181     const U8 *s = start;
7182     STRLEN uoffset = *uoffset_p;
7183
7184     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7185
7186     while (s < send && uoffset) {
7187         --uoffset;
7188         s += UTF8SKIP(s);
7189     }
7190     if (s == send) {
7191         *at_end = TRUE;
7192     }
7193     else if (s > send) {
7194         *at_end = TRUE;
7195         /* This is the existing behaviour. Possibly it should be a croak, as
7196            it's actually a bounds error  */
7197         s = send;
7198     }
7199     *uoffset_p -= uoffset;
7200     return s - start;
7201 }
7202
7203 /* Given the length of the string in both bytes and UTF-8 characters, decide
7204    whether to walk forwards or backwards to find the byte corresponding to
7205    the passed in UTF-8 offset.  */
7206 static STRLEN
7207 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7208                     STRLEN uoffset, const STRLEN uend)
7209 {
7210     STRLEN backw = uend - uoffset;
7211
7212     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7213
7214     if (uoffset < 2 * backw) {
7215         /* The assumption is that going forwards is twice the speed of going
7216            forward (that's where the 2 * backw comes from).
7217            (The real figure of course depends on the UTF-8 data.)  */
7218         const U8 *s = start;
7219
7220         while (s < send && uoffset--)
7221             s += UTF8SKIP(s);
7222         assert (s <= send);
7223         if (s > send)
7224             s = send;
7225         return s - start;
7226     }
7227
7228     while (backw--) {
7229         send--;
7230         while (UTF8_IS_CONTINUATION(*send))
7231             send--;
7232     }
7233     return send - start;
7234 }
7235
7236 /* For the string representation of the given scalar, find the byte
7237    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7238    give another position in the string, *before* the sought offset, which
7239    (which is always true, as 0, 0 is a valid pair of positions), which should
7240    help reduce the amount of linear searching.
7241    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7242    will be used to reduce the amount of linear searching. The cache will be
7243    created if necessary, and the found value offered to it for update.  */
7244 static STRLEN
7245 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7246                     const U8 *const send, STRLEN uoffset,
7247                     STRLEN uoffset0, STRLEN boffset0)
7248 {
7249     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7250     bool found = FALSE;
7251     bool at_end = FALSE;
7252
7253     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7254
7255     assert (uoffset >= uoffset0);
7256
7257     if (!uoffset)
7258         return 0;
7259
7260     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7261         && PL_utf8cache
7262         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7263                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7264         if ((*mgp)->mg_ptr) {
7265             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7266             if (cache[0] == uoffset) {
7267                 /* An exact match. */
7268                 return cache[1];
7269             }
7270             if (cache[2] == uoffset) {
7271                 /* An exact match. */
7272                 return cache[3];
7273             }
7274
7275             if (cache[0] < uoffset) {
7276                 /* The cache already knows part of the way.   */
7277                 if (cache[0] > uoffset0) {
7278                     /* The cache knows more than the passed in pair  */
7279                     uoffset0 = cache[0];
7280                     boffset0 = cache[1];
7281                 }
7282                 if ((*mgp)->mg_len != -1) {
7283                     /* And we know the end too.  */
7284                     boffset = boffset0
7285                         + sv_pos_u2b_midway(start + boffset0, send,
7286                                               uoffset - uoffset0,
7287                                               (*mgp)->mg_len - uoffset0);
7288                 } else {
7289                     uoffset -= uoffset0;
7290                     boffset = boffset0
7291                         + sv_pos_u2b_forwards(start + boffset0,
7292                                               send, &uoffset, &at_end);
7293                     uoffset += uoffset0;
7294                 }
7295             }
7296             else if (cache[2] < uoffset) {
7297                 /* We're between the two cache entries.  */
7298                 if (cache[2] > uoffset0) {
7299                     /* and the cache knows more than the passed in pair  */
7300                     uoffset0 = cache[2];
7301                     boffset0 = cache[3];
7302                 }
7303
7304                 boffset = boffset0
7305                     + sv_pos_u2b_midway(start + boffset0,
7306                                           start + cache[1],
7307                                           uoffset - uoffset0,
7308                                           cache[0] - uoffset0);
7309             } else {
7310                 boffset = boffset0
7311                     + sv_pos_u2b_midway(start + boffset0,
7312                                           start + cache[3],
7313                                           uoffset - uoffset0,
7314                                           cache[2] - uoffset0);
7315             }
7316             found = TRUE;
7317         }
7318         else if ((*mgp)->mg_len != -1) {
7319             /* If we can take advantage of a passed in offset, do so.  */
7320             /* In fact, offset0 is either 0, or less than offset, so don't
7321                need to worry about the other possibility.  */
7322             boffset = boffset0
7323                 + sv_pos_u2b_midway(start + boffset0, send,
7324                                       uoffset - uoffset0,
7325                                       (*mgp)->mg_len - uoffset0);
7326             found = TRUE;
7327         }
7328     }
7329
7330     if (!found || PL_utf8cache < 0) {
7331         STRLEN real_boffset;
7332         uoffset -= uoffset0;
7333         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7334                                                       send, &uoffset, &at_end);
7335         uoffset += uoffset0;
7336
7337         if (found && PL_utf8cache < 0)
7338             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7339                                        real_boffset, sv);
7340         boffset = real_boffset;
7341     }
7342
7343     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7344         if (at_end)
7345             utf8_mg_len_cache_update(sv, mgp, uoffset);
7346         else
7347             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7348     }
7349     return boffset;
7350 }
7351
7352
7353 /*
7354 =for apidoc sv_pos_u2b_flags
7355
7356 Converts the offset from a count of UTF-8 chars from
7357 the start of the string, to a count of the equivalent number of bytes; if
7358 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7359 C<offset>, rather than from the start
7360 of the string.  Handles type coercion.
7361 C<flags> is passed to C<SvPV_flags>, and usually should be
7362 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7363
7364 =cut
7365 */
7366
7367 /*
7368  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7369  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7370  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7371  *
7372  */
7373
7374 STRLEN
7375 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7376                       U32 flags)
7377 {
7378     const U8 *start;
7379     STRLEN len;
7380     STRLEN boffset;
7381
7382     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7383
7384     start = (U8*)SvPV_flags(sv, len, flags);
7385     if (len) {
7386         const U8 * const send = start + len;
7387         MAGIC *mg = NULL;
7388         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7389
7390         if (lenp
7391             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7392                         is 0, and *lenp is already set to that.  */) {
7393             /* Convert the relative offset to absolute.  */
7394             const STRLEN uoffset2 = uoffset + *lenp;
7395             const STRLEN boffset2
7396                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7397                                       uoffset, boffset) - boffset;
7398
7399             *lenp = boffset2;
7400         }
7401     } else {
7402         if (lenp)
7403             *lenp = 0;
7404         boffset = 0;
7405     }
7406
7407     return boffset;
7408 }
7409
7410 /*
7411 =for apidoc sv_pos_u2b
7412
7413 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7414 the start of the string, to a count of the equivalent number of bytes; if
7415 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7416 the offset, rather than from the start of the string.  Handles magic and
7417 type coercion.
7418
7419 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7420 than 2Gb.
7421
7422 =cut
7423 */
7424
7425 /*
7426  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7427  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7428  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7429  *
7430  */
7431
7432 /* This function is subject to size and sign problems */
7433
7434 void
7435 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7436 {
7437     PERL_ARGS_ASSERT_SV_POS_U2B;
7438
7439     if (lenp) {
7440         STRLEN ulen = (STRLEN)*lenp;
7441         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7442                                          SV_GMAGIC|SV_CONST_RETURN);
7443         *lenp = (I32)ulen;
7444     } else {
7445         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7446                                          SV_GMAGIC|SV_CONST_RETURN);
7447     }
7448 }
7449
7450 static void
7451 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7452                            const STRLEN ulen)
7453 {
7454     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7455     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7456         return;
7457
7458     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7459                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7460         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7461     }
7462     assert(*mgp);
7463
7464     (*mgp)->mg_len = ulen;
7465 }
7466
7467 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7468    byte length pairing. The (byte) length of the total SV is passed in too,
7469    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7470    may not have updated SvCUR, so we can't rely on reading it directly.
7471
7472    The proffered utf8/byte length pairing isn't used if the cache already has
7473    two pairs, and swapping either for the proffered pair would increase the
7474    RMS of the intervals between known byte offsets.
7475
7476    The cache itself consists of 4 STRLEN values
7477    0: larger UTF-8 offset
7478    1: corresponding byte offset
7479    2: smaller UTF-8 offset
7480    3: corresponding byte offset
7481
7482    Unused cache pairs have the value 0, 0.
7483    Keeping the cache "backwards" means that the invariant of
7484    cache[0] >= cache[2] is maintained even with empty slots, which means that
7485    the code that uses it doesn't need to worry if only 1 entry has actually
7486    been set to non-zero.  It also makes the "position beyond the end of the
7487    cache" logic much simpler, as the first slot is always the one to start
7488    from.   
7489 */
7490 static void
7491 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7492                            const STRLEN utf8, const STRLEN blen)
7493 {
7494     STRLEN *cache;
7495
7496     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7497
7498     if (SvREADONLY(sv))
7499         return;
7500
7501     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7502                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7503         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7504                            0);
7505         (*mgp)->mg_len = -1;
7506     }
7507     assert(*mgp);
7508
7509     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7510         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7511         (*mgp)->mg_ptr = (char *) cache;
7512     }
7513     assert(cache);
7514
7515     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7516         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7517            a pointer.  Note that we no longer cache utf8 offsets on refer-
7518            ences, but this check is still a good idea, for robustness.  */
7519         const U8 *start = (const U8 *) SvPVX_const(sv);
7520         const STRLEN realutf8 = utf8_length(start, start + byte);
7521
7522         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7523                                    sv);
7524     }
7525
7526     /* Cache is held with the later position first, to simplify the code
7527        that deals with unbounded ends.  */
7528        
7529     ASSERT_UTF8_CACHE(cache);
7530     if (cache[1] == 0) {
7531         /* Cache is totally empty  */
7532         cache[0] = utf8;
7533         cache[1] = byte;
7534     } else if (cache[3] == 0) {
7535         if (byte > cache[1]) {
7536             /* New one is larger, so goes first.  */
7537             cache[2] = cache[0];
7538             cache[3] = cache[1];
7539             cache[0] = utf8;
7540             cache[1] = byte;
7541         } else {
7542             cache[2] = utf8;
7543             cache[3] = byte;
7544         }
7545     } else {
7546 /* float casts necessary? XXX */
7547 #define THREEWAY_SQUARE(a,b,c,d) \
7548             ((float)((d) - (c))) * ((float)((d) - (c))) \
7549             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7550                + ((float)((b) - (a))) * ((float)((b) - (a)))
7551
7552         /* Cache has 2 slots in use, and we know three potential pairs.
7553            Keep the two that give the lowest RMS distance. Do the
7554            calculation in bytes simply because we always know the byte
7555            length.  squareroot has the same ordering as the positive value,
7556            so don't bother with the actual square root.  */
7557         if (byte > cache[1]) {
7558             /* New position is after the existing pair of pairs.  */
7559             const float keep_earlier
7560                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7561             const float keep_later
7562                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7563
7564             if (keep_later < keep_earlier) {
7565                 cache[2] = cache[0];
7566                 cache[3] = cache[1];
7567             }
7568             cache[0] = utf8;
7569             cache[1] = byte;
7570         }
7571         else {
7572             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7573             float b, c, keep_earlier;
7574             if (byte > cache[3]) {
7575                 /* New position is between the existing pair of pairs.  */
7576                 b = (float)cache[3];
7577                 c = (float)byte;
7578             } else {
7579                 /* New position is before the existing pair of pairs.  */
7580                 b = (float)byte;
7581                 c = (float)cache[3];
7582             }
7583             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7584             if (byte > cache[3]) {
7585                 if (keep_later < keep_earlier) {
7586                     cache[2] = utf8;
7587                     cache[3] = byte;
7588                 }
7589                 else {
7590                     cache[0] = utf8;
7591                     cache[1] = byte;
7592                 }
7593             }
7594             else {
7595                 if (! (keep_later < keep_earlier)) {
7596                     cache[0] = cache[2];
7597                     cache[1] = cache[3];
7598                 }
7599                 cache[2] = utf8;
7600                 cache[3] = byte;
7601             }
7602         }
7603     }
7604     ASSERT_UTF8_CACHE(cache);
7605 }
7606
7607 /* We already know all of the way, now we may be able to walk back.  The same
7608    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7609    backward is half the speed of walking forward. */
7610 static STRLEN
7611 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7612                     const U8 *end, STRLEN endu)
7613 {
7614     const STRLEN forw = target - s;
7615     STRLEN backw = end - target;
7616
7617     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7618
7619     if (forw < 2 * backw) {
7620         return utf8_length(s, target);
7621     }
7622
7623     while (end > target) {
7624         end--;
7625         while (UTF8_IS_CONTINUATION(*end)) {
7626             end--;
7627         }
7628         endu--;
7629     }
7630     return endu;
7631 }
7632
7633 /*
7634 =for apidoc sv_pos_b2u_flags
7635
7636 Converts C<offset> from a count of bytes from the start of the string, to
7637 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7638 C<flags> is passed to C<SvPV_flags>, and usually should be
7639 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7640
7641 =cut
7642 */
7643
7644 /*
7645  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7646  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7647  * and byte offsets.
7648  *
7649  */
7650 STRLEN
7651 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7652 {
7653     const U8* s;
7654     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7655     STRLEN blen;
7656     MAGIC* mg = NULL;
7657     const U8* send;
7658     bool found = FALSE;
7659
7660     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7661
7662     s = (const U8*)SvPV_flags(sv, blen, flags);
7663
7664     if (blen < offset)
7665         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7666                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7667
7668     send = s + offset;
7669
7670     if (!SvREADONLY(sv)
7671         && PL_utf8cache
7672         && SvTYPE(sv) >= SVt_PVMG
7673         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7674     {
7675         if (mg->mg_ptr) {
7676             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7677             if (cache[1] == offset) {
7678                 /* An exact match. */
7679                 return cache[0];
7680             }
7681             if (cache[3] == offset) {
7682                 /* An exact match. */
7683                 return cache[2];
7684             }
7685
7686             if (cache[1] < offset) {
7687                 /* We already know part of the way. */
7688                 if (mg->mg_len != -1) {
7689                     /* Actually, we know the end too.  */
7690                     len = cache[0]
7691                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7692                                               s + blen, mg->mg_len - cache[0]);
7693                 } else {
7694                     len = cache[0] + utf8_length(s + cache[1], send);
7695                 }
7696             }
7697             else if (cache[3] < offset) {
7698                 /* We're between the two cached pairs, so we do the calculation
7699                    offset by the byte/utf-8 positions for the earlier pair,
7700                    then add the utf-8 characters from the string start to
7701                    there.  */
7702                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7703                                           s + cache[1], cache[0] - cache[2])
7704                     + cache[2];
7705
7706             }
7707             else { /* cache[3] > offset */
7708                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7709                                           cache[2]);
7710
7711             }
7712             ASSERT_UTF8_CACHE(cache);
7713             found = TRUE;
7714         } else if (mg->mg_len != -1) {
7715             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7716             found = TRUE;
7717         }
7718     }
7719     if (!found || PL_utf8cache < 0) {
7720         const STRLEN real_len = utf8_length(s, send);
7721
7722         if (found && PL_utf8cache < 0)
7723             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7724         len = real_len;
7725     }
7726
7727     if (PL_utf8cache) {
7728         if (blen == offset)
7729             utf8_mg_len_cache_update(sv, &mg, len);
7730         else
7731             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7732     }
7733
7734     return len;
7735 }
7736
7737 /*
7738 =for apidoc sv_pos_b2u
7739
7740 Converts the value pointed to by C<offsetp> from a count of bytes from the
7741 start of the string, to a count of the equivalent number of UTF-8 chars.
7742 Handles magic and type coercion.
7743
7744 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7745 longer than 2Gb.
7746
7747 =cut
7748 */
7749
7750 /*
7751  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7752  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7753  * byte offsets.
7754  *
7755  */
7756 void
7757 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7758 {
7759     PERL_ARGS_ASSERT_SV_POS_B2U;
7760
7761     if (!sv)
7762         return;
7763
7764     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7765                                      SV_GMAGIC|SV_CONST_RETURN);
7766 }
7767
7768 static void
7769 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7770                              STRLEN real, SV *const sv)
7771 {
7772     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7773
7774     /* As this is debugging only code, save space by keeping this test here,
7775        rather than inlining it in all the callers.  */
7776     if (from_cache == real)
7777         return;
7778
7779     /* Need to turn the assertions off otherwise we may recurse infinitely
7780        while printing error messages.  */
7781     SAVEI8(PL_utf8cache);
7782     PL_utf8cache = 0;
7783     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7784                func, (UV) from_cache, (UV) real, SVfARG(sv));
7785 }
7786
7787 /*
7788 =for apidoc sv_eq
7789
7790 Returns a boolean indicating whether the strings in the two SVs are
7791 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7792 coerce its args to strings if necessary.
7793
7794 =for apidoc sv_eq_flags
7795
7796 Returns a boolean indicating whether the strings in the two SVs are
7797 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7798 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7799
7800 =cut
7801 */
7802
7803 I32
7804 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7805 {
7806     const char *pv1;
7807     STRLEN cur1;
7808     const char *pv2;
7809     STRLEN cur2;
7810
7811     if (!sv1) {
7812         pv1 = "";
7813         cur1 = 0;
7814     }
7815     else {
7816         /* if pv1 and pv2 are the same, second SvPV_const call may
7817          * invalidate pv1 (if we are handling magic), so we may need to
7818          * make a copy */
7819         if (sv1 == sv2 && flags & SV_GMAGIC
7820          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7821             pv1 = SvPV_const(sv1, cur1);
7822             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7823         }
7824         pv1 = SvPV_flags_const(sv1, cur1, flags);
7825     }
7826
7827     if (!sv2){
7828         pv2 = "";
7829         cur2 = 0;
7830     }
7831     else
7832         pv2 = SvPV_flags_const(sv2, cur2, flags);
7833
7834     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7835         /* Differing utf8ness.  */
7836         if (SvUTF8(sv1)) {
7837                   /* sv1 is the UTF-8 one  */
7838                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7839                                         (const U8*)pv1, cur1) == 0;
7840         }
7841         else {
7842                   /* sv2 is the UTF-8 one  */
7843                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7844                                         (const U8*)pv2, cur2) == 0;
7845         }
7846     }
7847
7848     if (cur1 == cur2)
7849         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7850     else
7851         return 0;
7852 }
7853
7854 /*
7855 =for apidoc sv_cmp
7856
7857 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7858 string in C<sv1> is less than, equal to, or greater than the string in
7859 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7860 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7861
7862 =for apidoc sv_cmp_flags
7863
7864 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7865 string in C<sv1> is less than, equal to, or greater than the string in
7866 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7867 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7868 also C<L</sv_cmp_locale_flags>>.
7869
7870 =cut
7871 */
7872
7873 I32
7874 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7875 {
7876     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7877 }
7878
7879 I32
7880 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7881                   const U32 flags)
7882 {
7883     STRLEN cur1, cur2;
7884     const char *pv1, *pv2;
7885     I32  cmp;
7886     SV *svrecode = NULL;
7887
7888     if (!sv1) {
7889         pv1 = "";
7890         cur1 = 0;
7891     }
7892     else
7893         pv1 = SvPV_flags_const(sv1, cur1, flags);
7894
7895     if (!sv2) {
7896         pv2 = "";
7897         cur2 = 0;
7898     }
7899     else
7900         pv2 = SvPV_flags_const(sv2, cur2, flags);
7901
7902     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7903         /* Differing utf8ness.  */
7904         if (SvUTF8(sv1)) {
7905                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7906                                                    (const U8*)pv1, cur1);
7907                 return retval ? retval < 0 ? -1 : +1 : 0;
7908         }
7909         else {
7910                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7911                                                   (const U8*)pv2, cur2);
7912                 return retval ? retval < 0 ? -1 : +1 : 0;
7913         }
7914     }
7915
7916     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7917
7918     if (!cur1) {
7919         cmp = cur2 ? -1 : 0;
7920     } else if (!cur2) {
7921         cmp = 1;
7922     } else {
7923         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7924
7925 #ifdef EBCDIC
7926         if (! DO_UTF8(sv1)) {
7927 #endif
7928             const I32 retval = memcmp((const void*)pv1,
7929                                       (const void*)pv2,
7930                                       shortest_len);
7931             if (retval) {
7932                 cmp = retval < 0 ? -1 : 1;
7933             } else if (cur1 == cur2) {
7934                 cmp = 0;
7935             } else {
7936                 cmp = cur1 < cur2 ? -1 : 1;
7937             }
7938 #ifdef EBCDIC
7939         }
7940         else {  /* Both are to be treated as UTF-EBCDIC */
7941
7942             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7943              * which remaps code points 0-255.  We therefore generally have to
7944              * unmap back to the original values to get an accurate comparison.
7945              * But we don't have to do that for UTF-8 invariants, as by
7946              * definition, they aren't remapped, nor do we have to do it for
7947              * above-latin1 code points, as they also aren't remapped.  (This
7948              * code also works on ASCII platforms, but the memcmp() above is
7949              * much faster). */
7950
7951             const char *e = pv1 + shortest_len;
7952
7953             /* Find the first bytes that differ between the two strings */
7954             while (pv1 < e && *pv1 == *pv2) {
7955                 pv1++;
7956                 pv2++;
7957             }
7958
7959
7960             if (pv1 == e) { /* Are the same all the way to the end */
7961                 if (cur1 == cur2) {
7962                     cmp = 0;
7963                 } else {
7964                     cmp = cur1 < cur2 ? -1 : 1;
7965                 }
7966             }
7967             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7968                     * in the strings were.  The current bytes may or may not be
7969                     * at the beginning of a character.  But neither or both are
7970                     * (or else earlier bytes would have been different).  And
7971                     * if we are in the middle of a character, the two
7972                     * characters are comprised of the same number of bytes
7973                     * (because in this case the start bytes are the same, and
7974                     * the start bytes encode the character's length). */
7975                  if (UTF8_IS_INVARIANT(*pv1))
7976             {
7977                 /* If both are invariants; can just compare directly */
7978                 if (UTF8_IS_INVARIANT(*pv2)) {
7979                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7980                 }
7981                 else   /* Since *pv1 is invariant, it is the whole character,
7982                           which means it is at the beginning of a character.
7983                           That means pv2 is also at the beginning of a
7984                           character (see earlier comment).  Since it isn't
7985                           invariant, it must be a start byte.  If it starts a
7986                           character whose code point is above 255, that
7987                           character is greater than any single-byte char, which
7988                           *pv1 is */
7989                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7990                 {
7991                     cmp = -1;
7992                 }
7993                 else {
7994                     /* Here, pv2 points to a character composed of 2 bytes
7995                      * whose code point is < 256.  Get its code point and
7996                      * compare with *pv1 */
7997                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7998                            ?  -1
7999                            : 1;
8000                 }
8001             }
8002             else   /* The code point starting at pv1 isn't a single byte */
8003                  if (UTF8_IS_INVARIANT(*pv2))
8004             {
8005                 /* But here, the code point starting at *pv2 is a single byte,
8006                  * and so *pv1 must begin a character, hence is a start byte.
8007                  * If that character is above 255, it is larger than any
8008                  * single-byte char, which *pv2 is */
8009                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8010                     cmp = 1;
8011                 }
8012                 else {
8013                     /* Here, pv1 points to a character composed of 2 bytes
8014                      * whose code point is < 256.  Get its code point and
8015                      * compare with the single byte character *pv2 */
8016                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8017                           ?  -1
8018                           : 1;
8019                 }
8020             }
8021             else   /* Here, we've ruled out either *pv1 and *pv2 being
8022                       invariant.  That means both are part of variants, but not
8023                       necessarily at the start of a character */
8024                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8025                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8026             {
8027                 /* Here, at least one is the start of a character, which means
8028                  * the other is also a start byte.  And the code point of at
8029                  * least one of the characters is above 255.  It is a
8030                  * characteristic of UTF-EBCDIC that all start bytes for
8031                  * above-latin1 code points are well behaved as far as code
8032                  * point comparisons go, and all are larger than all other
8033                  * start bytes, so the comparison with those is also well
8034                  * behaved */
8035                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8036             }
8037             else {
8038                 /* Here both *pv1 and *pv2 are part of variant characters.
8039                  * They could be both continuations, or both start characters.
8040                  * (One or both could even be an illegal start character (for
8041                  * an overlong) which for the purposes of sorting we treat as
8042                  * legal. */
8043                 if (UTF8_IS_CONTINUATION(*pv1)) {
8044
8045                     /* If they are continuations for code points above 255,
8046                      * then comparing the current byte is sufficient, as there
8047                      * is no remapping of these and so the comparison is
8048                      * well-behaved.   We determine if they are such
8049                      * continuations by looking at the preceding byte.  It
8050                      * could be a start byte, from which we can tell if it is
8051                      * for an above 255 code point.  Or it could be a
8052                      * continuation, which means the character occupies at
8053                      * least 3 bytes, so must be above 255.  */
8054                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8055                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8056                     {
8057                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8058                         goto cmp_done;
8059                     }
8060
8061                     /* Here, the continuations are for code points below 256;
8062                      * back up one to get to the start byte */
8063                     pv1--;
8064                     pv2--;
8065                 }
8066
8067                 /* We need to get the actual native code point of each of these
8068                  * variants in order to compare them */
8069                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8070                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8071                         ? -1
8072                         : 1;
8073             }
8074         }
8075       cmp_done: ;
8076 #endif
8077     }
8078
8079     SvREFCNT_dec(svrecode);
8080
8081     return cmp;
8082 }
8083
8084 /*
8085 =for apidoc sv_cmp_locale
8086
8087 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8088 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8089 if necessary.  See also C<L</sv_cmp>>.
8090
8091 =for apidoc sv_cmp_locale_flags
8092
8093 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8094 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8095 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8096 C<L</sv_cmp_flags>>.
8097
8098 =cut
8099 */
8100
8101 I32
8102 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8103 {
8104     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8105 }
8106
8107 I32
8108 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8109                          const U32 flags)
8110 {
8111 #ifdef USE_LOCALE_COLLATE
8112
8113     char *pv1, *pv2;
8114     STRLEN len1, len2;
8115     I32 retval;
8116
8117     if (PL_collation_standard)
8118         goto raw_compare;
8119
8120     len1 = len2 = 0;
8121
8122     /* Revert to using raw compare if both operands exist, but either one
8123      * doesn't transform properly for collation */
8124     if (sv1 && sv2) {
8125         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8126         if (! pv1) {
8127             goto raw_compare;
8128         }
8129         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8130         if (! pv2) {
8131             goto raw_compare;
8132         }
8133     }
8134     else {
8135         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8136         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8137     }
8138
8139     if (!pv1 || !len1) {
8140         if (pv2 && len2)
8141             return -1;
8142         else
8143             goto raw_compare;
8144     }
8145     else {
8146         if (!pv2 || !len2)
8147             return 1;
8148     }
8149
8150     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8151
8152     if (retval)
8153         return retval < 0 ? -1 : 1;
8154
8155     /*
8156      * When the result of collation is equality, that doesn't mean
8157      * that there are no differences -- some locales exclude some
8158      * characters from consideration.  So to avoid false equalities,
8159      * we use the raw string as a tiebreaker.
8160      */
8161
8162   raw_compare:
8163     /* FALLTHROUGH */
8164
8165 #else
8166     PERL_UNUSED_ARG(flags);
8167 #endif /* USE_LOCALE_COLLATE */
8168
8169     return sv_cmp(sv1, sv2);
8170 }
8171
8172
8173 #ifdef USE_LOCALE_COLLATE
8174
8175 /*
8176 =for apidoc sv_collxfrm
8177
8178 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8179 C<L</sv_collxfrm_flags>>.
8180
8181 =for apidoc sv_collxfrm_flags
8182
8183 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8184 flags contain C<SV_GMAGIC>, it handles get-magic.
8185
8186 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8187 scalar data of the variable, but transformed to such a format that a normal
8188 memory comparison can be used to compare the data according to the locale
8189 settings.
8190
8191 =cut
8192 */
8193
8194 char *
8195 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8196 {
8197     MAGIC *mg;
8198
8199     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8200
8201     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8202
8203     /* If we don't have collation magic on 'sv', or the locale has changed
8204      * since the last time we calculated it, get it and save it now */
8205     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8206         const char *s;
8207         char *xf;
8208         STRLEN len, xlen;
8209
8210         /* Free the old space */
8211         if (mg)
8212             Safefree(mg->mg_ptr);
8213
8214         s = SvPV_flags_const(sv, len, flags);
8215         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8216             if (! mg) {
8217                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8218                                  0, 0);
8219                 assert(mg);
8220             }
8221             mg->mg_ptr = xf;
8222             mg->mg_len = xlen;
8223         }
8224         else {
8225             if (mg) {
8226                 mg->mg_ptr = NULL;
8227                 mg->mg_len = -1;
8228             }
8229         }
8230     }
8231
8232     if (mg && mg->mg_ptr) {
8233         *nxp = mg->mg_len;
8234         return mg->mg_ptr + sizeof(PL_collation_ix);
8235     }
8236     else {
8237         *nxp = 0;
8238         return NULL;
8239     }
8240 }
8241
8242 #endif /* USE_LOCALE_COLLATE */
8243
8244 static char *
8245 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8246 {
8247     SV * const tsv = newSV(0);
8248     ENTER;
8249     SAVEFREESV(tsv);
8250     sv_gets(tsv, fp, 0);
8251     sv_utf8_upgrade_nomg(tsv);
8252     SvCUR_set(sv,append);
8253     sv_catsv(sv,tsv);
8254     LEAVE;
8255     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8256 }
8257
8258 static char *
8259 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8260 {
8261     SSize_t bytesread;
8262     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8263       /* Grab the size of the record we're getting */
8264     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8265     
8266     /* Go yank in */
8267 #ifdef __VMS
8268     int fd;
8269     Stat_t st;
8270
8271     /* With a true, record-oriented file on VMS, we need to use read directly
8272      * to ensure that we respect RMS record boundaries.  The user is responsible
8273      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8274      * record size) field.  N.B. This is likely to produce invalid results on
8275      * varying-width character data when a record ends mid-character.
8276      */
8277     fd = PerlIO_fileno(fp);
8278     if (fd != -1
8279         && PerlLIO_fstat(fd, &st) == 0
8280         && (st.st_fab_rfm == FAB$C_VAR
8281             || st.st_fab_rfm == FAB$C_VFC
8282             || st.st_fab_rfm == FAB$C_FIX)) {
8283
8284         bytesread = PerlLIO_read(fd, buffer, recsize);
8285     }
8286     else /* in-memory file from PerlIO::Scalar
8287           * or not a record-oriented file
8288           */
8289 #endif
8290     {
8291         bytesread = PerlIO_read(fp, buffer, recsize);
8292
8293         /* At this point, the logic in sv_get() means that sv will
8294            be treated as utf-8 if the handle is utf8.
8295         */
8296         if (PerlIO_isutf8(fp) && bytesread > 0) {
8297             char *bend = buffer + bytesread;
8298             char *bufp = buffer;
8299             size_t charcount = 0;
8300             bool charstart = TRUE;
8301             STRLEN skip = 0;
8302
8303             while (charcount < recsize) {
8304                 /* count accumulated characters */
8305                 while (bufp < bend) {
8306                     if (charstart) {
8307                         skip = UTF8SKIP(bufp);
8308                     }
8309                     if (bufp + skip > bend) {
8310                         /* partial at the end */
8311                         charstart = FALSE;
8312                         break;
8313                     }
8314                     else {
8315                         ++charcount;
8316                         bufp += skip;
8317                         charstart = TRUE;
8318                     }
8319                 }
8320
8321                 if (charcount < recsize) {
8322                     STRLEN readsize;
8323                     STRLEN bufp_offset = bufp - buffer;
8324                     SSize_t morebytesread;
8325
8326                     /* originally I read enough to fill any incomplete
8327                        character and the first byte of the next
8328                        character if needed, but if there's many
8329                        multi-byte encoded characters we're going to be
8330                        making a read call for every character beyond
8331                        the original read size.
8332
8333                        So instead, read the rest of the character if
8334                        any, and enough bytes to match at least the
8335                        start bytes for each character we're going to
8336                        read.
8337                     */
8338                     if (charstart)
8339                         readsize = recsize - charcount;
8340                     else 
8341                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8342                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8343                     bend = buffer + bytesread;
8344                     morebytesread = PerlIO_read(fp, bend, readsize);
8345                     if (morebytesread <= 0) {
8346                         /* we're done, if we still have incomplete
8347                            characters the check code in sv_gets() will
8348                            warn about them.
8349
8350                            I'd originally considered doing
8351                            PerlIO_ungetc() on all but the lead
8352                            character of the incomplete character, but
8353                            read() doesn't do that, so I don't.
8354                         */
8355                         break;
8356                     }
8357
8358                     /* prepare to scan some more */
8359                     bytesread += morebytesread;
8360                     bend = buffer + bytesread;
8361                     bufp = buffer + bufp_offset;
8362                 }
8363             }
8364         }
8365     }
8366
8367     if (bytesread < 0)
8368         bytesread = 0;
8369     SvCUR_set(sv, bytesread + append);
8370     buffer[bytesread] = '\0';
8371     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8372 }
8373
8374 /*
8375 =for apidoc sv_gets
8376
8377 Get a line from the filehandle and store it into the SV, optionally
8378 appending to the currently-stored string.  If C<append> is not 0, the
8379 line is appended to the SV instead of overwriting it.  C<append> should
8380 be set to the byte offset that the appended string should start at
8381 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8382
8383 =cut
8384 */
8385
8386 char *
8387 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8388 {
8389     const char *rsptr;
8390     STRLEN rslen;
8391     STDCHAR rslast;
8392     STDCHAR *bp;
8393     SSize_t cnt;
8394     int i = 0;
8395     int rspara = 0;
8396
8397     PERL_ARGS_ASSERT_SV_GETS;
8398
8399     if (SvTHINKFIRST(sv))
8400         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8401     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8402        from <>.
8403        However, perlbench says it's slower, because the existing swipe code
8404        is faster than copy on write.
8405        Swings and roundabouts.  */
8406     SvUPGRADE(sv, SVt_PV);
8407
8408     if (append) {
8409         /* line is going to be appended to the existing buffer in the sv */
8410         if (PerlIO_isutf8(fp)) {
8411             if (!SvUTF8(sv)) {
8412                 sv_utf8_upgrade_nomg(sv);
8413                 sv_pos_u2b(sv,&append,0);
8414             }
8415         } else if (SvUTF8(sv)) {
8416             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8417         }
8418     }
8419
8420     SvPOK_only(sv);
8421     if (!append) {
8422         /* not appending - "clear" the string by setting SvCUR to 0,
8423          * the pv is still avaiable. */
8424         SvCUR_set(sv,0);
8425     }
8426     if (PerlIO_isutf8(fp))
8427         SvUTF8_on(sv);
8428
8429     if (IN_PERL_COMPILETIME) {
8430         /* we always read code in line mode */
8431         rsptr = "\n";
8432         rslen = 1;
8433     }
8434     else if (RsSNARF(PL_rs)) {
8435         /* If it is a regular disk file use size from stat() as estimate
8436            of amount we are going to read -- may result in mallocing
8437            more memory than we really need if the layers below reduce
8438            the size we read (e.g. CRLF or a gzip layer).
8439          */
8440         Stat_t st;
8441         int fd = PerlIO_fileno(fp);
8442         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8443             const Off_t offset = PerlIO_tell(fp);
8444             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8445 #ifdef PERL_COPY_ON_WRITE
8446                 /* Add an extra byte for the sake of copy-on-write's
8447                  * buffer reference count. */
8448                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8449 #else
8450                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8451 #endif
8452             }
8453         }
8454         rsptr = NULL;
8455         rslen = 0;
8456     }
8457     else if (RsRECORD(PL_rs)) {
8458         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8459     }
8460     else if (RsPARA(PL_rs)) {
8461         rsptr = "\n\n";
8462         rslen = 2;
8463         rspara = 1;
8464     }
8465     else {
8466         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8467         if (PerlIO_isutf8(fp)) {
8468             rsptr = SvPVutf8(PL_rs, rslen);
8469         }
8470         else {
8471             if (SvUTF8(PL_rs)) {
8472                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8473                     Perl_croak(aTHX_ "Wide character in $/");
8474                 }
8475             }
8476             /* extract the raw pointer to the record separator */
8477             rsptr = SvPV_const(PL_rs, rslen);
8478         }
8479     }
8480
8481     /* rslast is the last character in the record separator
8482      * note we don't use rslast except when rslen is true, so the
8483      * null assign is a placeholder. */
8484     rslast = rslen ? rsptr[rslen - 1] : '\0';
8485
8486     if (rspara) {               /* have to do this both before and after */
8487         do {                    /* to make sure file boundaries work right */
8488             if (PerlIO_eof(fp))
8489                 return 0;
8490             i = PerlIO_getc(fp);
8491             if (i != '\n') {
8492                 if (i == -1)
8493                     return 0;
8494                 PerlIO_ungetc(fp,i);
8495                 break;
8496             }
8497         } while (i != EOF);
8498     }
8499
8500     /* See if we know enough about I/O mechanism to cheat it ! */
8501
8502     /* This used to be #ifdef test - it is made run-time test for ease
8503        of abstracting out stdio interface. One call should be cheap
8504        enough here - and may even be a macro allowing compile
8505        time optimization.
8506      */
8507
8508     if (PerlIO_fast_gets(fp)) {
8509     /*
8510      * We can do buffer based IO operations on this filehandle.
8511      *
8512      * This means we can bypass a lot of subcalls and process
8513      * the buffer directly, it also means we know the upper bound
8514      * on the amount of data we might read of the current buffer
8515      * into our sv. Knowing this allows us to preallocate the pv
8516      * to be able to hold that maximum, which allows us to simplify
8517      * a lot of logic. */
8518
8519     /*
8520      * We're going to steal some values from the stdio struct
8521      * and put EVERYTHING in the innermost loop into registers.
8522      */
8523     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8524     STRLEN bpx;         /* length of the data in the target sv
8525                            used to fix pointers after a SvGROW */
8526     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8527                            of data left in the read-ahead buffer.
8528                            If 0 then the pv buffer can hold the full
8529                            amount left, otherwise this is the amount it
8530                            can hold. */
8531
8532     /* Here is some breathtakingly efficient cheating */
8533
8534     /* When you read the following logic resist the urge to think
8535      * of record separators that are 1 byte long. They are an
8536      * uninteresting special (simple) case.
8537      *
8538      * Instead think of record separators which are at least 2 bytes
8539      * long, and keep in mind that we need to deal with such
8540      * separators when they cross a read-ahead buffer boundary.
8541      *
8542      * Also consider that we need to gracefully deal with separators
8543      * that may be longer than a single read ahead buffer.
8544      *
8545      * Lastly do not forget we want to copy the delimiter as well. We
8546      * are copying all data in the file _up_to_and_including_ the separator
8547      * itself.
8548      *
8549      * Now that you have all that in mind here is what is happening below:
8550      *
8551      * 1. When we first enter the loop we do some memory book keeping to see
8552      * how much free space there is in the target SV. (This sub assumes that
8553      * it is operating on the same SV most of the time via $_ and that it is
8554      * going to be able to reuse the same pv buffer each call.) If there is
8555      * "enough" room then we set "shortbuffered" to how much space there is
8556      * and start reading forward.
8557      *
8558      * 2. When we scan forward we copy from the read-ahead buffer to the target
8559      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8560      * and the end of the of pv, as well as for the "rslast", which is the last
8561      * char of the separator.
8562      *
8563      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8564      * (which has a "complete" record up to the point we saw rslast) and check
8565      * it to see if it matches the separator. If it does we are done. If it doesn't
8566      * we continue on with the scan/copy.
8567      *
8568      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8569      * the IO system to read the next buffer. We do this by doing a getc(), which
8570      * returns a single char read (or EOF), and prefills the buffer, and also
8571      * allows us to find out how full the buffer is.  We use this information to
8572      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8573      * the returned single char into the target sv, and then go back into scan
8574      * forward mode.
8575      *
8576      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8577      * remaining space in the read-buffer.
8578      *
8579      * Note that this code despite its twisty-turny nature is pretty darn slick.
8580      * It manages single byte separators, multi-byte cross boundary separators,
8581      * and cross-read-buffer separators cleanly and efficiently at the cost
8582      * of potentially greatly overallocating the target SV.
8583      *
8584      * Yves
8585      */
8586
8587
8588     /* get the number of bytes remaining in the read-ahead buffer
8589      * on first call on a given fp this will return 0.*/
8590     cnt = PerlIO_get_cnt(fp);
8591
8592     /* make sure we have the room */
8593     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8594         /* Not room for all of it
8595            if we are looking for a separator and room for some
8596          */
8597         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8598             /* just process what we have room for */
8599             shortbuffered = cnt - SvLEN(sv) + append + 1;
8600             cnt -= shortbuffered;
8601         }
8602         else {
8603             /* ensure that the target sv has enough room to hold
8604              * the rest of the read-ahead buffer */
8605             shortbuffered = 0;
8606             /* remember that cnt can be negative */
8607             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8608         }
8609     }
8610     else {
8611         /* we have enough room to hold the full buffer, lets scream */
8612         shortbuffered = 0;
8613     }
8614
8615     /* extract the pointer to sv's string buffer, offset by append as necessary */
8616     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8617     /* extract the point to the read-ahead buffer */
8618     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8619
8620     /* some trace debug output */
8621     DEBUG_P(PerlIO_printf(Perl_debug_log,
8622         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8623     DEBUG_P(PerlIO_printf(Perl_debug_log,
8624         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8625          UVuf "\n",
8626                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8627                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8628
8629     for (;;) {
8630       screamer:
8631         /* if there is stuff left in the read-ahead buffer */
8632         if (cnt > 0) {
8633             /* if there is a separator */
8634             if (rslen) {
8635                 /* find next rslast */
8636                 STDCHAR *p;
8637
8638                 /* shortcut common case of blank line */
8639                 cnt--;
8640                 if ((*bp++ = *ptr++) == rslast)
8641                     goto thats_all_folks;
8642
8643                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8644                 if (p) {
8645                     SSize_t got = p - ptr + 1;
8646                     Copy(ptr, bp, got, STDCHAR);
8647                     ptr += got;
8648                     bp  += got;
8649                     cnt -= got;
8650                     goto thats_all_folks;
8651                 }
8652                 Copy(ptr, bp, cnt, STDCHAR);
8653                 ptr += cnt;
8654                 bp  += cnt;
8655                 cnt = 0;
8656             }
8657             else {
8658                 /* no separator, slurp the full buffer */
8659                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8660                 bp += cnt;                           /* screams  |  dust */
8661                 ptr += cnt;                          /* louder   |  sed :-) */
8662                 cnt = 0;
8663                 assert (!shortbuffered);
8664                 goto cannot_be_shortbuffered;
8665             }
8666         }
8667         
8668         if (shortbuffered) {            /* oh well, must extend */
8669             /* we didnt have enough room to fit the line into the target buffer
8670              * so we must extend the target buffer and keep going */
8671             cnt = shortbuffered;
8672             shortbuffered = 0;
8673             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8674             SvCUR_set(sv, bpx);
8675             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8676             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8677             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8678             continue;
8679         }
8680
8681     cannot_be_shortbuffered:
8682         /* we need to refill the read-ahead buffer if possible */
8683
8684         DEBUG_P(PerlIO_printf(Perl_debug_log,
8685                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8686                               PTR2UV(ptr),(IV)cnt));
8687         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8688
8689         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8690            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8691             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8692             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8693
8694         /*
8695             call PerlIO_getc() to let it prefill the lookahead buffer
8696
8697             This used to call 'filbuf' in stdio form, but as that behaves like
8698             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8699             another abstraction.
8700
8701             Note we have to deal with the char in 'i' if we are not at EOF
8702         */
8703         i   = PerlIO_getc(fp);          /* get more characters */
8704
8705         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8706            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8707             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8708             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8709
8710         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8711         cnt = PerlIO_get_cnt(fp);
8712         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8713         DEBUG_P(PerlIO_printf(Perl_debug_log,
8714             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8715             PTR2UV(ptr),(IV)cnt));
8716
8717         if (i == EOF)                   /* all done for ever? */
8718             goto thats_really_all_folks;
8719
8720         /* make sure we have enough space in the target sv */
8721         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8722         SvCUR_set(sv, bpx);
8723         SvGROW(sv, bpx + cnt + 2);
8724         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8725
8726         /* copy of the char we got from getc() */
8727         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8728
8729         /* make sure we deal with the i being the last character of a separator */
8730         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8731             goto thats_all_folks;
8732     }
8733
8734   thats_all_folks:
8735     /* check if we have actually found the separator - only really applies
8736      * when rslen > 1 */
8737     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8738           memNE((char*)bp - rslen, rsptr, rslen))
8739         goto screamer;                          /* go back to the fray */
8740   thats_really_all_folks:
8741     if (shortbuffered)
8742         cnt += shortbuffered;
8743         DEBUG_P(PerlIO_printf(Perl_debug_log,
8744              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8745     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8746     DEBUG_P(PerlIO_printf(Perl_debug_log,
8747         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8748         "\n",
8749         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8750         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8751     *bp = '\0';
8752     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8753     DEBUG_P(PerlIO_printf(Perl_debug_log,
8754         "Screamer: done, len=%ld, string=|%.*s|\n",
8755         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8756     }
8757    else
8758     {
8759        /*The big, slow, and stupid way. */
8760 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8761         STDCHAR *buf = NULL;
8762         Newx(buf, 8192, STDCHAR);
8763         assert(buf);
8764 #else
8765         STDCHAR buf[8192];
8766 #endif
8767
8768       screamer2:
8769         if (rslen) {
8770             const STDCHAR * const bpe = buf + sizeof(buf);
8771             bp = buf;
8772             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8773                 ; /* keep reading */
8774             cnt = bp - buf;
8775         }
8776         else {
8777             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8778             /* Accommodate broken VAXC compiler, which applies U8 cast to
8779              * both args of ?: operator, causing EOF to change into 255
8780              */
8781             if (cnt > 0)
8782                  i = (U8)buf[cnt - 1];
8783             else
8784                  i = EOF;
8785         }
8786
8787         if (cnt < 0)
8788             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8789         if (append)
8790             sv_catpvn_nomg(sv, (char *) buf, cnt);
8791         else
8792             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8793
8794         if (i != EOF &&                 /* joy */
8795             (!rslen ||
8796              SvCUR(sv) < rslen ||
8797              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8798         {
8799             append = -1;
8800             /*
8801              * If we're reading from a TTY and we get a short read,
8802              * indicating that the user hit his EOF character, we need
8803              * to notice it now, because if we try to read from the TTY
8804              * again, the EOF condition will disappear.
8805              *
8806              * The comparison of cnt to sizeof(buf) is an optimization
8807              * that prevents unnecessary calls to feof().
8808              *
8809              * - jik 9/25/96
8810              */
8811             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8812                 goto screamer2;
8813         }
8814
8815 #ifdef USE_HEAP_INSTEAD_OF_STACK
8816         Safefree(buf);
8817 #endif
8818     }
8819
8820     if (rspara) {               /* have to do this both before and after */
8821         while (i != EOF) {      /* to make sure file boundaries work right */
8822             i = PerlIO_getc(fp);
8823             if (i != '\n') {
8824                 PerlIO_ungetc(fp,i);
8825                 break;
8826             }
8827         }
8828     }
8829
8830     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8831 }
8832
8833 /*
8834 =for apidoc sv_inc
8835
8836 Auto-increment of the value in the SV, doing string to numeric conversion
8837 if necessary.  Handles 'get' magic and operator overloading.
8838
8839 =cut
8840 */
8841
8842 void
8843 Perl_sv_inc(pTHX_ SV *const sv)
8844 {
8845     if (!sv)
8846         return;
8847     SvGETMAGIC(sv);
8848     sv_inc_nomg(sv);
8849 }
8850
8851 /*
8852 =for apidoc sv_inc_nomg
8853
8854 Auto-increment of the value in the SV, doing string to numeric conversion
8855 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8856
8857 =cut
8858 */
8859
8860 void
8861 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8862 {
8863     char *d;
8864     int flags;
8865
8866     if (!sv)
8867         return;
8868     if (SvTHINKFIRST(sv)) {
8869         if (SvREADONLY(sv)) {
8870                 Perl_croak_no_modify();
8871         }
8872         if (SvROK(sv)) {
8873             IV i;
8874             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8875                 return;
8876             i = PTR2IV(SvRV(sv));
8877             sv_unref(sv);
8878             sv_setiv(sv, i);
8879         }
8880         else sv_force_normal_flags(sv, 0);
8881     }
8882     flags = SvFLAGS(sv);
8883     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8884         /* It's (privately or publicly) a float, but not tested as an
8885            integer, so test it to see. */
8886         (void) SvIV(sv);
8887         flags = SvFLAGS(sv);
8888     }
8889     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8890         /* It's publicly an integer, or privately an integer-not-float */
8891 #ifdef PERL_PRESERVE_IVUV
8892       oops_its_int:
8893 #endif
8894         if (SvIsUV(sv)) {
8895             if (SvUVX(sv) == UV_MAX)
8896                 sv_setnv(sv, UV_MAX_P1);
8897             else
8898                 (void)SvIOK_only_UV(sv);
8899                 SvUV_set(sv, SvUVX(sv) + 1);
8900         } else {
8901             if (SvIVX(sv) == IV_MAX)
8902                 sv_setuv(sv, (UV)IV_MAX + 1);
8903             else {
8904                 (void)SvIOK_only(sv);
8905                 SvIV_set(sv, SvIVX(sv) + 1);
8906             }   
8907         }
8908         return;
8909     }
8910     if (flags & SVp_NOK) {
8911         const NV was = SvNVX(sv);
8912         if (LIKELY(!Perl_isinfnan(was)) &&
8913             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8914             was >= NV_OVERFLOWS_INTEGERS_AT) {
8915             /* diag_listed_as: Lost precision when %s %f by 1 */
8916             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8917                            "Lost precision when incrementing %" NVff " by 1",
8918                            was);
8919         }
8920         (void)SvNOK_only(sv);
8921         SvNV_set(sv, was + 1.0);
8922         return;
8923     }
8924
8925     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8926     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8927         Perl_croak_no_modify();
8928
8929     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8930         if ((flags & SVTYPEMASK) < SVt_PVIV)
8931             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8932         (void)SvIOK_only(sv);
8933         SvIV_set(sv, 1);
8934         return;
8935     }
8936     d = SvPVX(sv);
8937     while (isALPHA(*d)) d++;
8938     while (isDIGIT(*d)) d++;
8939     if (d < SvEND(sv)) {
8940         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8941 #ifdef PERL_PRESERVE_IVUV
8942         /* Got to punt this as an integer if needs be, but we don't issue
8943            warnings. Probably ought to make the sv_iv_please() that does
8944            the conversion if possible, and silently.  */
8945         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8946             /* Need to try really hard to see if it's an integer.
8947                9.22337203685478e+18 is an integer.
8948                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8949                so $a="9.22337203685478e+18"; $a+0; $a++
8950                needs to be the same as $a="9.22337203685478e+18"; $a++
8951                or we go insane. */
8952         
8953             (void) sv_2iv(sv);
8954             if (SvIOK(sv))
8955                 goto oops_its_int;
8956
8957             /* sv_2iv *should* have made this an NV */
8958             if (flags & SVp_NOK) {
8959                 (void)SvNOK_only(sv);
8960                 SvNV_set(sv, SvNVX(sv) + 1.0);
8961                 return;
8962             }
8963             /* I don't think we can get here. Maybe I should assert this
8964                And if we do get here I suspect that sv_setnv will croak. NWC
8965                Fall through. */
8966             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
8967                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8968         }
8969 #endif /* PERL_PRESERVE_IVUV */
8970         if (!numtype && ckWARN(WARN_NUMERIC))
8971             not_incrementable(sv);
8972         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8973         return;
8974     }
8975     d--;
8976     while (d >= SvPVX_const(sv)) {
8977         if (isDIGIT(*d)) {
8978             if (++*d <= '9')
8979                 return;
8980             *(d--) = '0';
8981         }
8982         else {
8983 #ifdef EBCDIC
8984             /* MKS: The original code here died if letters weren't consecutive.
8985              * at least it didn't have to worry about non-C locales.  The
8986              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8987              * arranged in order (although not consecutively) and that only
8988              * [A-Za-z] are accepted by isALPHA in the C locale.
8989              */
8990             if (isALPHA_FOLD_NE(*d, 'z')) {
8991                 do { ++*d; } while (!isALPHA(*d));
8992                 return;
8993             }
8994             *(d--) -= 'z' - 'a';
8995 #else
8996             ++*d;
8997             if (isALPHA(*d))
8998                 return;
8999             *(d--) -= 'z' - 'a' + 1;
9000 #endif
9001         }
9002     }
9003     /* oh,oh, the number grew */
9004     SvGROW(sv, SvCUR(sv) + 2);
9005     SvCUR_set(sv, SvCUR(sv) + 1);
9006     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9007         *d = d[-1];
9008     if (isDIGIT(d[1]))
9009         *d = '1';
9010     else
9011         *d = d[1];
9012 }
9013
9014 /*
9015 =for apidoc sv_dec
9016
9017 Auto-decrement of the value in the SV, doing string to numeric conversion
9018 if necessary.  Handles 'get' magic and operator overloading.
9019
9020 =cut
9021 */
9022
9023 void
9024 Perl_sv_dec(pTHX_ SV *const sv)
9025 {
9026     if (!sv)
9027         return;
9028     SvGETMAGIC(sv);
9029     sv_dec_nomg(sv);
9030 }
9031
9032 /*
9033 =for apidoc sv_dec_nomg
9034
9035 Auto-decrement of the value in the SV, doing string to numeric conversion
9036 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9037
9038 =cut
9039 */
9040
9041 void
9042 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9043 {
9044     int flags;
9045
9046     if (!sv)
9047         return;
9048     if (SvTHINKFIRST(sv)) {
9049         if (SvREADONLY(sv)) {
9050                 Perl_croak_no_modify();
9051         }
9052         if (SvROK(sv)) {
9053             IV i;
9054             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9055                 return;
9056             i = PTR2IV(SvRV(sv));
9057             sv_unref(sv);
9058             sv_setiv(sv, i);
9059         }
9060         else sv_force_normal_flags(sv, 0);
9061     }
9062     /* Unlike sv_inc we don't have to worry about string-never-numbers
9063        and keeping them magic. But we mustn't warn on punting */
9064     flags = SvFLAGS(sv);
9065     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9066         /* It's publicly an integer, or privately an integer-not-float */
9067 #ifdef PERL_PRESERVE_IVUV
9068       oops_its_int:
9069 #endif
9070         if (SvIsUV(sv)) {
9071             if (SvUVX(sv) == 0) {
9072                 (void)SvIOK_only(sv);
9073                 SvIV_set(sv, -1);
9074             }
9075             else {
9076                 (void)SvIOK_only_UV(sv);
9077                 SvUV_set(sv, SvUVX(sv) - 1);
9078             }   
9079         } else {
9080             if (SvIVX(sv) == IV_MIN) {
9081                 sv_setnv(sv, (NV)IV_MIN);
9082                 goto oops_its_num;
9083             }
9084             else {
9085                 (void)SvIOK_only(sv);
9086                 SvIV_set(sv, SvIVX(sv) - 1);
9087             }   
9088         }
9089         return;
9090     }
9091     if (flags & SVp_NOK) {
9092     oops_its_num:
9093         {
9094             const NV was = SvNVX(sv);
9095             if (LIKELY(!Perl_isinfnan(was)) &&
9096                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9097                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9098                 /* diag_listed_as: Lost precision when %s %f by 1 */
9099                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9100                                "Lost precision when decrementing %" NVff " by 1",
9101                                was);
9102             }
9103             (void)SvNOK_only(sv);
9104             SvNV_set(sv, was - 1.0);
9105             return;
9106         }
9107     }
9108
9109     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9110     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9111         Perl_croak_no_modify();
9112
9113     if (!(flags & SVp_POK)) {
9114         if ((flags & SVTYPEMASK) < SVt_PVIV)
9115             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9116         SvIV_set(sv, -1);
9117         (void)SvIOK_only(sv);
9118         return;
9119     }
9120 #ifdef PERL_PRESERVE_IVUV
9121     {
9122         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9123         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9124             /* Need to try really hard to see if it's an integer.
9125                9.22337203685478e+18 is an integer.
9126                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9127                so $a="9.22337203685478e+18"; $a+0; $a--
9128                needs to be the same as $a="9.22337203685478e+18"; $a--
9129                or we go insane. */
9130         
9131             (void) sv_2iv(sv);
9132             if (SvIOK(sv))
9133                 goto oops_its_int;
9134
9135             /* sv_2iv *should* have made this an NV */
9136             if (flags & SVp_NOK) {
9137                 (void)SvNOK_only(sv);
9138                 SvNV_set(sv, SvNVX(sv) - 1.0);
9139                 return;
9140             }
9141             /* I don't think we can get here. Maybe I should assert this
9142                And if we do get here I suspect that sv_setnv will croak. NWC
9143                Fall through. */
9144             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9145                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9146         }
9147     }
9148 #endif /* PERL_PRESERVE_IVUV */
9149     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9150 }
9151
9152 /* this define is used to eliminate a chunk of duplicated but shared logic
9153  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9154  * used anywhere but here - yves
9155  */
9156 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9157     STMT_START {      \
9158         SSize_t ix = ++PL_tmps_ix;              \
9159         if (UNLIKELY(ix >= PL_tmps_max))        \
9160             ix = tmps_grow_p(ix);                       \
9161         PL_tmps_stack[ix] = (AnSv); \
9162     } STMT_END
9163
9164 /*
9165 =for apidoc sv_mortalcopy
9166
9167 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9168 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9169 explicit call to C<FREETMPS>, or by an implicit call at places such as
9170 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9171
9172 =cut
9173 */
9174
9175 /* Make a string that will exist for the duration of the expression
9176  * evaluation.  Actually, it may have to last longer than that, but
9177  * hopefully we won't free it until it has been assigned to a
9178  * permanent location. */
9179
9180 SV *
9181 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9182 {
9183     SV *sv;
9184
9185     if (flags & SV_GMAGIC)
9186         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9187     new_SV(sv);
9188     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9189     PUSH_EXTEND_MORTAL__SV_C(sv);
9190     SvTEMP_on(sv);
9191     return sv;
9192 }
9193
9194 /*
9195 =for apidoc sv_newmortal
9196
9197 Creates a new null SV which is mortal.  The reference count of the SV is
9198 set to 1.  It will be destroyed "soon", either by an explicit call to
9199 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9200 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9201
9202 =cut
9203 */
9204
9205 SV *
9206 Perl_sv_newmortal(pTHX)
9207 {
9208     SV *sv;
9209
9210     new_SV(sv);
9211     SvFLAGS(sv) = SVs_TEMP;
9212     PUSH_EXTEND_MORTAL__SV_C(sv);
9213     return sv;
9214 }
9215
9216
9217 /*
9218 =for apidoc newSVpvn_flags
9219
9220 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9221 characters) into it.  The reference count for the
9222 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9223 string.  You are responsible for ensuring that the source string is at least
9224 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9225 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9226 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9227 returning.  If C<SVf_UTF8> is set, C<s>
9228 is considered to be in UTF-8 and the
9229 C<SVf_UTF8> flag will be set on the new SV.
9230 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9231
9232     #define newSVpvn_utf8(s, len, u)                    \
9233         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9234
9235 =cut
9236 */
9237
9238 SV *
9239 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9240 {
9241     SV *sv;
9242
9243     /* All the flags we don't support must be zero.
9244        And we're new code so I'm going to assert this from the start.  */
9245     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9246     new_SV(sv);
9247     sv_setpvn(sv,s,len);
9248
9249     /* This code used to do a sv_2mortal(), however we now unroll the call to
9250      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9251      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9252      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9253      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9254      * means that we eliminate quite a few steps than it looks - Yves
9255      * (explaining patch by gfx) */
9256
9257     SvFLAGS(sv) |= flags;
9258
9259     if(flags & SVs_TEMP){
9260         PUSH_EXTEND_MORTAL__SV_C(sv);
9261     }
9262
9263     return sv;
9264 }
9265
9266 /*
9267 =for apidoc sv_2mortal
9268
9269 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9270 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9271 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9272 string buffer can be "stolen" if this SV is copied.  See also
9273 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9274
9275 =cut
9276 */
9277
9278 SV *
9279 Perl_sv_2mortal(pTHX_ SV *const sv)
9280 {
9281     dVAR;
9282     if (!sv)
9283         return sv;
9284     if (SvIMMORTAL(sv))
9285         return sv;
9286     PUSH_EXTEND_MORTAL__SV_C(sv);
9287     SvTEMP_on(sv);
9288     return sv;
9289 }
9290
9291 /*
9292 =for apidoc newSVpv
9293
9294 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9295 characters) into it.  The reference count for the
9296 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9297 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9298 C<NUL> characters and has to have a terminating C<NUL> byte).
9299
9300 This function can cause reliability issues if you are likely to pass in
9301 empty strings that are not null terminated, because it will run
9302 strlen on the string and potentially run past valid memory.
9303
9304 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9305 For string literals use L</newSVpvs> instead.  This function will work fine for
9306 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9307 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9308
9309 =cut
9310 */
9311
9312 SV *
9313 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9314 {
9315     SV *sv;
9316
9317     new_SV(sv);
9318     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9319     return sv;
9320 }
9321
9322 /*
9323 =for apidoc newSVpvn
9324
9325 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9326 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9327 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9328 are responsible for ensuring that the source buffer is at least
9329 C<len> bytes long.  If the C<s> argument is NULL the new SV will be
9330 undefined.
9331
9332 =cut
9333 */
9334
9335 SV *
9336 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9337 {
9338     SV *sv;
9339     new_SV(sv);
9340     sv_setpvn(sv,buffer,len);
9341     return sv;
9342 }
9343
9344 /*
9345 =for apidoc newSVhek
9346
9347 Creates a new SV from the hash key structure.  It will generate scalars that
9348 point to the shared string table where possible.  Returns a new (undefined)
9349 SV if C<hek> is NULL.
9350
9351 =cut
9352 */
9353
9354 SV *
9355 Perl_newSVhek(pTHX_ const HEK *const hek)
9356 {
9357     if (!hek) {
9358         SV *sv;
9359
9360         new_SV(sv);
9361         return sv;
9362     }
9363
9364     if (HEK_LEN(hek) == HEf_SVKEY) {
9365         return newSVsv(*(SV**)HEK_KEY(hek));
9366     } else {
9367         const int flags = HEK_FLAGS(hek);
9368         if (flags & HVhek_WASUTF8) {
9369             /* Trouble :-)
9370                Andreas would like keys he put in as utf8 to come back as utf8
9371             */
9372             STRLEN utf8_len = HEK_LEN(hek);
9373             SV * const sv = newSV_type(SVt_PV);
9374             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9375             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9376             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9377             SvUTF8_on (sv);
9378             return sv;
9379         } else if (flags & HVhek_UNSHARED) {
9380             /* A hash that isn't using shared hash keys has to have
9381                the flag in every key so that we know not to try to call
9382                share_hek_hek on it.  */
9383
9384             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9385             if (HEK_UTF8(hek))
9386                 SvUTF8_on (sv);
9387             return sv;
9388         }
9389         /* This will be overwhelminly the most common case.  */
9390         {
9391             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9392                more efficient than sharepvn().  */
9393             SV *sv;
9394
9395             new_SV(sv);
9396             sv_upgrade(sv, SVt_PV);
9397             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9398             SvCUR_set(sv, HEK_LEN(hek));
9399             SvLEN_set(sv, 0);
9400             SvIsCOW_on(sv);
9401             SvPOK_on(sv);
9402             if (HEK_UTF8(hek))
9403                 SvUTF8_on(sv);
9404             return sv;
9405         }
9406     }
9407 }
9408
9409 /*
9410 =for apidoc newSVpvn_share
9411
9412 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9413 table.  If the string does not already exist in the table, it is
9414 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9415 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9416 is non-zero, that value is used; otherwise the hash is computed.
9417 The string's hash can later be retrieved from the SV
9418 with the C<SvSHARED_HASH()> macro.  The idea here is
9419 that as the string table is used for shared hash keys these strings will have
9420 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9421
9422 =cut
9423 */
9424
9425 SV *
9426 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9427 {
9428     dVAR;
9429     SV *sv;
9430     bool is_utf8 = FALSE;
9431     const char *const orig_src = src;
9432
9433     if (len < 0) {
9434         STRLEN tmplen = -len;
9435         is_utf8 = TRUE;
9436         /* See the note in hv.c:hv_fetch() --jhi */
9437         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9438         len = tmplen;
9439     }
9440     if (!hash)
9441         PERL_HASH(hash, src, len);
9442     new_SV(sv);
9443     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9444        changes here, update it there too.  */
9445     sv_upgrade(sv, SVt_PV);
9446     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9447     SvCUR_set(sv, len);
9448     SvLEN_set(sv, 0);
9449     SvIsCOW_on(sv);
9450     SvPOK_on(sv);
9451     if (is_utf8)
9452         SvUTF8_on(sv);
9453     if (src != orig_src)
9454         Safefree(src);
9455     return sv;
9456 }
9457
9458 /*
9459 =for apidoc newSVpv_share
9460
9461 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9462 string/length pair.
9463
9464 =cut
9465 */
9466
9467 SV *
9468 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9469 {
9470     return newSVpvn_share(src, strlen(src), hash);
9471 }
9472
9473 #if defined(PERL_IMPLICIT_CONTEXT)
9474
9475 /* pTHX_ magic can't cope with varargs, so this is a no-context
9476  * version of the main function, (which may itself be aliased to us).
9477  * Don't access this version directly.
9478  */
9479
9480 SV *
9481 Perl_newSVpvf_nocontext(const char *const pat, ...)
9482 {
9483     dTHX;
9484     SV *sv;
9485     va_list args;
9486
9487     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9488
9489     va_start(args, pat);
9490     sv = vnewSVpvf(pat, &args);
9491     va_end(args);
9492     return sv;
9493 }
9494 #endif
9495
9496 /*
9497 =for apidoc newSVpvf
9498
9499 Creates a new SV and initializes it with the string formatted like
9500 C<sv_catpvf>.
9501
9502 =cut
9503 */
9504
9505 SV *
9506 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9507 {
9508     SV *sv;
9509     va_list args;
9510
9511     PERL_ARGS_ASSERT_NEWSVPVF;
9512
9513     va_start(args, pat);
9514     sv = vnewSVpvf(pat, &args);
9515     va_end(args);
9516     return sv;
9517 }
9518
9519 /* backend for newSVpvf() and newSVpvf_nocontext() */
9520
9521 SV *
9522 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9523 {
9524     SV *sv;
9525
9526     PERL_ARGS_ASSERT_VNEWSVPVF;
9527
9528     new_SV(sv);
9529     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9530     return sv;
9531 }
9532
9533 /*
9534 =for apidoc newSVnv
9535
9536 Creates a new SV and copies a floating point value into it.
9537 The reference count for the SV is set to 1.
9538
9539 =cut
9540 */
9541
9542 SV *
9543 Perl_newSVnv(pTHX_ const NV n)
9544 {
9545     SV *sv;
9546
9547     new_SV(sv);
9548     sv_setnv(sv,n);
9549     return sv;
9550 }
9551
9552 /*
9553 =for apidoc newSViv
9554
9555 Creates a new SV and copies an integer into it.  The reference count for the
9556 SV is set to 1.
9557
9558 =cut
9559 */
9560
9561 SV *
9562 Perl_newSViv(pTHX_ const IV i)
9563 {
9564     SV *sv;
9565
9566     new_SV(sv);
9567
9568     /* Inlining ONLY the small relevant subset of sv_setiv here
9569      * for performance. Makes a significant difference. */
9570
9571     /* We're starting from SVt_FIRST, so provided that's
9572      * actual 0, we don't have to unset any SV type flags
9573      * to promote to SVt_IV. */
9574     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9575
9576     SET_SVANY_FOR_BODYLESS_IV(sv);
9577     SvFLAGS(sv) |= SVt_IV;
9578     (void)SvIOK_on(sv);
9579
9580     SvIV_set(sv, i);
9581     SvTAINT(sv);
9582
9583     return sv;
9584 }
9585
9586 /*
9587 =for apidoc newSVuv
9588
9589 Creates a new SV and copies an unsigned integer into it.
9590 The reference count for the SV is set to 1.
9591
9592 =cut
9593 */
9594
9595 SV *
9596 Perl_newSVuv(pTHX_ const UV u)
9597 {
9598     SV *sv;
9599
9600     /* Inlining ONLY the small relevant subset of sv_setuv here
9601      * for performance. Makes a significant difference. */
9602
9603     /* Using ivs is more efficient than using uvs - see sv_setuv */
9604     if (u <= (UV)IV_MAX) {
9605         return newSViv((IV)u);
9606     }
9607
9608     new_SV(sv);
9609
9610     /* We're starting from SVt_FIRST, so provided that's
9611      * actual 0, we don't have to unset any SV type flags
9612      * to promote to SVt_IV. */
9613     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9614
9615     SET_SVANY_FOR_BODYLESS_IV(sv);
9616     SvFLAGS(sv) |= SVt_IV;
9617     (void)SvIOK_on(sv);
9618     (void)SvIsUV_on(sv);
9619
9620     SvUV_set(sv, u);
9621     SvTAINT(sv);
9622
9623     return sv;
9624 }
9625
9626 /*
9627 =for apidoc newSV_type
9628
9629 Creates a new SV, of the type specified.  The reference count for the new SV
9630 is set to 1.
9631
9632 =cut
9633 */
9634
9635 SV *
9636 Perl_newSV_type(pTHX_ const svtype type)
9637 {
9638     SV *sv;
9639
9640     new_SV(sv);
9641     ASSUME(SvTYPE(sv) == SVt_FIRST);
9642     if(type != SVt_FIRST)
9643         sv_upgrade(sv, type);
9644     return sv;
9645 }
9646
9647 /*
9648 =for apidoc newRV_noinc
9649
9650 Creates an RV wrapper for an SV.  The reference count for the original
9651 SV is B<not> incremented.
9652
9653 =cut
9654 */
9655
9656 SV *
9657 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9658 {
9659     SV *sv;
9660
9661     PERL_ARGS_ASSERT_NEWRV_NOINC;
9662
9663     new_SV(sv);
9664
9665     /* We're starting from SVt_FIRST, so provided that's
9666      * actual 0, we don't have to unset any SV type flags
9667      * to promote to SVt_IV. */
9668     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9669
9670     SET_SVANY_FOR_BODYLESS_IV(sv);
9671     SvFLAGS(sv) |= SVt_IV;
9672     SvROK_on(sv);
9673     SvIV_set(sv, 0);
9674
9675     SvTEMP_off(tmpRef);
9676     SvRV_set(sv, tmpRef);
9677
9678     return sv;
9679 }
9680
9681 /* newRV_inc is the official function name to use now.
9682  * newRV_inc is in fact #defined to newRV in sv.h
9683  */
9684
9685 SV *
9686 Perl_newRV(pTHX_ SV *const sv)
9687 {
9688     PERL_ARGS_ASSERT_NEWRV;
9689
9690     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9691 }
9692
9693 /*
9694 =for apidoc newSVsv
9695
9696 Creates a new SV which is an exact duplicate of the original SV.
9697 (Uses C<sv_setsv>.)
9698
9699 =cut
9700 */
9701
9702 SV *
9703 Perl_newSVsv(pTHX_ SV *const old)
9704 {
9705     SV *sv;
9706
9707     if (!old)
9708         return NULL;
9709     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9710         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9711         return NULL;
9712     }
9713     /* Do this here, otherwise we leak the new SV if this croaks. */
9714     SvGETMAGIC(old);
9715     new_SV(sv);
9716     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9717        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9718     sv_setsv_flags(sv, old, SV_NOSTEAL);
9719     return sv;
9720 }
9721
9722 /*
9723 =for apidoc sv_reset
9724
9725 Underlying implementation for the C<reset> Perl function.
9726 Note that the perl-level function is vaguely deprecated.
9727
9728 =cut
9729 */
9730
9731 void
9732 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9733 {
9734     PERL_ARGS_ASSERT_SV_RESET;
9735
9736     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9737 }
9738
9739 void
9740 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9741 {
9742     char todo[PERL_UCHAR_MAX+1];
9743     const char *send;
9744
9745     if (!stash || SvTYPE(stash) != SVt_PVHV)
9746         return;
9747
9748     if (!s) {           /* reset ?? searches */
9749         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9750         if (mg) {
9751             const U32 count = mg->mg_len / sizeof(PMOP**);
9752             PMOP **pmp = (PMOP**) mg->mg_ptr;
9753             PMOP *const *const end = pmp + count;
9754
9755             while (pmp < end) {
9756 #ifdef USE_ITHREADS
9757                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9758 #else
9759                 (*pmp)->op_pmflags &= ~PMf_USED;
9760 #endif
9761                 ++pmp;
9762             }
9763         }
9764         return;
9765     }
9766
9767     /* reset variables */
9768
9769     if (!HvARRAY(stash))
9770         return;
9771
9772     Zero(todo, 256, char);
9773     send = s + len;
9774     while (s < send) {
9775         I32 max;
9776         I32 i = (unsigned char)*s;
9777         if (s[1] == '-') {
9778             s += 2;
9779         }
9780         max = (unsigned char)*s++;
9781         for ( ; i <= max; i++) {
9782             todo[i] = 1;
9783         }
9784         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9785             HE *entry;
9786             for (entry = HvARRAY(stash)[i];
9787                  entry;
9788                  entry = HeNEXT(entry))
9789             {
9790                 GV *gv;
9791                 SV *sv;
9792
9793                 if (!todo[(U8)*HeKEY(entry)])
9794                     continue;
9795                 gv = MUTABLE_GV(HeVAL(entry));
9796                 if (!isGV(gv))
9797                     continue;
9798                 sv = GvSV(gv);
9799                 if (sv && !SvREADONLY(sv)) {
9800                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9801                     if (!isGV(sv)) SvOK_off(sv);
9802                 }
9803                 if (GvAV(gv)) {
9804                     av_clear(GvAV(gv));
9805                 }
9806                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9807                     hv_clear(GvHV(gv));
9808                 }
9809             }
9810         }
9811     }
9812 }
9813
9814 /*
9815 =for apidoc sv_2io
9816
9817 Using various gambits, try to get an IO from an SV: the IO slot if its a
9818 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9819 named after the PV if we're a string.
9820
9821 'Get' magic is ignored on the C<sv> passed in, but will be called on
9822 C<SvRV(sv)> if C<sv> is an RV.
9823
9824 =cut
9825 */
9826
9827 IO*
9828 Perl_sv_2io(pTHX_ SV *const sv)
9829 {
9830     IO* io;
9831     GV* gv;
9832
9833     PERL_ARGS_ASSERT_SV_2IO;
9834
9835     switch (SvTYPE(sv)) {
9836     case SVt_PVIO:
9837         io = MUTABLE_IO(sv);
9838         break;
9839     case SVt_PVGV:
9840     case SVt_PVLV:
9841         if (isGV_with_GP(sv)) {
9842             gv = MUTABLE_GV(sv);
9843             io = GvIO(gv);
9844             if (!io)
9845                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9846                                     HEKfARG(GvNAME_HEK(gv)));
9847             break;
9848         }
9849         /* FALLTHROUGH */
9850     default:
9851         if (!SvOK(sv))
9852             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9853         if (SvROK(sv)) {
9854             SvGETMAGIC(SvRV(sv));
9855             return sv_2io(SvRV(sv));
9856         }
9857         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9858         if (gv)
9859             io = GvIO(gv);
9860         else
9861             io = 0;
9862         if (!io) {
9863             SV *newsv = sv;
9864             if (SvGMAGICAL(sv)) {
9865                 newsv = sv_newmortal();
9866                 sv_setsv_nomg(newsv, sv);
9867             }
9868             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9869         }
9870         break;
9871     }
9872     return io;
9873 }
9874
9875 /*
9876 =for apidoc sv_2cv
9877
9878 Using various gambits, try to get a CV from an SV; in addition, try if
9879 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9880 The flags in C<lref> are passed to C<gv_fetchsv>.
9881
9882 =cut
9883 */
9884
9885 CV *
9886 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9887 {
9888     GV *gv = NULL;
9889     CV *cv = NULL;
9890
9891     PERL_ARGS_ASSERT_SV_2CV;
9892
9893     if (!sv) {
9894         *st = NULL;
9895         *gvp = NULL;
9896         return NULL;
9897     }
9898     switch (SvTYPE(sv)) {
9899     case SVt_PVCV:
9900         *st = CvSTASH(sv);
9901         *gvp = NULL;
9902         return MUTABLE_CV(sv);
9903     case SVt_PVHV:
9904     case SVt_PVAV:
9905         *st = NULL;
9906         *gvp = NULL;
9907         return NULL;
9908     default:
9909         SvGETMAGIC(sv);
9910         if (SvROK(sv)) {
9911             if (SvAMAGIC(sv))
9912                 sv = amagic_deref_call(sv, to_cv_amg);
9913
9914             sv = SvRV(sv);
9915             if (SvTYPE(sv) == SVt_PVCV) {
9916                 cv = MUTABLE_CV(sv);
9917                 *gvp = NULL;
9918                 *st = CvSTASH(cv);
9919                 return cv;
9920             }
9921             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9922                 gv = MUTABLE_GV(sv);
9923             else
9924                 Perl_croak(aTHX_ "Not a subroutine reference");
9925         }
9926         else if (isGV_with_GP(sv)) {
9927             gv = MUTABLE_GV(sv);
9928         }
9929         else {
9930             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9931         }
9932         *gvp = gv;
9933         if (!gv) {
9934             *st = NULL;
9935             return NULL;
9936         }
9937         /* Some flags to gv_fetchsv mean don't really create the GV  */
9938         if (!isGV_with_GP(gv)) {
9939             *st = NULL;
9940             return NULL;
9941         }
9942         *st = GvESTASH(gv);
9943         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9944             /* XXX this is probably not what they think they're getting.
9945              * It has the same effect as "sub name;", i.e. just a forward
9946              * declaration! */
9947             newSTUB(gv,0);
9948         }
9949         return GvCVu(gv);
9950     }
9951 }
9952
9953 /*
9954 =for apidoc sv_true
9955
9956 Returns true if the SV has a true value by Perl's rules.
9957 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9958 instead use an in-line version.
9959
9960 =cut
9961 */
9962
9963 I32
9964 Perl_sv_true(pTHX_ SV *const sv)
9965 {
9966     if (!sv)
9967         return 0;
9968     if (SvPOK(sv)) {
9969         const XPV* const tXpv = (XPV*)SvANY(sv);
9970         if (tXpv &&
9971                 (tXpv->xpv_cur > 1 ||
9972                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9973             return 1;
9974         else
9975             return 0;
9976     }
9977     else {
9978         if (SvIOK(sv))
9979             return SvIVX(sv) != 0;
9980         else {
9981             if (SvNOK(sv))
9982                 return SvNVX(sv) != 0.0;
9983             else
9984                 return sv_2bool(sv);
9985         }
9986     }
9987 }
9988
9989 /*
9990 =for apidoc sv_pvn_force
9991
9992 Get a sensible string out of the SV somehow.
9993 A private implementation of the C<SvPV_force> macro for compilers which
9994 can't cope with complex macro expressions.  Always use the macro instead.
9995
9996 =for apidoc sv_pvn_force_flags
9997
9998 Get a sensible string out of the SV somehow.
9999 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10000 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10001 implemented in terms of this function.
10002 You normally want to use the various wrapper macros instead: see
10003 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10004
10005 =cut
10006 */
10007
10008 char *
10009 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10010 {
10011     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10012
10013     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10014     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10015         sv_force_normal_flags(sv, 0);
10016
10017     if (SvPOK(sv)) {
10018         if (lp)
10019             *lp = SvCUR(sv);
10020     }
10021     else {
10022         char *s;
10023         STRLEN len;
10024  
10025         if (SvTYPE(sv) > SVt_PVLV
10026             || isGV_with_GP(sv))
10027             /* diag_listed_as: Can't coerce %s to %s in %s */
10028             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10029                 OP_DESC(PL_op));
10030         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10031         if (!s) {
10032           s = (char *)"";
10033         }
10034         if (lp)
10035             *lp = len;
10036
10037         if (SvTYPE(sv) < SVt_PV ||
10038             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10039             if (SvROK(sv))
10040                 sv_unref(sv);
10041             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10042             SvGROW(sv, len + 1);
10043             Move(s,SvPVX(sv),len,char);
10044             SvCUR_set(sv, len);
10045             SvPVX(sv)[len] = '\0';
10046         }
10047         if (!SvPOK(sv)) {
10048             SvPOK_on(sv);               /* validate pointer */
10049             SvTAINT(sv);
10050             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10051                                   PTR2UV(sv),SvPVX_const(sv)));
10052         }
10053     }
10054     (void)SvPOK_only_UTF8(sv);
10055     return SvPVX_mutable(sv);
10056 }
10057
10058 /*
10059 =for apidoc sv_pvbyten_force
10060
10061 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10062 instead.
10063
10064 =cut
10065 */
10066
10067 char *
10068 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10069 {
10070     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10071
10072     sv_pvn_force(sv,lp);
10073     sv_utf8_downgrade(sv,0);
10074     *lp = SvCUR(sv);
10075     return SvPVX(sv);
10076 }
10077
10078 /*
10079 =for apidoc sv_pvutf8n_force
10080
10081 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10082 instead.
10083
10084 =cut
10085 */
10086
10087 char *
10088 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10089 {
10090     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10091
10092     sv_pvn_force(sv,0);
10093     sv_utf8_upgrade_nomg(sv);
10094     *lp = SvCUR(sv);
10095     return SvPVX(sv);
10096 }
10097
10098 /*
10099 =for apidoc sv_reftype
10100
10101 Returns a string describing what the SV is a reference to.
10102
10103 If ob is true and the SV is blessed, the string is the class name,
10104 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10105
10106 =cut
10107 */
10108
10109 const char *
10110 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10111 {
10112     PERL_ARGS_ASSERT_SV_REFTYPE;
10113     if (ob && SvOBJECT(sv)) {
10114         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10115     }
10116     else {
10117         /* WARNING - There is code, for instance in mg.c, that assumes that
10118          * the only reason that sv_reftype(sv,0) would return a string starting
10119          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10120          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10121          * this routine inside other subs, and it saves time.
10122          * Do not change this assumption without searching for "dodgy type check" in
10123          * the code.
10124          * - Yves */
10125         switch (SvTYPE(sv)) {
10126         case SVt_NULL:
10127         case SVt_IV:
10128         case SVt_NV:
10129         case SVt_PV:
10130         case SVt_PVIV:
10131         case SVt_PVNV:
10132         case SVt_PVMG:
10133                                 if (SvVOK(sv))
10134                                     return "VSTRING";
10135                                 if (SvROK(sv))
10136                                     return "REF";
10137                                 else
10138                                     return "SCALAR";
10139
10140         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10141                                 /* tied lvalues should appear to be
10142                                  * scalars for backwards compatibility */
10143                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10144                                     ? "SCALAR" : "LVALUE");
10145         case SVt_PVAV:          return "ARRAY";
10146         case SVt_PVHV:          return "HASH";
10147         case SVt_PVCV:          return "CODE";
10148         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10149                                     ? "GLOB" : "SCALAR");
10150         case SVt_PVFM:          return "FORMAT";
10151         case SVt_PVIO:          return "IO";
10152         case SVt_INVLIST:       return "INVLIST";
10153         case SVt_REGEXP:        return "REGEXP";
10154         default:                return "UNKNOWN";
10155         }
10156     }
10157 }
10158
10159 /*
10160 =for apidoc sv_ref
10161
10162 Returns a SV describing what the SV passed in is a reference to.
10163
10164 dst can be a SV to be set to the description or NULL, in which case a
10165 mortal SV is returned.
10166
10167 If ob is true and the SV is blessed, the description is the class
10168 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10169
10170 =cut
10171 */
10172
10173 SV *
10174 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10175 {
10176     PERL_ARGS_ASSERT_SV_REF;
10177
10178     if (!dst)
10179         dst = sv_newmortal();
10180
10181     if (ob && SvOBJECT(sv)) {
10182         HvNAME_get(SvSTASH(sv))
10183                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10184                     : sv_setpvs(dst, "__ANON__");
10185     }
10186     else {
10187         const char * reftype = sv_reftype(sv, 0);
10188         sv_setpv(dst, reftype);
10189     }
10190     return dst;
10191 }
10192
10193 /*
10194 =for apidoc sv_isobject
10195
10196 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10197 object.  If the SV is not an RV, or if the object is not blessed, then this
10198 will return false.
10199
10200 =cut
10201 */
10202
10203 int
10204 Perl_sv_isobject(pTHX_ SV *sv)
10205 {
10206     if (!sv)
10207         return 0;
10208     SvGETMAGIC(sv);
10209     if (!SvROK(sv))
10210         return 0;
10211     sv = SvRV(sv);
10212     if (!SvOBJECT(sv))
10213         return 0;
10214     return 1;
10215 }
10216
10217 /*
10218 =for apidoc sv_isa
10219
10220 Returns a boolean indicating whether the SV is blessed into the specified
10221 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10222 an inheritance relationship.
10223
10224 =cut
10225 */
10226
10227 int
10228 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10229 {
10230     const char *hvname;
10231
10232     PERL_ARGS_ASSERT_SV_ISA;
10233
10234     if (!sv)
10235         return 0;
10236     SvGETMAGIC(sv);
10237     if (!SvROK(sv))
10238         return 0;
10239     sv = SvRV(sv);
10240     if (!SvOBJECT(sv))
10241         return 0;
10242     hvname = HvNAME_get(SvSTASH(sv));
10243     if (!hvname)
10244         return 0;
10245
10246     return strEQ(hvname, name);
10247 }
10248
10249 /*
10250 =for apidoc newSVrv
10251
10252 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10253 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10254 SV will be blessed in the specified package.  The new SV is returned and its
10255 reference count is 1.  The reference count 1 is owned by C<rv>.
10256
10257 =cut
10258 */
10259
10260 SV*
10261 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10262 {
10263     SV *sv;
10264
10265     PERL_ARGS_ASSERT_NEWSVRV;
10266
10267     new_SV(sv);
10268
10269     SV_CHECK_THINKFIRST_COW_DROP(rv);
10270
10271     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10272         const U32 refcnt = SvREFCNT(rv);
10273         SvREFCNT(rv) = 0;
10274         sv_clear(rv);
10275         SvFLAGS(rv) = 0;
10276         SvREFCNT(rv) = refcnt;
10277
10278         sv_upgrade(rv, SVt_IV);
10279     } else if (SvROK(rv)) {
10280         SvREFCNT_dec(SvRV(rv));
10281     } else {
10282         prepare_SV_for_RV(rv);
10283     }
10284
10285     SvOK_off(rv);
10286     SvRV_set(rv, sv);
10287     SvROK_on(rv);
10288
10289     if (classname) {
10290         HV* const stash = gv_stashpv(classname, GV_ADD);
10291         (void)sv_bless(rv, stash);
10292     }
10293     return sv;
10294 }
10295
10296 SV *
10297 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10298 {
10299     SV * const lv = newSV_type(SVt_PVLV);
10300     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10301     LvTYPE(lv) = 'y';
10302     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10303     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10304     LvSTARGOFF(lv) = ix;
10305     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10306     return lv;
10307 }
10308
10309 /*
10310 =for apidoc sv_setref_pv
10311
10312 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10313 argument will be upgraded to an RV.  That RV will be modified to point to
10314 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10315 into the SV.  The C<classname> argument indicates the package for the
10316 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10317 will have a reference count of 1, and the RV will be returned.
10318
10319 Do not use with other Perl types such as HV, AV, SV, CV, because those
10320 objects will become corrupted by the pointer copy process.
10321
10322 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10323
10324 =cut
10325 */
10326
10327 SV*
10328 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10329 {
10330     PERL_ARGS_ASSERT_SV_SETREF_PV;
10331
10332     if (!pv) {
10333         sv_set_undef(rv);
10334         SvSETMAGIC(rv);
10335     }
10336     else
10337         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10338     return rv;
10339 }
10340
10341 /*
10342 =for apidoc sv_setref_iv
10343
10344 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10345 argument will be upgraded to an RV.  That RV will be modified to point to
10346 the new SV.  The C<classname> argument indicates the package for the
10347 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10348 will have a reference count of 1, and the RV will be returned.
10349
10350 =cut
10351 */
10352
10353 SV*
10354 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10355 {
10356     PERL_ARGS_ASSERT_SV_SETREF_IV;
10357
10358     sv_setiv(newSVrv(rv,classname), iv);
10359     return rv;
10360 }
10361
10362 /*
10363 =for apidoc sv_setref_uv
10364
10365 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10366 argument will be upgraded to an RV.  That RV will be modified to point to
10367 the new SV.  The C<classname> argument indicates the package for the
10368 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10369 will have a reference count of 1, and the RV will be returned.
10370
10371 =cut
10372 */
10373
10374 SV*
10375 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10376 {
10377     PERL_ARGS_ASSERT_SV_SETREF_UV;
10378
10379     sv_setuv(newSVrv(rv,classname), uv);
10380     return rv;
10381 }
10382
10383 /*
10384 =for apidoc sv_setref_nv
10385
10386 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10387 argument will be upgraded to an RV.  That RV will be modified to point to
10388 the new SV.  The C<classname> argument indicates the package for the
10389 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10390 will have a reference count of 1, and the RV will be returned.
10391
10392 =cut
10393 */
10394
10395 SV*
10396 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10397 {
10398     PERL_ARGS_ASSERT_SV_SETREF_NV;
10399
10400     sv_setnv(newSVrv(rv,classname), nv);
10401     return rv;
10402 }
10403
10404 /*
10405 =for apidoc sv_setref_pvn
10406
10407 Copies a string into a new SV, optionally blessing the SV.  The length of the
10408 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10409 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10410 argument indicates the package for the blessing.  Set C<classname> to
10411 C<NULL> to avoid the blessing.  The new SV will have a reference count
10412 of 1, and the RV will be returned.
10413
10414 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10415
10416 =cut
10417 */
10418
10419 SV*
10420 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10421                    const char *const pv, const STRLEN n)
10422 {
10423     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10424
10425     sv_setpvn(newSVrv(rv,classname), pv, n);
10426     return rv;
10427 }
10428
10429 /*
10430 =for apidoc sv_bless
10431
10432 Blesses an SV into a specified package.  The SV must be an RV.  The package
10433 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10434 of the SV is unaffected.
10435
10436 =cut
10437 */
10438
10439 SV*
10440 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10441 {
10442     SV *tmpRef;
10443     HV *oldstash = NULL;
10444
10445     PERL_ARGS_ASSERT_SV_BLESS;
10446
10447     SvGETMAGIC(sv);
10448     if (!SvROK(sv))
10449         Perl_croak(aTHX_ "Can't bless non-reference value");
10450     tmpRef = SvRV(sv);
10451     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10452         if (SvREADONLY(tmpRef))
10453             Perl_croak_no_modify();
10454         if (SvOBJECT(tmpRef)) {
10455             oldstash = SvSTASH(tmpRef);
10456         }
10457     }
10458     SvOBJECT_on(tmpRef);
10459     SvUPGRADE(tmpRef, SVt_PVMG);
10460     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10461     SvREFCNT_dec(oldstash);
10462
10463     if(SvSMAGICAL(tmpRef))
10464         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10465             mg_set(tmpRef);
10466
10467
10468
10469     return sv;
10470 }
10471
10472 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10473  * as it is after unglobbing it.
10474  */
10475
10476 PERL_STATIC_INLINE void
10477 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10478 {
10479     void *xpvmg;
10480     HV *stash;
10481     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10482
10483     PERL_ARGS_ASSERT_SV_UNGLOB;
10484
10485     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10486     SvFAKE_off(sv);
10487     if (!(flags & SV_COW_DROP_PV))
10488         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10489
10490     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10491     if (GvGP(sv)) {
10492         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10493            && HvNAME_get(stash))
10494             mro_method_changed_in(stash);
10495         gp_free(MUTABLE_GV(sv));
10496     }
10497     if (GvSTASH(sv)) {
10498         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10499         GvSTASH(sv) = NULL;
10500     }
10501     GvMULTI_off(sv);
10502     if (GvNAME_HEK(sv)) {
10503         unshare_hek(GvNAME_HEK(sv));
10504     }
10505     isGV_with_GP_off(sv);
10506
10507     if(SvTYPE(sv) == SVt_PVGV) {
10508         /* need to keep SvANY(sv) in the right arena */
10509         xpvmg = new_XPVMG();
10510         StructCopy(SvANY(sv), xpvmg, XPVMG);
10511         del_XPVGV(SvANY(sv));
10512         SvANY(sv) = xpvmg;
10513
10514         SvFLAGS(sv) &= ~SVTYPEMASK;
10515         SvFLAGS(sv) |= SVt_PVMG;
10516     }
10517
10518     /* Intentionally not calling any local SET magic, as this isn't so much a
10519        set operation as merely an internal storage change.  */
10520     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10521     else sv_setsv_flags(sv, temp, 0);
10522
10523     if ((const GV *)sv == PL_last_in_gv)
10524         PL_last_in_gv = NULL;
10525     else if ((const GV *)sv == PL_statgv)
10526         PL_statgv = NULL;
10527 }
10528
10529 /*
10530 =for apidoc sv_unref_flags
10531
10532 Unsets the RV status of the SV, and decrements the reference count of
10533 whatever was being referenced by the RV.  This can almost be thought of
10534 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10535 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10536 (otherwise the decrementing is conditional on the reference count being
10537 different from one or the reference being a readonly SV).
10538 See C<L</SvROK_off>>.
10539
10540 =cut
10541 */
10542
10543 void
10544 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10545 {
10546     SV* const target = SvRV(ref);
10547
10548     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10549
10550     if (SvWEAKREF(ref)) {
10551         sv_del_backref(target, ref);
10552         SvWEAKREF_off(ref);
10553         SvRV_set(ref, NULL);
10554         return;
10555     }
10556     SvRV_set(ref, NULL);
10557     SvROK_off(ref);
10558     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10559        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10560     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10561         SvREFCNT_dec_NN(target);
10562     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10563         sv_2mortal(target);     /* Schedule for freeing later */
10564 }
10565
10566 /*
10567 =for apidoc sv_untaint
10568
10569 Untaint an SV.  Use C<SvTAINTED_off> instead.
10570
10571 =cut
10572 */
10573
10574 void
10575 Perl_sv_untaint(pTHX_ SV *const sv)
10576 {
10577     PERL_ARGS_ASSERT_SV_UNTAINT;
10578     PERL_UNUSED_CONTEXT;
10579
10580     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10581         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10582         if (mg)
10583             mg->mg_len &= ~1;
10584     }
10585 }
10586
10587 /*
10588 =for apidoc sv_tainted
10589
10590 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10591
10592 =cut
10593 */
10594
10595 bool
10596 Perl_sv_tainted(pTHX_ SV *const sv)
10597 {
10598     PERL_ARGS_ASSERT_SV_TAINTED;
10599     PERL_UNUSED_CONTEXT;
10600
10601     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10602         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10603         if (mg && (mg->mg_len & 1) )
10604             return TRUE;
10605     }
10606     return FALSE;
10607 }
10608
10609 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10610                        private to this file */
10611
10612 /*
10613 =for apidoc sv_setpviv
10614
10615 Copies an integer into the given SV, also updating its string value.
10616 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10617
10618 =cut
10619 */
10620
10621 void
10622 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10623 {
10624     char buf[TYPE_CHARS(UV)];
10625     char *ebuf;
10626     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10627
10628     PERL_ARGS_ASSERT_SV_SETPVIV;
10629
10630     sv_setpvn(sv, ptr, ebuf - ptr);
10631 }
10632
10633 /*
10634 =for apidoc sv_setpviv_mg
10635
10636 Like C<sv_setpviv>, but also handles 'set' magic.
10637
10638 =cut
10639 */
10640
10641 void
10642 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10643 {
10644     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10645
10646     sv_setpviv(sv, iv);
10647     SvSETMAGIC(sv);
10648 }
10649
10650 #endif  /* NO_MATHOMS */
10651
10652 #if defined(PERL_IMPLICIT_CONTEXT)
10653
10654 /* pTHX_ magic can't cope with varargs, so this is a no-context
10655  * version of the main function, (which may itself be aliased to us).
10656  * Don't access this version directly.
10657  */
10658
10659 void
10660 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10661 {
10662     dTHX;
10663     va_list args;
10664
10665     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10666
10667     va_start(args, pat);
10668     sv_vsetpvf(sv, pat, &args);
10669     va_end(args);
10670 }
10671
10672 /* pTHX_ magic can't cope with varargs, so this is a no-context
10673  * version of the main function, (which may itself be aliased to us).
10674  * Don't access this version directly.
10675  */
10676
10677 void
10678 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10679 {
10680     dTHX;
10681     va_list args;
10682
10683     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10684
10685     va_start(args, pat);
10686     sv_vsetpvf_mg(sv, pat, &args);
10687     va_end(args);
10688 }
10689 #endif
10690
10691 /*
10692 =for apidoc sv_setpvf
10693
10694 Works like C<sv_catpvf> but copies the text into the SV instead of
10695 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10696
10697 =cut
10698 */
10699
10700 void
10701 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10702 {
10703     va_list args;
10704
10705     PERL_ARGS_ASSERT_SV_SETPVF;
10706
10707     va_start(args, pat);
10708     sv_vsetpvf(sv, pat, &args);
10709     va_end(args);
10710 }
10711
10712 /*
10713 =for apidoc sv_vsetpvf
10714
10715 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10716 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10717
10718 Usually used via its frontend C<sv_setpvf>.
10719
10720 =cut
10721 */
10722
10723 void
10724 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10725 {
10726     PERL_ARGS_ASSERT_SV_VSETPVF;
10727
10728     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10729 }
10730
10731 /*
10732 =for apidoc sv_setpvf_mg
10733
10734 Like C<sv_setpvf>, but also handles 'set' magic.
10735
10736 =cut
10737 */
10738
10739 void
10740 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10741 {
10742     va_list args;
10743
10744     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10745
10746     va_start(args, pat);
10747     sv_vsetpvf_mg(sv, pat, &args);
10748     va_end(args);
10749 }
10750
10751 /*
10752 =for apidoc sv_vsetpvf_mg
10753
10754 Like C<sv_vsetpvf>, but also handles 'set' magic.
10755
10756 Usually used via its frontend C<sv_setpvf_mg>.
10757
10758 =cut
10759 */
10760
10761 void
10762 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10763 {
10764     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10765
10766     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10767     SvSETMAGIC(sv);
10768 }
10769
10770 #if defined(PERL_IMPLICIT_CONTEXT)
10771
10772 /* pTHX_ magic can't cope with varargs, so this is a no-context
10773  * version of the main function, (which may itself be aliased to us).
10774  * Don't access this version directly.
10775  */
10776
10777 void
10778 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10779 {
10780     dTHX;
10781     va_list args;
10782
10783     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10784
10785     va_start(args, pat);
10786     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10787     va_end(args);
10788 }
10789
10790 /* pTHX_ magic can't cope with varargs, so this is a no-context
10791  * version of the main function, (which may itself be aliased to us).
10792  * Don't access this version directly.
10793  */
10794
10795 void
10796 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10797 {
10798     dTHX;
10799     va_list args;
10800
10801     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10802
10803     va_start(args, pat);
10804     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10805     SvSETMAGIC(sv);
10806     va_end(args);
10807 }
10808 #endif
10809
10810 /*
10811 =for apidoc sv_catpvf
10812
10813 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10814 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10815 variable argument list, argument reordering is not supported.
10816 If the appended data contains "wide" characters
10817 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10818 and characters >255 formatted with C<%c>), the original SV might get
10819 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10820 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10821 valid UTF-8; if the original SV was bytes, the pattern should be too.
10822
10823 =cut */
10824
10825 void
10826 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10827 {
10828     va_list args;
10829
10830     PERL_ARGS_ASSERT_SV_CATPVF;
10831
10832     va_start(args, pat);
10833     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10834     va_end(args);
10835 }
10836
10837 /*
10838 =for apidoc sv_vcatpvf
10839
10840 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10841 variable argument list, and appends the formatted output
10842 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10843
10844 Usually used via its frontend C<sv_catpvf>.
10845
10846 =cut
10847 */
10848
10849 void
10850 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10851 {
10852     PERL_ARGS_ASSERT_SV_VCATPVF;
10853
10854     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10855 }
10856
10857 /*
10858 =for apidoc sv_catpvf_mg
10859
10860 Like C<sv_catpvf>, but also handles 'set' magic.
10861
10862 =cut
10863 */
10864
10865 void
10866 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10867 {
10868     va_list args;
10869
10870     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10871
10872     va_start(args, pat);
10873     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10874     SvSETMAGIC(sv);
10875     va_end(args);
10876 }
10877
10878 /*
10879 =for apidoc sv_vcatpvf_mg
10880
10881 Like C<sv_vcatpvf>, but also handles 'set' magic.
10882
10883 Usually used via its frontend C<sv_catpvf_mg>.
10884
10885 =cut
10886 */
10887
10888 void
10889 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10890 {
10891     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10892
10893     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10894     SvSETMAGIC(sv);
10895 }
10896
10897 /*
10898 =for apidoc sv_vsetpvfn
10899
10900 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10901 appending it.
10902
10903 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10904
10905 =cut
10906 */
10907
10908 void
10909 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10910                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
10911 {
10912     PERL_ARGS_ASSERT_SV_VSETPVFN;
10913
10914     SvPVCLEAR(sv);
10915     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
10916 }
10917
10918
10919 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
10920
10921 PERL_STATIC_INLINE void
10922 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
10923 {
10924     STRLEN const need = len + SvCUR(sv) + 1;
10925     char *end;
10926
10927     /* can't wrap as both len and SvCUR() are allocated in
10928      * memory and together can't consume all the address space
10929      */
10930     assert(need > len);
10931
10932     assert(SvPOK(sv));
10933     SvGROW(sv, need);
10934     end = SvEND(sv);
10935     Copy(buf, end, len, char);
10936     end += len;
10937     *end = '\0';
10938     SvCUR_set(sv, need - 1);
10939 }
10940
10941
10942 /*
10943  * Warn of missing argument to sprintf. The value used in place of such
10944  * arguments should be &PL_sv_no; an undefined value would yield
10945  * inappropriate "use of uninit" warnings [perl #71000].
10946  */
10947 STATIC void
10948 S_warn_vcatpvfn_missing_argument(pTHX) {
10949     if (ckWARN(WARN_MISSING)) {
10950         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10951                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10952     }
10953 }
10954
10955
10956 static void
10957 S_croak_overflow()
10958 {
10959     dTHX;
10960     Perl_croak(aTHX_ "Integer overflow in format string for %s",
10961                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10962 }
10963
10964
10965 /* Given an int i from the next arg (if args is true) or an sv from an arg
10966  * (if args is false), try to extract a STRLEN-ranged value from the arg,
10967  * with overflow checking.
10968  * Sets *neg to true if the value was negative (untouched otherwise.
10969  * Returns the absolute value.
10970  * As an extra margin of safety, it croaks if the returned value would
10971  * exceed the maximum value of a STRLEN / 4.
10972  */
10973
10974 static STRLEN
10975 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
10976 {
10977     IV iv;
10978
10979     if (args) {
10980         iv = i;
10981         goto do_iv;
10982     }
10983
10984     if (!sv)
10985         return 0;
10986
10987     SvGETMAGIC(sv);
10988
10989     if (UNLIKELY(SvIsUV(sv))) {
10990         UV uv = SvUV_nomg(sv);
10991         if (uv > IV_MAX)
10992             S_croak_overflow();
10993         iv = uv;
10994     }
10995     else {
10996         iv = SvIV_nomg(sv);
10997       do_iv:
10998         if (iv < 0) {
10999             if (iv < -IV_MAX)
11000                 S_croak_overflow();
11001             iv = -iv;
11002             *neg = TRUE;
11003         }
11004     }
11005
11006     if (iv > (IV)(((STRLEN)~0) / 4))
11007         S_croak_overflow();
11008
11009     return (STRLEN)iv;
11010 }
11011
11012
11013 /* Returns true if c is in the range '1'..'9'
11014  * Written with the cast so it only needs one conditional test
11015  */
11016 #define IS_1_TO_9(c) ((U8)(c - '1') <= 8)
11017
11018 /* Read in and return a number. Updates *pattern to point to the char
11019  * following the number. Expects the first char to 1..9.
11020  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11021  * This is a belt-and-braces safety measure to complement any
11022  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11023  * It means that e.g. on a 32-bit system the width/precision can't be more
11024  * than 1G, which seems reasonable.
11025  */
11026
11027 STATIC STRLEN
11028 S_expect_number(pTHX_ const char **const pattern)
11029 {
11030     STRLEN var;
11031
11032     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11033
11034     assert(IS_1_TO_9(**pattern));
11035
11036     var = *(*pattern)++ - '0';
11037     while (isDIGIT(**pattern)) {
11038         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11039         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11040             S_croak_overflow();
11041         var = var * 10 + (*(*pattern)++ - '0');
11042     }
11043     return var;
11044 }
11045
11046 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11047  * ensures it's big enough), back fill it with the rounded integer part of
11048  * nv. Returns ptr to start of string, and sets *len to its length.
11049  * Returns NULL if not convertible.
11050  */
11051
11052 STATIC char *
11053 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11054 {
11055     const int neg = nv < 0;
11056     UV uv;
11057
11058     PERL_ARGS_ASSERT_F0CONVERT;
11059
11060     assert(!Perl_isinfnan(nv));
11061     if (neg)
11062         nv = -nv;
11063     if (nv != 0.0 && nv < UV_MAX) {
11064         char *p = endbuf;
11065         uv = (UV)nv;
11066         if (uv != nv) {
11067             nv += 0.5;
11068             uv = (UV)nv;
11069             if (uv & 1 && uv == nv)
11070                 uv--;                   /* Round to even */
11071         }
11072         do {
11073             const unsigned dig = uv % 10;
11074             *--p = '0' + dig;
11075         } while (uv /= 10);
11076         if (neg)
11077             *--p = '-';
11078         *len = endbuf - p;
11079         return p;
11080     }
11081     return NULL;
11082 }
11083
11084
11085 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11086
11087 void
11088 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11089                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11090 {
11091     PERL_ARGS_ASSERT_SV_VCATPVFN;
11092
11093     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11094 }
11095
11096
11097 /* For the vcatpvfn code, we need a long double target in case
11098  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11099  * with long double formats, even without NV being long double.  But we
11100  * call the target 'fv' instead of 'nv', since most of the time it is not
11101  * (most compilers these days recognize "long double", even if only as a
11102  * synonym for "double").
11103 */
11104 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11105         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11106 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11107 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11108        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11109 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11110             STMT_START {                                \
11111                 double _dv = nv;                        \
11112                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11113             } STMT_END
11114 #  else
11115 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11116 #  endif
11117    typedef long double vcatpvfn_long_double_t;
11118 #else
11119 #  define VCATPVFN_FV_GF NVgf
11120 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11121    typedef NV vcatpvfn_long_double_t;
11122 #endif
11123
11124 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11125 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11126  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11127  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11128  * after the first 1023 zero bits.
11129  *
11130  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11131  * of dynamically growing buffer might be better, start at just 16 bytes
11132  * (for example) and grow only when necessary.  Or maybe just by looking
11133  * at the exponents of the two doubles? */
11134 #  define DOUBLEDOUBLE_MAXBITS 2098
11135 #endif
11136
11137 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11138  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11139  * per xdigit.  For the double-double case, this can be rather many.
11140  * The non-double-double-long-double overshoots since all bits of NV
11141  * are not mantissa bits, there are also exponent bits. */
11142 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11143 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11144 #else
11145 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11146 #endif
11147
11148 /* If we do not have a known long double format, (including not using
11149  * long doubles, or long doubles being equal to doubles) then we will
11150  * fall back to the ldexp/frexp route, with which we can retrieve at
11151  * most as many bits as our widest unsigned integer type is.  We try
11152  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11153  *
11154  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11155  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11156  */
11157 #if defined(HAS_QUAD) && defined(Uquad_t)
11158 #  define MANTISSATYPE Uquad_t
11159 #  define MANTISSASIZE 8
11160 #else
11161 #  define MANTISSATYPE UV
11162 #  define MANTISSASIZE UVSIZE
11163 #endif
11164
11165 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11166 #  define HEXTRACT_LITTLE_ENDIAN
11167 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11168 #  define HEXTRACT_BIG_ENDIAN
11169 #else
11170 #  define HEXTRACT_MIX_ENDIAN
11171 #endif
11172
11173 /* S_hextract() is a helper for S_format_hexfp, for extracting
11174  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11175  * are being extracted from (either directly from the long double in-memory
11176  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11177  * is used to update the exponent.  The subnormal is set to true
11178  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11179  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11180  *
11181  * The tricky part is that S_hextract() needs to be called twice:
11182  * the first time with vend as NULL, and the second time with vend as
11183  * the pointer returned by the first call.  What happens is that on
11184  * the first round the output size is computed, and the intended
11185  * extraction sanity checked.  On the second round the actual output
11186  * (the extraction of the hexadecimal values) takes place.
11187  * Sanity failures cause fatal failures during both rounds. */
11188 STATIC U8*
11189 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11190            U8* vhex, U8* vend)
11191 {
11192     U8* v = vhex;
11193     int ix;
11194     int ixmin = 0, ixmax = 0;
11195
11196     /* XXX Inf/NaN are not handled here, since it is
11197      * assumed they are to be output as "Inf" and "NaN". */
11198
11199     /* These macros are just to reduce typos, they have multiple
11200      * repetitions below, but usually only one (or sometimes two)
11201      * of them is really being used. */
11202     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11203 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11204 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11205 #define HEXTRACT_OUTPUT(ix) \
11206     STMT_START { \
11207       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11208    } STMT_END
11209 #define HEXTRACT_COUNT(ix, c) \
11210     STMT_START { \
11211       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11212    } STMT_END
11213 #define HEXTRACT_BYTE(ix) \
11214     STMT_START { \
11215       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11216    } STMT_END
11217 #define HEXTRACT_LO_NYBBLE(ix) \
11218     STMT_START { \
11219       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11220    } STMT_END
11221     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11222      * to make it look less odd when the top bits of a NV
11223      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11224      * order bits can be in the "low nybble" of a byte. */
11225 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11226 #define HEXTRACT_BYTES_LE(a, b) \
11227     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11228 #define HEXTRACT_BYTES_BE(a, b) \
11229     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11230 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11231 #define HEXTRACT_IMPLICIT_BIT(nv) \
11232     STMT_START { \
11233         if (!*subnormal) { \
11234             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11235         } \
11236    } STMT_END
11237
11238 /* Most formats do.  Those which don't should undef this.
11239  *
11240  * But also note that IEEE 754 subnormals do not have it, or,
11241  * expressed alternatively, their implicit bit is zero. */
11242 #define HEXTRACT_HAS_IMPLICIT_BIT
11243
11244 /* Many formats do.  Those which don't should undef this. */
11245 #define HEXTRACT_HAS_TOP_NYBBLE
11246
11247     /* HEXTRACTSIZE is the maximum number of xdigits. */
11248 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11249 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11250 #else
11251 #  define HEXTRACTSIZE 2 * NVSIZE
11252 #endif
11253
11254     const U8* vmaxend = vhex + HEXTRACTSIZE;
11255
11256     assert(HEXTRACTSIZE <= VHEX_SIZE);
11257
11258     PERL_UNUSED_VAR(ix); /* might happen */
11259     (void)Perl_frexp(PERL_ABS(nv), exponent);
11260     *subnormal = FALSE;
11261     if (vend && (vend <= vhex || vend > vmaxend)) {
11262         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11263         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11264     }
11265     {
11266         /* First check if using long doubles. */
11267 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11268 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11269         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11270          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11271         /* The bytes 13..0 are the mantissa/fraction,
11272          * the 15,14 are the sign+exponent. */
11273         const U8* nvp = (const U8*)(&nv);
11274         HEXTRACT_GET_SUBNORMAL(nv);
11275         HEXTRACT_IMPLICIT_BIT(nv);
11276 #    undef HEXTRACT_HAS_TOP_NYBBLE
11277         HEXTRACT_BYTES_LE(13, 0);
11278 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11279         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11280          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11281         /* The bytes 2..15 are the mantissa/fraction,
11282          * the 0,1 are the sign+exponent. */
11283         const U8* nvp = (const U8*)(&nv);
11284         HEXTRACT_GET_SUBNORMAL(nv);
11285         HEXTRACT_IMPLICIT_BIT(nv);
11286 #    undef HEXTRACT_HAS_TOP_NYBBLE
11287         HEXTRACT_BYTES_BE(2, 15);
11288 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11289         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11290          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11291          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11292          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11293         /* The bytes 0..1 are the sign+exponent,
11294          * the bytes 2..9 are the mantissa/fraction. */
11295         const U8* nvp = (const U8*)(&nv);
11296 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11297 #    undef HEXTRACT_HAS_TOP_NYBBLE
11298         HEXTRACT_GET_SUBNORMAL(nv);
11299         HEXTRACT_BYTES_LE(7, 0);
11300 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11301         /* Does this format ever happen? (Wikipedia says the Motorola
11302          * 6888x math coprocessors used format _like_ this but padded
11303          * to 96 bits with 16 unused bits between the exponent and the
11304          * mantissa.) */
11305         const U8* nvp = (const U8*)(&nv);
11306 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11307 #    undef HEXTRACT_HAS_TOP_NYBBLE
11308         HEXTRACT_GET_SUBNORMAL(nv);
11309         HEXTRACT_BYTES_BE(0, 7);
11310 #  else
11311 #    define HEXTRACT_FALLBACK
11312         /* Double-double format: two doubles next to each other.
11313          * The first double is the high-order one, exactly like
11314          * it would be for a "lone" double.  The second double
11315          * is shifted down using the exponent so that that there
11316          * are no common bits.  The tricky part is that the value
11317          * of the double-double is the SUM of the two doubles and
11318          * the second one can be also NEGATIVE.
11319          *
11320          * Because of this tricky construction the bytewise extraction we
11321          * use for the other long double formats doesn't work, we must
11322          * extract the values bit by bit.
11323          *
11324          * The little-endian double-double is used .. somewhere?
11325          *
11326          * The big endian double-double is used in e.g. PPC/Power (AIX)
11327          * and MIPS (SGI).
11328          *
11329          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11330          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11331          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11332          */
11333 #  endif
11334 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11335         /* Using normal doubles, not long doubles.
11336          *
11337          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11338          * bytes, since we might need to handle printf precision, and
11339          * also need to insert the radix. */
11340 #  if NVSIZE == 8
11341 #    ifdef HEXTRACT_LITTLE_ENDIAN
11342         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11343         const U8* nvp = (const U8*)(&nv);
11344         HEXTRACT_GET_SUBNORMAL(nv);
11345         HEXTRACT_IMPLICIT_BIT(nv);
11346         HEXTRACT_TOP_NYBBLE(6);
11347         HEXTRACT_BYTES_LE(5, 0);
11348 #    elif defined(HEXTRACT_BIG_ENDIAN)
11349         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11350         const U8* nvp = (const U8*)(&nv);
11351         HEXTRACT_GET_SUBNORMAL(nv);
11352         HEXTRACT_IMPLICIT_BIT(nv);
11353         HEXTRACT_TOP_NYBBLE(1);
11354         HEXTRACT_BYTES_BE(2, 7);
11355 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11356         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11357         const U8* nvp = (const U8*)(&nv);
11358         HEXTRACT_GET_SUBNORMAL(nv);
11359         HEXTRACT_IMPLICIT_BIT(nv);
11360         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11361         HEXTRACT_BYTE(1); /* 5 */
11362         HEXTRACT_BYTE(0); /* 4 */
11363         HEXTRACT_BYTE(7); /* 3 */
11364         HEXTRACT_BYTE(6); /* 2 */
11365         HEXTRACT_BYTE(5); /* 1 */
11366         HEXTRACT_BYTE(4); /* 0 */
11367 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11368         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11369         const U8* nvp = (const U8*)(&nv);
11370         HEXTRACT_GET_SUBNORMAL(nv);
11371         HEXTRACT_IMPLICIT_BIT(nv);
11372         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11373         HEXTRACT_BYTE(6); /* 5 */
11374         HEXTRACT_BYTE(7); /* 4 */
11375         HEXTRACT_BYTE(0); /* 3 */
11376         HEXTRACT_BYTE(1); /* 2 */
11377         HEXTRACT_BYTE(2); /* 1 */
11378         HEXTRACT_BYTE(3); /* 0 */
11379 #    else
11380 #      define HEXTRACT_FALLBACK
11381 #    endif
11382 #  else
11383 #    define HEXTRACT_FALLBACK
11384 #  endif
11385 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11386
11387 #ifdef HEXTRACT_FALLBACK
11388         HEXTRACT_GET_SUBNORMAL(nv);
11389 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11390         /* The fallback is used for the double-double format, and
11391          * for unknown long double formats, and for unknown double
11392          * formats, or in general unknown NV formats. */
11393         if (nv == (NV)0.0) {
11394             if (vend)
11395                 *v++ = 0;
11396             else
11397                 v++;
11398             *exponent = 0;
11399         }
11400         else {
11401             NV d = nv < 0 ? -nv : nv;
11402             NV e = (NV)1.0;
11403             U8 ha = 0x0; /* hexvalue accumulator */
11404             U8 hd = 0x8; /* hexvalue digit */
11405
11406             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11407              * this is essentially manual frexp(). Multiplying by 0.5 and
11408              * doubling should be lossless in binary floating point. */
11409
11410             *exponent = 1;
11411
11412             while (e > d) {
11413                 e *= (NV)0.5;
11414                 (*exponent)--;
11415             }
11416             /* Now d >= e */
11417
11418             while (d >= e + e) {
11419                 e += e;
11420                 (*exponent)++;
11421             }
11422             /* Now e <= d < 2*e */
11423
11424             /* First extract the leading hexdigit (the implicit bit). */
11425             if (d >= e) {
11426                 d -= e;
11427                 if (vend)
11428                     *v++ = 1;
11429                 else
11430                     v++;
11431             }
11432             else {
11433                 if (vend)
11434                     *v++ = 0;
11435                 else
11436                     v++;
11437             }
11438             e *= (NV)0.5;
11439
11440             /* Then extract the remaining hexdigits. */
11441             while (d > (NV)0.0) {
11442                 if (d >= e) {
11443                     ha |= hd;
11444                     d -= e;
11445                 }
11446                 if (hd == 1) {
11447                     /* Output or count in groups of four bits,
11448                      * that is, when the hexdigit is down to one. */
11449                     if (vend)
11450                         *v++ = ha;
11451                     else
11452                         v++;
11453                     /* Reset the hexvalue. */
11454                     ha = 0x0;
11455                     hd = 0x8;
11456                 }
11457                 else
11458                     hd >>= 1;
11459                 e *= (NV)0.5;
11460             }
11461
11462             /* Flush possible pending hexvalue. */
11463             if (ha) {
11464                 if (vend)
11465                     *v++ = ha;
11466                 else
11467                     v++;
11468             }
11469         }
11470 #endif
11471     }
11472     /* Croak for various reasons: if the output pointer escaped the
11473      * output buffer, if the extraction index escaped the extraction
11474      * buffer, or if the ending output pointer didn't match the
11475      * previously computed value. */
11476     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11477         /* For double-double the ixmin and ixmax stay at zero,
11478          * which is convenient since the HEXTRACTSIZE is tricky
11479          * for double-double. */
11480         ixmin < 0 || ixmax >= NVSIZE ||
11481         (vend && v != vend)) {
11482         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11483         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11484     }
11485     return v;
11486 }
11487
11488
11489 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11490  *
11491  * Processes the %a/%A hexadecimal floating-point format, since the
11492  * built-in snprintf()s which are used for most of the f/p formats, don't
11493  * universally handle %a/%A.
11494  * Populates buf of length bufsize, and returns the length of the created
11495  * string.
11496  * The rest of the args have the same meaning as the local vars of the
11497  * same name within Perl_sv_vcatpvfn_flags().
11498  *
11499  * It assumes the caller has already done STORE_LC_NUMERIC_SET_TO_NEEDED();
11500  *
11501  * It requires the caller to make buf large enough.
11502  */
11503
11504 static STRLEN
11505 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11506                     const NV nv, const vcatpvfn_long_double_t fv,
11507                     bool has_precis, STRLEN precis, STRLEN width,
11508                     bool alt, char plus, bool left, bool fill)
11509 {
11510     /* Hexadecimal floating point. */
11511     char* p = buf;
11512     U8 vhex[VHEX_SIZE];
11513     U8* v = vhex; /* working pointer to vhex */
11514     U8* vend; /* pointer to one beyond last digit of vhex */
11515     U8* vfnz = NULL; /* first non-zero */
11516     U8* vlnz = NULL; /* last non-zero */
11517     U8* v0 = NULL; /* first output */
11518     const bool lower = (c == 'a');
11519     /* At output the values of vhex (up to vend) will
11520      * be mapped through the xdig to get the actual
11521      * human-readable xdigits. */
11522     const char* xdig = PL_hexdigit;
11523     STRLEN zerotail = 0; /* how many extra zeros to append */
11524     int exponent = 0; /* exponent of the floating point input */
11525     bool hexradix = FALSE; /* should we output the radix */
11526     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11527     bool negative = FALSE;
11528     STRLEN elen;
11529
11530     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11531      *
11532      * For example with denormals, (assuming the vanilla
11533      * 64-bit double): the exponent is zero. 1xp-1074 is
11534      * the smallest denormal and the smallest double, it
11535      * could be output also as 0x0.0000000000001p-1022 to
11536      * match its internal structure. */
11537
11538     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11539     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11540
11541 #if NVSIZE > DOUBLESIZE
11542 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11543     /* In this case there is an implicit bit,
11544      * and therefore the exponent is shifted by one. */
11545     exponent--;
11546 #  elif defined(NV_X86_80_BIT)
11547     if (subnormal) {
11548         /* The subnormals of the x86-80 have a base exponent of -16382,
11549          * (while the physical exponent bits are zero) but the frexp()
11550          * returned the scientific-style floating exponent.  We want
11551          * to map the last one as:
11552          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11553          * -16835..-16388 -> -16384
11554          * since we want to keep the first hexdigit
11555          * as one of the [8421]. */
11556         exponent = -4 * ( (exponent + 1) / -4) - 2;
11557     } else {
11558         exponent -= 4;
11559     }
11560     /* TBD: other non-implicit-bit platforms than the x86-80. */
11561 #  endif
11562 #endif
11563
11564     negative = fv < 0 || Perl_signbit(nv);
11565     if (negative)
11566         *p++ = '-';
11567     else if (plus)
11568         *p++ = plus;
11569     *p++ = '0';
11570     if (lower) {
11571         *p++ = 'x';
11572     }
11573     else {
11574         *p++ = 'X';
11575         xdig += 16; /* Use uppercase hex. */
11576     }
11577
11578     /* Find the first non-zero xdigit. */
11579     for (v = vhex; v < vend; v++) {
11580         if (*v) {
11581             vfnz = v;
11582             break;
11583         }
11584     }
11585
11586     if (vfnz) {
11587         /* Find the last non-zero xdigit. */
11588         for (v = vend - 1; v >= vhex; v--) {
11589             if (*v) {
11590                 vlnz = v;
11591                 break;
11592             }
11593         }
11594
11595 #if NVSIZE == DOUBLESIZE
11596         if (fv != 0.0)
11597             exponent--;
11598 #endif
11599
11600         if (subnormal) {
11601 #ifndef NV_X86_80_BIT
11602           if (vfnz[0] > 1) {
11603             /* IEEE 754 subnormals (but not the x86 80-bit):
11604              * we want "normalize" the subnormal,
11605              * so we need to right shift the hex nybbles
11606              * so that the output of the subnormal starts
11607              * from the first true bit.  (Another, equally
11608              * valid, policy would be to dump the subnormal
11609              * nybbles as-is, to display the "physical" layout.) */
11610             int i, n;
11611             U8 *vshr;
11612             /* Find the ceil(log2(v[0])) of
11613              * the top non-zero nybble. */
11614             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11615             assert(n < 4);
11616             assert(vlnz);
11617             vlnz[1] = 0;
11618             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11619               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11620               vshr[0] >>= n;
11621             }
11622             if (vlnz[1]) {
11623               vlnz++;
11624             }
11625           }
11626 #endif
11627           v0 = vfnz;
11628         } else {
11629           v0 = vhex;
11630         }
11631
11632         if (has_precis) {
11633             U8* ve = (subnormal ? vlnz + 1 : vend);
11634             SSize_t vn = ve - v0;
11635             assert(vn >= 1);
11636             if (precis < (Size_t)(vn - 1)) {
11637                 bool overflow = FALSE;
11638                 if (v0[precis + 1] < 0x8) {
11639                     /* Round down, nothing to do. */
11640                 } else if (v0[precis + 1] > 0x8) {
11641                     /* Round up. */
11642                     v0[precis]++;
11643                     overflow = v0[precis] > 0xF;
11644                     v0[precis] &= 0xF;
11645                 } else { /* v0[precis] == 0x8 */
11646                     /* Half-point: round towards the one
11647                      * with the even least-significant digit:
11648                      * 08 -> 0  88 -> 8
11649                      * 18 -> 2  98 -> a
11650                      * 28 -> 2  a8 -> a
11651                      * 38 -> 4  b8 -> c
11652                      * 48 -> 4  c8 -> c
11653                      * 58 -> 6  d8 -> e
11654                      * 68 -> 6  e8 -> e
11655                      * 78 -> 8  f8 -> 10 */
11656                     if ((v0[precis] & 0x1)) {
11657                         v0[precis]++;
11658                     }
11659                     overflow = v0[precis] > 0xF;
11660                     v0[precis] &= 0xF;
11661                 }
11662
11663                 if (overflow) {
11664                     for (v = v0 + precis - 1; v >= v0; v--) {
11665                         (*v)++;
11666                         overflow = *v > 0xF;
11667                         (*v) &= 0xF;
11668                         if (!overflow) {
11669                             break;
11670                         }
11671                     }
11672                     if (v == v0 - 1 && overflow) {
11673                         /* If the overflow goes all the
11674                          * way to the front, we need to
11675                          * insert 0x1 in front, and adjust
11676                          * the exponent. */
11677                         Move(v0, v0 + 1, vn - 1, char);
11678                         *v0 = 0x1;
11679                         exponent += 4;
11680                     }
11681                 }
11682
11683                 /* The new effective "last non zero". */
11684                 vlnz = v0 + precis;
11685             }
11686             else {
11687                 zerotail =
11688                   subnormal ? precis - vn + 1 :
11689                   precis - (vlnz - vhex);
11690             }
11691         }
11692
11693         v = v0;
11694         *p++ = xdig[*v++];
11695
11696         /* If there are non-zero xdigits, the radix
11697          * is output after the first one. */
11698         if (vfnz < vlnz) {
11699           hexradix = TRUE;
11700         }
11701     }
11702     else {
11703         *p++ = '0';
11704         exponent = 0;
11705         zerotail = precis;
11706     }
11707
11708     /* The radix is always output if precis, or if alt. */
11709     if (precis > 0 || alt) {
11710       hexradix = TRUE;
11711     }
11712
11713     if (hexradix) {
11714 #ifndef USE_LOCALE_NUMERIC
11715             *p++ = '.';
11716 #else
11717             if (IN_LC(LC_NUMERIC)) {
11718                 STRLEN n;
11719                 const char* r = SvPV(PL_numeric_radix_sv, n);
11720                 Copy(r, p, n, char);
11721                 p += n;
11722             }
11723             else {
11724                 *p++ = '.';
11725             }
11726 #endif
11727     }
11728
11729     if (vlnz) {
11730         while (v <= vlnz)
11731             *p++ = xdig[*v++];
11732     }
11733
11734     if (zerotail > 0) {
11735       while (zerotail--) {
11736         *p++ = '0';
11737       }
11738     }
11739
11740     elen = p - buf;
11741
11742     /* sanity checks */
11743     if (elen >= bufsize || width >= bufsize)
11744         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11745         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11746
11747     elen += my_snprintf(p, bufsize - elen,
11748                         "%c%+d", lower ? 'p' : 'P',
11749                         exponent);
11750
11751     if (elen < width) {
11752         STRLEN gap = (STRLEN)(width - elen);
11753         if (left) {
11754             /* Pad the back with spaces. */
11755             memset(buf + elen, ' ', gap);
11756         }
11757         else if (fill) {
11758             /* Insert the zeros after the "0x" and the
11759              * the potential sign, but before the digits,
11760              * otherwise we end up with "0000xH.HHH...",
11761              * when we want "0x000H.HHH..."  */
11762             STRLEN nzero = gap;
11763             char* zerox = buf + 2;
11764             STRLEN nmove = elen - 2;
11765             if (negative || plus) {
11766                 zerox++;
11767                 nmove--;
11768             }
11769             Move(zerox, zerox + nzero, nmove, char);
11770             memset(zerox, fill ? '0' : ' ', nzero);
11771         }
11772         else {
11773             /* Move it to the right. */
11774             Move(buf, buf + gap,
11775                  elen, char);
11776             /* Pad the front with spaces. */
11777             memset(buf, ' ', gap);
11778         }
11779         elen = width;
11780     }
11781     return elen;
11782 }
11783
11784
11785 /*
11786 =for apidoc sv_vcatpvfn
11787
11788 =for apidoc sv_vcatpvfn_flags
11789
11790 Processes its arguments like C<vsprintf> and appends the formatted output
11791 to an SV.  Uses an array of SVs if the C-style variable argument list is
11792 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11793 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11794 C<va_list> argument list with a format string that uses argument reordering
11795 will yield an exception.
11796
11797 When running with taint checks enabled, indicates via
11798 C<maybe_tainted> if results are untrustworthy (often due to the use of
11799 locales).
11800
11801 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11802
11803 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11804 responsibility to ensure that this is so.
11805
11806 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11807
11808 =cut
11809 */
11810
11811
11812 void
11813 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11814                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11815                        const U32 flags)
11816 {
11817     const char *fmtstart; /* character following the current '%' */
11818     const char *q;        /* current position within format */
11819     const char *patend;
11820     STRLEN origlen;
11821     Size_t svix = 0;
11822     static const char nullstr[] = "(null)";
11823     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11824     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11825     /* Times 4: a decimal digit takes more than 3 binary digits.
11826      * NV_DIG: mantissa takes that many decimal digits.
11827      * Plus 32: Playing safe. */
11828     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11829     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11830 #ifdef USE_LOCALE_NUMERIC
11831     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11832     bool lc_numeric_set = FALSE; /* called STORE_LC_NUMERIC_SET_TO_NEEDED? */
11833 #endif
11834
11835     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11836     PERL_UNUSED_ARG(maybe_tainted);
11837
11838     if (flags & SV_GMAGIC)
11839         SvGETMAGIC(sv);
11840
11841     /* no matter what, this is a string now */
11842     (void)SvPV_force_nomg(sv, origlen);
11843
11844     /* the code that scans for flags etc following a % relies on
11845      * a '\0' being present to avoid falling off the end. Ideally that
11846      * should be fixed */
11847     assert(pat[patlen] == '\0');
11848
11849
11850     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11851      * In each case, if there isn't the correct number of args, instead
11852      * fall through to the main code to handle the issuing of any
11853      * warnings etc.
11854      */
11855
11856     if (patlen == 0 && (args || sv_count == 0))
11857         return;
11858
11859     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11860
11861         /* "%s" */
11862         if (patlen == 2 && pat[1] == 's') {
11863             if (args) {
11864                 const char * const s = va_arg(*args, char*);
11865                 sv_catpv_nomg(sv, s ? s : nullstr);
11866             }
11867             else {
11868                 /* we want get magic on the source but not the target.
11869                  * sv_catsv can't do that, though */
11870                 SvGETMAGIC(*svargs);
11871                 sv_catsv_nomg(sv, *svargs);
11872             }
11873             return;
11874         }
11875
11876         /* "%-p" */
11877         if (args) {
11878             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11879                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11880                 sv_catsv_nomg(sv, asv);
11881                 return;
11882             }
11883         }
11884 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11885         /* special-case "%.0f" */
11886         else if (   patlen == 4
11887                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11888         {
11889             const NV nv = SvNV(*svargs);
11890             if (LIKELY(!Perl_isinfnan(nv))) {
11891                 STRLEN l;
11892                 char *p;
11893
11894                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11895                     sv_catpvn_nomg(sv, p, l);
11896                     return;
11897                 }
11898             }
11899         }
11900 #endif /* !USE_LONG_DOUBLE */
11901     }
11902
11903
11904     patend = (char*)pat + patlen;
11905     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
11906         char intsize     = 0;         /* size qualifier in "%hi..." etc */
11907         bool alt         = FALSE;     /* has      "%#..."    */
11908         bool left        = FALSE;     /* has      "%-..."    */
11909         bool fill        = FALSE;     /* has      "%0..."    */
11910         char plus        = 0;         /* has      "%+..."    */
11911         STRLEN width     = 0;         /* value of "%NNN..."  */
11912         bool has_precis  = FALSE;     /* has      "%.NNN..." */
11913         STRLEN precis    = 0;         /* value of "%.NNN..." */
11914         int base         = 0;         /* base to print in, e.g. 8 for %o */
11915         UV uv            = 0;         /* the value to print of int-ish args */
11916
11917         bool vectorize   = FALSE;     /* has      "%v..."    */
11918         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
11919         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
11920         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
11921         const char *dotstr = NULL;    /* separator string for %v */
11922         STRLEN dotstrlen;             /* length of separator string for %v */
11923
11924         Size_t efix      = 0;         /* explicit format parameter index */
11925         const Size_t osvix  = svix;   /* original index in case of bad fmt */
11926
11927         SV *argsv        = NULL;
11928         bool is_utf8     = FALSE;     /* is this item utf8?   */
11929         bool arg_missing = FALSE;     /* give "Missing argument" warning */
11930         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
11931         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
11932         STRLEN zeros     = 0;         /* how many '0' to prepend */
11933
11934         const char *eptr = NULL;      /* the address of the element string */
11935         STRLEN elen      = 0;         /* the length  of the element string */
11936
11937         char c;                       /* the actual format ('d', s' etc) */
11938
11939
11940         /* echo everything up to the next format specification */
11941         for (q = fmtstart; q < patend && *q != '%'; ++q)
11942             {};
11943
11944         if (q > fmtstart) {
11945             if (has_utf8 && !pat_utf8) {
11946                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
11947                  * the fly */
11948                 const char *p;
11949                 char *dst;
11950                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
11951
11952                 for (p = fmtstart; p < q; p++)
11953                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
11954                         need++;
11955                 SvGROW(sv, need);
11956
11957                 dst = SvEND(sv);
11958                 for (p = fmtstart; p < q; p++)
11959                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
11960                 *dst = '\0';
11961                 SvCUR_set(sv, need - 1);
11962             }
11963             else
11964                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
11965         }
11966         if (q++ >= patend)
11967             break;
11968
11969         fmtstart = q; /* fmtstart is char following the '%' */
11970
11971 /*
11972     We allow format specification elements in this order:
11973         \d+\$              explicit format parameter index
11974         [-+ 0#]+           flags
11975         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11976         0                  flag (as above): repeated to allow "v02"     
11977         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11978         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11979         [hlqLV]            size
11980     [%bcdefginopsuxDFOUX] format (mandatory)
11981 */
11982
11983         if (IS_1_TO_9(*q)) {
11984             width = expect_number(&q);
11985             if (*q == '$') {
11986                 if (args)
11987                     Perl_croak_nocontext(
11988                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11989                 ++q;
11990                 efix = (Size_t)width;
11991                 width = 0;
11992                 no_redundant_warning = TRUE;
11993             } else {
11994                 goto gotwidth;
11995             }
11996         }
11997
11998         /* FLAGS */
11999
12000         while (*q) {
12001             switch (*q) {
12002             case ' ':
12003             case '+':
12004                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12005                     q++;
12006                 else
12007                     plus = *q++;
12008                 continue;
12009
12010             case '-':
12011                 left = TRUE;
12012                 q++;
12013                 continue;
12014
12015             case '0':
12016                 fill = TRUE;
12017                 q++;
12018                 continue;
12019
12020             case '#':
12021                 alt = TRUE;
12022                 q++;
12023                 continue;
12024
12025             default:
12026                 break;
12027             }
12028             break;
12029         }
12030
12031       /* at this point we can expect one of:
12032        *
12033        *  123  an explicit width
12034        *  *    width taken from next arg
12035        *  *12$ width taken from 12th arg
12036        *       or no width
12037        *
12038        * But any width specification may be preceded by a v, in one of its
12039        * forms:
12040        *        v
12041        *        *v
12042        *        *12$v
12043        * So an asterisk may be either a width specifier or a vector
12044        * separator arg specifier, and we don't know which initially
12045        */
12046
12047       tryasterisk:
12048         if (*q == '*') {
12049             STRLEN ix; /* explicit width/vector separator index */
12050             q++;
12051             if (IS_1_TO_9(*q)) {
12052                 ix = expect_number(&q);
12053                 if (*q++ == '$') {
12054                     if (args)
12055                         Perl_croak_nocontext(
12056                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
12057                     no_redundant_warning = TRUE;
12058                 } else
12059                     goto unknown;
12060             }
12061             else
12062                 ix = 0;
12063
12064             if (*q == 'v') {
12065                 SV *vecsv;
12066                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12067                  * with the default "." */
12068                 q++;
12069                 if (vectorize)
12070                     goto unknown;
12071                 if (args)
12072                     vecsv = va_arg(*args, SV*);
12073                 else {
12074                     ix = ix ? ix - 1 : svix++;
12075                     vecsv = ix < sv_count ? svargs[ix]
12076                                        : (arg_missing = TRUE, &PL_sv_no);
12077                 }
12078                 dotstr = SvPV_const(vecsv, dotstrlen);
12079                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12080                    bad with tied or overloaded values that return UTF8.  */
12081                 if (DO_UTF8(vecsv))
12082                     is_utf8 = TRUE;
12083                 else if (has_utf8) {
12084                     vecsv = sv_mortalcopy(vecsv);
12085                     sv_utf8_upgrade(vecsv);
12086                     dotstr = SvPV_const(vecsv, dotstrlen);
12087                     is_utf8 = TRUE;
12088                 }
12089                 vectorize = TRUE;
12090                 goto tryasterisk;
12091             }
12092
12093             /* the asterisk specified a width */
12094             {
12095                 int i = 0;
12096                 SV *sv = NULL;
12097                 if (args)
12098                     i = va_arg(*args, int);
12099                 else {
12100                     ix = ix ? ix - 1 : svix++;
12101                     sv = (ix < sv_count) ? svargs[ix]
12102                                       : (arg_missing = TRUE, (SV*)NULL);
12103                 }
12104                 width = S_sprintf_arg_num_val(aTHX_ args, i, sv, &left);
12105             }
12106         }
12107         else if (*q == 'v') {
12108             q++;
12109             if (vectorize)
12110                 goto unknown;
12111             vectorize = TRUE;
12112             dotstr = ".";
12113             dotstrlen = 1;
12114             goto tryasterisk;
12115
12116         }
12117         else {
12118         /* explicit width? */
12119             if(*q == '0') {
12120                 fill = TRUE;
12121                 q++;
12122             }
12123             if (IS_1_TO_9(*q))
12124                 width = expect_number(&q);
12125         }
12126
12127       gotwidth:
12128
12129         /* PRECISION */
12130
12131         if (*q == '.') {
12132             q++;
12133             if (*q == '*') {
12134                 STRLEN ix; /* explicit precision index */
12135                 q++;
12136                 if (IS_1_TO_9(*q)) {
12137                     ix = expect_number(&q);
12138                     if (*q++ == '$') {
12139                         if (args)
12140                             Perl_croak_nocontext(
12141                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
12142                         no_redundant_warning = TRUE;
12143                     } else
12144                         goto unknown;
12145                 }
12146                 else
12147                     ix = 0;
12148
12149                 {
12150                     int i = 0;
12151                     SV *sv = NULL;
12152                     bool neg = FALSE;
12153
12154                     if (args)
12155                         i = va_arg(*args, int);
12156                     else {
12157                         ix = ix ? ix - 1 : svix++;
12158                         sv = (ix < sv_count) ? svargs[ix]
12159                                           : (arg_missing = TRUE, (SV*)NULL);
12160                     }
12161                     precis = S_sprintf_arg_num_val(aTHX_ args, i, sv, &neg);
12162                     has_precis = !neg;
12163                 }
12164             }
12165             else {
12166                 /* although it doesn't seem documented, this code has long
12167                  * behaved so that:
12168                  *   no digits following the '.' is treated like '.0'
12169                  *   the number may be preceded by any number of zeroes,
12170                  *      e.g. "%.0001f", which is the same as "%.1f"
12171                  * so I've kept that behaviour. DAPM May 2017
12172                  */
12173                 while (*q == '0')
12174                     q++;
12175                 precis = IS_1_TO_9(*q) ? expect_number(&q) : 0;
12176                 has_precis = TRUE;
12177             }
12178         }
12179
12180         /* SIZE */
12181
12182         switch (*q) {
12183 #ifdef WIN32
12184         case 'I':                       /* Ix, I32x, and I64x */
12185 #  ifdef USE_64_BIT_INT
12186             if (q[1] == '6' && q[2] == '4') {
12187                 q += 3;
12188                 intsize = 'q';
12189                 break;
12190             }
12191 #  endif
12192             if (q[1] == '3' && q[2] == '2') {
12193                 q += 3;
12194                 break;
12195             }
12196 #  ifdef USE_64_BIT_INT
12197             intsize = 'q';
12198 #  endif
12199             q++;
12200             break;
12201 #endif
12202 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12203     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12204         case 'L':                       /* Ld */
12205             /* FALLTHROUGH */
12206 #  ifdef USE_QUADMATH
12207         case 'Q':
12208             /* FALLTHROUGH */
12209 #  endif
12210 #  if IVSIZE >= 8
12211         case 'q':                       /* qd */
12212 #  endif
12213             intsize = 'q';
12214             q++;
12215             break;
12216 #endif
12217         case 'l':
12218             ++q;
12219 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12220     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12221             if (*q == 'l') {    /* lld, llf */
12222                 intsize = 'q';
12223                 ++q;
12224             }
12225             else
12226 #endif
12227                 intsize = 'l';
12228             break;
12229         case 'h':
12230             if (*++q == 'h') {  /* hhd, hhu */
12231                 intsize = 'c';
12232                 ++q;
12233             }
12234             else
12235                 intsize = 'h';
12236             break;
12237         case 'V':
12238         case 'z':
12239         case 't':
12240         case 'j':
12241             intsize = *q++;
12242             break;
12243         }
12244
12245         /* CONVERSION */
12246
12247         c = *q++; /* c now holds the conversion type */
12248
12249         /* '%' doesn't have an arg, so skip arg processing */
12250         if (c == '%') {
12251             eptr = q - 1;
12252             elen = 1;
12253             if (vectorize)
12254                 goto unknown;
12255             goto string;
12256         }
12257
12258         if (vectorize && !strchr("BbDdiOouUXx", c))
12259             goto unknown;
12260
12261         /* get next arg (individual branches do their own va_arg()
12262          * handling for the args case) */
12263
12264         if (!args) {
12265             efix = efix ? efix - 1 : svix++;
12266             argsv = efix < sv_count ? svargs[efix]
12267                                  : (arg_missing = TRUE, &PL_sv_no);
12268         }
12269
12270
12271         switch (c) {
12272
12273             /* STRINGS */
12274
12275         case 's':
12276             if (args) {
12277                 eptr = va_arg(*args, char*);
12278                 if (eptr)
12279                     if (has_precis)
12280                         elen = my_strnlen(eptr, precis);
12281                     else
12282                         elen = strlen(eptr);
12283                 else {
12284                     eptr = (char *)nullstr;
12285                     elen = sizeof nullstr - 1;
12286                 }
12287             }
12288             else {
12289                 eptr = SvPV_const(argsv, elen);
12290                 if (DO_UTF8(argsv)) {
12291                     STRLEN old_precis = precis;
12292                     if (has_precis && precis < elen) {
12293                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12294                         STRLEN p = precis > ulen ? ulen : precis;
12295                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12296                                                         /* sticks at end */
12297                     }
12298                     if (width) { /* fudge width (can't fudge elen) */
12299                         if (has_precis && precis < elen)
12300                             width += precis - old_precis;
12301                         else
12302                             width +=
12303                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12304                     }
12305                     is_utf8 = TRUE;
12306                 }
12307             }
12308
12309         string:
12310             if (has_precis && precis < elen)
12311                 elen = precis;
12312             break;
12313
12314             /* INTEGERS */
12315
12316         case 'p':
12317             if (alt)
12318                 goto unknown;
12319
12320             /* %p extensions:
12321              *
12322              * "%...p" is normally treated like "%...x", except that the
12323              * number to print is the SV's address (or a pointer address
12324              * for C-ish sprintf).
12325              *
12326              * However, the C-ish sprintf variant allows a few special
12327              * extensions. These are currently:
12328              *
12329              * %-p       (SVf)  Like %s, but gets the string from an SV*
12330              *                  arg rather than a char* arg.
12331              *                  (This was previously %_).
12332              *
12333              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12334              *
12335              * %2p       (HEKf) Like %s, but using the key string in a HEK
12336              *
12337              * %3p       (HEKf256) Ditto but like %.256s
12338              *
12339              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12340              *                       (cBOOL(utf8), len, string_buf).
12341              *                   It's handled by the "case 'd'" branch
12342              *                   rather than here.
12343              *
12344              * %<num>p   where num is 1 or > 4: reserved for future
12345              *           extensions. Warns, but then is treated as a
12346              *           general %p (print hex address) format.
12347              */
12348
12349             if (   args
12350                 && !intsize
12351                 && !fill
12352                 && !plus
12353                 && !has_precis
12354                     /* not %*p or %*1$p - any width was explicit */
12355                 && q[-2] != '*'
12356                 && q[-2] != '$'
12357             ) {
12358                 if (left) {                     /* %-p (SVf), %-NNNp */
12359                     if (width) {
12360                         precis = width;
12361                         has_precis = TRUE;
12362                     }
12363                     argsv = MUTABLE_SV(va_arg(*args, void*));
12364                     eptr = SvPV_const(argsv, elen);
12365                     if (DO_UTF8(argsv))
12366                         is_utf8 = TRUE;
12367                     width = 0;
12368                     goto string;
12369                 }
12370                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12371                     HEK * const hek = va_arg(*args, HEK *);
12372                     eptr = HEK_KEY(hek);
12373                     elen = HEK_LEN(hek);
12374                     if (HEK_UTF8(hek))
12375                         is_utf8 = TRUE;
12376                     if (width == 3) {
12377                         precis = 256;
12378                         has_precis = TRUE;
12379                     }
12380                     width = 0;
12381                     goto string;
12382                 }
12383                 else if (width) {
12384                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12385                          "internal %%<num>p might conflict with future printf extensions");
12386                 }
12387             }
12388
12389             /* treat as normal %...p */
12390
12391             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12392             base = 16;
12393             goto do_integer;
12394
12395         case 'c':
12396             /* Ignore any size specifiers, since they're not documented as
12397              * being allowed for %c (ideally we should warn on e.g. '%hc').
12398              * Setting a default intsize, along with a positive
12399              * (which signals unsigned) base, causes, for C-ish use, the
12400              * va_arg to be interpreted as as unsigned int, when it's
12401              * actually signed, which will convert -ve values to high +ve
12402              * values. Note that unlike the libc %c, values > 255 will
12403              * convert to high unicode points rather than being truncated
12404              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12405              * will again convert -ve args to high -ve values.
12406              */
12407             intsize = 0;
12408             base = 1; /* special value that indicates we're doing a 'c' */
12409             goto get_int_arg_val;
12410
12411         case 'D':
12412 #ifdef IV_IS_QUAD
12413             intsize = 'q';
12414 #else
12415             intsize = 'l';
12416 #endif
12417             base = -10;
12418             goto get_int_arg_val;
12419
12420         case 'd':
12421             /* probably just a plain %d, but it might be the start of the
12422              * special UTF8f format, which usually looks something like
12423              * "%d%lu%4p" (the lu may vary by platform)
12424              */
12425             assert((UTF8f)[0] == 'd');
12426             assert((UTF8f)[1] == '%');
12427
12428              if (   args              /* UTF8f only valid for C-ish sprintf */
12429                  && q == fmtstart + 1 /* plain %d, not %....d */
12430                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12431                  && *q == '%'
12432                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12433             {
12434                 /* The argument has already gone through cBOOL, so the cast
12435                    is safe. */
12436                 is_utf8 = (bool)va_arg(*args, int);
12437                 elen = va_arg(*args, UV);
12438                 /* if utf8 length is larger than 0x7ffff..., then it might
12439                  * have been a signed value that wrapped */
12440                 if (elen  > ((~(STRLEN)0) >> 1)) {
12441                     assert(0); /* in DEBUGGING build we want to crash */
12442                     elen = 0; /* otherwise we want to treat this as an empty string */
12443                 }
12444                 eptr = va_arg(*args, char *);
12445                 q += sizeof(UTF8f) - 2;
12446                 goto string;
12447             }
12448
12449             /* FALLTHROUGH */
12450         case 'i':
12451             base = -10;
12452             goto get_int_arg_val;
12453
12454         case 'U':
12455 #ifdef IV_IS_QUAD
12456             intsize = 'q';
12457 #else
12458             intsize = 'l';
12459 #endif
12460             /* FALLTHROUGH */
12461         case 'u':
12462             base = 10;
12463             goto get_int_arg_val;
12464
12465         case 'B':
12466         case 'b':
12467             base = 2;
12468             goto get_int_arg_val;
12469
12470         case 'O':
12471 #ifdef IV_IS_QUAD
12472             intsize = 'q';
12473 #else
12474             intsize = 'l';
12475 #endif
12476             /* FALLTHROUGH */
12477         case 'o':
12478             base = 8;
12479             goto get_int_arg_val;
12480
12481         case 'X':
12482         case 'x':
12483             base = 16;
12484
12485           get_int_arg_val:
12486
12487             if (vectorize) {
12488                 STRLEN ulen;
12489                 SV *vecsv;
12490
12491                 if (base < 0) {
12492                     base = -base;
12493                     if (plus)
12494                          esignbuf[esignlen++] = plus;
12495                 }
12496
12497                 /* initialise the vector string to iterate over */
12498
12499                 vecsv = args ? va_arg(*args, SV*) : argsv;
12500
12501                 /* if this is a version object, we need to convert
12502                  * back into v-string notation and then let the
12503                  * vectorize happen normally
12504                  */
12505                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12506                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12507                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12508                         "vector argument not supported with alpha versions");
12509                         vecsv = &PL_sv_no;
12510                     }
12511                     else {
12512                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12513                         vecsv = sv_newmortal();
12514                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12515                                      vecsv);
12516                     }
12517                 }
12518                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12519                 vec_utf8 = DO_UTF8(vecsv);
12520
12521               /* This is the re-entry point for when we're iterating
12522                * over the individual characters of a vector arg */
12523               vector:
12524                 if (!veclen)
12525                     goto done_valid_conversion;
12526                 if (vec_utf8)
12527                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12528                                         UTF8_ALLOW_ANYUV);
12529                 else {
12530                     uv = *vecstr;
12531                     ulen = 1;
12532                 }
12533                 vecstr += ulen;
12534                 veclen -= ulen;
12535             }
12536             else {
12537                 /* test arg for inf/nan. This can trigger an unwanted
12538                  * 'str' overload, so manually force 'num' overload first
12539                  * if necessary */
12540                 if (argsv) {
12541                     SvGETMAGIC(argsv);
12542                     if (UNLIKELY(SvAMAGIC(argsv)))
12543                         argsv = sv_2num(argsv);
12544                     if (UNLIKELY(isinfnansv(argsv)))
12545                         goto handle_infnan_argsv;
12546                 }
12547
12548                 if (base < 0) {
12549                     /* signed int type */
12550                     IV iv;
12551                     base = -base;
12552                     if (args) {
12553                         switch (intsize) {
12554                         case 'c':  iv = (char)va_arg(*args, int);  break;
12555                         case 'h':  iv = (short)va_arg(*args, int); break;
12556                         case 'l':  iv = va_arg(*args, long);       break;
12557                         case 'V':  iv = va_arg(*args, IV);         break;
12558                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12559 #ifdef HAS_PTRDIFF_T
12560                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12561 #endif
12562                         default:   iv = va_arg(*args, int);        break;
12563                         case 'j':  iv = va_arg(*args, PERL_INTMAX_T); break;
12564                         case 'q':
12565 #if IVSIZE >= 8
12566                                    iv = va_arg(*args, Quad_t);     break;
12567 #else
12568                                    goto unknown;
12569 #endif
12570                         }
12571                     }
12572                     else {
12573                         /* assign to tiv then cast to iv to work around
12574                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12575                         IV tiv = SvIV_nomg(argsv);
12576                         switch (intsize) {
12577                         case 'c':  iv = (char)tiv;   break;
12578                         case 'h':  iv = (short)tiv;  break;
12579                         case 'l':  iv = (long)tiv;   break;
12580                         case 'V':
12581                         default:   iv = tiv;         break;
12582                         case 'q':
12583 #if IVSIZE >= 8
12584                                    iv = (Quad_t)tiv; break;
12585 #else
12586                                    goto unknown;
12587 #endif
12588                         }
12589                     }
12590
12591                     /* now convert iv to uv */
12592                     if (iv >= 0) {
12593                         uv = iv;
12594                         if (plus)
12595                             esignbuf[esignlen++] = plus;
12596                     }
12597                     else {
12598                         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12599                         esignbuf[esignlen++] = '-';
12600                     }
12601                 }
12602                 else {
12603                     /* unsigned int type */
12604                     if (args) {
12605                         switch (intsize) {
12606                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12607                                   break;
12608                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12609                                   break;
12610                         case 'l': uv = va_arg(*args, unsigned long); break;
12611                         case 'V': uv = va_arg(*args, UV);            break;
12612                         case 'z': uv = va_arg(*args, Size_t);        break;
12613 #ifdef HAS_PTRDIFF_T
12614                                   /* will sign extend, but there is no
12615                                    * uptrdiff_t, so oh well */
12616                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12617 #endif
12618                         case 'j': uv = va_arg(*args, PERL_UINTMAX_T); break;
12619                         default:  uv = va_arg(*args, unsigned);      break;
12620                         case 'q':
12621 #if IVSIZE >= 8
12622                                   uv = va_arg(*args, Uquad_t);       break;
12623 #else
12624                                   goto unknown;
12625 #endif
12626                         }
12627                     }
12628                     else {
12629                         /* assign to tiv then cast to iv to work around
12630                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12631                         UV tuv = SvUV_nomg(argsv);
12632                         switch (intsize) {
12633                         case 'c': uv = (unsigned char)tuv;  break;
12634                         case 'h': uv = (unsigned short)tuv; break;
12635                         case 'l': uv = (unsigned long)tuv;  break;
12636                         case 'V':
12637                         default:  uv = tuv;                 break;
12638                         case 'q':
12639 #if IVSIZE >= 8
12640                                   uv = (Uquad_t)tuv;        break;
12641 #else
12642                                   goto unknown;
12643 #endif
12644                         }
12645                     }
12646                 }
12647             }
12648
12649         do_integer:
12650             {
12651                 char *ptr = ebuf + sizeof ebuf;
12652                 unsigned dig;
12653                 zeros = 0;
12654
12655                 switch (base) {
12656                 case 16:
12657                     {
12658                     const char * const p =
12659                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12660
12661                         do {
12662                             dig = uv & 15;
12663                             *--ptr = p[dig];
12664                         } while (uv >>= 4);
12665                         if (alt && *ptr != '0') {
12666                             esignbuf[esignlen++] = '0';
12667                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12668                         }
12669                         break;
12670                     }
12671                 case 8:
12672                     do {
12673                         dig = uv & 7;
12674                         *--ptr = '0' + dig;
12675                     } while (uv >>= 3);
12676                     if (alt && *ptr != '0')
12677                         *--ptr = '0';
12678                     break;
12679                 case 2:
12680                     do {
12681                         dig = uv & 1;
12682                         *--ptr = '0' + dig;
12683                     } while (uv >>= 1);
12684                     if (alt && *ptr != '0') {
12685                         esignbuf[esignlen++] = '0';
12686                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12687                     }
12688                     break;
12689
12690                 case 1:
12691                     /* special-case: base 1 indicates a 'c' format:
12692                      * we use the common code for extracting a uv,
12693                      * but handle that value differently here than
12694                      * all the other int types */
12695                     if ((uv > 255 ||
12696                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12697                         && !IN_BYTES)
12698                     {
12699                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12700                         eptr = ebuf;
12701                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12702                         is_utf8 = TRUE;
12703                     }
12704                     else {
12705                         eptr = ebuf;
12706                         ebuf[0] = (char)uv;
12707                         elen = 1;
12708                     }
12709                     goto string;
12710
12711                 default:                /* it had better be ten or less */
12712                     do {
12713                         dig = uv % base;
12714                         *--ptr = '0' + dig;
12715                     } while (uv /= base);
12716                     break;
12717                 }
12718                 elen = (ebuf + sizeof ebuf) - ptr;
12719                 eptr = ptr;
12720                 if (has_precis) {
12721                     if (precis > elen)
12722                         zeros = precis - elen;
12723                     else if (precis == 0 && elen == 1 && *eptr == '0'
12724                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12725                         elen = 0;
12726
12727                     /* a precision nullifies the 0 flag. */
12728                     fill = FALSE;
12729                 }
12730             }
12731             break;
12732
12733             /* FLOATING POINT */
12734
12735         case 'F':
12736             c = 'f';            /* maybe %F isn't supported here */
12737             /* FALLTHROUGH */
12738         case 'e': case 'E':
12739         case 'f':
12740         case 'g': case 'G':
12741         case 'a': case 'A':
12742
12743         {
12744             STRLEN float_need; /* what PL_efloatsize needs to become */
12745             bool hexfp;        /* hexadecimal floating point? */
12746
12747             vcatpvfn_long_double_t fv;
12748             NV                     nv;
12749
12750             /* This is evil, but floating point is even more evil */
12751
12752             /* for SV-style calling, we can only get NV
12753                for C-style calling, we assume %f is double;
12754                for simplicity we allow any of %Lf, %llf, %qf for long double
12755             */
12756             switch (intsize) {
12757             case 'V':
12758 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12759                 intsize = 'q';
12760 #endif
12761                 break;
12762 /* [perl #20339] - we should accept and ignore %lf rather than die */
12763             case 'l':
12764                 /* FALLTHROUGH */
12765             default:
12766 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12767                 intsize = args ? 0 : 'q';
12768 #endif
12769                 break;
12770             case 'q':
12771 #if defined(HAS_LONG_DOUBLE)
12772                 break;
12773 #else
12774                 /* FALLTHROUGH */
12775 #endif
12776             case 'c':
12777             case 'h':
12778             case 'z':
12779             case 't':
12780             case 'j':
12781                 goto unknown;
12782             }
12783
12784             /* Now we need (long double) if intsize == 'q', else (double). */
12785             if (args) {
12786                 /* Note: do not pull NVs off the va_list with va_arg()
12787                  * (pull doubles instead) because if you have a build
12788                  * with long doubles, you would always be pulling long
12789                  * doubles, which would badly break anyone using only
12790                  * doubles (i.e. the majority of builds). In other
12791                  * words, you cannot mix doubles and long doubles.
12792                  * The only case where you can pull off long doubles
12793                  * is when the format specifier explicitly asks so with
12794                  * e.g. "%Lg". */
12795 #ifdef USE_QUADMATH
12796                 fv = intsize == 'q' ?
12797                     va_arg(*args, NV) : va_arg(*args, double);
12798                 nv = fv;
12799 #elif LONG_DOUBLESIZE > DOUBLESIZE
12800                 if (intsize == 'q') {
12801                     fv = va_arg(*args, long double);
12802                     nv = fv;
12803                 } else {
12804                     nv = va_arg(*args, double);
12805                     VCATPVFN_NV_TO_FV(nv, fv);
12806                 }
12807 #else
12808                 nv = va_arg(*args, double);
12809                 fv = nv;
12810 #endif
12811             }
12812             else
12813             {
12814                 SvGETMAGIC(argsv);
12815                 /* we jump here if an int-ish format encountered an
12816                  * infinite/Nan argsv. After setting nv/fv, it falls
12817                  * into the isinfnan block which follows */
12818               handle_infnan_argsv:
12819                 nv = SvNV_nomg(argsv);
12820                 VCATPVFN_NV_TO_FV(nv, fv);
12821             }
12822
12823             if (Perl_isinfnan(nv)) {
12824                 if (c == 'c')
12825                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12826                            SvNV_nomg(argsv), (int)c);
12827
12828                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12829                 assert(elen);
12830                 eptr = ebuf;
12831                 zeros     = 0;
12832                 esignlen  = 0;
12833                 dotstrlen = 0;
12834                 break;
12835             }
12836
12837             /* special-case "%.0f" */
12838             if (   c == 'f'
12839                 && !precis
12840                 && has_precis
12841                 && !(width || left || plus || alt)
12842                 && !fill
12843                 && intsize != 'q'
12844                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12845             )
12846                 goto float_concat;
12847
12848             /* Determine the buffer size needed for the various
12849              * floating-point formats.
12850              *
12851              * The basic possibilities are:
12852              *
12853              *               <---P--->
12854              *    %f 1111111.123456789
12855              *    %e       1.111111123e+06
12856              *    %a     0x1.0f4471f9bp+20
12857              *    %g        1111111.12
12858              *    %g        1.11111112e+15
12859              *
12860              * where P is the value of the precision in the format, or 6
12861              * if not specified. Note the two possible output formats of
12862              * %g; in both cases the number of significant digits is <=
12863              * precision.
12864              *
12865              * For most of the format types the maximum buffer size needed
12866              * is precision, plus: any leading 1 or 0x1, the radix
12867              * point, and an exponent.  The difficult one is %f: for a
12868              * large positive exponent it can have many leading digits,
12869              * which needs to be calculated specially. Also %a is slightly
12870              * different in that in the absence of a specified precision,
12871              * it uses as many digits as necessary to distinguish
12872              * different values.
12873              *
12874              * First, here are the constant bits. For ease of calculation
12875              * we over-estimate the needed buffer size, for example by
12876              * assuming all formats have an exponent and a leading 0x1.
12877              *
12878              * Also for production use, add a little extra overhead for
12879              * safety's sake. Under debugging don't, as it means we're
12880              * more likely to quickly spot issues during development.
12881              */
12882
12883             float_need =     1  /* possible unary minus */
12884                           +  4  /* "0x1" plus very unlikely carry */
12885                           +  1  /* default radix point '.' */
12886                           +  2  /* "e-", "p+" etc */
12887                           +  6  /* exponent: up to 16383 (quad fp) */
12888 #ifndef DEBUGGING
12889                           + 20  /* safety net */
12890 #endif
12891                           +  1; /* \0 */
12892
12893
12894             /* determine the radix point len, e.g. length(".") in "1.2" */
12895 #ifdef USE_LOCALE_NUMERIC
12896             /* note that we may either explicitly use PL_numeric_radix_sv
12897              * below, or implicitly, via an snprintf() variant.
12898              * Note also things like ps_AF.utf8 which has
12899              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
12900             if (!lc_numeric_set) {
12901                 /* only set once and reuse in-locale value on subsequent
12902                  * iterations.
12903                  * XXX what happens if we die in an eval?
12904                  */
12905                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12906                 lc_numeric_set = TRUE;
12907             }
12908
12909             if (IN_LC(LC_NUMERIC)) {
12910                 /* this can't wrap unless PL_numeric_radix_sv is a string
12911                  * consuming virtually all the 32-bit or 64-bit address
12912                  * space
12913                  */
12914                 float_need += (SvCUR(PL_numeric_radix_sv) - 1);
12915
12916                 /* floating-point formats only get utf8 if the radix point
12917                  * is utf8. All other characters in the string are < 128
12918                  * and so can be safely appended to both a non-utf8 and utf8
12919                  * string as-is.
12920                  * Note that this will convert the output to utf8 even if
12921                  * the radix point didn't get output.
12922                  */
12923                 if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
12924                     sv_utf8_upgrade(sv);
12925                     has_utf8 = TRUE;
12926                 }
12927             }
12928 #endif
12929
12930             hexfp = FALSE;
12931
12932             if (isALPHA_FOLD_EQ(c, 'f')) {
12933                 /* Determine how many digits before the radix point
12934                  * might be emitted.  frexp() (or frexpl) has some
12935                  * unspecified behaviour for nan/inf/-inf, so lucky we've
12936                  * already handled them above */
12937                 STRLEN digits;
12938                 int i = PERL_INT_MIN;
12939                 (void)Perl_frexp((NV)fv, &i);
12940                 if (i == PERL_INT_MIN)
12941                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
12942
12943                 if (i > 0) {
12944                     digits = BIT_DIGITS(i);
12945                     /* this can't overflow. 'digits' will only be a few
12946                      * thousand even for the largest floating-point types.
12947                      * And up until now float_need is just some small
12948                      * constants plus radix len, which can't be in
12949                      * overflow territory unless the radix SV is consuming
12950                      * over 1/2 the address space */
12951                     assert(float_need < ((STRLEN)~0) - digits);
12952                     float_need += digits;
12953                 }
12954             }
12955             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
12956                 hexfp = TRUE;
12957                 if (!has_precis) {
12958                     /* %a in the absence of precision may print as many
12959                      * digits as needed to represent the entire mantissa
12960                      * bit pattern.
12961                      * This estimate seriously overshoots in most cases,
12962                      * but better the undershooting.  Firstly, all bytes
12963                      * of the NV are not mantissa, some of them are
12964                      * exponent.  Secondly, for the reasonably common
12965                      * long doubles case, the "80-bit extended", two
12966                      * or six bytes of the NV are unused. Also, we'll
12967                      * still pick up an extra +6 from the default
12968                      * precision calculation below. */
12969                     STRLEN digits =
12970 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12971                         /* For the "double double", we need more.
12972                          * Since each double has their own exponent, the
12973                          * doubles may float (haha) rather far from each
12974                          * other, and the number of required bits is much
12975                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12976                          * See the definition of DOUBLEDOUBLE_MAXBITS.
12977                          *
12978                          * Need 2 hexdigits for each byte. */
12979                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12980 #else
12981                         NVSIZE * 2; /* 2 hexdigits for each byte */
12982 #endif
12983                     /* see "this can't overflow" comment above */
12984                     assert(float_need < ((STRLEN)~0) - digits);
12985                     float_need += digits;
12986                 }
12987             }
12988             /* special-case "%.<number>g" if it will fit in ebuf */
12989             else if (c == 'g'
12990                 && precis   /* See earlier comment about buggy Gconvert
12991                                when digits, aka precis, is 0  */
12992                 && has_precis
12993                 /* check, in manner not involving wrapping, that it will
12994                  * fit in ebuf  */
12995                 && float_need < sizeof(ebuf)
12996                 && sizeof(ebuf) - float_need > precis
12997                 && !(width || left || plus || alt)
12998                 && !fill
12999                 && intsize != 'q'
13000             ) {
13001                 SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
13002                 elen = strlen(ebuf);
13003                 eptr = ebuf;
13004                 goto float_concat;
13005             }
13006
13007
13008             {
13009                 STRLEN pr = has_precis ? precis : 6; /* known default */
13010                 /* this probably can't wrap, since precis is limited
13011                  * to 1/4 address space size, but better safe than sorry
13012                  */
13013                 if (float_need >= ((STRLEN)~0) - pr)
13014                     croak_memory_wrap();
13015                 float_need += pr;
13016             }
13017
13018             if (float_need < width)
13019                 float_need = width;
13020
13021             if (PL_efloatsize <= float_need) {
13022                 /* PL_efloatbuf should be at least 1 greater than
13023                  * float_need to allow a trailing \0 to be returned by
13024                  * snprintf().  If we need to grow, overgrow for the
13025                  * benefit of future generations */
13026                 const STRLEN extra = 0x20;
13027                 if (float_need >= ((STRLEN)~0) - extra)
13028                     croak_memory_wrap();
13029                 float_need += extra;
13030                 Safefree(PL_efloatbuf);
13031                 PL_efloatsize = float_need;
13032                 Newx(PL_efloatbuf, PL_efloatsize, char);
13033                 PL_efloatbuf[0] = '\0';
13034             }
13035
13036             if (UNLIKELY(hexfp)) {
13037                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13038                                 nv, fv, has_precis, precis, width,
13039                                 alt, plus, left, fill);
13040             }
13041             else {
13042                 char *ptr = ebuf + sizeof ebuf;
13043                 *--ptr = '\0';
13044                 *--ptr = c;
13045 #if defined(USE_QUADMATH)
13046                 if (intsize == 'q') {
13047                     /* "g" -> "Qg" */
13048                     *--ptr = 'Q';
13049                 }
13050                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13051 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13052                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13053                  * not USE_LONG_DOUBLE and NVff.  In other words,
13054                  * this needs to work without USE_LONG_DOUBLE. */
13055                 if (intsize == 'q') {
13056                     /* Copy the one or more characters in a long double
13057                      * format before the 'base' ([efgEFG]) character to
13058                      * the format string. */
13059                     static char const ldblf[] = PERL_PRIfldbl;
13060                     char const *p = ldblf + sizeof(ldblf) - 3;
13061                     while (p >= ldblf) { *--ptr = *p--; }
13062                 }
13063 #endif
13064                 if (has_precis) {
13065                     base = precis;
13066                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13067                     *--ptr = '.';
13068                 }
13069                 if (width) {
13070                     base = width;
13071                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13072                 }
13073                 if (fill)
13074                     *--ptr = '0';
13075                 if (left)
13076                     *--ptr = '-';
13077                 if (plus)
13078                     *--ptr = plus;
13079                 if (alt)
13080                     *--ptr = '#';
13081                 *--ptr = '%';
13082
13083                 /* No taint.  Otherwise we are in the strange situation
13084                  * where printf() taints but print($float) doesn't.
13085                  * --jhi */
13086
13087                 /* hopefully the above makes ptr a very constrained format
13088                  * that is safe to use, even though it's not literal */
13089                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13090 #ifdef USE_QUADMATH
13091                 {
13092                     const char* qfmt = quadmath_format_single(ptr);
13093                     if (!qfmt)
13094                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13095                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13096                                              qfmt, nv);
13097                     if ((IV)elen == -1) {
13098                         if (qfmt != ptr)
13099                             SAVEFREEPV(qfmt);
13100                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
13101                     }
13102                     if (qfmt != ptr)
13103                         Safefree(qfmt);
13104                 }
13105 #elif defined(HAS_LONG_DOUBLE)
13106                 elen = ((intsize == 'q')
13107                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13108                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
13109 #else
13110                 elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv);
13111 #endif
13112                 GCC_DIAG_RESTORE_STMT;
13113             }
13114
13115             eptr = PL_efloatbuf;
13116
13117           float_concat:
13118
13119             /* Since floating-point formats do their own formatting and
13120              * padding, we skip the main block of code at the end of this
13121              * loop which handles appending eptr to sv, and do our own
13122              * stripped-down version */
13123
13124             assert(!zeros);
13125             assert(!esignlen);
13126             assert(elen);
13127             assert(elen >= width);
13128
13129             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13130
13131             goto done_valid_conversion;
13132         }
13133
13134             /* SPECIAL */
13135
13136         case 'n':
13137             {
13138                 STRLEN len;
13139                 /* XXX ideally we should warn if any flags etc have been
13140                  * set, e.g. "%-4.5n" */
13141                 /* XXX if sv was originally non-utf8 with a char in the
13142                  * range 0x80-0xff, then if it got upgraded, we should
13143                  * calculate char len rather than byte len here */
13144                 len = SvCUR(sv) - origlen;
13145                 if (args) {
13146                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13147
13148                     switch (intsize) {
13149                     case 'c':  *(va_arg(*args, char*))      = i; break;
13150                     case 'h':  *(va_arg(*args, short*))     = i; break;
13151                     default:   *(va_arg(*args, int*))       = i; break;
13152                     case 'l':  *(va_arg(*args, long*))      = i; break;
13153                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13154                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13155 #ifdef HAS_PTRDIFF_T
13156                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13157 #endif
13158                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13159                     case 'q':
13160 #if IVSIZE >= 8
13161                                *(va_arg(*args, Quad_t*))    = i; break;
13162 #else
13163                                goto unknown;
13164 #endif
13165                     }
13166                 }
13167                 else {
13168                     if (arg_missing)
13169                         Perl_croak_nocontext(
13170                             "Missing argument for %%n in %s",
13171                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13172                     sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)len);
13173                 }
13174                 goto done_valid_conversion;
13175             }
13176
13177             /* UNKNOWN */
13178
13179         default:
13180       unknown:
13181             if (!args
13182                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13183                 && ckWARN(WARN_PRINTF))
13184             {
13185                 SV * const msg = sv_newmortal();
13186                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13187                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13188                 if (fmtstart < patend) {
13189                     const char * const fmtend = q < patend ? q : patend;
13190                     const char * f;
13191                     sv_catpvs(msg, "\"%");
13192                     for (f = fmtstart; f < fmtend; f++) {
13193                         if (isPRINT(*f)) {
13194                             sv_catpvn_nomg(msg, f, 1);
13195                         } else {
13196                             Perl_sv_catpvf(aTHX_ msg,
13197                                            "\\%03" UVof, (UV)*f & 0xFF);
13198                         }
13199                     }
13200                     sv_catpvs(msg, "\"");
13201                 } else {
13202                     sv_catpvs(msg, "end of string");
13203                 }
13204                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13205             }
13206
13207             /* mangled format: output the '%', then continue from the
13208              * character following that */
13209             sv_catpvn_nomg(sv, fmtstart-1, 1);
13210             q = fmtstart;
13211             svix = osvix;
13212             /* Any "redundant arg" warning from now onwards will probably
13213              * just be misleading, so don't bother. */
13214             no_redundant_warning = TRUE;
13215             continue;   /* not "break" */
13216         }
13217
13218         if (is_utf8 != has_utf8) {
13219             if (is_utf8) {
13220                 if (SvCUR(sv))
13221                     sv_utf8_upgrade(sv);
13222             }
13223             else {
13224                 const STRLEN old_elen = elen;
13225                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13226                 sv_utf8_upgrade(nsv);
13227                 eptr = SvPVX_const(nsv);
13228                 elen = SvCUR(nsv);
13229
13230                 if (width) { /* fudge width (can't fudge elen) */
13231                     width += elen - old_elen;
13232                 }
13233                 is_utf8 = TRUE;
13234             }
13235         }
13236
13237
13238         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13239
13240         {
13241             STRLEN need, have, gap;
13242             STRLEN i;
13243             char *s;
13244
13245             /* signed value that's wrapped? */
13246             assert(elen  <= ((~(STRLEN)0) >> 1));
13247
13248             /* if zeros is non-zero, then it represents filler between
13249              * elen and precis. So adding elen and zeros together will
13250              * always be <= precis, and the addition can never wrap */
13251             assert(!zeros || (precis > elen && precis - elen == zeros));
13252             have = elen + zeros;
13253
13254             if (have >= (((STRLEN)~0) - esignlen))
13255                 croak_memory_wrap();
13256             have += esignlen;
13257
13258             need = (have > width ? have : width);
13259             gap = need - have;
13260
13261             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13262                 croak_memory_wrap();
13263             need += (SvCUR(sv) + 1);
13264
13265             SvGROW(sv, need);
13266
13267             s = SvEND(sv);
13268
13269             if (left) {
13270                 for (i = 0; i < esignlen; i++)
13271                     *s++ = esignbuf[i];
13272                 for (i = zeros; i; i--)
13273                     *s++ = '0';
13274                 Copy(eptr, s, elen, char);
13275                 s += elen;
13276                 for (i = gap; i; i--)
13277                     *s++ = ' ';
13278             }
13279             else {
13280                 if (fill) {
13281                     for (i = 0; i < esignlen; i++)
13282                         *s++ = esignbuf[i];
13283                     assert(!zeros);
13284                     zeros = gap;
13285                 }
13286                 else {
13287                     for (i = gap; i; i--)
13288                         *s++ = ' ';
13289                     for (i = 0; i < esignlen; i++)
13290                         *s++ = esignbuf[i];
13291                 }
13292
13293                 for (i = zeros; i; i--)
13294                     *s++ = '0';
13295                 Copy(eptr, s, elen, char);
13296                 s += elen;
13297             }
13298
13299             *s = '\0';
13300             SvCUR_set(sv, s - SvPVX_const(sv));
13301
13302             if (is_utf8)
13303                 has_utf8 = TRUE;
13304             if (has_utf8)
13305                 SvUTF8_on(sv);
13306         }
13307
13308         if (vectorize && veclen) {
13309             /* we append the vector separator separately since %v isn't
13310              * very common: don't slow down the general case by adding
13311              * dotstrlen to need etc */
13312             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13313             esignlen = 0;
13314             goto vector; /* do next iteration */
13315         }
13316
13317       done_valid_conversion:
13318
13319         if (arg_missing)
13320             S_warn_vcatpvfn_missing_argument(aTHX);
13321     }
13322
13323     /* Now that we've consumed all our printf format arguments (svix)
13324      * do we have things left on the stack that we didn't use?
13325      */
13326     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13327         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13328                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13329     }
13330
13331     SvTAINT(sv);
13332
13333     if (lc_numeric_set) {
13334         RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to
13335                                    save/restore each iteration. */
13336     }
13337 }
13338
13339 /* =========================================================================
13340
13341 =head1 Cloning an interpreter
13342
13343 =cut
13344
13345 All the macros and functions in this section are for the private use of
13346 the main function, perl_clone().
13347
13348 The foo_dup() functions make an exact copy of an existing foo thingy.
13349 During the course of a cloning, a hash table is used to map old addresses
13350 to new addresses.  The table is created and manipulated with the
13351 ptr_table_* functions.
13352
13353  * =========================================================================*/
13354
13355
13356 #if defined(USE_ITHREADS)
13357
13358 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13359 #ifndef GpREFCNT_inc
13360 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13361 #endif
13362
13363
13364 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13365    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13366    If this changes, please unmerge ss_dup.
13367    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13368 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13369 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13370 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13371 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13372 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13373 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13374 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13375 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13376 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13377 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13378 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13379 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13380 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13381
13382 /* clone a parser */
13383
13384 yy_parser *
13385 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13386 {
13387     yy_parser *parser;
13388
13389     PERL_ARGS_ASSERT_PARSER_DUP;
13390
13391     if (!proto)
13392         return NULL;
13393
13394     /* look for it in the table first */
13395     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13396     if (parser)
13397         return parser;
13398
13399     /* create anew and remember what it is */
13400     Newxz(parser, 1, yy_parser);
13401     ptr_table_store(PL_ptr_table, proto, parser);
13402
13403     /* XXX eventually, just Copy() most of the parser struct ? */
13404
13405     parser->lex_brackets = proto->lex_brackets;
13406     parser->lex_casemods = proto->lex_casemods;
13407     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13408                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13409     parser->lex_casestack = savepvn(proto->lex_casestack,
13410                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13411     parser->lex_defer   = proto->lex_defer;
13412     parser->lex_dojoin  = proto->lex_dojoin;
13413     parser->lex_formbrack = proto->lex_formbrack;
13414     parser->lex_inpat   = proto->lex_inpat;
13415     parser->lex_inwhat  = proto->lex_inwhat;
13416     parser->lex_op      = proto->lex_op;
13417     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13418     parser->lex_starts  = proto->lex_starts;
13419     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13420     parser->multi_close = proto->multi_close;
13421     parser->multi_open  = proto->multi_open;
13422     parser->multi_start = proto->multi_start;
13423     parser->multi_end   = proto->multi_end;
13424     parser->preambled   = proto->preambled;
13425     parser->lex_super_state = proto->lex_super_state;
13426     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13427     parser->lex_sub_op  = proto->lex_sub_op;
13428     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13429     parser->linestr     = sv_dup_inc(proto->linestr, param);
13430     parser->expect      = proto->expect;
13431     parser->copline     = proto->copline;
13432     parser->last_lop_op = proto->last_lop_op;
13433     parser->lex_state   = proto->lex_state;
13434     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13435     /* rsfp_filters entries have fake IoDIRP() */
13436     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13437     parser->in_my       = proto->in_my;
13438     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13439     parser->error_count = proto->error_count;
13440     parser->sig_elems   = proto->sig_elems;
13441     parser->sig_optelems= proto->sig_optelems;
13442     parser->sig_slurpy  = proto->sig_slurpy;
13443     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13444
13445     {
13446         char * const ols = SvPVX(proto->linestr);
13447         char * const ls  = SvPVX(parser->linestr);
13448
13449         parser->bufptr      = ls + (proto->bufptr >= ols ?
13450                                     proto->bufptr -  ols : 0);
13451         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13452                                     proto->oldbufptr -  ols : 0);
13453         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13454                                     proto->oldoldbufptr -  ols : 0);
13455         parser->linestart   = ls + (proto->linestart >= ols ?
13456                                     proto->linestart -  ols : 0);
13457         parser->last_uni    = ls + (proto->last_uni >= ols ?
13458                                     proto->last_uni -  ols : 0);
13459         parser->last_lop    = ls + (proto->last_lop >= ols ?
13460                                     proto->last_lop -  ols : 0);
13461
13462         parser->bufend      = ls + SvCUR(parser->linestr);
13463     }
13464
13465     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13466
13467
13468     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13469     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13470     parser->nexttoke    = proto->nexttoke;
13471
13472     /* XXX should clone saved_curcop here, but we aren't passed
13473      * proto_perl; so do it in perl_clone_using instead */
13474
13475     return parser;
13476 }
13477
13478
13479 /* duplicate a file handle */
13480
13481 PerlIO *
13482 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13483 {
13484     PerlIO *ret;
13485
13486     PERL_ARGS_ASSERT_FP_DUP;
13487     PERL_UNUSED_ARG(type);
13488
13489     if (!fp)
13490         return (PerlIO*)NULL;
13491
13492     /* look for it in the table first */
13493     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13494     if (ret)
13495         return ret;
13496
13497     /* create anew and remember what it is */
13498 #ifdef __amigaos4__
13499     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13500 #else
13501     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13502 #endif
13503     ptr_table_store(PL_ptr_table, fp, ret);
13504     return ret;
13505 }
13506
13507 /* duplicate a directory handle */
13508
13509 DIR *
13510 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13511 {
13512     DIR *ret;
13513
13514 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13515     DIR *pwd;
13516     const Direntry_t *dirent;
13517     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13518     char *name = NULL;
13519     STRLEN len = 0;
13520     long pos;
13521 #endif
13522
13523     PERL_UNUSED_CONTEXT;
13524     PERL_ARGS_ASSERT_DIRP_DUP;
13525
13526     if (!dp)
13527         return (DIR*)NULL;
13528
13529     /* look for it in the table first */
13530     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13531     if (ret)
13532         return ret;
13533
13534 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13535
13536     PERL_UNUSED_ARG(param);
13537
13538     /* create anew */
13539
13540     /* open the current directory (so we can switch back) */
13541     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13542
13543     /* chdir to our dir handle and open the present working directory */
13544     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13545         PerlDir_close(pwd);
13546         return (DIR *)NULL;
13547     }
13548     /* Now we should have two dir handles pointing to the same dir. */
13549
13550     /* Be nice to the calling code and chdir back to where we were. */
13551     /* XXX If this fails, then what? */
13552     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13553
13554     /* We have no need of the pwd handle any more. */
13555     PerlDir_close(pwd);
13556
13557 #ifdef DIRNAMLEN
13558 # define d_namlen(d) (d)->d_namlen
13559 #else
13560 # define d_namlen(d) strlen((d)->d_name)
13561 #endif
13562     /* Iterate once through dp, to get the file name at the current posi-
13563        tion. Then step back. */
13564     pos = PerlDir_tell(dp);
13565     if ((dirent = PerlDir_read(dp))) {
13566         len = d_namlen(dirent);
13567         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13568             /* If the len is somehow magically longer than the
13569              * maximum length of the directory entry, even though
13570              * we could fit it in a buffer, we could not copy it
13571              * from the dirent.  Bail out. */
13572             PerlDir_close(ret);
13573             return (DIR*)NULL;
13574         }
13575         if (len <= sizeof smallbuf) name = smallbuf;
13576         else Newx(name, len, char);
13577         Move(dirent->d_name, name, len, char);
13578     }
13579     PerlDir_seek(dp, pos);
13580
13581     /* Iterate through the new dir handle, till we find a file with the
13582        right name. */
13583     if (!dirent) /* just before the end */
13584         for(;;) {
13585             pos = PerlDir_tell(ret);
13586             if (PerlDir_read(ret)) continue; /* not there yet */
13587             PerlDir_seek(ret, pos); /* step back */
13588             break;
13589         }
13590     else {
13591         const long pos0 = PerlDir_tell(ret);
13592         for(;;) {
13593             pos = PerlDir_tell(ret);
13594             if ((dirent = PerlDir_read(ret))) {
13595                 if (len == (STRLEN)d_namlen(dirent)
13596                     && memEQ(name, dirent->d_name, len)) {
13597                     /* found it */
13598                     PerlDir_seek(ret, pos); /* step back */
13599                     break;
13600                 }
13601                 /* else we are not there yet; keep iterating */
13602             }
13603             else { /* This is not meant to happen. The best we can do is
13604                       reset the iterator to the beginning. */
13605                 PerlDir_seek(ret, pos0);
13606                 break;
13607             }
13608         }
13609     }
13610 #undef d_namlen
13611
13612     if (name && name != smallbuf)
13613         Safefree(name);
13614 #endif
13615
13616 #ifdef WIN32
13617     ret = win32_dirp_dup(dp, param);
13618 #endif
13619
13620     /* pop it in the pointer table */
13621     if (ret)
13622         ptr_table_store(PL_ptr_table, dp, ret);
13623
13624     return ret;
13625 }
13626
13627 /* duplicate a typeglob */
13628
13629 GP *
13630 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13631 {
13632     GP *ret;
13633
13634     PERL_ARGS_ASSERT_GP_DUP;
13635
13636     if (!gp)
13637         return (GP*)NULL;
13638     /* look for it in the table first */
13639     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13640     if (ret)
13641         return ret;
13642
13643     /* create anew and remember what it is */
13644     Newxz(ret, 1, GP);
13645     ptr_table_store(PL_ptr_table, gp, ret);
13646
13647     /* clone */
13648     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13649        on Newxz() to do this for us.  */
13650     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13651     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13652     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13653     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13654     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13655     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13656     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13657     ret->gp_cvgen       = gp->gp_cvgen;
13658     ret->gp_line        = gp->gp_line;
13659     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13660     return ret;
13661 }
13662
13663 /* duplicate a chain of magic */
13664
13665 MAGIC *
13666 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13667 {
13668     MAGIC *mgret = NULL;
13669     MAGIC **mgprev_p = &mgret;
13670
13671     PERL_ARGS_ASSERT_MG_DUP;
13672
13673     for (; mg; mg = mg->mg_moremagic) {
13674         MAGIC *nmg;
13675
13676         if ((param->flags & CLONEf_JOIN_IN)
13677                 && mg->mg_type == PERL_MAGIC_backref)
13678             /* when joining, we let the individual SVs add themselves to
13679              * backref as needed. */
13680             continue;
13681
13682         Newx(nmg, 1, MAGIC);
13683         *mgprev_p = nmg;
13684         mgprev_p = &(nmg->mg_moremagic);
13685
13686         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13687            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13688            from the original commit adding Perl_mg_dup() - revision 4538.
13689            Similarly there is the annotation "XXX random ptr?" next to the
13690            assignment to nmg->mg_ptr.  */
13691         *nmg = *mg;
13692
13693         /* FIXME for plugins
13694         if (nmg->mg_type == PERL_MAGIC_qr) {
13695             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13696         }
13697         else
13698         */
13699         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13700                           ? nmg->mg_type == PERL_MAGIC_backref
13701                                 /* The backref AV has its reference
13702                                  * count deliberately bumped by 1 */
13703                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13704                                                     nmg->mg_obj, param))
13705                                 : sv_dup_inc(nmg->mg_obj, param)
13706                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13707                              nmg->mg_type == PERL_MAGIC_regdata)
13708                                   ? nmg->mg_obj
13709                                   : sv_dup(nmg->mg_obj, param);
13710
13711         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13712             if (nmg->mg_len > 0) {
13713                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13714                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13715                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13716                 {
13717                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13718                     sv_dup_inc_multiple((SV**)(namtp->table),
13719                                         (SV**)(namtp->table), NofAMmeth, param);
13720                 }
13721             }
13722             else if (nmg->mg_len == HEf_SVKEY)
13723                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13724         }
13725         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13726             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13727         }
13728     }
13729     return mgret;
13730 }
13731
13732 #endif /* USE_ITHREADS */
13733
13734 struct ptr_tbl_arena {
13735     struct ptr_tbl_arena *next;
13736     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13737 };
13738
13739 /* create a new pointer-mapping table */
13740
13741 PTR_TBL_t *
13742 Perl_ptr_table_new(pTHX)
13743 {
13744     PTR_TBL_t *tbl;
13745     PERL_UNUSED_CONTEXT;
13746
13747     Newx(tbl, 1, PTR_TBL_t);
13748     tbl->tbl_max        = 511;
13749     tbl->tbl_items      = 0;
13750     tbl->tbl_arena      = NULL;
13751     tbl->tbl_arena_next = NULL;
13752     tbl->tbl_arena_end  = NULL;
13753     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13754     return tbl;
13755 }
13756
13757 #define PTR_TABLE_HASH(ptr) \
13758   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13759
13760 /* map an existing pointer using a table */
13761
13762 STATIC PTR_TBL_ENT_t *
13763 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13764 {
13765     PTR_TBL_ENT_t *tblent;
13766     const UV hash = PTR_TABLE_HASH(sv);
13767
13768     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13769
13770     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13771     for (; tblent; tblent = tblent->next) {
13772         if (tblent->oldval == sv)
13773             return tblent;
13774     }
13775     return NULL;
13776 }
13777
13778 void *
13779 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13780 {
13781     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13782
13783     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13784     PERL_UNUSED_CONTEXT;
13785
13786     return tblent ? tblent->newval : NULL;
13787 }
13788
13789 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13790  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13791  * the core's typical use of ptr_tables in thread cloning. */
13792
13793 void
13794 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13795 {
13796     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13797
13798     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13799     PERL_UNUSED_CONTEXT;
13800
13801     if (tblent) {
13802         tblent->newval = newsv;
13803     } else {
13804         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13805
13806         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13807             struct ptr_tbl_arena *new_arena;
13808
13809             Newx(new_arena, 1, struct ptr_tbl_arena);
13810             new_arena->next = tbl->tbl_arena;
13811             tbl->tbl_arena = new_arena;
13812             tbl->tbl_arena_next = new_arena->array;
13813             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13814         }
13815
13816         tblent = tbl->tbl_arena_next++;
13817
13818         tblent->oldval = oldsv;
13819         tblent->newval = newsv;
13820         tblent->next = tbl->tbl_ary[entry];
13821         tbl->tbl_ary[entry] = tblent;
13822         tbl->tbl_items++;
13823         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13824             ptr_table_split(tbl);
13825     }
13826 }
13827
13828 /* double the hash bucket size of an existing ptr table */
13829
13830 void
13831 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13832 {
13833     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13834     const UV oldsize = tbl->tbl_max + 1;
13835     UV newsize = oldsize * 2;
13836     UV i;
13837
13838     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13839     PERL_UNUSED_CONTEXT;
13840
13841     Renew(ary, newsize, PTR_TBL_ENT_t*);
13842     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13843     tbl->tbl_max = --newsize;
13844     tbl->tbl_ary = ary;
13845     for (i=0; i < oldsize; i++, ary++) {
13846         PTR_TBL_ENT_t **entp = ary;
13847         PTR_TBL_ENT_t *ent = *ary;
13848         PTR_TBL_ENT_t **curentp;
13849         if (!ent)
13850             continue;
13851         curentp = ary + oldsize;
13852         do {
13853             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13854                 *entp = ent->next;
13855                 ent->next = *curentp;
13856                 *curentp = ent;
13857             }
13858             else
13859                 entp = &ent->next;
13860             ent = *entp;
13861         } while (ent);
13862     }
13863 }
13864
13865 /* remove all the entries from a ptr table */
13866 /* Deprecated - will be removed post 5.14 */
13867
13868 void
13869 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13870 {
13871     PERL_UNUSED_CONTEXT;
13872     if (tbl && tbl->tbl_items) {
13873         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13874
13875         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13876
13877         while (arena) {
13878             struct ptr_tbl_arena *next = arena->next;
13879
13880             Safefree(arena);
13881             arena = next;
13882         };
13883
13884         tbl->tbl_items = 0;
13885         tbl->tbl_arena = NULL;
13886         tbl->tbl_arena_next = NULL;
13887         tbl->tbl_arena_end = NULL;
13888     }
13889 }
13890
13891 /* clear and free a ptr table */
13892
13893 void
13894 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13895 {
13896     struct ptr_tbl_arena *arena;
13897
13898     PERL_UNUSED_CONTEXT;
13899
13900     if (!tbl) {
13901         return;
13902     }
13903
13904     arena = tbl->tbl_arena;
13905
13906     while (arena) {
13907         struct ptr_tbl_arena *next = arena->next;
13908
13909         Safefree(arena);
13910         arena = next;
13911     }
13912
13913     Safefree(tbl->tbl_ary);
13914     Safefree(tbl);
13915 }
13916
13917 #if defined(USE_ITHREADS)
13918
13919 void
13920 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13921 {
13922     PERL_ARGS_ASSERT_RVPV_DUP;
13923
13924     assert(!isREGEXP(sstr));
13925     if (SvROK(sstr)) {
13926         if (SvWEAKREF(sstr)) {
13927             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13928             if (param->flags & CLONEf_JOIN_IN) {
13929                 /* if joining, we add any back references individually rather
13930                  * than copying the whole backref array */
13931                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13932             }
13933         }
13934         else
13935             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13936     }
13937     else if (SvPVX_const(sstr)) {
13938         /* Has something there */
13939         if (SvLEN(sstr)) {
13940             /* Normal PV - clone whole allocated space */
13941             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13942             /* sstr may not be that normal, but actually copy on write.
13943                But we are a true, independent SV, so:  */
13944             SvIsCOW_off(dstr);
13945         }
13946         else {
13947             /* Special case - not normally malloced for some reason */
13948             if (isGV_with_GP(sstr)) {
13949                 /* Don't need to do anything here.  */
13950             }
13951             else if ((SvIsCOW(sstr))) {
13952                 /* A "shared" PV - clone it as "shared" PV */
13953                 SvPV_set(dstr,
13954                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13955                                          param)));
13956             }
13957             else {
13958                 /* Some other special case - random pointer */
13959                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13960             }
13961         }
13962     }
13963     else {
13964         /* Copy the NULL */
13965         SvPV_set(dstr, NULL);
13966     }
13967 }
13968
13969 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13970 static SV **
13971 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13972                       SSize_t items, CLONE_PARAMS *const param)
13973 {
13974     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13975
13976     while (items-- > 0) {
13977         *dest++ = sv_dup_inc(*source++, param);
13978     }
13979
13980     return dest;
13981 }
13982
13983 /* duplicate an SV of any type (including AV, HV etc) */
13984
13985 static SV *
13986 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13987 {
13988     dVAR;
13989     SV *dstr;
13990
13991     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13992
13993     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13994 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13995         abort();
13996 #endif
13997         return NULL;
13998     }
13999     /* look for it in the table first */
14000     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14001     if (dstr)
14002         return dstr;
14003
14004     if(param->flags & CLONEf_JOIN_IN) {
14005         /** We are joining here so we don't want do clone
14006             something that is bad **/
14007         if (SvTYPE(sstr) == SVt_PVHV) {
14008             const HEK * const hvname = HvNAME_HEK(sstr);
14009             if (hvname) {
14010                 /** don't clone stashes if they already exist **/
14011                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14012                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14013                 ptr_table_store(PL_ptr_table, sstr, dstr);
14014                 return dstr;
14015             }
14016         }
14017         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14018             HV *stash = GvSTASH(sstr);
14019             const HEK * hvname;
14020             if (stash && (hvname = HvNAME_HEK(stash))) {
14021                 /** don't clone GVs if they already exist **/
14022                 SV **svp;
14023                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14024                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14025                 svp = hv_fetch(
14026                         stash, GvNAME(sstr),
14027                         GvNAMEUTF8(sstr)
14028                             ? -GvNAMELEN(sstr)
14029                             :  GvNAMELEN(sstr),
14030                         0
14031                       );
14032                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14033                     ptr_table_store(PL_ptr_table, sstr, *svp);
14034                     return *svp;
14035                 }
14036             }
14037         }
14038     }
14039
14040     /* create anew and remember what it is */
14041     new_SV(dstr);
14042
14043 #ifdef DEBUG_LEAKING_SCALARS
14044     dstr->sv_debug_optype = sstr->sv_debug_optype;
14045     dstr->sv_debug_line = sstr->sv_debug_line;
14046     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14047     dstr->sv_debug_parent = (SV*)sstr;
14048     FREE_SV_DEBUG_FILE(dstr);
14049     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14050 #endif
14051
14052     ptr_table_store(PL_ptr_table, sstr, dstr);
14053
14054     /* clone */
14055     SvFLAGS(dstr)       = SvFLAGS(sstr);
14056     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14057     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14058
14059 #ifdef DEBUGGING
14060     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14061         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14062                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14063 #endif
14064
14065     /* don't clone objects whose class has asked us not to */
14066     if (SvOBJECT(sstr)
14067      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14068     {
14069         SvFLAGS(dstr) = 0;
14070         return dstr;
14071     }
14072
14073     switch (SvTYPE(sstr)) {
14074     case SVt_NULL:
14075         SvANY(dstr)     = NULL;
14076         break;
14077     case SVt_IV:
14078         SET_SVANY_FOR_BODYLESS_IV(dstr);
14079         if(SvROK(sstr)) {
14080             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14081         } else {
14082             SvIV_set(dstr, SvIVX(sstr));
14083         }
14084         break;
14085     case SVt_NV:
14086 #if NVSIZE <= IVSIZE
14087         SET_SVANY_FOR_BODYLESS_NV(dstr);
14088 #else
14089         SvANY(dstr)     = new_XNV();
14090 #endif
14091         SvNV_set(dstr, SvNVX(sstr));
14092         break;
14093     default:
14094         {
14095             /* These are all the types that need complex bodies allocating.  */
14096             void *new_body;
14097             const svtype sv_type = SvTYPE(sstr);
14098             const struct body_details *const sv_type_details
14099                 = bodies_by_type + sv_type;
14100
14101             switch (sv_type) {
14102             default:
14103                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14104                 NOT_REACHED; /* NOTREACHED */
14105                 break;
14106
14107             case SVt_PVGV:
14108             case SVt_PVIO:
14109             case SVt_PVFM:
14110             case SVt_PVHV:
14111             case SVt_PVAV:
14112             case SVt_PVCV:
14113             case SVt_PVLV:
14114             case SVt_REGEXP:
14115             case SVt_PVMG:
14116             case SVt_PVNV:
14117             case SVt_PVIV:
14118             case SVt_INVLIST:
14119             case SVt_PV:
14120                 assert(sv_type_details->body_size);
14121                 if (sv_type_details->arena) {
14122                     new_body_inline(new_body, sv_type);
14123                     new_body
14124                         = (void*)((char*)new_body - sv_type_details->offset);
14125                 } else {
14126                     new_body = new_NOARENA(sv_type_details);
14127                 }
14128             }
14129             assert(new_body);
14130             SvANY(dstr) = new_body;
14131
14132 #ifndef PURIFY
14133             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14134                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14135                  sv_type_details->copy, char);
14136 #else
14137             Copy(((char*)SvANY(sstr)),
14138                  ((char*)SvANY(dstr)),
14139                  sv_type_details->body_size + sv_type_details->offset, char);
14140 #endif
14141
14142             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14143                 && !isGV_with_GP(dstr)
14144                 && !isREGEXP(dstr)
14145                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14146                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14147
14148             /* The Copy above means that all the source (unduplicated) pointers
14149                are now in the destination.  We can check the flags and the
14150                pointers in either, but it's possible that there's less cache
14151                missing by always going for the destination.
14152                FIXME - instrument and check that assumption  */
14153             if (sv_type >= SVt_PVMG) {
14154                 if (SvMAGIC(dstr))
14155                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14156                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14157                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14158                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14159             }
14160
14161             /* The cast silences a GCC warning about unhandled types.  */
14162             switch ((int)sv_type) {
14163             case SVt_PV:
14164                 break;
14165             case SVt_PVIV:
14166                 break;
14167             case SVt_PVNV:
14168                 break;
14169             case SVt_PVMG:
14170                 break;
14171             case SVt_REGEXP:
14172               duprex:
14173                 /* FIXME for plugins */
14174                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14175                 break;
14176             case SVt_PVLV:
14177                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14178                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14179                     LvTARG(dstr) = dstr;
14180                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14181                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14182                 else
14183                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14184                 if (isREGEXP(sstr)) goto duprex;
14185                 /* FALLTHROUGH */
14186             case SVt_PVGV:
14187                 /* non-GP case already handled above */
14188                 if(isGV_with_GP(sstr)) {
14189                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14190                     /* Don't call sv_add_backref here as it's going to be
14191                        created as part of the magic cloning of the symbol
14192                        table--unless this is during a join and the stash
14193                        is not actually being cloned.  */
14194                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14195                        at the point of this comment.  */
14196                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14197                     if (param->flags & CLONEf_JOIN_IN)
14198                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14199                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14200                     (void)GpREFCNT_inc(GvGP(dstr));
14201                 }
14202                 break;
14203             case SVt_PVIO:
14204                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14205                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14206                     /* I have no idea why fake dirp (rsfps)
14207                        should be treated differently but otherwise
14208                        we end up with leaks -- sky*/
14209                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14210                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14211                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14212                 } else {
14213                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14214                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14215                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14216                     if (IoDIRP(dstr)) {
14217                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14218                     } else {
14219                         NOOP;
14220                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14221                     }
14222                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14223                 }
14224                 if (IoOFP(dstr) == IoIFP(sstr))
14225                     IoOFP(dstr) = IoIFP(dstr);
14226                 else
14227                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14228                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14229                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14230                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14231                 break;
14232             case SVt_PVAV:
14233                 /* avoid cloning an empty array */
14234                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14235                     SV **dst_ary, **src_ary;
14236                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14237
14238                     src_ary = AvARRAY((const AV *)sstr);
14239                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14240                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14241                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14242                     AvALLOC((const AV *)dstr) = dst_ary;
14243                     if (AvREAL((const AV *)sstr)) {
14244                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14245                                                       param);
14246                     }
14247                     else {
14248                         while (items-- > 0)
14249                             *dst_ary++ = sv_dup(*src_ary++, param);
14250                     }
14251                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14252                     while (items-- > 0) {
14253                         *dst_ary++ = NULL;
14254                     }
14255                 }
14256                 else {
14257                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14258                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14259                     AvMAX(  (const AV *)dstr)   = -1;
14260                     AvFILLp((const AV *)dstr)   = -1;
14261                 }
14262                 break;
14263             case SVt_PVHV:
14264                 if (HvARRAY((const HV *)sstr)) {
14265                     STRLEN i = 0;
14266                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14267                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14268                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14269                     char *darray;
14270                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14271                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14272                         char);
14273                     HvARRAY(dstr) = (HE**)darray;
14274                     while (i <= sxhv->xhv_max) {
14275                         const HE * const source = HvARRAY(sstr)[i];
14276                         HvARRAY(dstr)[i] = source
14277                             ? he_dup(source, sharekeys, param) : 0;
14278                         ++i;
14279                     }
14280                     if (SvOOK(sstr)) {
14281                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14282                         struct xpvhv_aux * const daux = HvAUX(dstr);
14283                         /* This flag isn't copied.  */
14284                         SvOOK_on(dstr);
14285
14286                         if (saux->xhv_name_count) {
14287                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14288                             const I32 count
14289                              = saux->xhv_name_count < 0
14290                                 ? -saux->xhv_name_count
14291                                 :  saux->xhv_name_count;
14292                             HEK **shekp = sname + count;
14293                             HEK **dhekp;
14294                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14295                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14296                             while (shekp-- > sname) {
14297                                 dhekp--;
14298                                 *dhekp = hek_dup(*shekp, param);
14299                             }
14300                         }
14301                         else {
14302                             daux->xhv_name_u.xhvnameu_name
14303                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14304                                           param);
14305                         }
14306                         daux->xhv_name_count = saux->xhv_name_count;
14307
14308                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14309 #ifdef PERL_HASH_RANDOMIZE_KEYS
14310                         daux->xhv_rand = saux->xhv_rand;
14311                         daux->xhv_last_rand = saux->xhv_last_rand;
14312 #endif
14313                         daux->xhv_riter = saux->xhv_riter;
14314                         daux->xhv_eiter = saux->xhv_eiter
14315                             ? he_dup(saux->xhv_eiter,
14316                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14317                         /* backref array needs refcnt=2; see sv_add_backref */
14318                         daux->xhv_backreferences =
14319                             (param->flags & CLONEf_JOIN_IN)
14320                                 /* when joining, we let the individual GVs and
14321                                  * CVs add themselves to backref as
14322                                  * needed. This avoids pulling in stuff
14323                                  * that isn't required, and simplifies the
14324                                  * case where stashes aren't cloned back
14325                                  * if they already exist in the parent
14326                                  * thread */
14327                             ? NULL
14328                             : saux->xhv_backreferences
14329                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14330                                     ? MUTABLE_AV(SvREFCNT_inc(
14331                                           sv_dup_inc((const SV *)
14332                                             saux->xhv_backreferences, param)))
14333                                     : MUTABLE_AV(sv_dup((const SV *)
14334                                             saux->xhv_backreferences, param))
14335                                 : 0;
14336
14337                         daux->xhv_mro_meta = saux->xhv_mro_meta
14338                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14339                             : 0;
14340
14341                         /* Record stashes for possible cloning in Perl_clone(). */
14342                         if (HvNAME(sstr))
14343                             av_push(param->stashes, dstr);
14344                     }
14345                 }
14346                 else
14347                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14348                 break;
14349             case SVt_PVCV:
14350                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14351                     CvDEPTH(dstr) = 0;
14352                 }
14353                 /* FALLTHROUGH */
14354             case SVt_PVFM:
14355                 /* NOTE: not refcounted */
14356                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14357                     hv_dup(CvSTASH(dstr), param);
14358                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14359                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14360                 if (!CvISXSUB(dstr)) {
14361                     OP_REFCNT_LOCK;
14362                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14363                     OP_REFCNT_UNLOCK;
14364                     CvSLABBED_off(dstr);
14365                 } else if (CvCONST(dstr)) {
14366                     CvXSUBANY(dstr).any_ptr =
14367                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14368                 }
14369                 assert(!CvSLABBED(dstr));
14370                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14371                 if (CvNAMED(dstr))
14372                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14373                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14374                 /* don't dup if copying back - CvGV isn't refcounted, so the
14375                  * duped GV may never be freed. A bit of a hack! DAPM */
14376                 else
14377                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14378                     CvCVGV_RC(dstr)
14379                     ? gv_dup_inc(CvGV(sstr), param)
14380                     : (param->flags & CLONEf_JOIN_IN)
14381                         ? NULL
14382                         : gv_dup(CvGV(sstr), param);
14383
14384                 if (!CvISXSUB(sstr)) {
14385                     PADLIST * padlist = CvPADLIST(sstr);
14386                     if(padlist)
14387                         padlist = padlist_dup(padlist, param);
14388                     CvPADLIST_set(dstr, padlist);
14389                 } else
14390 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14391                     PoisonPADLIST(dstr);
14392
14393                 CvOUTSIDE(dstr) =
14394                     CvWEAKOUTSIDE(sstr)
14395                     ? cv_dup(    CvOUTSIDE(dstr), param)
14396                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14397                 break;
14398             }
14399         }
14400     }
14401
14402     return dstr;
14403  }
14404
14405 SV *
14406 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14407 {
14408     PERL_ARGS_ASSERT_SV_DUP_INC;
14409     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14410 }
14411
14412 SV *
14413 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14414 {
14415     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14416     PERL_ARGS_ASSERT_SV_DUP;
14417
14418     /* Track every SV that (at least initially) had a reference count of 0.
14419        We need to do this by holding an actual reference to it in this array.
14420        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14421        (akin to the stashes hash, and the perl stack), we come unstuck if
14422        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14423        thread) is manipulated in a CLONE method, because CLONE runs before the
14424        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14425        (and fix things up by giving each a reference via the temps stack).
14426        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14427        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14428        before the walk of unreferenced happens and a reference to that is SV
14429        added to the temps stack. At which point we have the same SV considered
14430        to be in use, and free to be re-used. Not good.
14431     */
14432     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14433         assert(param->unreferenced);
14434         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14435     }
14436
14437     return dstr;
14438 }
14439
14440 /* duplicate a context */
14441
14442 PERL_CONTEXT *
14443 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14444 {
14445     PERL_CONTEXT *ncxs;
14446
14447     PERL_ARGS_ASSERT_CX_DUP;
14448
14449     if (!cxs)
14450         return (PERL_CONTEXT*)NULL;
14451
14452     /* look for it in the table first */
14453     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14454     if (ncxs)
14455         return ncxs;
14456
14457     /* create anew and remember what it is */
14458     Newx(ncxs, max + 1, PERL_CONTEXT);
14459     ptr_table_store(PL_ptr_table, cxs, ncxs);
14460     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14461
14462     while (ix >= 0) {
14463         PERL_CONTEXT * const ncx = &ncxs[ix];
14464         if (CxTYPE(ncx) == CXt_SUBST) {
14465             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14466         }
14467         else {
14468             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14469             switch (CxTYPE(ncx)) {
14470             case CXt_SUB:
14471                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14472                 if(CxHASARGS(ncx)){
14473                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14474                 } else {
14475                     ncx->blk_sub.savearray = NULL;
14476                 }
14477                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14478                                            ncx->blk_sub.prevcomppad);
14479                 break;
14480             case CXt_EVAL:
14481                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14482                                                       param);
14483                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14484                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14485                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14486                 /* XXX what do do with cur_top_env ???? */
14487                 break;
14488             case CXt_LOOP_LAZYSV:
14489                 ncx->blk_loop.state_u.lazysv.end
14490                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14491                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14492                    duplication code instead.
14493                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14494                    actually being the same function, and (2) order
14495                    equivalence of the two unions.
14496                    We can assert the later [but only at run time :-(]  */
14497                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14498                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14499                 /* FALLTHROUGH */
14500             case CXt_LOOP_ARY:
14501                 ncx->blk_loop.state_u.ary.ary
14502                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14503                 /* FALLTHROUGH */
14504             case CXt_LOOP_LIST:
14505             case CXt_LOOP_LAZYIV:
14506                 /* code common to all 'for' CXt_LOOP_* types */
14507                 ncx->blk_loop.itersave =
14508                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14509                 if (CxPADLOOP(ncx)) {
14510                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14511                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14512                     ncx->blk_loop.oldcomppad =
14513                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14514                                                 ncx->blk_loop.oldcomppad);
14515                     ncx->blk_loop.itervar_u.svp =
14516                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14517                 }
14518                 else {
14519                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14520                      * alias (for \$x (...)) - relies on gv_dup being the
14521                      * same as sv_dup */
14522                     ncx->blk_loop.itervar_u.gv
14523                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14524                                     param);
14525                 }
14526                 break;
14527             case CXt_LOOP_PLAIN:
14528                 break;
14529             case CXt_FORMAT:
14530                 ncx->blk_format.prevcomppad =
14531                         (PAD*)ptr_table_fetch(PL_ptr_table,
14532                                            ncx->blk_format.prevcomppad);
14533                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14534                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14535                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14536                                                      param);
14537                 break;
14538             case CXt_GIVEN:
14539                 ncx->blk_givwhen.defsv_save =
14540                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14541                 break;
14542             case CXt_BLOCK:
14543             case CXt_NULL:
14544             case CXt_WHEN:
14545                 break;
14546             }
14547         }
14548         --ix;
14549     }
14550     return ncxs;
14551 }
14552
14553 /* duplicate a stack info structure */
14554
14555 PERL_SI *
14556 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14557 {
14558     PERL_SI *nsi;
14559
14560     PERL_ARGS_ASSERT_SI_DUP;
14561
14562     if (!si)
14563         return (PERL_SI*)NULL;
14564
14565     /* look for it in the table first */
14566     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14567     if (nsi)
14568         return nsi;
14569
14570     /* create anew and remember what it is */
14571     Newx(nsi, 1, PERL_SI);
14572     ptr_table_store(PL_ptr_table, si, nsi);
14573
14574     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14575     nsi->si_cxix        = si->si_cxix;
14576     nsi->si_cxmax       = si->si_cxmax;
14577     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14578     nsi->si_type        = si->si_type;
14579     nsi->si_prev        = si_dup(si->si_prev, param);
14580     nsi->si_next        = si_dup(si->si_next, param);
14581     nsi->si_markoff     = si->si_markoff;
14582 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14583     nsi->si_stack_hwm   = 0;
14584 #endif
14585
14586     return nsi;
14587 }
14588
14589 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14590 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14591 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14592 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14593 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14594 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14595 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14596 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14597 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14598 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14599 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14600 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14601 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14602 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14603 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14604 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14605
14606 /* XXXXX todo */
14607 #define pv_dup_inc(p)   SAVEPV(p)
14608 #define pv_dup(p)       SAVEPV(p)
14609 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14610
14611 /* map any object to the new equivent - either something in the
14612  * ptr table, or something in the interpreter structure
14613  */
14614
14615 void *
14616 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14617 {
14618     void *ret;
14619
14620     PERL_ARGS_ASSERT_ANY_DUP;
14621
14622     if (!v)
14623         return (void*)NULL;
14624
14625     /* look for it in the table first */
14626     ret = ptr_table_fetch(PL_ptr_table, v);
14627     if (ret)
14628         return ret;
14629
14630     /* see if it is part of the interpreter structure */
14631     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14632         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14633     else {
14634         ret = v;
14635     }
14636
14637     return ret;
14638 }
14639
14640 /* duplicate the save stack */
14641
14642 ANY *
14643 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14644 {
14645     dVAR;
14646     ANY * const ss      = proto_perl->Isavestack;
14647     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14648     I32 ix              = proto_perl->Isavestack_ix;
14649     ANY *nss;
14650     const SV *sv;
14651     const GV *gv;
14652     const AV *av;
14653     const HV *hv;
14654     void* ptr;
14655     int intval;
14656     long longval;
14657     GP *gp;
14658     IV iv;
14659     I32 i;
14660     char *c = NULL;
14661     void (*dptr) (void*);
14662     void (*dxptr) (pTHX_ void*);
14663
14664     PERL_ARGS_ASSERT_SS_DUP;
14665
14666     Newx(nss, max, ANY);
14667
14668     while (ix > 0) {
14669         const UV uv = POPUV(ss,ix);
14670         const U8 type = (U8)uv & SAVE_MASK;
14671
14672         TOPUV(nss,ix) = uv;
14673         switch (type) {
14674         case SAVEt_CLEARSV:
14675         case SAVEt_CLEARPADRANGE:
14676             break;
14677         case SAVEt_HELEM:               /* hash element */
14678         case SAVEt_SV:                  /* scalar reference */
14679             sv = (const SV *)POPPTR(ss,ix);
14680             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14681             /* FALLTHROUGH */
14682         case SAVEt_ITEM:                        /* normal string */
14683         case SAVEt_GVSV:                        /* scalar slot in GV */
14684             sv = (const SV *)POPPTR(ss,ix);
14685             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14686             if (type == SAVEt_SV)
14687                 break;
14688             /* FALLTHROUGH */
14689         case SAVEt_FREESV:
14690         case SAVEt_MORTALIZESV:
14691         case SAVEt_READONLY_OFF:
14692             sv = (const SV *)POPPTR(ss,ix);
14693             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14694             break;
14695         case SAVEt_FREEPADNAME:
14696             ptr = POPPTR(ss,ix);
14697             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14698             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14699             break;
14700         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14701             c = (char*)POPPTR(ss,ix);
14702             TOPPTR(nss,ix) = savesharedpv(c);
14703             ptr = POPPTR(ss,ix);
14704             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14705             break;
14706         case SAVEt_GENERIC_SVREF:               /* generic sv */
14707         case SAVEt_SVREF:                       /* scalar reference */
14708             sv = (const SV *)POPPTR(ss,ix);
14709             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14710             if (type == SAVEt_SVREF)
14711                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14712             ptr = POPPTR(ss,ix);
14713             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14714             break;
14715         case SAVEt_GVSLOT:              /* any slot in GV */
14716             sv = (const SV *)POPPTR(ss,ix);
14717             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14718             ptr = POPPTR(ss,ix);
14719             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14720             sv = (const SV *)POPPTR(ss,ix);
14721             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14722             break;
14723         case SAVEt_HV:                          /* hash reference */
14724         case SAVEt_AV:                          /* array reference */
14725             sv = (const SV *) POPPTR(ss,ix);
14726             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14727             /* FALLTHROUGH */
14728         case SAVEt_COMPPAD:
14729         case SAVEt_NSTAB:
14730             sv = (const SV *) POPPTR(ss,ix);
14731             TOPPTR(nss,ix) = sv_dup(sv, param);
14732             break;
14733         case SAVEt_INT:                         /* int reference */
14734             ptr = POPPTR(ss,ix);
14735             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14736             intval = (int)POPINT(ss,ix);
14737             TOPINT(nss,ix) = intval;
14738             break;
14739         case SAVEt_LONG:                        /* long reference */
14740             ptr = POPPTR(ss,ix);
14741             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14742             longval = (long)POPLONG(ss,ix);
14743             TOPLONG(nss,ix) = longval;
14744             break;
14745         case SAVEt_I32:                         /* I32 reference */
14746             ptr = POPPTR(ss,ix);
14747             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14748             i = POPINT(ss,ix);
14749             TOPINT(nss,ix) = i;
14750             break;
14751         case SAVEt_IV:                          /* IV reference */
14752         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14753             ptr = POPPTR(ss,ix);
14754             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14755             iv = POPIV(ss,ix);
14756             TOPIV(nss,ix) = iv;
14757             break;
14758         case SAVEt_TMPSFLOOR:
14759             iv = POPIV(ss,ix);
14760             TOPIV(nss,ix) = iv;
14761             break;
14762         case SAVEt_HPTR:                        /* HV* reference */
14763         case SAVEt_APTR:                        /* AV* reference */
14764         case SAVEt_SPTR:                        /* SV* reference */
14765             ptr = POPPTR(ss,ix);
14766             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14767             sv = (const SV *)POPPTR(ss,ix);
14768             TOPPTR(nss,ix) = sv_dup(sv, param);
14769             break;
14770         case SAVEt_VPTR:                        /* random* reference */
14771             ptr = POPPTR(ss,ix);
14772             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14773             /* FALLTHROUGH */
14774         case SAVEt_INT_SMALL:
14775         case SAVEt_I32_SMALL:
14776         case SAVEt_I16:                         /* I16 reference */
14777         case SAVEt_I8:                          /* I8 reference */
14778         case SAVEt_BOOL:
14779             ptr = POPPTR(ss,ix);
14780             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14781             break;
14782         case SAVEt_GENERIC_PVREF:               /* generic char* */
14783         case SAVEt_PPTR:                        /* char* reference */
14784             ptr = POPPTR(ss,ix);
14785             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14786             c = (char*)POPPTR(ss,ix);
14787             TOPPTR(nss,ix) = pv_dup(c);
14788             break;
14789         case SAVEt_GP:                          /* scalar reference */
14790             gp = (GP*)POPPTR(ss,ix);
14791             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14792             (void)GpREFCNT_inc(gp);
14793             gv = (const GV *)POPPTR(ss,ix);
14794             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14795             break;
14796         case SAVEt_FREEOP:
14797             ptr = POPPTR(ss,ix);
14798             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14799                 /* these are assumed to be refcounted properly */
14800                 OP *o;
14801                 switch (((OP*)ptr)->op_type) {
14802                 case OP_LEAVESUB:
14803                 case OP_LEAVESUBLV:
14804                 case OP_LEAVEEVAL:
14805                 case OP_LEAVE:
14806                 case OP_SCOPE:
14807                 case OP_LEAVEWRITE:
14808                     TOPPTR(nss,ix) = ptr;
14809                     o = (OP*)ptr;
14810                     OP_REFCNT_LOCK;
14811                     (void) OpREFCNT_inc(o);
14812                     OP_REFCNT_UNLOCK;
14813                     break;
14814                 default:
14815                     TOPPTR(nss,ix) = NULL;
14816                     break;
14817                 }
14818             }
14819             else
14820                 TOPPTR(nss,ix) = NULL;
14821             break;
14822         case SAVEt_FREECOPHH:
14823             ptr = POPPTR(ss,ix);
14824             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14825             break;
14826         case SAVEt_ADELETE:
14827             av = (const AV *)POPPTR(ss,ix);
14828             TOPPTR(nss,ix) = av_dup_inc(av, param);
14829             i = POPINT(ss,ix);
14830             TOPINT(nss,ix) = i;
14831             break;
14832         case SAVEt_DELETE:
14833             hv = (const HV *)POPPTR(ss,ix);
14834             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14835             i = POPINT(ss,ix);
14836             TOPINT(nss,ix) = i;
14837             /* FALLTHROUGH */
14838         case SAVEt_FREEPV:
14839             c = (char*)POPPTR(ss,ix);
14840             TOPPTR(nss,ix) = pv_dup_inc(c);
14841             break;
14842         case SAVEt_STACK_POS:           /* Position on Perl stack */
14843             i = POPINT(ss,ix);
14844             TOPINT(nss,ix) = i;
14845             break;
14846         case SAVEt_DESTRUCTOR:
14847             ptr = POPPTR(ss,ix);
14848             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14849             dptr = POPDPTR(ss,ix);
14850             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14851                                         any_dup(FPTR2DPTR(void *, dptr),
14852                                                 proto_perl));
14853             break;
14854         case SAVEt_DESTRUCTOR_X:
14855             ptr = POPPTR(ss,ix);
14856             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14857             dxptr = POPDXPTR(ss,ix);
14858             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14859                                          any_dup(FPTR2DPTR(void *, dxptr),
14860                                                  proto_perl));
14861             break;
14862         case SAVEt_REGCONTEXT:
14863         case SAVEt_ALLOC:
14864             ix -= uv >> SAVE_TIGHT_SHIFT;
14865             break;
14866         case SAVEt_AELEM:               /* array element */
14867             sv = (const SV *)POPPTR(ss,ix);
14868             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14869             iv = POPIV(ss,ix);
14870             TOPIV(nss,ix) = iv;
14871             av = (const AV *)POPPTR(ss,ix);
14872             TOPPTR(nss,ix) = av_dup_inc(av, param);
14873             break;
14874         case SAVEt_OP:
14875             ptr = POPPTR(ss,ix);
14876             TOPPTR(nss,ix) = ptr;
14877             break;
14878         case SAVEt_HINTS:
14879             ptr = POPPTR(ss,ix);
14880             ptr = cophh_copy((COPHH*)ptr);
14881             TOPPTR(nss,ix) = ptr;
14882             i = POPINT(ss,ix);
14883             TOPINT(nss,ix) = i;
14884             if (i & HINT_LOCALIZE_HH) {
14885                 hv = (const HV *)POPPTR(ss,ix);
14886                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14887             }
14888             break;
14889         case SAVEt_PADSV_AND_MORTALIZE:
14890             longval = (long)POPLONG(ss,ix);
14891             TOPLONG(nss,ix) = longval;
14892             ptr = POPPTR(ss,ix);
14893             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14894             sv = (const SV *)POPPTR(ss,ix);
14895             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14896             break;
14897         case SAVEt_SET_SVFLAGS:
14898             i = POPINT(ss,ix);
14899             TOPINT(nss,ix) = i;
14900             i = POPINT(ss,ix);
14901             TOPINT(nss,ix) = i;
14902             sv = (const SV *)POPPTR(ss,ix);
14903             TOPPTR(nss,ix) = sv_dup(sv, param);
14904             break;
14905         case SAVEt_COMPILE_WARNINGS:
14906             ptr = POPPTR(ss,ix);
14907             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14908             break;
14909         case SAVEt_PARSER:
14910             ptr = POPPTR(ss,ix);
14911             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14912             break;
14913         default:
14914             Perl_croak(aTHX_
14915                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14916         }
14917     }
14918
14919     return nss;
14920 }
14921
14922
14923 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14924  * flag to the result. This is done for each stash before cloning starts,
14925  * so we know which stashes want their objects cloned */
14926
14927 static void
14928 do_mark_cloneable_stash(pTHX_ SV *const sv)
14929 {
14930     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14931     if (hvname) {
14932         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14933         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14934         if (cloner && GvCV(cloner)) {
14935             dSP;
14936             UV status;
14937
14938             ENTER;
14939             SAVETMPS;
14940             PUSHMARK(SP);
14941             mXPUSHs(newSVhek(hvname));
14942             PUTBACK;
14943             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14944             SPAGAIN;
14945             status = POPu;
14946             PUTBACK;
14947             FREETMPS;
14948             LEAVE;
14949             if (status)
14950                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14951         }
14952     }
14953 }
14954
14955
14956
14957 /*
14958 =for apidoc perl_clone
14959
14960 Create and return a new interpreter by cloning the current one.
14961
14962 C<perl_clone> takes these flags as parameters:
14963
14964 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14965 without it we only clone the data and zero the stacks,
14966 with it we copy the stacks and the new perl interpreter is
14967 ready to run at the exact same point as the previous one.
14968 The pseudo-fork code uses C<COPY_STACKS> while the
14969 threads->create doesn't.
14970
14971 C<CLONEf_KEEP_PTR_TABLE> -
14972 C<perl_clone> keeps a ptr_table with the pointer of the old
14973 variable as a key and the new variable as a value,
14974 this allows it to check if something has been cloned and not
14975 clone it again but rather just use the value and increase the
14976 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14977 the ptr_table using the function
14978 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14979 reason to keep it around is if you want to dup some of your own
14980 variable who are outside the graph perl scans, an example of this
14981 code is in F<threads.xs> create.
14982
14983 C<CLONEf_CLONE_HOST> -
14984 This is a win32 thing, it is ignored on unix, it tells perls
14985 win32host code (which is c++) to clone itself, this is needed on
14986 win32 if you want to run two threads at the same time,
14987 if you just want to do some stuff in a separate perl interpreter
14988 and then throw it away and return to the original one,
14989 you don't need to do anything.
14990
14991 =cut
14992 */
14993
14994 /* XXX the above needs expanding by someone who actually understands it ! */
14995 EXTERN_C PerlInterpreter *
14996 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14997
14998 PerlInterpreter *
14999 perl_clone(PerlInterpreter *proto_perl, UV flags)
15000 {
15001    dVAR;
15002 #ifdef PERL_IMPLICIT_SYS
15003
15004     PERL_ARGS_ASSERT_PERL_CLONE;
15005
15006    /* perlhost.h so we need to call into it
15007    to clone the host, CPerlHost should have a c interface, sky */
15008
15009 #ifndef __amigaos4__
15010    if (flags & CLONEf_CLONE_HOST) {
15011        return perl_clone_host(proto_perl,flags);
15012    }
15013 #endif
15014    return perl_clone_using(proto_perl, flags,
15015                             proto_perl->IMem,
15016                             proto_perl->IMemShared,
15017                             proto_perl->IMemParse,
15018                             proto_perl->IEnv,
15019                             proto_perl->IStdIO,
15020                             proto_perl->ILIO,
15021                             proto_perl->IDir,
15022                             proto_perl->ISock,
15023                             proto_perl->IProc);
15024 }
15025
15026 PerlInterpreter *
15027 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15028                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15029                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15030                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15031                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15032                  struct IPerlProc* ipP)
15033 {
15034     /* XXX many of the string copies here can be optimized if they're
15035      * constants; they need to be allocated as common memory and just
15036      * their pointers copied. */
15037
15038     IV i;
15039     CLONE_PARAMS clone_params;
15040     CLONE_PARAMS* const param = &clone_params;
15041
15042     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15043
15044     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15045 #else           /* !PERL_IMPLICIT_SYS */
15046     IV i;
15047     CLONE_PARAMS clone_params;
15048     CLONE_PARAMS* param = &clone_params;
15049     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15050
15051     PERL_ARGS_ASSERT_PERL_CLONE;
15052 #endif          /* PERL_IMPLICIT_SYS */
15053
15054     /* for each stash, determine whether its objects should be cloned */
15055     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15056     PERL_SET_THX(my_perl);
15057
15058 #ifdef DEBUGGING
15059     PoisonNew(my_perl, 1, PerlInterpreter);
15060     PL_op = NULL;
15061     PL_curcop = NULL;
15062     PL_defstash = NULL; /* may be used by perl malloc() */
15063     PL_markstack = 0;
15064     PL_scopestack = 0;
15065     PL_scopestack_name = 0;
15066     PL_savestack = 0;
15067     PL_savestack_ix = 0;
15068     PL_savestack_max = -1;
15069     PL_sig_pending = 0;
15070     PL_parser = NULL;
15071     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15072     Zero(&PL_padname_undef, 1, PADNAME);
15073     Zero(&PL_padname_const, 1, PADNAME);
15074 #  ifdef DEBUG_LEAKING_SCALARS
15075     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15076 #  endif
15077 #  ifdef PERL_TRACE_OPS
15078     Zero(PL_op_exec_cnt, OP_max+2, UV);
15079 #  endif
15080 #else   /* !DEBUGGING */
15081     Zero(my_perl, 1, PerlInterpreter);
15082 #endif  /* DEBUGGING */
15083
15084 #ifdef PERL_IMPLICIT_SYS
15085     /* host pointers */
15086     PL_Mem              = ipM;
15087     PL_MemShared        = ipMS;
15088     PL_MemParse         = ipMP;
15089     PL_Env              = ipE;
15090     PL_StdIO            = ipStd;
15091     PL_LIO              = ipLIO;
15092     PL_Dir              = ipD;
15093     PL_Sock             = ipS;
15094     PL_Proc             = ipP;
15095 #endif          /* PERL_IMPLICIT_SYS */
15096
15097
15098     param->flags = flags;
15099     /* Nothing in the core code uses this, but we make it available to
15100        extensions (using mg_dup).  */
15101     param->proto_perl = proto_perl;
15102     /* Likely nothing will use this, but it is initialised to be consistent
15103        with Perl_clone_params_new().  */
15104     param->new_perl = my_perl;
15105     param->unreferenced = NULL;
15106
15107
15108     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15109
15110     PL_body_arenas = NULL;
15111     Zero(&PL_body_roots, 1, PL_body_roots);
15112     
15113     PL_sv_count         = 0;
15114     PL_sv_root          = NULL;
15115     PL_sv_arenaroot     = NULL;
15116
15117     PL_debug            = proto_perl->Idebug;
15118
15119     /* dbargs array probably holds garbage */
15120     PL_dbargs           = NULL;
15121
15122     PL_compiling = proto_perl->Icompiling;
15123
15124     /* pseudo environmental stuff */
15125     PL_origargc         = proto_perl->Iorigargc;
15126     PL_origargv         = proto_perl->Iorigargv;
15127
15128 #ifndef NO_TAINT_SUPPORT
15129     /* Set tainting stuff before PerlIO_debug can possibly get called */
15130     PL_tainting         = proto_perl->Itainting;
15131     PL_taint_warn       = proto_perl->Itaint_warn;
15132 #else
15133     PL_tainting         = FALSE;
15134     PL_taint_warn       = FALSE;
15135 #endif
15136
15137     PL_minus_c          = proto_perl->Iminus_c;
15138
15139     PL_localpatches     = proto_perl->Ilocalpatches;
15140     PL_splitstr         = proto_perl->Isplitstr;
15141     PL_minus_n          = proto_perl->Iminus_n;
15142     PL_minus_p          = proto_perl->Iminus_p;
15143     PL_minus_l          = proto_perl->Iminus_l;
15144     PL_minus_a          = proto_perl->Iminus_a;
15145     PL_minus_E          = proto_perl->Iminus_E;
15146     PL_minus_F          = proto_perl->Iminus_F;
15147     PL_doswitches       = proto_perl->Idoswitches;
15148     PL_dowarn           = proto_perl->Idowarn;
15149 #ifdef PERL_SAWAMPERSAND
15150     PL_sawampersand     = proto_perl->Isawampersand;
15151 #endif
15152     PL_unsafe           = proto_perl->Iunsafe;
15153     PL_perldb           = proto_perl->Iperldb;
15154     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15155     PL_exit_flags       = proto_perl->Iexit_flags;
15156
15157     /* XXX time(&PL_basetime) when asked for? */
15158     PL_basetime         = proto_perl->Ibasetime;
15159
15160     PL_maxsysfd         = proto_perl->Imaxsysfd;
15161     PL_statusvalue      = proto_perl->Istatusvalue;
15162 #ifdef __VMS
15163     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15164 #else
15165     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15166 #endif
15167
15168     /* RE engine related */
15169     PL_regmatch_slab    = NULL;
15170     PL_reg_curpm        = NULL;
15171
15172     PL_sub_generation   = proto_perl->Isub_generation;
15173
15174     /* funky return mechanisms */
15175     PL_forkprocess      = proto_perl->Iforkprocess;
15176
15177     /* internal state */
15178     PL_main_start       = proto_perl->Imain_start;
15179     PL_eval_root        = proto_perl->Ieval_root;
15180     PL_eval_start       = proto_perl->Ieval_start;
15181
15182     PL_filemode         = proto_perl->Ifilemode;
15183     PL_lastfd           = proto_perl->Ilastfd;
15184     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15185     PL_gensym           = proto_perl->Igensym;
15186
15187     PL_laststatval      = proto_perl->Ilaststatval;
15188     PL_laststype        = proto_perl->Ilaststype;
15189     PL_mess_sv          = NULL;
15190
15191     PL_profiledata      = NULL;
15192
15193     PL_generation       = proto_perl->Igeneration;
15194
15195     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15196     PL_in_clean_all     = proto_perl->Iin_clean_all;
15197
15198     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15199     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15200     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15201     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15202     PL_nomemok          = proto_perl->Inomemok;
15203     PL_an               = proto_perl->Ian;
15204     PL_evalseq          = proto_perl->Ievalseq;
15205     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15206     PL_origalen         = proto_perl->Iorigalen;
15207
15208     PL_sighandlerp      = proto_perl->Isighandlerp;
15209
15210     PL_runops           = proto_perl->Irunops;
15211
15212     PL_subline          = proto_perl->Isubline;
15213
15214     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15215
15216 #ifdef FCRYPT
15217     PL_cryptseen        = proto_perl->Icryptseen;
15218 #endif
15219
15220 #ifdef USE_LOCALE_COLLATE
15221     PL_collation_ix     = proto_perl->Icollation_ix;
15222     PL_collation_standard       = proto_perl->Icollation_standard;
15223     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15224     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15225     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15226 #endif /* USE_LOCALE_COLLATE */
15227
15228 #ifdef USE_LOCALE_NUMERIC
15229     PL_numeric_standard = proto_perl->Inumeric_standard;
15230     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15231     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15232 #endif /* !USE_LOCALE_NUMERIC */
15233
15234     /* Did the locale setup indicate UTF-8? */
15235     PL_utf8locale       = proto_perl->Iutf8locale;
15236     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15237     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15238     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15239     PL_lc_numeric_mutex_depth = 0;
15240     /* Unicode features (see perlrun/-C) */
15241     PL_unicode          = proto_perl->Iunicode;
15242
15243     /* Pre-5.8 signals control */
15244     PL_signals          = proto_perl->Isignals;
15245
15246     /* times() ticks per second */
15247     PL_clocktick        = proto_perl->Iclocktick;
15248
15249     /* Recursion stopper for PerlIO_find_layer */
15250     PL_in_load_module   = proto_perl->Iin_load_module;
15251
15252     /* sort() routine */
15253     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15254
15255     /* Not really needed/useful since the reenrant_retint is "volatile",
15256      * but do it for consistency's sake. */
15257     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15258
15259     /* Hooks to shared SVs and locks. */
15260     PL_sharehook        = proto_perl->Isharehook;
15261     PL_lockhook         = proto_perl->Ilockhook;
15262     PL_unlockhook       = proto_perl->Iunlockhook;
15263     PL_threadhook       = proto_perl->Ithreadhook;
15264     PL_destroyhook      = proto_perl->Idestroyhook;
15265     PL_signalhook       = proto_perl->Isignalhook;
15266
15267     PL_globhook         = proto_perl->Iglobhook;
15268
15269     /* swatch cache */
15270     PL_last_swash_hv    = NULL; /* reinits on demand */
15271     PL_last_swash_klen  = 0;
15272     PL_last_swash_key[0]= '\0';
15273     PL_last_swash_tmps  = (U8*)NULL;
15274     PL_last_swash_slen  = 0;
15275
15276     PL_srand_called     = proto_perl->Isrand_called;
15277     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15278
15279     if (flags & CLONEf_COPY_STACKS) {
15280         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15281         PL_tmps_ix              = proto_perl->Itmps_ix;
15282         PL_tmps_max             = proto_perl->Itmps_max;
15283         PL_tmps_floor           = proto_perl->Itmps_floor;
15284
15285         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15286          * NOTE: unlike the others! */
15287         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15288         PL_scopestack_max       = proto_perl->Iscopestack_max;
15289
15290         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15291          * NOTE: unlike the others! */
15292         PL_savestack_ix         = proto_perl->Isavestack_ix;
15293         PL_savestack_max        = proto_perl->Isavestack_max;
15294     }
15295
15296     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15297     PL_top_env          = &PL_start_env;
15298
15299     PL_op               = proto_perl->Iop;
15300
15301     PL_Sv               = NULL;
15302     PL_Xpv              = (XPV*)NULL;
15303     my_perl->Ina        = proto_perl->Ina;
15304
15305     PL_statcache        = proto_perl->Istatcache;
15306
15307 #ifndef NO_TAINT_SUPPORT
15308     PL_tainted          = proto_perl->Itainted;
15309 #else
15310     PL_tainted          = FALSE;
15311 #endif
15312     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15313
15314     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15315
15316     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15317     PL_restartop        = proto_perl->Irestartop;
15318     PL_in_eval          = proto_perl->Iin_eval;
15319     PL_delaymagic       = proto_perl->Idelaymagic;
15320     PL_phase            = proto_perl->Iphase;
15321     PL_localizing       = proto_perl->Ilocalizing;
15322
15323     PL_hv_fetch_ent_mh  = NULL;
15324     PL_modcount         = proto_perl->Imodcount;
15325     PL_lastgotoprobe    = NULL;
15326     PL_dumpindent       = proto_perl->Idumpindent;
15327
15328     PL_efloatbuf        = NULL;         /* reinits on demand */
15329     PL_efloatsize       = 0;                    /* reinits on demand */
15330
15331     /* regex stuff */
15332
15333     PL_colorset         = 0;            /* reinits PL_colors[] */
15334     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15335
15336     /* Pluggable optimizer */
15337     PL_peepp            = proto_perl->Ipeepp;
15338     PL_rpeepp           = proto_perl->Irpeepp;
15339     /* op_free() hook */
15340     PL_opfreehook       = proto_perl->Iopfreehook;
15341
15342 #ifdef USE_REENTRANT_API
15343     /* XXX: things like -Dm will segfault here in perlio, but doing
15344      *  PERL_SET_CONTEXT(proto_perl);
15345      * breaks too many other things
15346      */
15347     Perl_reentrant_init(aTHX);
15348 #endif
15349
15350     /* create SV map for pointer relocation */
15351     PL_ptr_table = ptr_table_new();
15352
15353     /* initialize these special pointers as early as possible */
15354     init_constants();
15355     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15356     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15357     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15358     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15359     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15360                     &PL_padname_const);
15361
15362     /* create (a non-shared!) shared string table */
15363     PL_strtab           = newHV();
15364     HvSHAREKEYS_off(PL_strtab);
15365     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15366     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15367
15368     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15369
15370     /* This PV will be free'd special way so must set it same way op.c does */
15371     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15372     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15373
15374     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15375     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15376     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15377     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15378
15379     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15380     /* This makes no difference to the implementation, as it always pushes
15381        and shifts pointers to other SVs without changing their reference
15382        count, with the array becoming empty before it is freed. However, it
15383        makes it conceptually clear what is going on, and will avoid some
15384        work inside av.c, filling slots between AvFILL() and AvMAX() with
15385        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15386     AvREAL_off(param->stashes);
15387
15388     if (!(flags & CLONEf_COPY_STACKS)) {
15389         param->unreferenced = newAV();
15390     }
15391
15392 #ifdef PERLIO_LAYERS
15393     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15394     PerlIO_clone(aTHX_ proto_perl, param);
15395 #endif
15396
15397     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15398     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15399     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15400     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15401     PL_xsubfilename     = proto_perl->Ixsubfilename;
15402     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15403     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15404
15405     /* switches */
15406     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15407     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15408     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15409
15410     /* magical thingies */
15411
15412     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15413     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15414     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15415
15416    
15417     /* Clone the regex array */
15418     /* ORANGE FIXME for plugins, probably in the SV dup code.
15419        newSViv(PTR2IV(CALLREGDUPE(
15420        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15421     */
15422     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15423     PL_regex_pad = AvARRAY(PL_regex_padav);
15424
15425     PL_stashpadmax      = proto_perl->Istashpadmax;
15426     PL_stashpadix       = proto_perl->Istashpadix ;
15427     Newx(PL_stashpad, PL_stashpadmax, HV *);
15428     {
15429         PADOFFSET o = 0;
15430         for (; o < PL_stashpadmax; ++o)
15431             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15432     }
15433
15434     /* shortcuts to various I/O objects */
15435     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15436     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15437     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15438     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15439     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15440     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15441     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15442
15443     /* shortcuts to regexp stuff */
15444     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15445
15446     /* shortcuts to misc objects */
15447     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15448
15449     /* shortcuts to debugging objects */
15450     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15451     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15452     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15453     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15454     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15455     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15456     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15457
15458     /* symbol tables */
15459     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15460     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15461     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15462     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15463     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15464
15465     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15466     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15467     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15468     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15469     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15470     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15471     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15472     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15473     PL_savebegin        = proto_perl->Isavebegin;
15474
15475     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15476
15477     /* subprocess state */
15478     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15479
15480     if (proto_perl->Iop_mask)
15481         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15482     else
15483         PL_op_mask      = NULL;
15484     /* PL_asserting        = proto_perl->Iasserting; */
15485
15486     /* current interpreter roots */
15487     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15488     OP_REFCNT_LOCK;
15489     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15490     OP_REFCNT_UNLOCK;
15491
15492     /* runtime control stuff */
15493     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15494
15495     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15496
15497     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15498
15499     /* interpreter atexit processing */
15500     PL_exitlistlen      = proto_perl->Iexitlistlen;
15501     if (PL_exitlistlen) {
15502         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15503         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15504     }
15505     else
15506         PL_exitlist     = (PerlExitListEntry*)NULL;
15507
15508     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15509     if (PL_my_cxt_size) {
15510         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15511         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15512 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15513         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15514         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15515 #endif
15516     }
15517     else {
15518         PL_my_cxt_list  = (void**)NULL;
15519 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15520         PL_my_cxt_keys  = (const char**)NULL;
15521 #endif
15522     }
15523     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15524     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15525     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15526     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15527
15528     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15529
15530     PAD_CLONE_VARS(proto_perl, param);
15531
15532 #ifdef HAVE_INTERP_INTERN
15533     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15534 #endif
15535
15536     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15537
15538 #ifdef PERL_USES_PL_PIDSTATUS
15539     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15540 #endif
15541     PL_osname           = SAVEPV(proto_perl->Iosname);
15542     PL_parser           = parser_dup(proto_perl->Iparser, param);
15543
15544     /* XXX this only works if the saved cop has already been cloned */
15545     if (proto_perl->Iparser) {
15546         PL_parser->saved_curcop = (COP*)any_dup(
15547                                     proto_perl->Iparser->saved_curcop,
15548                                     proto_perl);
15549     }
15550
15551     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15552
15553 #if   defined(USE_POSIX_2008_LOCALE)      \
15554  &&   defined(USE_THREAD_SAFE_LOCALE)     \
15555  && ! defined(HAS_QUERYLOCALE)
15556     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
15557         PL_curlocales[i] = savepv("."); /* An illegal value */
15558     }
15559 #endif
15560 #ifdef USE_LOCALE_CTYPE
15561     /* Should we warn if uses locale? */
15562     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15563 #endif
15564
15565 #ifdef USE_LOCALE_COLLATE
15566     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15567 #endif /* USE_LOCALE_COLLATE */
15568
15569 #ifdef USE_LOCALE_NUMERIC
15570     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15571     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15572
15573 #  if defined(HAS_POSIX_2008_LOCALE)
15574     PL_underlying_numeric_obj = NULL;
15575 #  endif
15576 #endif /* !USE_LOCALE_NUMERIC */
15577
15578     PL_langinfo_buf = NULL;
15579     PL_langinfo_bufsize = 0;
15580
15581     PL_setlocale_buf = NULL;
15582     PL_setlocale_bufsize = 0;
15583
15584     /* Unicode inversion lists */
15585     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15586     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15587     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15588     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15589
15590     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15591     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15592
15593     /* utf8 character class swashes */
15594     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15595         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15596     }
15597     for (i = 0; i < POSIX_CC_COUNT; i++) {
15598         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15599     }
15600     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15601     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15602     PL_SCX_invlist = sv_dup_inc(proto_perl->ISCX_invlist, param);
15603     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15604     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15605     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15606     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15607     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15608     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15609     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15610     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15611     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15612     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15613     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15614     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15615     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15616     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15617     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15618     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15619
15620     if (proto_perl->Ipsig_pend) {
15621         Newxz(PL_psig_pend, SIG_SIZE, int);
15622     }
15623     else {
15624         PL_psig_pend    = (int*)NULL;
15625     }
15626
15627     if (proto_perl->Ipsig_name) {
15628         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15629         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15630                             param);
15631         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15632     }
15633     else {
15634         PL_psig_ptr     = (SV**)NULL;
15635         PL_psig_name    = (SV**)NULL;
15636     }
15637
15638     if (flags & CLONEf_COPY_STACKS) {
15639         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15640         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15641                             PL_tmps_ix+1, param);
15642
15643         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15644         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15645         Newx(PL_markstack, i, I32);
15646         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15647                                                   - proto_perl->Imarkstack);
15648         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15649                                                   - proto_perl->Imarkstack);
15650         Copy(proto_perl->Imarkstack, PL_markstack,
15651              PL_markstack_ptr - PL_markstack + 1, I32);
15652
15653         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15654          * NOTE: unlike the others! */
15655         Newx(PL_scopestack, PL_scopestack_max, I32);
15656         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15657
15658 #ifdef DEBUGGING
15659         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15660         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15661 #endif
15662         /* reset stack AV to correct length before its duped via
15663          * PL_curstackinfo */
15664         AvFILLp(proto_perl->Icurstack) =
15665                             proto_perl->Istack_sp - proto_perl->Istack_base;
15666
15667         /* NOTE: si_dup() looks at PL_markstack */
15668         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15669
15670         /* PL_curstack          = PL_curstackinfo->si_stack; */
15671         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15672         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15673
15674         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15675         PL_stack_base           = AvARRAY(PL_curstack);
15676         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15677                                                    - proto_perl->Istack_base);
15678         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15679
15680         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15681         PL_savestack            = ss_dup(proto_perl, param);
15682     }
15683     else {
15684         init_stacks();
15685         ENTER;                  /* perl_destruct() wants to LEAVE; */
15686     }
15687
15688     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15689     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15690
15691     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15692     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15693     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15694     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15695     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15696     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15697
15698     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15699
15700     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15701     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15702     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15703
15704     PL_stashcache       = newHV();
15705
15706     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15707                                             proto_perl->Iwatchaddr);
15708     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15709     if (PL_debug && PL_watchaddr) {
15710         PerlIO_printf(Perl_debug_log,
15711           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15712           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15713           PTR2UV(PL_watchok));
15714     }
15715
15716     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15717     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15718     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15719
15720     /* Call the ->CLONE method, if it exists, for each of the stashes
15721        identified by sv_dup() above.
15722     */
15723     while(av_tindex(param->stashes) != -1) {
15724         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15725         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15726         if (cloner && GvCV(cloner)) {
15727             dSP;
15728             ENTER;
15729             SAVETMPS;
15730             PUSHMARK(SP);
15731             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15732             PUTBACK;
15733             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15734             FREETMPS;
15735             LEAVE;
15736         }
15737     }
15738
15739     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15740         ptr_table_free(PL_ptr_table);
15741         PL_ptr_table = NULL;
15742     }
15743
15744     if (!(flags & CLONEf_COPY_STACKS)) {
15745         unreferenced_to_tmp_stack(param->unreferenced);
15746     }
15747
15748     SvREFCNT_dec(param->stashes);
15749
15750     /* orphaned? eg threads->new inside BEGIN or use */
15751     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15752         SvREFCNT_inc_simple_void(PL_compcv);
15753         SAVEFREESV(PL_compcv);
15754     }
15755
15756     return my_perl;
15757 }
15758
15759 static void
15760 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15761 {
15762     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15763     
15764     if (AvFILLp(unreferenced) > -1) {
15765         SV **svp = AvARRAY(unreferenced);
15766         SV **const last = svp + AvFILLp(unreferenced);
15767         SSize_t count = 0;
15768
15769         do {
15770             if (SvREFCNT(*svp) == 1)
15771                 ++count;
15772         } while (++svp <= last);
15773
15774         EXTEND_MORTAL(count);
15775         svp = AvARRAY(unreferenced);
15776
15777         do {
15778             if (SvREFCNT(*svp) == 1) {
15779                 /* Our reference is the only one to this SV. This means that
15780                    in this thread, the scalar effectively has a 0 reference.
15781                    That doesn't work (cleanup never happens), so donate our
15782                    reference to it onto the save stack. */
15783                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15784             } else {
15785                 /* As an optimisation, because we are already walking the
15786                    entire array, instead of above doing either
15787                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15788                    release our reference to the scalar, so that at the end of
15789                    the array owns zero references to the scalars it happens to
15790                    point to. We are effectively converting the array from
15791                    AvREAL() on to AvREAL() off. This saves the av_clear()
15792                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15793                    walking the array a second time.  */
15794                 SvREFCNT_dec(*svp);
15795             }
15796
15797         } while (++svp <= last);
15798         AvREAL_off(unreferenced);
15799     }
15800     SvREFCNT_dec_NN(unreferenced);
15801 }
15802
15803 void
15804 Perl_clone_params_del(CLONE_PARAMS *param)
15805 {
15806     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15807        happy: */
15808     PerlInterpreter *const to = param->new_perl;
15809     dTHXa(to);
15810     PerlInterpreter *const was = PERL_GET_THX;
15811
15812     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15813
15814     if (was != to) {
15815         PERL_SET_THX(to);
15816     }
15817
15818     SvREFCNT_dec(param->stashes);
15819     if (param->unreferenced)
15820         unreferenced_to_tmp_stack(param->unreferenced);
15821
15822     Safefree(param);
15823
15824     if (was != to) {
15825         PERL_SET_THX(was);
15826     }
15827 }
15828
15829 CLONE_PARAMS *
15830 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15831 {
15832     dVAR;
15833     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15834        does a dTHX; to get the context from thread local storage.
15835        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15836        a version that passes in my_perl.  */
15837     PerlInterpreter *const was = PERL_GET_THX;
15838     CLONE_PARAMS *param;
15839
15840     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15841
15842     if (was != to) {
15843         PERL_SET_THX(to);
15844     }
15845
15846     /* Given that we've set the context, we can do this unshared.  */
15847     Newx(param, 1, CLONE_PARAMS);
15848
15849     param->flags = 0;
15850     param->proto_perl = from;
15851     param->new_perl = to;
15852     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15853     AvREAL_off(param->stashes);
15854     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15855
15856     if (was != to) {
15857         PERL_SET_THX(was);
15858     }
15859     return param;
15860 }
15861
15862 #endif /* USE_ITHREADS */
15863
15864 void
15865 Perl_init_constants(pTHX)
15866 {
15867     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15868     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15869     SvANY(&PL_sv_undef)         = NULL;
15870
15871     SvANY(&PL_sv_no)            = new_XPVNV();
15872     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15873     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15874                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15875                                   |SVp_POK|SVf_POK;
15876
15877     SvANY(&PL_sv_yes)           = new_XPVNV();
15878     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15879     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15880                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15881                                   |SVp_POK|SVf_POK;
15882
15883     SvANY(&PL_sv_zero)          = new_XPVNV();
15884     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
15885     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15886                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15887                                   |SVp_POK|SVf_POK
15888                                   |SVs_PADTMP;
15889
15890     SvPV_set(&PL_sv_no, (char*)PL_No);
15891     SvCUR_set(&PL_sv_no, 0);
15892     SvLEN_set(&PL_sv_no, 0);
15893     SvIV_set(&PL_sv_no, 0);
15894     SvNV_set(&PL_sv_no, 0);
15895
15896     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15897     SvCUR_set(&PL_sv_yes, 1);
15898     SvLEN_set(&PL_sv_yes, 0);
15899     SvIV_set(&PL_sv_yes, 1);
15900     SvNV_set(&PL_sv_yes, 1);
15901
15902     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
15903     SvCUR_set(&PL_sv_zero, 1);
15904     SvLEN_set(&PL_sv_zero, 0);
15905     SvIV_set(&PL_sv_zero, 0);
15906     SvNV_set(&PL_sv_zero, 0);
15907
15908     PadnamePV(&PL_padname_const) = (char *)PL_No;
15909
15910     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
15911     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
15912     assert(SvIMMORTAL_INTERP(&PL_sv_no));
15913     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
15914
15915     assert(SvIMMORTAL(&PL_sv_yes));
15916     assert(SvIMMORTAL(&PL_sv_undef));
15917     assert(SvIMMORTAL(&PL_sv_no));
15918     assert(SvIMMORTAL(&PL_sv_zero));
15919
15920     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
15921     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
15922     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
15923     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
15924
15925     assert( SvTRUE_nomg_NN(&PL_sv_yes));
15926     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
15927     assert(!SvTRUE_nomg_NN(&PL_sv_no));
15928     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
15929 }
15930
15931 /*
15932 =head1 Unicode Support
15933
15934 =for apidoc sv_recode_to_utf8
15935
15936 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15937 of C<sv> is assumed to be octets in that encoding, and C<sv>
15938 will be converted into Unicode (and UTF-8).
15939
15940 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15941 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15942 an C<Encode::XS> Encoding object, bad things will happen.
15943 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15944
15945 The PV of C<sv> is returned.
15946
15947 =cut */
15948
15949 char *
15950 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15951 {
15952     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15953
15954     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15955         SV *uni;
15956         STRLEN len;
15957         const char *s;
15958         dSP;
15959         SV *nsv = sv;
15960         ENTER;
15961         PUSHSTACK;
15962         SAVETMPS;
15963         if (SvPADTMP(nsv)) {
15964             nsv = sv_newmortal();
15965             SvSetSV_nosteal(nsv, sv);
15966         }
15967         save_re_context();
15968         PUSHMARK(sp);
15969         EXTEND(SP, 3);
15970         PUSHs(encoding);
15971         PUSHs(nsv);
15972 /*
15973   NI-S 2002/07/09
15974   Passing sv_yes is wrong - it needs to be or'ed set of constants
15975   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15976   remove converted chars from source.
15977
15978   Both will default the value - let them.
15979
15980         XPUSHs(&PL_sv_yes);
15981 */
15982         PUTBACK;
15983         call_method("decode", G_SCALAR);
15984         SPAGAIN;
15985         uni = POPs;
15986         PUTBACK;
15987         s = SvPV_const(uni, len);
15988         if (s != SvPVX_const(sv)) {
15989             SvGROW(sv, len + 1);
15990             Move(s, SvPVX(sv), len + 1, char);
15991             SvCUR_set(sv, len);
15992         }
15993         FREETMPS;
15994         POPSTACK;
15995         LEAVE;
15996         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15997             /* clear pos and any utf8 cache */
15998             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15999             if (mg)
16000                 mg->mg_len = -1;
16001             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16002                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16003         }
16004         SvUTF8_on(sv);
16005         return SvPVX(sv);
16006     }
16007     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16008 }
16009
16010 /*
16011 =for apidoc sv_cat_decode
16012
16013 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16014 assumed to be octets in that encoding and decoding the input starts
16015 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16016 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16017 when the string C<tstr> appears in decoding output or the input ends on
16018 the PV of C<ssv>.  The value which C<offset> points will be modified
16019 to the last input position on C<ssv>.
16020
16021 Returns TRUE if the terminator was found, else returns FALSE.
16022
16023 =cut */
16024
16025 bool
16026 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16027                    SV *ssv, int *offset, char *tstr, int tlen)
16028 {
16029     bool ret = FALSE;
16030
16031     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16032
16033     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16034         SV *offsv;
16035         dSP;
16036         ENTER;
16037         SAVETMPS;
16038         save_re_context();
16039         PUSHMARK(sp);
16040         EXTEND(SP, 6);
16041         PUSHs(encoding);
16042         PUSHs(dsv);
16043         PUSHs(ssv);
16044         offsv = newSViv(*offset);
16045         mPUSHs(offsv);
16046         mPUSHp(tstr, tlen);
16047         PUTBACK;
16048         call_method("cat_decode", G_SCALAR);
16049         SPAGAIN;
16050         ret = SvTRUE(TOPs);
16051         *offset = SvIV(offsv);
16052         PUTBACK;
16053         FREETMPS;
16054         LEAVE;
16055     }
16056     else
16057         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16058     return ret;
16059
16060 }
16061
16062 /* ---------------------------------------------------------------------
16063  *
16064  * support functions for report_uninit()
16065  */
16066
16067 /* the maxiumum size of array or hash where we will scan looking
16068  * for the undefined element that triggered the warning */
16069
16070 #define FUV_MAX_SEARCH_SIZE 1000
16071
16072 /* Look for an entry in the hash whose value has the same SV as val;
16073  * If so, return a mortal copy of the key. */
16074
16075 STATIC SV*
16076 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16077 {
16078     dVAR;
16079     HE **array;
16080     I32 i;
16081
16082     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16083
16084     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16085                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16086         return NULL;
16087
16088     array = HvARRAY(hv);
16089
16090     for (i=HvMAX(hv); i>=0; i--) {
16091         HE *entry;
16092         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16093             if (HeVAL(entry) != val)
16094                 continue;
16095             if (    HeVAL(entry) == &PL_sv_undef ||
16096                     HeVAL(entry) == &PL_sv_placeholder)
16097                 continue;
16098             if (!HeKEY(entry))
16099                 return NULL;
16100             if (HeKLEN(entry) == HEf_SVKEY)
16101                 return sv_mortalcopy(HeKEY_sv(entry));
16102             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16103         }
16104     }
16105     return NULL;
16106 }
16107
16108 /* Look for an entry in the array whose value has the same SV as val;
16109  * If so, return the index, otherwise return -1. */
16110
16111 STATIC SSize_t
16112 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16113 {
16114     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16115
16116     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16117                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16118         return -1;
16119
16120     if (val != &PL_sv_undef) {
16121         SV ** const svp = AvARRAY(av);
16122         SSize_t i;
16123
16124         for (i=AvFILLp(av); i>=0; i--)
16125             if (svp[i] == val)
16126                 return i;
16127     }
16128     return -1;
16129 }
16130
16131 /* varname(): return the name of a variable, optionally with a subscript.
16132  * If gv is non-zero, use the name of that global, along with gvtype (one
16133  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16134  * targ.  Depending on the value of the subscript_type flag, return:
16135  */
16136
16137 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16138 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16139 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16140 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16141
16142 SV*
16143 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16144         const SV *const keyname, SSize_t aindex, int subscript_type)
16145 {
16146
16147     SV * const name = sv_newmortal();
16148     if (gv && isGV(gv)) {
16149         char buffer[2];
16150         buffer[0] = gvtype;
16151         buffer[1] = 0;
16152
16153         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16154
16155         gv_fullname4(name, gv, buffer, 0);
16156
16157         if ((unsigned int)SvPVX(name)[1] <= 26) {
16158             buffer[0] = '^';
16159             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16160
16161             /* Swap the 1 unprintable control character for the 2 byte pretty
16162                version - ie substr($name, 1, 1) = $buffer; */
16163             sv_insert(name, 1, 1, buffer, 2);
16164         }
16165     }
16166     else {
16167         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16168         PADNAME *sv;
16169
16170         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16171
16172         if (!cv || !CvPADLIST(cv))
16173             return NULL;
16174         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16175         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16176         SvUTF8_on(name);
16177     }
16178
16179     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16180         SV * const sv = newSV(0);
16181         STRLEN len;
16182         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16183
16184         *SvPVX(name) = '$';
16185         Perl_sv_catpvf(aTHX_ name, "{%s}",
16186             pv_pretty(sv, pv, len, 32, NULL, NULL,
16187                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16188         SvREFCNT_dec_NN(sv);
16189     }
16190     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16191         *SvPVX(name) = '$';
16192         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16193     }
16194     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16195         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16196         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16197     }
16198
16199     return name;
16200 }
16201
16202
16203 /*
16204 =for apidoc find_uninit_var
16205
16206 Find the name of the undefined variable (if any) that caused the operator
16207 to issue a "Use of uninitialized value" warning.
16208 If match is true, only return a name if its value matches C<uninit_sv>.
16209 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16210 warning, then following the direct child of the op may yield an
16211 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16212 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16213 the variable name if we get an exact match.
16214 C<desc_p> points to a string pointer holding the description of the op.
16215 This may be updated if needed.
16216
16217 The name is returned as a mortal SV.
16218
16219 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16220 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16221
16222 =cut
16223 */
16224
16225 STATIC SV *
16226 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16227                   bool match, const char **desc_p)
16228 {
16229     dVAR;
16230     SV *sv;
16231     const GV *gv;
16232     const OP *o, *o2, *kid;
16233
16234     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16235
16236     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16237                             uninit_sv == &PL_sv_placeholder)))
16238         return NULL;
16239
16240     switch (obase->op_type) {
16241
16242     case OP_UNDEF:
16243         /* undef should care if its args are undef - any warnings
16244          * will be from tied/magic vars */
16245         break;
16246
16247     case OP_RV2AV:
16248     case OP_RV2HV:
16249     case OP_PADAV:
16250     case OP_PADHV:
16251       {
16252         const bool pad  = (    obase->op_type == OP_PADAV
16253                             || obase->op_type == OP_PADHV
16254                             || obase->op_type == OP_PADRANGE
16255                           );
16256
16257         const bool hash = (    obase->op_type == OP_PADHV
16258                             || obase->op_type == OP_RV2HV
16259                             || (obase->op_type == OP_PADRANGE
16260                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16261                           );
16262         SSize_t index = 0;
16263         SV *keysv = NULL;
16264         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16265
16266         if (pad) { /* @lex, %lex */
16267             sv = PAD_SVl(obase->op_targ);
16268             gv = NULL;
16269         }
16270         else {
16271             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16272             /* @global, %global */
16273                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16274                 if (!gv)
16275                     break;
16276                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16277             }
16278             else if (obase == PL_op) /* @{expr}, %{expr} */
16279                 return find_uninit_var(cUNOPx(obase)->op_first,
16280                                                 uninit_sv, match, desc_p);
16281             else /* @{expr}, %{expr} as a sub-expression */
16282                 return NULL;
16283         }
16284
16285         /* attempt to find a match within the aggregate */
16286         if (hash) {
16287             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16288             if (keysv)
16289                 subscript_type = FUV_SUBSCRIPT_HASH;
16290         }
16291         else {
16292             index = find_array_subscript((const AV *)sv, uninit_sv);
16293             if (index >= 0)
16294                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16295         }
16296
16297         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16298             break;
16299
16300         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16301                                     keysv, index, subscript_type);
16302       }
16303
16304     case OP_RV2SV:
16305         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16306             /* $global */
16307             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16308             if (!gv || !GvSTASH(gv))
16309                 break;
16310             if (match && (GvSV(gv) != uninit_sv))
16311                 break;
16312             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16313         }
16314         /* ${expr} */
16315         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16316
16317     case OP_PADSV:
16318         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16319             break;
16320         return varname(NULL, '$', obase->op_targ,
16321                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16322
16323     case OP_GVSV:
16324         gv = cGVOPx_gv(obase);
16325         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16326             break;
16327         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16328
16329     case OP_AELEMFAST_LEX:
16330         if (match) {
16331             SV **svp;
16332             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16333             if (!av || SvRMAGICAL(av))
16334                 break;
16335             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16336             if (!svp || *svp != uninit_sv)
16337                 break;
16338         }
16339         return varname(NULL, '$', obase->op_targ,
16340                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16341     case OP_AELEMFAST:
16342         {
16343             gv = cGVOPx_gv(obase);
16344             if (!gv)
16345                 break;
16346             if (match) {
16347                 SV **svp;
16348                 AV *const av = GvAV(gv);
16349                 if (!av || SvRMAGICAL(av))
16350                     break;
16351                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16352                 if (!svp || *svp != uninit_sv)
16353                     break;
16354             }
16355             return varname(gv, '$', 0,
16356                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16357         }
16358         NOT_REACHED; /* NOTREACHED */
16359
16360     case OP_EXISTS:
16361         o = cUNOPx(obase)->op_first;
16362         if (!o || o->op_type != OP_NULL ||
16363                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16364             break;
16365         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16366
16367     case OP_AELEM:
16368     case OP_HELEM:
16369     {
16370         bool negate = FALSE;
16371
16372         if (PL_op == obase)
16373             /* $a[uninit_expr] or $h{uninit_expr} */
16374             return find_uninit_var(cBINOPx(obase)->op_last,
16375                                                 uninit_sv, match, desc_p);
16376
16377         gv = NULL;
16378         o = cBINOPx(obase)->op_first;
16379         kid = cBINOPx(obase)->op_last;
16380
16381         /* get the av or hv, and optionally the gv */
16382         sv = NULL;
16383         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16384             sv = PAD_SV(o->op_targ);
16385         }
16386         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16387                 && cUNOPo->op_first->op_type == OP_GV)
16388         {
16389             gv = cGVOPx_gv(cUNOPo->op_first);
16390             if (!gv)
16391                 break;
16392             sv = o->op_type
16393                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16394         }
16395         if (!sv)
16396             break;
16397
16398         if (kid && kid->op_type == OP_NEGATE) {
16399             negate = TRUE;
16400             kid = cUNOPx(kid)->op_first;
16401         }
16402
16403         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16404             /* index is constant */
16405             SV* kidsv;
16406             if (negate) {
16407                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16408                 sv_catsv(kidsv, cSVOPx_sv(kid));
16409             }
16410             else
16411                 kidsv = cSVOPx_sv(kid);
16412             if (match) {
16413                 if (SvMAGICAL(sv))
16414                     break;
16415                 if (obase->op_type == OP_HELEM) {
16416                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16417                     if (!he || HeVAL(he) != uninit_sv)
16418                         break;
16419                 }
16420                 else {
16421                     SV * const  opsv = cSVOPx_sv(kid);
16422                     const IV  opsviv = SvIV(opsv);
16423                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16424                         negate ? - opsviv : opsviv,
16425                         FALSE);
16426                     if (!svp || *svp != uninit_sv)
16427                         break;
16428                 }
16429             }
16430             if (obase->op_type == OP_HELEM)
16431                 return varname(gv, '%', o->op_targ,
16432                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16433             else
16434                 return varname(gv, '@', o->op_targ, NULL,
16435                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16436                     FUV_SUBSCRIPT_ARRAY);
16437         }
16438         else  {
16439             /* index is an expression;
16440              * attempt to find a match within the aggregate */
16441             if (obase->op_type == OP_HELEM) {
16442                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16443                 if (keysv)
16444                     return varname(gv, '%', o->op_targ,
16445                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16446             }
16447             else {
16448                 const SSize_t index
16449                     = find_array_subscript((const AV *)sv, uninit_sv);
16450                 if (index >= 0)
16451                     return varname(gv, '@', o->op_targ,
16452                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16453             }
16454             if (match)
16455                 break;
16456             return varname(gv,
16457                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16458                 ? '@' : '%'),
16459                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16460         }
16461         NOT_REACHED; /* NOTREACHED */
16462     }
16463
16464     case OP_MULTIDEREF: {
16465         /* If we were executing OP_MULTIDEREF when the undef warning
16466          * triggered, then it must be one of the index values within
16467          * that triggered it. If not, then the only possibility is that
16468          * the value retrieved by the last aggregate index might be the
16469          * culprit. For the former, we set PL_multideref_pc each time before
16470          * using an index, so work though the item list until we reach
16471          * that point. For the latter, just work through the entire item
16472          * list; the last aggregate retrieved will be the candidate.
16473          * There is a third rare possibility: something triggered
16474          * magic while fetching an array/hash element. Just display
16475          * nothing in this case.
16476          */
16477
16478         /* the named aggregate, if any */
16479         PADOFFSET agg_targ = 0;
16480         GV       *agg_gv   = NULL;
16481         /* the last-seen index */
16482         UV        index_type;
16483         PADOFFSET index_targ;
16484         GV       *index_gv;
16485         IV        index_const_iv = 0; /* init for spurious compiler warn */
16486         SV       *index_const_sv;
16487         int       depth = 0;  /* how many array/hash lookups we've done */
16488
16489         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16490         UNOP_AUX_item *last = NULL;
16491         UV actions = items->uv;
16492         bool is_hv;
16493
16494         if (PL_op == obase) {
16495             last = PL_multideref_pc;
16496             assert(last >= items && last <= items + items[-1].uv);
16497         }
16498
16499         assert(actions);
16500
16501         while (1) {
16502             is_hv = FALSE;
16503             switch (actions & MDEREF_ACTION_MASK) {
16504
16505             case MDEREF_reload:
16506                 actions = (++items)->uv;
16507                 continue;
16508
16509             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16510                 is_hv = TRUE;
16511                 /* FALLTHROUGH */
16512             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16513                 agg_targ = (++items)->pad_offset;
16514                 agg_gv = NULL;
16515                 break;
16516
16517             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16518                 is_hv = TRUE;
16519                 /* FALLTHROUGH */
16520             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16521                 agg_targ = 0;
16522                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16523                 assert(isGV_with_GP(agg_gv));
16524                 break;
16525
16526             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16527             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16528                 ++items;
16529                 /* FALLTHROUGH */
16530             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16531             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16532                 agg_targ = 0;
16533                 agg_gv   = NULL;
16534                 is_hv    = TRUE;
16535                 break;
16536
16537             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16538             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16539                 ++items;
16540                 /* FALLTHROUGH */
16541             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16542             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16543                 agg_targ = 0;
16544                 agg_gv   = NULL;
16545             } /* switch */
16546
16547             index_targ     = 0;
16548             index_gv       = NULL;
16549             index_const_sv = NULL;
16550
16551             index_type = (actions & MDEREF_INDEX_MASK);
16552             switch (index_type) {
16553             case MDEREF_INDEX_none:
16554                 break;
16555             case MDEREF_INDEX_const:
16556                 if (is_hv)
16557                     index_const_sv = UNOP_AUX_item_sv(++items)
16558                 else
16559                     index_const_iv = (++items)->iv;
16560                 break;
16561             case MDEREF_INDEX_padsv:
16562                 index_targ = (++items)->pad_offset;
16563                 break;
16564             case MDEREF_INDEX_gvsv:
16565                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16566                 assert(isGV_with_GP(index_gv));
16567                 break;
16568             }
16569
16570             if (index_type != MDEREF_INDEX_none)
16571                 depth++;
16572
16573             if (   index_type == MDEREF_INDEX_none
16574                 || (actions & MDEREF_FLAG_last)
16575                 || (last && items >= last)
16576             )
16577                 break;
16578
16579             actions >>= MDEREF_SHIFT;
16580         } /* while */
16581
16582         if (PL_op == obase) {
16583             /* most likely index was undef */
16584
16585             *desc_p = (    (actions & MDEREF_FLAG_last)
16586                         && (obase->op_private
16587                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16588                         ?
16589                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16590                                 ? "exists"
16591                                 : "delete"
16592                         : is_hv ? "hash element" : "array element";
16593             assert(index_type != MDEREF_INDEX_none);
16594             if (index_gv) {
16595                 if (GvSV(index_gv) == uninit_sv)
16596                     return varname(index_gv, '$', 0, NULL, 0,
16597                                                     FUV_SUBSCRIPT_NONE);
16598                 else
16599                     return NULL;
16600             }
16601             if (index_targ) {
16602                 if (PL_curpad[index_targ] == uninit_sv)
16603                     return varname(NULL, '$', index_targ,
16604                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16605                 else
16606                     return NULL;
16607             }
16608             /* If we got to this point it was undef on a const subscript,
16609              * so magic probably involved, e.g. $ISA[0]. Give up. */
16610             return NULL;
16611         }
16612
16613         /* the SV returned by pp_multideref() was undef, if anything was */
16614
16615         if (depth != 1)
16616             break;
16617
16618         if (agg_targ)
16619             sv = PAD_SV(agg_targ);
16620         else if (agg_gv)
16621             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16622         else
16623             break;
16624
16625         if (index_type == MDEREF_INDEX_const) {
16626             if (match) {
16627                 if (SvMAGICAL(sv))
16628                     break;
16629                 if (is_hv) {
16630                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16631                     if (!he || HeVAL(he) != uninit_sv)
16632                         break;
16633                 }
16634                 else {
16635                     SV * const * const svp =
16636                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16637                     if (!svp || *svp != uninit_sv)
16638                         break;
16639                 }
16640             }
16641             return is_hv
16642                 ? varname(agg_gv, '%', agg_targ,
16643                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16644                 : varname(agg_gv, '@', agg_targ,
16645                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16646         }
16647         else  {
16648             /* index is an var */
16649             if (is_hv) {
16650                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16651                 if (keysv)
16652                     return varname(agg_gv, '%', agg_targ,
16653                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16654             }
16655             else {
16656                 const SSize_t index
16657                     = find_array_subscript((const AV *)sv, uninit_sv);
16658                 if (index >= 0)
16659                     return varname(agg_gv, '@', agg_targ,
16660                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16661             }
16662             if (match)
16663                 break;
16664             return varname(agg_gv,
16665                 is_hv ? '%' : '@',
16666                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16667         }
16668         NOT_REACHED; /* NOTREACHED */
16669     }
16670
16671     case OP_AASSIGN:
16672         /* only examine RHS */
16673         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16674                                                                 match, desc_p);
16675
16676     case OP_OPEN:
16677         o = cUNOPx(obase)->op_first;
16678         if (   o->op_type == OP_PUSHMARK
16679            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16680         )
16681             o = OpSIBLING(o);
16682
16683         if (!OpHAS_SIBLING(o)) {
16684             /* one-arg version of open is highly magical */
16685
16686             if (o->op_type == OP_GV) { /* open FOO; */
16687                 gv = cGVOPx_gv(o);
16688                 if (match && GvSV(gv) != uninit_sv)
16689                     break;
16690                 return varname(gv, '$', 0,
16691                             NULL, 0, FUV_SUBSCRIPT_NONE);
16692             }
16693             /* other possibilities not handled are:
16694              * open $x; or open my $x;  should return '${*$x}'
16695              * open expr;               should return '$'.expr ideally
16696              */
16697              break;
16698         }
16699         match = 1;
16700         goto do_op;
16701
16702     /* ops where $_ may be an implicit arg */
16703     case OP_TRANS:
16704     case OP_TRANSR:
16705     case OP_SUBST:
16706     case OP_MATCH:
16707         if ( !(obase->op_flags & OPf_STACKED)) {
16708             if (uninit_sv == DEFSV)
16709                 return newSVpvs_flags("$_", SVs_TEMP);
16710             else if (obase->op_targ
16711                   && uninit_sv == PAD_SVl(obase->op_targ))
16712                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16713                                FUV_SUBSCRIPT_NONE);
16714         }
16715         goto do_op;
16716
16717     case OP_PRTF:
16718     case OP_PRINT:
16719     case OP_SAY:
16720         match = 1; /* print etc can return undef on defined args */
16721         /* skip filehandle as it can't produce 'undef' warning  */
16722         o = cUNOPx(obase)->op_first;
16723         if ((obase->op_flags & OPf_STACKED)
16724             &&
16725                (   o->op_type == OP_PUSHMARK
16726                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16727             o = OpSIBLING(OpSIBLING(o));
16728         goto do_op2;
16729
16730
16731     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16732     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16733
16734         /* the following ops are capable of returning PL_sv_undef even for
16735          * defined arg(s) */
16736
16737     case OP_BACKTICK:
16738     case OP_PIPE_OP:
16739     case OP_FILENO:
16740     case OP_BINMODE:
16741     case OP_TIED:
16742     case OP_GETC:
16743     case OP_SYSREAD:
16744     case OP_SEND:
16745     case OP_IOCTL:
16746     case OP_SOCKET:
16747     case OP_SOCKPAIR:
16748     case OP_BIND:
16749     case OP_CONNECT:
16750     case OP_LISTEN:
16751     case OP_ACCEPT:
16752     case OP_SHUTDOWN:
16753     case OP_SSOCKOPT:
16754     case OP_GETPEERNAME:
16755     case OP_FTRREAD:
16756     case OP_FTRWRITE:
16757     case OP_FTREXEC:
16758     case OP_FTROWNED:
16759     case OP_FTEREAD:
16760     case OP_FTEWRITE:
16761     case OP_FTEEXEC:
16762     case OP_FTEOWNED:
16763     case OP_FTIS:
16764     case OP_FTZERO:
16765     case OP_FTSIZE:
16766     case OP_FTFILE:
16767     case OP_FTDIR:
16768     case OP_FTLINK:
16769     case OP_FTPIPE:
16770     case OP_FTSOCK:
16771     case OP_FTBLK:
16772     case OP_FTCHR:
16773     case OP_FTTTY:
16774     case OP_FTSUID:
16775     case OP_FTSGID:
16776     case OP_FTSVTX:
16777     case OP_FTTEXT:
16778     case OP_FTBINARY:
16779     case OP_FTMTIME:
16780     case OP_FTATIME:
16781     case OP_FTCTIME:
16782     case OP_READLINK:
16783     case OP_OPEN_DIR:
16784     case OP_READDIR:
16785     case OP_TELLDIR:
16786     case OP_SEEKDIR:
16787     case OP_REWINDDIR:
16788     case OP_CLOSEDIR:
16789     case OP_GMTIME:
16790     case OP_ALARM:
16791     case OP_SEMGET:
16792     case OP_GETLOGIN:
16793     case OP_SUBSTR:
16794     case OP_AEACH:
16795     case OP_EACH:
16796     case OP_SORT:
16797     case OP_CALLER:
16798     case OP_DOFILE:
16799     case OP_PROTOTYPE:
16800     case OP_NCMP:
16801     case OP_SMARTMATCH:
16802     case OP_UNPACK:
16803     case OP_SYSOPEN:
16804     case OP_SYSSEEK:
16805         match = 1;
16806         goto do_op;
16807
16808     case OP_ENTERSUB:
16809     case OP_GOTO:
16810         /* XXX tmp hack: these two may call an XS sub, and currently
16811           XS subs don't have a SUB entry on the context stack, so CV and
16812           pad determination goes wrong, and BAD things happen. So, just
16813           don't try to determine the value under those circumstances.
16814           Need a better fix at dome point. DAPM 11/2007 */
16815         break;
16816
16817     case OP_FLIP:
16818     case OP_FLOP:
16819     {
16820         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16821         if (gv && GvSV(gv) == uninit_sv)
16822             return newSVpvs_flags("$.", SVs_TEMP);
16823         goto do_op;
16824     }
16825
16826     case OP_POS:
16827         /* def-ness of rval pos() is independent of the def-ness of its arg */
16828         if ( !(obase->op_flags & OPf_MOD))
16829             break;
16830         /* FALLTHROUGH */
16831
16832     case OP_SCHOMP:
16833     case OP_CHOMP:
16834         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16835             return newSVpvs_flags("${$/}", SVs_TEMP);
16836         /* FALLTHROUGH */
16837
16838     default:
16839     do_op:
16840         if (!(obase->op_flags & OPf_KIDS))
16841             break;
16842         o = cUNOPx(obase)->op_first;
16843         
16844     do_op2:
16845         if (!o)
16846             break;
16847
16848         /* This loop checks all the kid ops, skipping any that cannot pos-
16849          * sibly be responsible for the uninitialized value; i.e., defined
16850          * constants and ops that return nothing.  If there is only one op
16851          * left that is not skipped, then we *know* it is responsible for
16852          * the uninitialized value.  If there is more than one op left, we
16853          * have to look for an exact match in the while() loop below.
16854          * Note that we skip padrange, because the individual pad ops that
16855          * it replaced are still in the tree, so we work on them instead.
16856          */
16857         o2 = NULL;
16858         for (kid=o; kid; kid = OpSIBLING(kid)) {
16859             const OPCODE type = kid->op_type;
16860             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16861               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16862               || (type == OP_PUSHMARK)
16863               || (type == OP_PADRANGE)
16864             )
16865             continue;
16866
16867             if (o2) { /* more than one found */
16868                 o2 = NULL;
16869                 break;
16870             }
16871             o2 = kid;
16872         }
16873         if (o2)
16874             return find_uninit_var(o2, uninit_sv, match, desc_p);
16875
16876         /* scan all args */
16877         while (o) {
16878             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16879             if (sv)
16880                 return sv;
16881             o = OpSIBLING(o);
16882         }
16883         break;
16884     }
16885     return NULL;
16886 }
16887
16888
16889 /*
16890 =for apidoc report_uninit
16891
16892 Print appropriate "Use of uninitialized variable" warning.
16893
16894 =cut
16895 */
16896
16897 void
16898 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16899 {
16900     const char *desc = NULL;
16901     SV* varname = NULL;
16902
16903     if (PL_op) {
16904         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16905                 ? "join or string"
16906                 : PL_op->op_type == OP_MULTICONCAT
16907                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
16908                 ? "sprintf"
16909                 : OP_DESC(PL_op);
16910         if (uninit_sv && PL_curpad) {
16911             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16912             if (varname)
16913                 sv_insert(varname, 0, 0, " ", 1);
16914         }
16915     }
16916     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16917         /* we've reached the end of a sort block or sub,
16918          * and the uninit value is probably what that code returned */
16919         desc = "sort";
16920
16921     /* PL_warn_uninit_sv is constant */
16922     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
16923     if (desc)
16924         /* diag_listed_as: Use of uninitialized value%s */
16925         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16926                 SVfARG(varname ? varname : &PL_sv_no),
16927                 " in ", desc);
16928     else
16929         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16930                 "", "", "");
16931     GCC_DIAG_RESTORE_STMT;
16932 }
16933
16934 /*
16935  * ex: set ts=8 sts=4 sw=4 et:
16936  */