This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
POSIX.xs: Keep locale change to minimum span
[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         DEBUG_c({
2671             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2672             STORE_LC_NUMERIC_SET_STANDARD();
2673             PerlIO_printf(Perl_debug_log,
2674                           "0x%" UVxf " num(%" NVgf ")\n",
2675                           PTR2UV(sv), SvNVX(sv));
2676             RESTORE_LC_NUMERIC();
2677         });
2678     }
2679     else if (SvTYPE(sv) < SVt_PVNV)
2680         sv_upgrade(sv, SVt_PVNV);
2681     if (SvNOKp(sv)) {
2682         return SvNVX(sv);
2683     }
2684     if (SvIOKp(sv)) {
2685         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2686 #ifdef NV_PRESERVES_UV
2687         if (SvIOK(sv))
2688             SvNOK_on(sv);
2689         else
2690             SvNOKp_on(sv);
2691 #else
2692         /* Only set the public NV OK flag if this NV preserves the IV  */
2693         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2694         if (SvIOK(sv) &&
2695             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2696                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2697             SvNOK_on(sv);
2698         else
2699             SvNOKp_on(sv);
2700 #endif
2701     }
2702     else if (SvPOKp(sv)) {
2703         UV value;
2704         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2705         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2706             not_a_number(sv);
2707 #ifdef NV_PRESERVES_UV
2708         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2709             == IS_NUMBER_IN_UV) {
2710             /* It's definitely an integer */
2711             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2712         } else {
2713             S_sv_setnv(aTHX_ sv, numtype);
2714         }
2715         if (numtype)
2716             SvNOK_on(sv);
2717         else
2718             SvNOKp_on(sv);
2719 #else
2720         SvNV_set(sv, Atof(SvPVX_const(sv)));
2721         /* Only set the public NV OK flag if this NV preserves the value in
2722            the PV at least as well as an IV/UV would.
2723            Not sure how to do this 100% reliably. */
2724         /* if that shift count is out of range then Configure's test is
2725            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2726            UV_BITS */
2727         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2728             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2729             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2730         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2731             /* Can't use strtol etc to convert this string, so don't try.
2732                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2733             SvNOK_on(sv);
2734         } else {
2735             /* value has been set.  It may not be precise.  */
2736             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2737                 /* 2s complement assumption for (UV)IV_MIN  */
2738                 SvNOK_on(sv); /* Integer is too negative.  */
2739             } else {
2740                 SvNOKp_on(sv);
2741                 SvIOKp_on(sv);
2742
2743                 if (numtype & IS_NUMBER_NEG) {
2744                     /* -IV_MIN is undefined, but we should never reach
2745                      * this point with both IS_NUMBER_NEG and value ==
2746                      * (UV)IV_MIN */
2747                     assert(value != (UV)IV_MIN);
2748                     SvIV_set(sv, -(IV)value);
2749                 } else if (value <= (UV)IV_MAX) {
2750                     SvIV_set(sv, (IV)value);
2751                 } else {
2752                     SvUV_set(sv, value);
2753                     SvIsUV_on(sv);
2754                 }
2755
2756                 if (numtype & IS_NUMBER_NOT_INT) {
2757                     /* I believe that even if the original PV had decimals,
2758                        they are lost beyond the limit of the FP precision.
2759                        However, neither is canonical, so both only get p
2760                        flags.  NWC, 2000/11/25 */
2761                     /* Both already have p flags, so do nothing */
2762                 } else {
2763                     const NV nv = SvNVX(sv);
2764                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2765                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2766                         if (SvIVX(sv) == I_V(nv)) {
2767                             SvNOK_on(sv);
2768                         } else {
2769                             /* It had no "." so it must be integer.  */
2770                         }
2771                         SvIOK_on(sv);
2772                     } else {
2773                         /* between IV_MAX and NV(UV_MAX).
2774                            Could be slightly > UV_MAX */
2775
2776                         if (numtype & IS_NUMBER_NOT_INT) {
2777                             /* UV and NV both imprecise.  */
2778                         } else {
2779                             const UV nv_as_uv = U_V(nv);
2780
2781                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2782                                 SvNOK_on(sv);
2783                             }
2784                             SvIOK_on(sv);
2785                         }
2786                     }
2787                 }
2788             }
2789         }
2790         /* It might be more code efficient to go through the entire logic above
2791            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2792            gets complex and potentially buggy, so more programmer efficient
2793            to do it this way, by turning off the public flags:  */
2794         if (!numtype)
2795             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2796 #endif /* NV_PRESERVES_UV */
2797     }
2798     else  {
2799         if (isGV_with_GP(sv)) {
2800             glob_2number(MUTABLE_GV(sv));
2801             return 0.0;
2802         }
2803
2804         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2805             report_uninit(sv);
2806         assert (SvTYPE(sv) >= SVt_NV);
2807         /* Typically the caller expects that sv_any is not NULL now.  */
2808         /* XXX Ilya implies that this is a bug in callers that assume this
2809            and ideally should be fixed.  */
2810         return 0.0;
2811     }
2812     DEBUG_c({
2813         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2814         STORE_LC_NUMERIC_SET_STANDARD();
2815         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2816                       PTR2UV(sv), SvNVX(sv));
2817         RESTORE_LC_NUMERIC();
2818     });
2819     return SvNVX(sv);
2820 }
2821
2822 /*
2823 =for apidoc sv_2num
2824
2825 Return an SV with the numeric value of the source SV, doing any necessary
2826 reference or overload conversion.  The caller is expected to have handled
2827 get-magic already.
2828
2829 =cut
2830 */
2831
2832 SV *
2833 Perl_sv_2num(pTHX_ SV *const sv)
2834 {
2835     PERL_ARGS_ASSERT_SV_2NUM;
2836
2837     if (!SvROK(sv))
2838         return sv;
2839     if (SvAMAGIC(sv)) {
2840         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2841         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2842         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2843             return sv_2num(tmpsv);
2844     }
2845     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2846 }
2847
2848 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2849  * UV as a string towards the end of buf, and return pointers to start and
2850  * end of it.
2851  *
2852  * We assume that buf is at least TYPE_CHARS(UV) long.
2853  */
2854
2855 static char *
2856 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2857 {
2858     char *ptr = buf + TYPE_CHARS(UV);
2859     char * const ebuf = ptr;
2860     int sign;
2861
2862     PERL_ARGS_ASSERT_UIV_2BUF;
2863
2864     if (is_uv)
2865         sign = 0;
2866     else if (iv >= 0) {
2867         uv = iv;
2868         sign = 0;
2869     } else {
2870         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2871         sign = 1;
2872     }
2873     do {
2874         *--ptr = '0' + (char)(uv % 10);
2875     } while (uv /= 10);
2876     if (sign)
2877         *--ptr = '-';
2878     *peob = ebuf;
2879     return ptr;
2880 }
2881
2882 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2883  * infinity or a not-a-number, writes the appropriate strings to the
2884  * buffer, including a zero byte.  On success returns the written length,
2885  * excluding the zero byte, on failure (not an infinity, not a nan)
2886  * returns zero, assert-fails on maxlen being too short.
2887  *
2888  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2889  * shared string constants we point to, instead of generating a new
2890  * string for each instance. */
2891 STATIC size_t
2892 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2893     char* s = buffer;
2894     assert(maxlen >= 4);
2895     if (Perl_isinf(nv)) {
2896         if (nv < 0) {
2897             if (maxlen < 5) /* "-Inf\0"  */
2898                 return 0;
2899             *s++ = '-';
2900         } else if (plus) {
2901             *s++ = '+';
2902         }
2903         *s++ = 'I';
2904         *s++ = 'n';
2905         *s++ = 'f';
2906     }
2907     else if (Perl_isnan(nv)) {
2908         *s++ = 'N';
2909         *s++ = 'a';
2910         *s++ = 'N';
2911         /* XXX optionally output the payload mantissa bits as
2912          * "(unsigned)" (to match the nan("...") C99 function,
2913          * or maybe as "(0xhhh...)"  would make more sense...
2914          * provide a format string so that the user can decide?
2915          * NOTE: would affect the maxlen and assert() logic.*/
2916     }
2917     else {
2918       return 0;
2919     }
2920     assert((s == buffer + 3) || (s == buffer + 4));
2921     *s = 0;
2922     return s - buffer;
2923 }
2924
2925 /*
2926 =for apidoc sv_2pv_flags
2927
2928 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2929 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2930 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2931 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2932
2933 =cut
2934 */
2935
2936 char *
2937 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2938 {
2939     char *s;
2940
2941     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2942
2943     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2944          && SvTYPE(sv) != SVt_PVFM);
2945     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2946         mg_get(sv);
2947     if (SvROK(sv)) {
2948         if (SvAMAGIC(sv)) {
2949             SV *tmpstr;
2950             if (flags & SV_SKIP_OVERLOAD)
2951                 return NULL;
2952             tmpstr = AMG_CALLunary(sv, string_amg);
2953             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2954             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2955                 /* Unwrap this:  */
2956                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2957                  */
2958
2959                 char *pv;
2960                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2961                     if (flags & SV_CONST_RETURN) {
2962                         pv = (char *) SvPVX_const(tmpstr);
2963                     } else {
2964                         pv = (flags & SV_MUTABLE_RETURN)
2965                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2966                     }
2967                     if (lp)
2968                         *lp = SvCUR(tmpstr);
2969                 } else {
2970                     pv = sv_2pv_flags(tmpstr, lp, flags);
2971                 }
2972                 if (SvUTF8(tmpstr))
2973                     SvUTF8_on(sv);
2974                 else
2975                     SvUTF8_off(sv);
2976                 return pv;
2977             }
2978         }
2979         {
2980             STRLEN len;
2981             char *retval;
2982             char *buffer;
2983             SV *const referent = SvRV(sv);
2984
2985             if (!referent) {
2986                 len = 7;
2987                 retval = buffer = savepvn("NULLREF", len);
2988             } else if (SvTYPE(referent) == SVt_REGEXP &&
2989                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2990                         amagic_is_enabled(string_amg))) {
2991                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2992
2993                 assert(re);
2994                         
2995                 /* If the regex is UTF-8 we want the containing scalar to
2996                    have an UTF-8 flag too */
2997                 if (RX_UTF8(re))
2998                     SvUTF8_on(sv);
2999                 else
3000                     SvUTF8_off(sv);     
3001
3002                 if (lp)
3003                     *lp = RX_WRAPLEN(re);
3004  
3005                 return RX_WRAPPED(re);
3006             } else {
3007                 const char *const typestr = sv_reftype(referent, 0);
3008                 const STRLEN typelen = strlen(typestr);
3009                 UV addr = PTR2UV(referent);
3010                 const char *stashname = NULL;
3011                 STRLEN stashnamelen = 0; /* hush, gcc */
3012                 const char *buffer_end;
3013
3014                 if (SvOBJECT(referent)) {
3015                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3016
3017                     if (name) {
3018                         stashname = HEK_KEY(name);
3019                         stashnamelen = HEK_LEN(name);
3020
3021                         if (HEK_UTF8(name)) {
3022                             SvUTF8_on(sv);
3023                         } else {
3024                             SvUTF8_off(sv);
3025                         }
3026                     } else {
3027                         stashname = "__ANON__";
3028                         stashnamelen = 8;
3029                     }
3030                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3031                         + 2 * sizeof(UV) + 2 /* )\0 */;
3032                 } else {
3033                     len = typelen + 3 /* (0x */
3034                         + 2 * sizeof(UV) + 2 /* )\0 */;
3035                 }
3036
3037                 Newx(buffer, len, char);
3038                 buffer_end = retval = buffer + len;
3039
3040                 /* Working backwards  */
3041                 *--retval = '\0';
3042                 *--retval = ')';
3043                 do {
3044                     *--retval = PL_hexdigit[addr & 15];
3045                 } while (addr >>= 4);
3046                 *--retval = 'x';
3047                 *--retval = '0';
3048                 *--retval = '(';
3049
3050                 retval -= typelen;
3051                 memcpy(retval, typestr, typelen);
3052
3053                 if (stashname) {
3054                     *--retval = '=';
3055                     retval -= stashnamelen;
3056                     memcpy(retval, stashname, stashnamelen);
3057                 }
3058                 /* retval may not necessarily have reached the start of the
3059                    buffer here.  */
3060                 assert (retval >= buffer);
3061
3062                 len = buffer_end - retval - 1; /* -1 for that \0  */
3063             }
3064             if (lp)
3065                 *lp = len;
3066             SAVEFREEPV(buffer);
3067             return retval;
3068         }
3069     }
3070
3071     if (SvPOKp(sv)) {
3072         if (lp)
3073             *lp = SvCUR(sv);
3074         if (flags & SV_MUTABLE_RETURN)
3075             return SvPVX_mutable(sv);
3076         if (flags & SV_CONST_RETURN)
3077             return (char *)SvPVX_const(sv);
3078         return SvPVX(sv);
3079     }
3080
3081     if (SvIOK(sv)) {
3082         /* I'm assuming that if both IV and NV are equally valid then
3083            converting the IV is going to be more efficient */
3084         const U32 isUIOK = SvIsUV(sv);
3085         char buf[TYPE_CHARS(UV)];
3086         char *ebuf, *ptr;
3087         STRLEN len;
3088
3089         if (SvTYPE(sv) < SVt_PVIV)
3090             sv_upgrade(sv, SVt_PVIV);
3091         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3092         len = ebuf - ptr;
3093         /* inlined from sv_setpvn */
3094         s = SvGROW_mutable(sv, len + 1);
3095         Move(ptr, s, len, char);
3096         s += len;
3097         *s = '\0';
3098         SvPOK_on(sv);
3099     }
3100     else if (SvNOK(sv)) {
3101         if (SvTYPE(sv) < SVt_PVNV)
3102             sv_upgrade(sv, SVt_PVNV);
3103         if (SvNVX(sv) == 0.0
3104 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3105             && !Perl_isnan(SvNVX(sv))
3106 #endif
3107         ) {
3108             s = SvGROW_mutable(sv, 2);
3109             *s++ = '0';
3110             *s = '\0';
3111         } else {
3112             STRLEN len;
3113             STRLEN size = 5; /* "-Inf\0" */
3114
3115             s = SvGROW_mutable(sv, size);
3116             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3117             if (len > 0) {
3118                 s += len;
3119                 SvPOK_on(sv);
3120             }
3121             else {
3122                 /* some Xenix systems wipe out errno here */
3123                 dSAVE_ERRNO;
3124
3125                 size =
3126                     1 + /* sign */
3127                     1 + /* "." */
3128                     NV_DIG +
3129                     1 + /* "e" */
3130                     1 + /* sign */
3131                     5 + /* exponent digits */
3132                     1 + /* \0 */
3133                     2; /* paranoia */
3134
3135                 s = SvGROW_mutable(sv, size);
3136 #ifndef USE_LOCALE_NUMERIC
3137                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3138
3139                 SvPOK_on(sv);
3140 #else
3141                 {
3142                     bool local_radix;
3143                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3144                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3145
3146                     local_radix = PL_numeric_underlying && PL_numeric_radix_sv;
3147                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3148                         size += SvCUR(PL_numeric_radix_sv) - 1;
3149                         s = SvGROW_mutable(sv, size);
3150                     }
3151
3152                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3153
3154                     /* If the radix character is UTF-8, and actually is in the
3155                      * output, turn on the UTF-8 flag for the scalar */
3156                     if (   local_radix
3157                         && SvUTF8(PL_numeric_radix_sv)
3158                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3159                     {
3160                         SvUTF8_on(sv);
3161                     }
3162
3163                     RESTORE_LC_NUMERIC();
3164                 }
3165
3166                 /* We don't call SvPOK_on(), because it may come to
3167                  * pass that the locale changes so that the
3168                  * stringification we just did is no longer correct.  We
3169                  * will have to re-stringify every time it is needed */
3170 #endif
3171                 RESTORE_ERRNO;
3172             }
3173             while (*s) s++;
3174         }
3175     }
3176     else if (isGV_with_GP(sv)) {
3177         GV *const gv = MUTABLE_GV(sv);
3178         SV *const buffer = sv_newmortal();
3179
3180         gv_efullname3(buffer, gv, "*");
3181
3182         assert(SvPOK(buffer));
3183         if (SvUTF8(buffer))
3184             SvUTF8_on(sv);
3185         else
3186             SvUTF8_off(sv);
3187         if (lp)
3188             *lp = SvCUR(buffer);
3189         return SvPVX(buffer);
3190     }
3191     else {
3192         if (lp)
3193             *lp = 0;
3194         if (flags & SV_UNDEF_RETURNS_NULL)
3195             return NULL;
3196         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3197             report_uninit(sv);
3198         /* Typically the caller expects that sv_any is not NULL now.  */
3199         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3200             sv_upgrade(sv, SVt_PV);
3201         return (char *)"";
3202     }
3203
3204     {
3205         const STRLEN len = s - SvPVX_const(sv);
3206         if (lp) 
3207             *lp = len;
3208         SvCUR_set(sv, len);
3209     }
3210     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3211                           PTR2UV(sv),SvPVX_const(sv)));
3212     if (flags & SV_CONST_RETURN)
3213         return (char *)SvPVX_const(sv);
3214     if (flags & SV_MUTABLE_RETURN)
3215         return SvPVX_mutable(sv);
3216     return SvPVX(sv);
3217 }
3218
3219 /*
3220 =for apidoc sv_copypv
3221
3222 Copies a stringified representation of the source SV into the
3223 destination SV.  Automatically performs any necessary C<mg_get> and
3224 coercion of numeric values into strings.  Guaranteed to preserve
3225 C<UTF8> flag even from overloaded objects.  Similar in nature to
3226 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3227 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3228 would lose the UTF-8'ness of the PV.
3229
3230 =for apidoc sv_copypv_nomg
3231
3232 Like C<sv_copypv>, but doesn't invoke get magic first.
3233
3234 =for apidoc sv_copypv_flags
3235
3236 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3237 has the C<SV_GMAGIC> bit set.
3238
3239 =cut
3240 */
3241
3242 void
3243 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3244 {
3245     STRLEN len;
3246     const char *s;
3247
3248     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3249
3250     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3251     sv_setpvn(dsv,s,len);
3252     if (SvUTF8(ssv))
3253         SvUTF8_on(dsv);
3254     else
3255         SvUTF8_off(dsv);
3256 }
3257
3258 /*
3259 =for apidoc sv_2pvbyte
3260
3261 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3262 to its length.  May cause the SV to be downgraded from UTF-8 as a
3263 side-effect.
3264
3265 Usually accessed via the C<SvPVbyte> macro.
3266
3267 =cut
3268 */
3269
3270 char *
3271 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3272 {
3273     PERL_ARGS_ASSERT_SV_2PVBYTE;
3274
3275     SvGETMAGIC(sv);
3276     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3277      || isGV_with_GP(sv) || SvROK(sv)) {
3278         SV *sv2 = sv_newmortal();
3279         sv_copypv_nomg(sv2,sv);
3280         sv = sv2;
3281     }
3282     sv_utf8_downgrade(sv,0);
3283     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3284 }
3285
3286 /*
3287 =for apidoc sv_2pvutf8
3288
3289 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3290 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3291
3292 Usually accessed via the C<SvPVutf8> macro.
3293
3294 =cut
3295 */
3296
3297 char *
3298 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3299 {
3300     PERL_ARGS_ASSERT_SV_2PVUTF8;
3301
3302     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3303      || isGV_with_GP(sv) || SvROK(sv))
3304         sv = sv_mortalcopy(sv);
3305     else
3306         SvGETMAGIC(sv);
3307     sv_utf8_upgrade_nomg(sv);
3308     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3309 }
3310
3311
3312 /*
3313 =for apidoc sv_2bool
3314
3315 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3316 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3317 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3318
3319 =for apidoc sv_2bool_flags
3320
3321 This function is only used by C<sv_true()> and friends,  and only if
3322 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3323 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3324
3325
3326 =cut
3327 */
3328
3329 bool
3330 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3331 {
3332     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3333
3334     restart:
3335     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3336
3337     if (!SvOK(sv))
3338         return 0;
3339     if (SvROK(sv)) {
3340         if (SvAMAGIC(sv)) {
3341             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3342             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3343                 bool svb;
3344                 sv = tmpsv;
3345                 if(SvGMAGICAL(sv)) {
3346                     flags = SV_GMAGIC;
3347                     goto restart; /* call sv_2bool */
3348                 }
3349                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3350                 else if(!SvOK(sv)) {
3351                     svb = 0;
3352                 }
3353                 else if(SvPOK(sv)) {
3354                     svb = SvPVXtrue(sv);
3355                 }
3356                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3357                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3358                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3359                 }
3360                 else {
3361                     flags = 0;
3362                     goto restart; /* call sv_2bool_nomg */
3363                 }
3364                 return cBOOL(svb);
3365             }
3366         }
3367         assert(SvRV(sv));
3368         return TRUE;
3369     }
3370     if (isREGEXP(sv))
3371         return
3372           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3373
3374     if (SvNOK(sv) && !SvPOK(sv))
3375         return SvNVX(sv) != 0.0;
3376
3377     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3378 }
3379
3380 /*
3381 =for apidoc sv_utf8_upgrade
3382
3383 Converts the PV of an SV to its UTF-8-encoded form.
3384 Forces the SV to string form if it is not already.
3385 Will C<mg_get> on C<sv> if appropriate.
3386 Always sets the C<SvUTF8> flag to avoid future validity checks even
3387 if the whole string is the same in UTF-8 as not.
3388 Returns the number of bytes in the converted string
3389
3390 This is not a general purpose byte encoding to Unicode interface:
3391 use the Encode extension for that.
3392
3393 =for apidoc sv_utf8_upgrade_nomg
3394
3395 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3396
3397 =for apidoc sv_utf8_upgrade_flags
3398
3399 Converts the PV of an SV to its UTF-8-encoded form.
3400 Forces the SV to string form if it is not already.
3401 Always sets the SvUTF8 flag to avoid future validity checks even
3402 if all the bytes are invariant in UTF-8.
3403 If C<flags> has C<SV_GMAGIC> bit set,
3404 will C<mg_get> on C<sv> if appropriate, else not.
3405
3406 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3407
3408 Returns the number of bytes in the converted string.
3409
3410 This is not a general purpose byte encoding to Unicode interface:
3411 use the Encode extension for that.
3412
3413 =for apidoc sv_utf8_upgrade_flags_grow
3414
3415 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3416 the number of unused bytes the string of C<sv> is guaranteed to have free after
3417 it upon return.  This allows the caller to reserve extra space that it intends
3418 to fill, to avoid extra grows.
3419
3420 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3421 are implemented in terms of this function.
3422
3423 Returns the number of bytes in the converted string (not including the spares).
3424
3425 =cut
3426
3427 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3428 C<NUL> isn't guaranteed due to having other routines do the work in some input
3429 cases, or if the input is already flagged as being in utf8.
3430
3431 */
3432
3433 STRLEN
3434 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3435 {
3436     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3437
3438     if (sv == &PL_sv_undef)
3439         return 0;
3440     if (!SvPOK_nog(sv)) {
3441         STRLEN len = 0;
3442         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3443             (void) sv_2pv_flags(sv,&len, flags);
3444             if (SvUTF8(sv)) {
3445                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3446                 return len;
3447             }
3448         } else {
3449             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3450         }
3451     }
3452
3453     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3454      * compiled and individual nodes will remain non-utf8 even if the
3455      * stringified version of the pattern gets upgraded. Whether the
3456      * PVX of a REGEXP should be grown or we should just croak, I don't
3457      * know - DAPM */
3458     if (SvUTF8(sv) || isREGEXP(sv)) {
3459         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3460         return SvCUR(sv);
3461     }
3462
3463     if (SvIsCOW(sv)) {
3464         S_sv_uncow(aTHX_ sv, 0);
3465     }
3466
3467     if (SvCUR(sv) == 0) {
3468         if (extra) SvGROW(sv, extra);
3469     } else { /* Assume Latin-1/EBCDIC */
3470         /* This function could be much more efficient if we
3471          * had a FLAG in SVs to signal if there are any variant
3472          * chars in the PV.  Given that there isn't such a flag
3473          * make the loop as fast as possible. */
3474         U8 * s = (U8 *) SvPVX_const(sv);
3475         U8 *t = s;
3476         
3477         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3478
3479             /* utf8 conversion not needed because all are invariants.  Mark
3480              * as UTF-8 even if no variant - saves scanning loop */
3481             SvUTF8_on(sv);
3482             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3483             return SvCUR(sv);
3484         }
3485
3486         /* Here, there is at least one variant (t points to the first one), so
3487          * the string should be converted to utf8.  Everything from 's' to
3488          * 't - 1' will occupy only 1 byte each on output.
3489          *
3490          * Note that the incoming SV may not have a trailing '\0', as certain
3491          * code in pp_formline can send us partially built SVs.
3492          *
3493          * There are two main ways to convert.  One is to create a new string
3494          * and go through the input starting from the beginning, appending each
3495          * converted value onto the new string as we go along.  Going this
3496          * route, it's probably best to initially allocate enough space in the
3497          * string rather than possibly running out of space and having to
3498          * reallocate and then copy what we've done so far.  Since everything
3499          * from 's' to 't - 1' is invariant, the destination can be initialized
3500          * with these using a fast memory copy.  To be sure to allocate enough
3501          * space, one could use the worst case scenario, where every remaining
3502          * byte expands to two under UTF-8, or one could parse it and count
3503          * exactly how many do expand.
3504          *
3505          * The other way is to unconditionally parse the remainder of the
3506          * string to figure out exactly how big the expanded string will be,
3507          * growing if needed.  Then start at the end of the string and place
3508          * the character there at the end of the unfilled space in the expanded
3509          * one, working backwards until reaching 't'.
3510          *
3511          * The problem with assuming the worst case scenario is that for very
3512          * long strings, we could allocate much more memory than actually
3513          * needed, which can create performance problems.  If we have to parse
3514          * anyway, the second method is the winner as it may avoid an extra
3515          * copy.  The code used to use the first method under some
3516          * circumstances, but now that there is faster variant counting on
3517          * ASCII platforms, the second method is used exclusively, eliminating
3518          * some code that no longer has to be maintained. */
3519
3520         {
3521             /* Count the total number of variants there are.  We can start
3522              * just beyond the first one, which is known to be at 't' */
3523             const Size_t invariant_length = t - s;
3524             U8 * e = (U8 *) SvEND(sv);
3525
3526             /* The length of the left overs, plus 1. */
3527             const Size_t remaining_length_p1 = e - t;
3528
3529             /* We expand by 1 for the variant at 't' and one for each remaining
3530              * variant (we start looking at 't+1') */
3531             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3532
3533             /* +1 = trailing NUL */
3534             Size_t need = SvCUR(sv) + expansion + extra + 1;
3535             U8 * d;
3536
3537             /* Grow if needed */
3538             if (SvLEN(sv) < need) {
3539                 t = invariant_length + (U8*) SvGROW(sv, need);
3540                 e = t + remaining_length_p1;
3541             }
3542             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3543
3544             /* Set the NUL at the end */
3545             d = (U8 *) SvEND(sv);
3546             *d-- = '\0';
3547
3548             /* Having decremented d, it points to the position to put the
3549              * very last byte of the expanded string.  Go backwards through
3550              * the string, copying and expanding as we go, stopping when we
3551              * get to the part that is invariant the rest of the way down */
3552
3553             e--;
3554             while (e >= t) {
3555                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3556                     *d-- = *e;
3557                 } else {
3558                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3559                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3560                 }
3561                 e--;
3562             }
3563
3564             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3565                 /* Update pos. We do it at the end rather than during
3566                  * the upgrade, to avoid slowing down the common case
3567                  * (upgrade without pos).
3568                  * pos can be stored as either bytes or characters.  Since
3569                  * this was previously a byte string we can just turn off
3570                  * the bytes flag. */
3571                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3572                 if (mg) {
3573                     mg->mg_flags &= ~MGf_BYTES;
3574                 }
3575                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3576                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3577             }
3578         }
3579     }
3580
3581     SvUTF8_on(sv);
3582     return SvCUR(sv);
3583 }
3584
3585 /*
3586 =for apidoc sv_utf8_downgrade
3587
3588 Attempts to convert the PV of an SV from characters to bytes.
3589 If the PV contains a character that cannot fit
3590 in a byte, this conversion will fail;
3591 in this case, either returns false or, if C<fail_ok> is not
3592 true, croaks.
3593
3594 This is not a general purpose Unicode to byte encoding interface:
3595 use the C<Encode> extension for that.
3596
3597 =cut
3598 */
3599
3600 bool
3601 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3602 {
3603     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3604
3605     if (SvPOKp(sv) && SvUTF8(sv)) {
3606         if (SvCUR(sv)) {
3607             U8 *s;
3608             STRLEN len;
3609             int mg_flags = SV_GMAGIC;
3610
3611             if (SvIsCOW(sv)) {
3612                 S_sv_uncow(aTHX_ sv, 0);
3613             }
3614             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3615                 /* update pos */
3616                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3617                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3618                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3619                                                 SV_GMAGIC|SV_CONST_RETURN);
3620                         mg_flags = 0; /* sv_pos_b2u does get magic */
3621                 }
3622                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3623                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3624
3625             }
3626             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3627
3628             if (!utf8_to_bytes(s, &len)) {
3629                 if (fail_ok)
3630                     return FALSE;
3631                 else {
3632                     if (PL_op)
3633                         Perl_croak(aTHX_ "Wide character in %s",
3634                                    OP_DESC(PL_op));
3635                     else
3636                         Perl_croak(aTHX_ "Wide character");
3637                 }
3638             }
3639             SvCUR_set(sv, len);
3640         }
3641     }
3642     SvUTF8_off(sv);
3643     return TRUE;
3644 }
3645
3646 /*
3647 =for apidoc sv_utf8_encode
3648
3649 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3650 flag off so that it looks like octets again.
3651
3652 =cut
3653 */
3654
3655 void
3656 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3657 {
3658     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3659
3660     if (SvREADONLY(sv)) {
3661         sv_force_normal_flags(sv, 0);
3662     }
3663     (void) sv_utf8_upgrade(sv);
3664     SvUTF8_off(sv);
3665 }
3666
3667 /*
3668 =for apidoc sv_utf8_decode
3669
3670 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3671 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3672 so that it looks like a character.  If the PV contains only single-byte
3673 characters, the C<SvUTF8> flag stays off.
3674 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3675
3676 =cut
3677 */
3678
3679 bool
3680 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3681 {
3682     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3683
3684     if (SvPOKp(sv)) {
3685         const U8 *start, *c, *first_variant;
3686
3687         /* The octets may have got themselves encoded - get them back as
3688          * bytes
3689          */
3690         if (!sv_utf8_downgrade(sv, TRUE))
3691             return FALSE;
3692
3693         /* it is actually just a matter of turning the utf8 flag on, but
3694          * we want to make sure everything inside is valid utf8 first.
3695          */
3696         c = start = (const U8 *) SvPVX_const(sv);
3697         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3698             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3699                 return FALSE;
3700             SvUTF8_on(sv);
3701         }
3702         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3703             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3704                    after this, clearing pos.  Does anything on CPAN
3705                    need this? */
3706             /* adjust pos to the start of a UTF8 char sequence */
3707             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3708             if (mg) {
3709                 I32 pos = mg->mg_len;
3710                 if (pos > 0) {
3711                     for (c = start + pos; c > start; c--) {
3712                         if (UTF8_IS_START(*c))
3713                             break;
3714                     }
3715                     mg->mg_len  = c - start;
3716                 }
3717             }
3718             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3719                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3720         }
3721     }
3722     return TRUE;
3723 }
3724
3725 /*
3726 =for apidoc sv_setsv
3727
3728 Copies the contents of the source SV C<ssv> into the destination SV
3729 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3730 function if the source SV needs to be reused.  Does not handle 'set' magic on
3731 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3732 performs a copy-by-value, obliterating any previous content of the
3733 destination.
3734
3735 You probably want to use one of the assortment of wrappers, such as
3736 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3737 C<SvSetMagicSV_nosteal>.
3738
3739 =for apidoc sv_setsv_flags
3740
3741 Copies the contents of the source SV C<ssv> into the destination SV
3742 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3743 function if the source SV needs to be reused.  Does not handle 'set' magic.
3744 Loosely speaking, it performs a copy-by-value, obliterating any previous
3745 content of the destination.
3746 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3747 C<ssv> if appropriate, else not.  If the C<flags>
3748 parameter has the C<SV_NOSTEAL> bit set then the
3749 buffers of temps will not be stolen.  C<sv_setsv>
3750 and C<sv_setsv_nomg> are implemented in terms of this function.
3751
3752 You probably want to use one of the assortment of wrappers, such as
3753 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3754 C<SvSetMagicSV_nosteal>.
3755
3756 This is the primary function for copying scalars, and most other
3757 copy-ish functions and macros use this underneath.
3758
3759 =cut
3760 */
3761
3762 static void
3763 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3764 {
3765     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3766     HV *old_stash = NULL;
3767
3768     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3769
3770     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3771         const char * const name = GvNAME(sstr);
3772         const STRLEN len = GvNAMELEN(sstr);
3773         {
3774             if (dtype >= SVt_PV) {
3775                 SvPV_free(dstr);
3776                 SvPV_set(dstr, 0);
3777                 SvLEN_set(dstr, 0);
3778                 SvCUR_set(dstr, 0);
3779             }
3780             SvUPGRADE(dstr, SVt_PVGV);
3781             (void)SvOK_off(dstr);
3782             isGV_with_GP_on(dstr);
3783         }
3784         GvSTASH(dstr) = GvSTASH(sstr);
3785         if (GvSTASH(dstr))
3786             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3787         gv_name_set(MUTABLE_GV(dstr), name, len,
3788                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3789         SvFAKE_on(dstr);        /* can coerce to non-glob */
3790     }
3791
3792     if(GvGP(MUTABLE_GV(sstr))) {
3793         /* If source has method cache entry, clear it */
3794         if(GvCVGEN(sstr)) {
3795             SvREFCNT_dec(GvCV(sstr));
3796             GvCV_set(sstr, NULL);
3797             GvCVGEN(sstr) = 0;
3798         }
3799         /* If source has a real method, then a method is
3800            going to change */
3801         else if(
3802          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3803         ) {
3804             mro_changes = 1;
3805         }
3806     }
3807
3808     /* If dest already had a real method, that's a change as well */
3809     if(
3810         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3811      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3812     ) {
3813         mro_changes = 1;
3814     }
3815
3816     /* We don't need to check the name of the destination if it was not a
3817        glob to begin with. */
3818     if(dtype == SVt_PVGV) {
3819         const char * const name = GvNAME((const GV *)dstr);
3820         const STRLEN len = GvNAMELEN(dstr);
3821         if(memEQs(name, len, "ISA")
3822          /* The stash may have been detached from the symbol table, so
3823             check its name. */
3824          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3825         )
3826             mro_changes = 2;
3827         else {
3828             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3829              || (len == 1 && name[0] == ':')) {
3830                 mro_changes = 3;
3831
3832                 /* Set aside the old stash, so we can reset isa caches on
3833                    its subclasses. */
3834                 if((old_stash = GvHV(dstr)))
3835                     /* Make sure we do not lose it early. */
3836                     SvREFCNT_inc_simple_void_NN(
3837                      sv_2mortal((SV *)old_stash)
3838                     );
3839             }
3840         }
3841
3842         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3843     }
3844
3845     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3846      * so temporarily protect it */
3847     ENTER;
3848     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3849     gp_free(MUTABLE_GV(dstr));
3850     GvINTRO_off(dstr);          /* one-shot flag */
3851     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3852     LEAVE;
3853
3854     if (SvTAINTED(sstr))
3855         SvTAINT(dstr);
3856     if (GvIMPORTED(dstr) != GVf_IMPORTED
3857         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3858         {
3859             GvIMPORTED_on(dstr);
3860         }
3861     GvMULTI_on(dstr);
3862     if(mro_changes == 2) {
3863       if (GvAV((const GV *)sstr)) {
3864         MAGIC *mg;
3865         SV * const sref = (SV *)GvAV((const GV *)dstr);
3866         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3867             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3868                 AV * const ary = newAV();
3869                 av_push(ary, mg->mg_obj); /* takes the refcount */
3870                 mg->mg_obj = (SV *)ary;
3871             }
3872             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3873         }
3874         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3875       }
3876       mro_isa_changed_in(GvSTASH(dstr));
3877     }
3878     else if(mro_changes == 3) {
3879         HV * const stash = GvHV(dstr);
3880         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3881             mro_package_moved(
3882                 stash, old_stash,
3883                 (GV *)dstr, 0
3884             );
3885     }
3886     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3887     if (GvIO(dstr) && dtype == SVt_PVGV) {
3888         DEBUG_o(Perl_deb(aTHX_
3889                         "glob_assign_glob clearing PL_stashcache\n"));
3890         /* It's a cache. It will rebuild itself quite happily.
3891            It's a lot of effort to work out exactly which key (or keys)
3892            might be invalidated by the creation of the this file handle.
3893          */
3894         hv_clear(PL_stashcache);
3895     }
3896     return;
3897 }
3898
3899 void
3900 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3901 {
3902     SV * const sref = SvRV(sstr);
3903     SV *dref;
3904     const int intro = GvINTRO(dstr);
3905     SV **location;
3906     U8 import_flag = 0;
3907     const U32 stype = SvTYPE(sref);
3908
3909     PERL_ARGS_ASSERT_GV_SETREF;
3910
3911     if (intro) {
3912         GvINTRO_off(dstr);      /* one-shot flag */
3913         GvLINE(dstr) = CopLINE(PL_curcop);
3914         GvEGV(dstr) = MUTABLE_GV(dstr);
3915     }
3916     GvMULTI_on(dstr);
3917     switch (stype) {
3918     case SVt_PVCV:
3919         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3920         import_flag = GVf_IMPORTED_CV;
3921         goto common;
3922     case SVt_PVHV:
3923         location = (SV **) &GvHV(dstr);
3924         import_flag = GVf_IMPORTED_HV;
3925         goto common;
3926     case SVt_PVAV:
3927         location = (SV **) &GvAV(dstr);
3928         import_flag = GVf_IMPORTED_AV;
3929         goto common;
3930     case SVt_PVIO:
3931         location = (SV **) &GvIOp(dstr);
3932         goto common;
3933     case SVt_PVFM:
3934         location = (SV **) &GvFORM(dstr);
3935         goto common;
3936     default:
3937         location = &GvSV(dstr);
3938         import_flag = GVf_IMPORTED_SV;
3939     common:
3940         if (intro) {
3941             if (stype == SVt_PVCV) {
3942                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3943                 if (GvCVGEN(dstr)) {
3944                     SvREFCNT_dec(GvCV(dstr));
3945                     GvCV_set(dstr, NULL);
3946                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3947                 }
3948             }
3949             /* SAVEt_GVSLOT takes more room on the savestack and has more
3950                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3951                leave_scope needs access to the GV so it can reset method
3952                caches.  We must use SAVEt_GVSLOT whenever the type is
3953                SVt_PVCV, even if the stash is anonymous, as the stash may
3954                gain a name somehow before leave_scope. */
3955             if (stype == SVt_PVCV) {
3956                 /* There is no save_pushptrptrptr.  Creating it for this
3957                    one call site would be overkill.  So inline the ss add
3958                    routines here. */
3959                 dSS_ADD;
3960                 SS_ADD_PTR(dstr);
3961                 SS_ADD_PTR(location);
3962                 SS_ADD_PTR(SvREFCNT_inc(*location));
3963                 SS_ADD_UV(SAVEt_GVSLOT);
3964                 SS_ADD_END(4);
3965             }
3966             else SAVEGENERICSV(*location);
3967         }
3968         dref = *location;
3969         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3970             CV* const cv = MUTABLE_CV(*location);
3971             if (cv) {
3972                 if (!GvCVGEN((const GV *)dstr) &&
3973                     (CvROOT(cv) || CvXSUB(cv)) &&
3974                     /* redundant check that avoids creating the extra SV
3975                        most of the time: */
3976                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3977                     {
3978                         SV * const new_const_sv =
3979                             CvCONST((const CV *)sref)
3980                                  ? cv_const_sv((const CV *)sref)
3981                                  : NULL;
3982                         HV * const stash = GvSTASH((const GV *)dstr);
3983                         report_redefined_cv(
3984                            sv_2mortal(
3985                              stash
3986                                ? Perl_newSVpvf(aTHX_
3987                                     "%" HEKf "::%" HEKf,
3988                                     HEKfARG(HvNAME_HEK(stash)),
3989                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3990                                : Perl_newSVpvf(aTHX_
3991                                     "%" HEKf,
3992                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3993                            ),
3994                            cv,
3995                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3996                         );
3997                     }
3998                 if (!intro)
3999                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4000                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4001                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4002                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4003             }
4004             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4005             GvASSUMECV_on(dstr);
4006             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4007                 if (intro && GvREFCNT(dstr) > 1) {
4008                     /* temporary remove extra savestack's ref */
4009                     --GvREFCNT(dstr);
4010                     gv_method_changed(dstr);
4011                     ++GvREFCNT(dstr);
4012                 }
4013                 else gv_method_changed(dstr);
4014             }
4015         }
4016         *location = SvREFCNT_inc_simple_NN(sref);
4017         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4018             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4019             GvFLAGS(dstr) |= import_flag;
4020         }
4021
4022         if (stype == SVt_PVHV) {
4023             const char * const name = GvNAME((GV*)dstr);
4024             const STRLEN len = GvNAMELEN(dstr);
4025             if (
4026                 (
4027                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4028                 || (len == 1 && name[0] == ':')
4029                 )
4030              && (!dref || HvENAME_get(dref))
4031             ) {
4032                 mro_package_moved(
4033                     (HV *)sref, (HV *)dref,
4034                     (GV *)dstr, 0
4035                 );
4036             }
4037         }
4038         else if (
4039             stype == SVt_PVAV && sref != dref
4040          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4041          /* The stash may have been detached from the symbol table, so
4042             check its name before doing anything. */
4043          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4044         ) {
4045             MAGIC *mg;
4046             MAGIC * const omg = dref && SvSMAGICAL(dref)
4047                                  ? mg_find(dref, PERL_MAGIC_isa)
4048                                  : NULL;
4049             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4050                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4051                     AV * const ary = newAV();
4052                     av_push(ary, mg->mg_obj); /* takes the refcount */
4053                     mg->mg_obj = (SV *)ary;
4054                 }
4055                 if (omg) {
4056                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4057                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4058                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4059                         while (items--)
4060                             av_push(
4061                              (AV *)mg->mg_obj,
4062                              SvREFCNT_inc_simple_NN(*svp++)
4063                             );
4064                     }
4065                     else
4066                         av_push(
4067                          (AV *)mg->mg_obj,
4068                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4069                         );
4070                 }
4071                 else
4072                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4073             }
4074             else
4075             {
4076                 SSize_t i;
4077                 sv_magic(
4078                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4079                 );
4080                 for (i = 0; i <= AvFILL(sref); ++i) {
4081                     SV **elem = av_fetch ((AV*)sref, i, 0);
4082                     if (elem) {
4083                         sv_magic(
4084                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4085                         );
4086                     }
4087                 }
4088                 mg = mg_find(sref, PERL_MAGIC_isa);
4089             }
4090             /* Since the *ISA assignment could have affected more than
4091                one stash, don't call mro_isa_changed_in directly, but let
4092                magic_clearisa do it for us, as it already has the logic for
4093                dealing with globs vs arrays of globs. */
4094             assert(mg);
4095             Perl_magic_clearisa(aTHX_ NULL, mg);
4096         }
4097         else if (stype == SVt_PVIO) {
4098             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4099             /* It's a cache. It will rebuild itself quite happily.
4100                It's a lot of effort to work out exactly which key (or keys)
4101                might be invalidated by the creation of the this file handle.
4102             */
4103             hv_clear(PL_stashcache);
4104         }
4105         break;
4106     }
4107     if (!intro) SvREFCNT_dec(dref);
4108     if (SvTAINTED(sstr))
4109         SvTAINT(dstr);
4110     return;
4111 }
4112
4113
4114
4115
4116 #ifdef PERL_DEBUG_READONLY_COW
4117 # include <sys/mman.h>
4118
4119 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4120 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4121 # endif
4122
4123 void
4124 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4125 {
4126     struct perl_memory_debug_header * const header =
4127         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4128     const MEM_SIZE len = header->size;
4129     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4130 # ifdef PERL_TRACK_MEMPOOL
4131     if (!header->readonly) header->readonly = 1;
4132 # endif
4133     if (mprotect(header, len, PROT_READ))
4134         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4135                          header, len, errno);
4136 }
4137
4138 static void
4139 S_sv_buf_to_rw(pTHX_ SV *sv)
4140 {
4141     struct perl_memory_debug_header * const header =
4142         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4143     const MEM_SIZE len = header->size;
4144     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4145     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4146         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4147                          header, len, errno);
4148 # ifdef PERL_TRACK_MEMPOOL
4149     header->readonly = 0;
4150 # endif
4151 }
4152
4153 #else
4154 # define sv_buf_to_ro(sv)       NOOP
4155 # define sv_buf_to_rw(sv)       NOOP
4156 #endif
4157
4158 void
4159 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4160 {
4161     U32 sflags;
4162     int dtype;
4163     svtype stype;
4164     unsigned int both_type;
4165
4166     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4167
4168     if (UNLIKELY( sstr == dstr ))
4169         return;
4170
4171     if (UNLIKELY( !sstr ))
4172         sstr = &PL_sv_undef;
4173
4174     stype = SvTYPE(sstr);
4175     dtype = SvTYPE(dstr);
4176     both_type = (stype | dtype);
4177
4178     /* with these values, we can check that both SVs are NULL/IV (and not
4179      * freed) just by testing the or'ed types */
4180     STATIC_ASSERT_STMT(SVt_NULL == 0);
4181     STATIC_ASSERT_STMT(SVt_IV   == 1);
4182     if (both_type <= 1) {
4183         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4184          * special-casing */
4185         U32 sflags;
4186         U32 new_dflags;
4187         SV *old_rv = NULL;
4188
4189         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4190         if (SvREADONLY(dstr))
4191             Perl_croak_no_modify();
4192         if (SvROK(dstr)) {
4193             if (SvWEAKREF(dstr))
4194                 sv_unref_flags(dstr, 0);
4195             else
4196                 old_rv = SvRV(dstr);
4197         }
4198
4199         assert(!SvGMAGICAL(sstr));
4200         assert(!SvGMAGICAL(dstr));
4201
4202         sflags = SvFLAGS(sstr);
4203         if (sflags & (SVf_IOK|SVf_ROK)) {
4204             SET_SVANY_FOR_BODYLESS_IV(dstr);
4205             new_dflags = SVt_IV;
4206
4207             if (sflags & SVf_ROK) {
4208                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4209                 new_dflags |= SVf_ROK;
4210             }
4211             else {
4212                 /* both src and dst are <= SVt_IV, so sv_any points to the
4213                  * head; so access the head directly
4214                  */
4215                 assert(    &(sstr->sv_u.svu_iv)
4216                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4217                 assert(    &(dstr->sv_u.svu_iv)
4218                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4219                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4220                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4221             }
4222         }
4223         else {
4224             new_dflags = dtype; /* turn off everything except the type */
4225         }
4226         SvFLAGS(dstr) = new_dflags;
4227         SvREFCNT_dec(old_rv);
4228
4229         return;
4230     }
4231
4232     if (UNLIKELY(both_type == SVTYPEMASK)) {
4233         if (SvIS_FREED(dstr)) {
4234             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4235                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4236         }
4237         if (SvIS_FREED(sstr)) {
4238             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4239                        (void*)sstr, (void*)dstr);
4240         }
4241     }
4242
4243
4244
4245     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4246     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4247
4248     /* There's a lot of redundancy below but we're going for speed here */
4249
4250     switch (stype) {
4251     case SVt_NULL:
4252       undef_sstr:
4253         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4254             (void)SvOK_off(dstr);
4255             return;
4256         }
4257         break;
4258     case SVt_IV:
4259         if (SvIOK(sstr)) {
4260             switch (dtype) {
4261             case SVt_NULL:
4262                 /* For performance, we inline promoting to type SVt_IV. */
4263                 /* We're starting from SVt_NULL, so provided that define is
4264                  * actual 0, we don't have to unset any SV type flags
4265                  * to promote to SVt_IV. */
4266                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4267                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4268                 SvFLAGS(dstr) |= SVt_IV;
4269                 break;
4270             case SVt_NV:
4271             case SVt_PV:
4272                 sv_upgrade(dstr, SVt_PVIV);
4273                 break;
4274             case SVt_PVGV:
4275             case SVt_PVLV:
4276                 goto end_of_first_switch;
4277             }
4278             (void)SvIOK_only(dstr);
4279             SvIV_set(dstr,  SvIVX(sstr));
4280             if (SvIsUV(sstr))
4281                 SvIsUV_on(dstr);
4282             /* SvTAINTED can only be true if the SV has taint magic, which in
4283                turn means that the SV type is PVMG (or greater). This is the
4284                case statement for SVt_IV, so this cannot be true (whatever gcov
4285                may say).  */
4286             assert(!SvTAINTED(sstr));
4287             return;
4288         }
4289         if (!SvROK(sstr))
4290             goto undef_sstr;
4291         if (dtype < SVt_PV && dtype != SVt_IV)
4292             sv_upgrade(dstr, SVt_IV);
4293         break;
4294
4295     case SVt_NV:
4296         if (LIKELY( SvNOK(sstr) )) {
4297             switch (dtype) {
4298             case SVt_NULL:
4299             case SVt_IV:
4300                 sv_upgrade(dstr, SVt_NV);
4301                 break;
4302             case SVt_PV:
4303             case SVt_PVIV:
4304                 sv_upgrade(dstr, SVt_PVNV);
4305                 break;
4306             case SVt_PVGV:
4307             case SVt_PVLV:
4308                 goto end_of_first_switch;
4309             }
4310             SvNV_set(dstr, SvNVX(sstr));
4311             (void)SvNOK_only(dstr);
4312             /* SvTAINTED can only be true if the SV has taint magic, which in
4313                turn means that the SV type is PVMG (or greater). This is the
4314                case statement for SVt_NV, so this cannot be true (whatever gcov
4315                may say).  */
4316             assert(!SvTAINTED(sstr));
4317             return;
4318         }
4319         goto undef_sstr;
4320
4321     case SVt_PV:
4322         if (dtype < SVt_PV)
4323             sv_upgrade(dstr, SVt_PV);
4324         break;
4325     case SVt_PVIV:
4326         if (dtype < SVt_PVIV)
4327             sv_upgrade(dstr, SVt_PVIV);
4328         break;
4329     case SVt_PVNV:
4330         if (dtype < SVt_PVNV)
4331             sv_upgrade(dstr, SVt_PVNV);
4332         break;
4333     default:
4334         {
4335         const char * const type = sv_reftype(sstr,0);
4336         if (PL_op)
4337             /* diag_listed_as: Bizarre copy of %s */
4338             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4339         else
4340             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4341         }
4342         NOT_REACHED; /* NOTREACHED */
4343
4344     case SVt_REGEXP:
4345       upgregexp:
4346         if (dtype < SVt_REGEXP)
4347             sv_upgrade(dstr, SVt_REGEXP);
4348         break;
4349
4350         case SVt_INVLIST:
4351     case SVt_PVLV:
4352     case SVt_PVGV:
4353     case SVt_PVMG:
4354         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4355             mg_get(sstr);
4356             if (SvTYPE(sstr) != stype)
4357                 stype = SvTYPE(sstr);
4358         }
4359         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4360                     glob_assign_glob(dstr, sstr, dtype);
4361                     return;
4362         }
4363         if (stype == SVt_PVLV)
4364         {
4365             if (isREGEXP(sstr)) goto upgregexp;
4366             SvUPGRADE(dstr, SVt_PVNV);
4367         }
4368         else
4369             SvUPGRADE(dstr, (svtype)stype);
4370     }
4371  end_of_first_switch:
4372
4373     /* dstr may have been upgraded.  */
4374     dtype = SvTYPE(dstr);
4375     sflags = SvFLAGS(sstr);
4376
4377     if (UNLIKELY( dtype == SVt_PVCV )) {
4378         /* Assigning to a subroutine sets the prototype.  */
4379         if (SvOK(sstr)) {
4380             STRLEN len;
4381             const char *const ptr = SvPV_const(sstr, len);
4382
4383             SvGROW(dstr, len + 1);
4384             Copy(ptr, SvPVX(dstr), len + 1, char);
4385             SvCUR_set(dstr, len);
4386             SvPOK_only(dstr);
4387             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4388             CvAUTOLOAD_off(dstr);
4389         } else {
4390             SvOK_off(dstr);
4391         }
4392     }
4393     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4394              || dtype == SVt_PVFM))
4395     {
4396         const char * const type = sv_reftype(dstr,0);
4397         if (PL_op)
4398             /* diag_listed_as: Cannot copy to %s */
4399             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4400         else
4401             Perl_croak(aTHX_ "Cannot copy to %s", type);
4402     } else if (sflags & SVf_ROK) {
4403         if (isGV_with_GP(dstr)
4404             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4405             sstr = SvRV(sstr);
4406             if (sstr == dstr) {
4407                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4408                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4409                 {
4410                     GvIMPORTED_on(dstr);
4411                 }
4412                 GvMULTI_on(dstr);
4413                 return;
4414             }
4415             glob_assign_glob(dstr, sstr, dtype);
4416             return;
4417         }
4418
4419         if (dtype >= SVt_PV) {
4420             if (isGV_with_GP(dstr)) {
4421                 gv_setref(dstr, sstr);
4422                 return;
4423             }
4424             if (SvPVX_const(dstr)) {
4425                 SvPV_free(dstr);
4426                 SvLEN_set(dstr, 0);
4427                 SvCUR_set(dstr, 0);
4428             }
4429         }
4430         (void)SvOK_off(dstr);
4431         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4432         SvFLAGS(dstr) |= sflags & SVf_ROK;
4433         assert(!(sflags & SVp_NOK));
4434         assert(!(sflags & SVp_IOK));
4435         assert(!(sflags & SVf_NOK));
4436         assert(!(sflags & SVf_IOK));
4437     }
4438     else if (isGV_with_GP(dstr)) {
4439         if (!(sflags & SVf_OK)) {
4440             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4441                            "Undefined value assigned to typeglob");
4442         }
4443         else {
4444             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4445             if (dstr != (const SV *)gv) {
4446                 const char * const name = GvNAME((const GV *)dstr);
4447                 const STRLEN len = GvNAMELEN(dstr);
4448                 HV *old_stash = NULL;
4449                 bool reset_isa = FALSE;
4450                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4451                  || (len == 1 && name[0] == ':')) {
4452                     /* Set aside the old stash, so we can reset isa caches
4453                        on its subclasses. */
4454                     if((old_stash = GvHV(dstr))) {
4455                         /* Make sure we do not lose it early. */
4456                         SvREFCNT_inc_simple_void_NN(
4457                          sv_2mortal((SV *)old_stash)
4458                         );
4459                     }
4460                     reset_isa = TRUE;
4461                 }
4462
4463                 if (GvGP(dstr)) {
4464                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4465                     gp_free(MUTABLE_GV(dstr));
4466                 }
4467                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4468
4469                 if (reset_isa) {
4470                     HV * const stash = GvHV(dstr);
4471                     if(
4472                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4473                     )
4474                         mro_package_moved(
4475                          stash, old_stash,
4476                          (GV *)dstr, 0
4477                         );
4478                 }
4479             }
4480         }
4481     }
4482     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4483           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4484         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4485     }
4486     else if (sflags & SVp_POK) {
4487         const STRLEN cur = SvCUR(sstr);
4488         const STRLEN len = SvLEN(sstr);
4489
4490         /*
4491          * We have three basic ways to copy the string:
4492          *
4493          *  1. Swipe
4494          *  2. Copy-on-write
4495          *  3. Actual copy
4496          * 
4497          * Which we choose is based on various factors.  The following
4498          * things are listed in order of speed, fastest to slowest:
4499          *  - Swipe
4500          *  - Copying a short string
4501          *  - Copy-on-write bookkeeping
4502          *  - malloc
4503          *  - Copying a long string
4504          * 
4505          * We swipe the string (steal the string buffer) if the SV on the
4506          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4507          * big win on long strings.  It should be a win on short strings if
4508          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4509          * slow things down, as SvPVX_const(sstr) would have been freed
4510          * soon anyway.
4511          * 
4512          * We also steal the buffer from a PADTMP (operator target) if it
4513          * is â€˜long enough’.  For short strings, a swipe does not help
4514          * here, as it causes more malloc calls the next time the target
4515          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4516          * be allocated it is still not worth swiping PADTMPs for short
4517          * strings, as the savings here are small.
4518          * 
4519          * If swiping is not an option, then we see whether it is
4520          * worth using copy-on-write.  If the lhs already has a buf-
4521          * fer big enough and the string is short, we skip it and fall back
4522          * to method 3, since memcpy is faster for short strings than the
4523          * later bookkeeping overhead that copy-on-write entails.
4524
4525          * If the rhs is not a copy-on-write string yet, then we also
4526          * consider whether the buffer is too large relative to the string
4527          * it holds.  Some operations such as readline allocate a large
4528          * buffer in the expectation of reusing it.  But turning such into
4529          * a COW buffer is counter-productive because it increases memory
4530          * usage by making readline allocate a new large buffer the sec-
4531          * ond time round.  So, if the buffer is too large, again, we use
4532          * method 3 (copy).
4533          * 
4534          * Finally, if there is no buffer on the left, or the buffer is too 
4535          * small, then we use copy-on-write and make both SVs share the
4536          * string buffer.
4537          *
4538          */
4539
4540         /* Whichever path we take through the next code, we want this true,
4541            and doing it now facilitates the COW check.  */
4542         (void)SvPOK_only(dstr);
4543
4544         if (
4545                  (              /* Either ... */
4546                                 /* slated for free anyway (and not COW)? */
4547                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4548                                 /* or a swipable TARG */
4549                  || ((sflags &
4550                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4551                        == SVs_PADTMP
4552                                 /* whose buffer is worth stealing */
4553                      && CHECK_COWBUF_THRESHOLD(cur,len)
4554                     )
4555                  ) &&
4556                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4557                  (!(flags & SV_NOSTEAL)) &&
4558                                         /* and we're allowed to steal temps */
4559                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4560                  len)             /* and really is a string */
4561         {       /* Passes the swipe test.  */
4562             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4563                 SvPV_free(dstr);
4564             SvPV_set(dstr, SvPVX_mutable(sstr));
4565             SvLEN_set(dstr, SvLEN(sstr));
4566             SvCUR_set(dstr, SvCUR(sstr));
4567
4568             SvTEMP_off(dstr);
4569             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4570             SvPV_set(sstr, NULL);
4571             SvLEN_set(sstr, 0);
4572             SvCUR_set(sstr, 0);
4573             SvTEMP_off(sstr);
4574         }
4575         else if (flags & SV_COW_SHARED_HASH_KEYS
4576               &&
4577 #ifdef PERL_COPY_ON_WRITE
4578                  (sflags & SVf_IsCOW
4579                    ? (!len ||
4580                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4581                           /* If this is a regular (non-hek) COW, only so
4582                              many COW "copies" are possible. */
4583                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4584                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4585                      && !(SvFLAGS(dstr) & SVf_BREAK)
4586                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4587                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4588                     ))
4589 #else
4590                  sflags & SVf_IsCOW
4591               && !(SvFLAGS(dstr) & SVf_BREAK)
4592 #endif
4593             ) {
4594             /* Either it's a shared hash key, or it's suitable for
4595                copy-on-write.  */
4596 #ifdef DEBUGGING
4597             if (DEBUG_C_TEST) {
4598                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4599                 sv_dump(sstr);
4600                 sv_dump(dstr);
4601             }
4602 #endif
4603 #ifdef PERL_ANY_COW
4604             if (!(sflags & SVf_IsCOW)) {
4605                     SvIsCOW_on(sstr);
4606                     CowREFCNT(sstr) = 0;
4607             }
4608 #endif
4609             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4610                 SvPV_free(dstr);
4611             }
4612
4613 #ifdef PERL_ANY_COW
4614             if (len) {
4615                     if (sflags & SVf_IsCOW) {
4616                         sv_buf_to_rw(sstr);
4617                     }
4618                     CowREFCNT(sstr)++;
4619                     SvPV_set(dstr, SvPVX_mutable(sstr));
4620                     sv_buf_to_ro(sstr);
4621             } else
4622 #endif
4623             {
4624                     /* SvIsCOW_shared_hash */
4625                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4626                                           "Copy on write: Sharing hash\n"));
4627
4628                     assert (SvTYPE(dstr) >= SVt_PV);
4629                     SvPV_set(dstr,
4630                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4631             }
4632             SvLEN_set(dstr, len);
4633             SvCUR_set(dstr, cur);
4634             SvIsCOW_on(dstr);
4635         } else {
4636             /* Failed the swipe test, and we cannot do copy-on-write either.
4637                Have to copy the string.  */
4638             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4639             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4640             SvCUR_set(dstr, cur);
4641             *SvEND(dstr) = '\0';
4642         }
4643         if (sflags & SVp_NOK) {
4644             SvNV_set(dstr, SvNVX(sstr));
4645         }
4646         if (sflags & SVp_IOK) {
4647             SvIV_set(dstr, SvIVX(sstr));
4648             if (sflags & SVf_IVisUV)
4649                 SvIsUV_on(dstr);
4650         }
4651         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4652         {
4653             const MAGIC * const smg = SvVSTRING_mg(sstr);
4654             if (smg) {
4655                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4656                          smg->mg_ptr, smg->mg_len);
4657                 SvRMAGICAL_on(dstr);
4658             }
4659         }
4660     }
4661     else if (sflags & (SVp_IOK|SVp_NOK)) {
4662         (void)SvOK_off(dstr);
4663         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4664         if (sflags & SVp_IOK) {
4665             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4666             SvIV_set(dstr, SvIVX(sstr));
4667         }
4668         if (sflags & SVp_NOK) {
4669             SvNV_set(dstr, SvNVX(sstr));
4670         }
4671     }
4672     else {
4673         if (isGV_with_GP(sstr)) {
4674             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4675         }
4676         else
4677             (void)SvOK_off(dstr);
4678     }
4679     if (SvTAINTED(sstr))
4680         SvTAINT(dstr);
4681 }
4682
4683
4684 /*
4685 =for apidoc sv_set_undef
4686
4687 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4688 Doesn't handle set magic.
4689
4690 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4691 buffer, unlike C<undef $sv>.
4692
4693 Introduced in perl 5.25.12.
4694
4695 =cut
4696 */
4697
4698 void
4699 Perl_sv_set_undef(pTHX_ SV *sv)
4700 {
4701     U32 type = SvTYPE(sv);
4702
4703     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4704
4705     /* shortcut, NULL, IV, RV */
4706
4707     if (type <= SVt_IV) {
4708         assert(!SvGMAGICAL(sv));
4709         if (SvREADONLY(sv)) {
4710             /* does undeffing PL_sv_undef count as modifying a read-only
4711              * variable? Some XS code does this */
4712             if (sv == &PL_sv_undef)
4713                 return;
4714             Perl_croak_no_modify();
4715         }
4716
4717         if (SvROK(sv)) {
4718             if (SvWEAKREF(sv))
4719                 sv_unref_flags(sv, 0);
4720             else {
4721                 SV *rv = SvRV(sv);
4722                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4723                 SvREFCNT_dec_NN(rv);
4724                 return;
4725             }
4726         }
4727         SvFLAGS(sv) = type; /* quickly turn off all flags */
4728         return;
4729     }
4730
4731     if (SvIS_FREED(sv))
4732         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4733             (void *)sv);
4734
4735     SV_CHECK_THINKFIRST_COW_DROP(sv);
4736
4737     if (isGV_with_GP(sv))
4738         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4739                        "Undefined value assigned to typeglob");
4740     else
4741         SvOK_off(sv);
4742 }
4743
4744
4745
4746 /*
4747 =for apidoc sv_setsv_mg
4748
4749 Like C<sv_setsv>, but also handles 'set' magic.
4750
4751 =cut
4752 */
4753
4754 void
4755 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4756 {
4757     PERL_ARGS_ASSERT_SV_SETSV_MG;
4758
4759     sv_setsv(dstr,sstr);
4760     SvSETMAGIC(dstr);
4761 }
4762
4763 #ifdef PERL_ANY_COW
4764 #  define SVt_COW SVt_PV
4765 SV *
4766 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4767 {
4768     STRLEN cur = SvCUR(sstr);
4769     STRLEN len = SvLEN(sstr);
4770     char *new_pv;
4771 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4772     const bool already = cBOOL(SvIsCOW(sstr));
4773 #endif
4774
4775     PERL_ARGS_ASSERT_SV_SETSV_COW;
4776 #ifdef DEBUGGING
4777     if (DEBUG_C_TEST) {
4778         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4779                       (void*)sstr, (void*)dstr);
4780         sv_dump(sstr);
4781         if (dstr)
4782                     sv_dump(dstr);
4783     }
4784 #endif
4785     if (dstr) {
4786         if (SvTHINKFIRST(dstr))
4787             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4788         else if (SvPVX_const(dstr))
4789             Safefree(SvPVX_mutable(dstr));
4790     }
4791     else
4792         new_SV(dstr);
4793     SvUPGRADE(dstr, SVt_COW);
4794
4795     assert (SvPOK(sstr));
4796     assert (SvPOKp(sstr));
4797
4798     if (SvIsCOW(sstr)) {
4799
4800         if (SvLEN(sstr) == 0) {
4801             /* source is a COW shared hash key.  */
4802             DEBUG_C(PerlIO_printf(Perl_debug_log,
4803                                   "Fast copy on write: Sharing hash\n"));
4804             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4805             goto common_exit;
4806         }
4807         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4808         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4809     } else {
4810         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4811         SvUPGRADE(sstr, SVt_COW);
4812         SvIsCOW_on(sstr);
4813         DEBUG_C(PerlIO_printf(Perl_debug_log,
4814                               "Fast copy on write: Converting sstr to COW\n"));
4815         CowREFCNT(sstr) = 0;    
4816     }
4817 #  ifdef PERL_DEBUG_READONLY_COW
4818     if (already) sv_buf_to_rw(sstr);
4819 #  endif
4820     CowREFCNT(sstr)++;  
4821     new_pv = SvPVX_mutable(sstr);
4822     sv_buf_to_ro(sstr);
4823
4824   common_exit:
4825     SvPV_set(dstr, new_pv);
4826     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4827     if (SvUTF8(sstr))
4828         SvUTF8_on(dstr);
4829     SvLEN_set(dstr, len);
4830     SvCUR_set(dstr, cur);
4831 #ifdef DEBUGGING
4832     if (DEBUG_C_TEST)
4833                 sv_dump(dstr);
4834 #endif
4835     return dstr;
4836 }
4837 #endif
4838
4839 /*
4840 =for apidoc sv_setpv_bufsize
4841
4842 Sets the SV to be a string of cur bytes length, with at least
4843 len bytes available. Ensures that there is a null byte at SvEND.
4844 Returns a char * pointer to the SvPV buffer.
4845
4846 =cut
4847 */
4848
4849 char *
4850 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4851 {
4852     char *pv;
4853
4854     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4855
4856     SV_CHECK_THINKFIRST_COW_DROP(sv);
4857     SvUPGRADE(sv, SVt_PV);
4858     pv = SvGROW(sv, len + 1);
4859     SvCUR_set(sv, cur);
4860     *(SvEND(sv))= '\0';
4861     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4862
4863     SvTAINT(sv);
4864     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4865     return pv;
4866 }
4867
4868 /*
4869 =for apidoc sv_setpvn
4870
4871 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4872 The C<len> parameter indicates the number of
4873 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4874 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4875
4876 =cut
4877 */
4878
4879 void
4880 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4881 {
4882     char *dptr;
4883
4884     PERL_ARGS_ASSERT_SV_SETPVN;
4885
4886     SV_CHECK_THINKFIRST_COW_DROP(sv);
4887     if (isGV_with_GP(sv))
4888         Perl_croak_no_modify();
4889     if (!ptr) {
4890         (void)SvOK_off(sv);
4891         return;
4892     }
4893     else {
4894         /* len is STRLEN which is unsigned, need to copy to signed */
4895         const IV iv = len;
4896         if (iv < 0)
4897             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4898                        IVdf, iv);
4899     }
4900     SvUPGRADE(sv, SVt_PV);
4901
4902     dptr = SvGROW(sv, len + 1);
4903     Move(ptr,dptr,len,char);
4904     dptr[len] = '\0';
4905     SvCUR_set(sv, len);
4906     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4907     SvTAINT(sv);
4908     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4909 }
4910
4911 /*
4912 =for apidoc sv_setpvn_mg
4913
4914 Like C<sv_setpvn>, but also handles 'set' magic.
4915
4916 =cut
4917 */
4918
4919 void
4920 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4921 {
4922     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4923
4924     sv_setpvn(sv,ptr,len);
4925     SvSETMAGIC(sv);
4926 }
4927
4928 /*
4929 =for apidoc sv_setpv
4930
4931 Copies a string into an SV.  The string must be terminated with a C<NUL>
4932 character, and not contain embeded C<NUL>'s.
4933 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4934
4935 =cut
4936 */
4937
4938 void
4939 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4940 {
4941     STRLEN len;
4942
4943     PERL_ARGS_ASSERT_SV_SETPV;
4944
4945     SV_CHECK_THINKFIRST_COW_DROP(sv);
4946     if (!ptr) {
4947         (void)SvOK_off(sv);
4948         return;
4949     }
4950     len = strlen(ptr);
4951     SvUPGRADE(sv, SVt_PV);
4952
4953     SvGROW(sv, len + 1);
4954     Move(ptr,SvPVX(sv),len+1,char);
4955     SvCUR_set(sv, len);
4956     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4957     SvTAINT(sv);
4958     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4959 }
4960
4961 /*
4962 =for apidoc sv_setpv_mg
4963
4964 Like C<sv_setpv>, but also handles 'set' magic.
4965
4966 =cut
4967 */
4968
4969 void
4970 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4971 {
4972     PERL_ARGS_ASSERT_SV_SETPV_MG;
4973
4974     sv_setpv(sv,ptr);
4975     SvSETMAGIC(sv);
4976 }
4977
4978 void
4979 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4980 {
4981     PERL_ARGS_ASSERT_SV_SETHEK;
4982
4983     if (!hek) {
4984         return;
4985     }
4986
4987     if (HEK_LEN(hek) == HEf_SVKEY) {
4988         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4989         return;
4990     } else {
4991         const int flags = HEK_FLAGS(hek);
4992         if (flags & HVhek_WASUTF8) {
4993             STRLEN utf8_len = HEK_LEN(hek);
4994             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4995             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4996             SvUTF8_on(sv);
4997             return;
4998         } else if (flags & HVhek_UNSHARED) {
4999             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5000             if (HEK_UTF8(hek))
5001                 SvUTF8_on(sv);
5002             else SvUTF8_off(sv);
5003             return;
5004         }
5005         {
5006             SV_CHECK_THINKFIRST_COW_DROP(sv);
5007             SvUPGRADE(sv, SVt_PV);
5008             SvPV_free(sv);
5009             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5010             SvCUR_set(sv, HEK_LEN(hek));
5011             SvLEN_set(sv, 0);
5012             SvIsCOW_on(sv);
5013             SvPOK_on(sv);
5014             if (HEK_UTF8(hek))
5015                 SvUTF8_on(sv);
5016             else SvUTF8_off(sv);
5017             return;
5018         }
5019     }
5020 }
5021
5022
5023 /*
5024 =for apidoc sv_usepvn_flags
5025
5026 Tells an SV to use C<ptr> to find its string value.  Normally the
5027 string is stored inside the SV, but sv_usepvn allows the SV to use an
5028 outside string.  C<ptr> should point to memory that was allocated
5029 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5030 the start of a C<Newx>-ed block of memory, and not a pointer to the
5031 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5032 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5033 string length, C<len>, must be supplied.  By default this function
5034 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5035 so that pointer should not be freed or used by the programmer after
5036 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5037 that pointer (e.g. ptr + 1) be used.
5038
5039 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5040 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5041 and the realloc
5042 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5043 C<len>, and already meets the requirements for storing in C<SvPVX>).
5044
5045 =cut
5046 */
5047
5048 void
5049 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5050 {
5051     STRLEN allocate;
5052
5053     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5054
5055     SV_CHECK_THINKFIRST_COW_DROP(sv);
5056     SvUPGRADE(sv, SVt_PV);
5057     if (!ptr) {
5058         (void)SvOK_off(sv);
5059         if (flags & SV_SMAGIC)
5060             SvSETMAGIC(sv);
5061         return;
5062     }
5063     if (SvPVX_const(sv))
5064         SvPV_free(sv);
5065
5066 #ifdef DEBUGGING
5067     if (flags & SV_HAS_TRAILING_NUL)
5068         assert(ptr[len] == '\0');
5069 #endif
5070
5071     allocate = (flags & SV_HAS_TRAILING_NUL)
5072         ? len + 1 :
5073 #ifdef Perl_safesysmalloc_size
5074         len + 1;
5075 #else 
5076         PERL_STRLEN_ROUNDUP(len + 1);
5077 #endif
5078     if (flags & SV_HAS_TRAILING_NUL) {
5079         /* It's long enough - do nothing.
5080            Specifically Perl_newCONSTSUB is relying on this.  */
5081     } else {
5082 #ifdef DEBUGGING
5083         /* Force a move to shake out bugs in callers.  */
5084         char *new_ptr = (char*)safemalloc(allocate);
5085         Copy(ptr, new_ptr, len, char);
5086         PoisonFree(ptr,len,char);
5087         Safefree(ptr);
5088         ptr = new_ptr;
5089 #else
5090         ptr = (char*) saferealloc (ptr, allocate);
5091 #endif
5092     }
5093 #ifdef Perl_safesysmalloc_size
5094     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5095 #else
5096     SvLEN_set(sv, allocate);
5097 #endif
5098     SvCUR_set(sv, len);
5099     SvPV_set(sv, ptr);
5100     if (!(flags & SV_HAS_TRAILING_NUL)) {
5101         ptr[len] = '\0';
5102     }
5103     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5104     SvTAINT(sv);
5105     if (flags & SV_SMAGIC)
5106         SvSETMAGIC(sv);
5107 }
5108
5109
5110 static void
5111 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5112 {
5113     assert(SvIsCOW(sv));
5114     {
5115 #ifdef PERL_ANY_COW
5116         const char * const pvx = SvPVX_const(sv);
5117         const STRLEN len = SvLEN(sv);
5118         const STRLEN cur = SvCUR(sv);
5119
5120 #ifdef DEBUGGING
5121         if (DEBUG_C_TEST) {
5122                 PerlIO_printf(Perl_debug_log,
5123                               "Copy on write: Force normal %ld\n",
5124                               (long) flags);
5125                 sv_dump(sv);
5126         }
5127 #endif
5128         SvIsCOW_off(sv);
5129 # ifdef PERL_COPY_ON_WRITE
5130         if (len) {
5131             /* Must do this first, since the CowREFCNT uses SvPVX and
5132             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5133             the only owner left of the buffer. */
5134             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5135             {
5136                 U8 cowrefcnt = CowREFCNT(sv);
5137                 if(cowrefcnt != 0) {
5138                     cowrefcnt--;
5139                     CowREFCNT(sv) = cowrefcnt;
5140                     sv_buf_to_ro(sv);
5141                     goto copy_over;
5142                 }
5143             }
5144             /* Else we are the only owner of the buffer. */
5145         }
5146         else
5147 # endif
5148         {
5149             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5150             copy_over:
5151             SvPV_set(sv, NULL);
5152             SvCUR_set(sv, 0);
5153             SvLEN_set(sv, 0);
5154             if (flags & SV_COW_DROP_PV) {
5155                 /* OK, so we don't need to copy our buffer.  */
5156                 SvPOK_off(sv);
5157             } else {
5158                 SvGROW(sv, cur + 1);
5159                 Move(pvx,SvPVX(sv),cur,char);
5160                 SvCUR_set(sv, cur);
5161                 *SvEND(sv) = '\0';
5162             }
5163             if (len) {
5164             } else {
5165                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5166             }
5167 #ifdef DEBUGGING
5168             if (DEBUG_C_TEST)
5169                 sv_dump(sv);
5170 #endif
5171         }
5172 #else
5173             const char * const pvx = SvPVX_const(sv);
5174             const STRLEN len = SvCUR(sv);
5175             SvIsCOW_off(sv);
5176             SvPV_set(sv, NULL);
5177             SvLEN_set(sv, 0);
5178             if (flags & SV_COW_DROP_PV) {
5179                 /* OK, so we don't need to copy our buffer.  */
5180                 SvPOK_off(sv);
5181             } else {
5182                 SvGROW(sv, len + 1);
5183                 Move(pvx,SvPVX(sv),len,char);
5184                 *SvEND(sv) = '\0';
5185             }
5186             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5187 #endif
5188     }
5189 }
5190
5191
5192 /*
5193 =for apidoc sv_force_normal_flags
5194
5195 Undo various types of fakery on an SV, where fakery means
5196 "more than" a string: if the PV is a shared string, make
5197 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5198 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5199 we do the copy, and is also used locally; if this is a
5200 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5201 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5202 C<SvPOK_off> rather than making a copy.  (Used where this
5203 scalar is about to be set to some other value.)  In addition,
5204 the C<flags> parameter gets passed to C<sv_unref_flags()>
5205 when unreffing.  C<sv_force_normal> calls this function
5206 with flags set to 0.
5207
5208 This function is expected to be used to signal to perl that this SV is
5209 about to be written to, and any extra book-keeping needs to be taken care
5210 of.  Hence, it croaks on read-only values.
5211
5212 =cut
5213 */
5214
5215 void
5216 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5217 {
5218     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5219
5220     if (SvREADONLY(sv))
5221         Perl_croak_no_modify();
5222     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5223         S_sv_uncow(aTHX_ sv, flags);
5224     if (SvROK(sv))
5225         sv_unref_flags(sv, flags);
5226     else if (SvFAKE(sv) && isGV_with_GP(sv))
5227         sv_unglob(sv, flags);
5228     else if (SvFAKE(sv) && isREGEXP(sv)) {
5229         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5230            to sv_unglob. We only need it here, so inline it.  */
5231         const bool islv = SvTYPE(sv) == SVt_PVLV;
5232         const svtype new_type =
5233           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5234         SV *const temp = newSV_type(new_type);
5235         regexp *old_rx_body;
5236
5237         if (new_type == SVt_PVMG) {
5238             SvMAGIC_set(temp, SvMAGIC(sv));
5239             SvMAGIC_set(sv, NULL);
5240             SvSTASH_set(temp, SvSTASH(sv));
5241             SvSTASH_set(sv, NULL);
5242         }
5243         if (!islv)
5244             SvCUR_set(temp, SvCUR(sv));
5245         /* Remember that SvPVX is in the head, not the body. */
5246         assert(ReANY((REGEXP *)sv)->mother_re);
5247
5248         if (islv) {
5249             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5250              * whose xpvlenu_rx field points to the regex body */
5251             XPV *xpv = (XPV*)(SvANY(sv));
5252             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5253             xpv->xpv_len_u.xpvlenu_rx = NULL;
5254         }
5255         else
5256             old_rx_body = ReANY((REGEXP *)sv);
5257
5258         /* Their buffer is already owned by someone else. */
5259         if (flags & SV_COW_DROP_PV) {
5260             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5261                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5262                a union with xpvlenu_rx) */
5263             assert(!SvLEN(islv ? sv : temp));
5264             sv->sv_u.svu_pv = 0;
5265         }
5266         else {
5267             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5268             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5269             SvPOK_on(sv);
5270         }
5271
5272         /* Now swap the rest of the bodies. */
5273
5274         SvFAKE_off(sv);
5275         if (!islv) {
5276             SvFLAGS(sv) &= ~SVTYPEMASK;
5277             SvFLAGS(sv) |= new_type;
5278             SvANY(sv) = SvANY(temp);
5279         }
5280
5281         SvFLAGS(temp) &= ~(SVTYPEMASK);
5282         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5283         SvANY(temp) = old_rx_body;
5284
5285         SvREFCNT_dec_NN(temp);
5286     }
5287     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5288 }
5289
5290 /*
5291 =for apidoc sv_chop
5292
5293 Efficient removal of characters from the beginning of the string buffer.
5294 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5295 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5296 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5297 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5298
5299 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5300 refer to the same chunk of data.
5301
5302 The unfortunate similarity of this function's name to that of Perl's C<chop>
5303 operator is strictly coincidental.  This function works from the left;
5304 C<chop> works from the right.
5305
5306 =cut
5307 */
5308
5309 void
5310 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5311 {
5312     STRLEN delta;
5313     STRLEN old_delta;
5314     U8 *p;
5315 #ifdef DEBUGGING
5316     const U8 *evacp;
5317     STRLEN evacn;
5318 #endif
5319     STRLEN max_delta;
5320
5321     PERL_ARGS_ASSERT_SV_CHOP;
5322
5323     if (!ptr || !SvPOKp(sv))
5324         return;
5325     delta = ptr - SvPVX_const(sv);
5326     if (!delta) {
5327         /* Nothing to do.  */
5328         return;
5329     }
5330     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5331     if (delta > max_delta)
5332         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5333                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5334     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5335     SV_CHECK_THINKFIRST(sv);
5336     SvPOK_only_UTF8(sv);
5337
5338     if (!SvOOK(sv)) {
5339         if (!SvLEN(sv)) { /* make copy of shared string */
5340             const char *pvx = SvPVX_const(sv);
5341             const STRLEN len = SvCUR(sv);
5342             SvGROW(sv, len + 1);
5343             Move(pvx,SvPVX(sv),len,char);
5344             *SvEND(sv) = '\0';
5345         }
5346         SvOOK_on(sv);
5347         old_delta = 0;
5348     } else {
5349         SvOOK_offset(sv, old_delta);
5350     }
5351     SvLEN_set(sv, SvLEN(sv) - delta);
5352     SvCUR_set(sv, SvCUR(sv) - delta);
5353     SvPV_set(sv, SvPVX(sv) + delta);
5354
5355     p = (U8 *)SvPVX_const(sv);
5356
5357 #ifdef DEBUGGING
5358     /* how many bytes were evacuated?  we will fill them with sentinel
5359        bytes, except for the part holding the new offset of course. */
5360     evacn = delta;
5361     if (old_delta)
5362         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5363     assert(evacn);
5364     assert(evacn <= delta + old_delta);
5365     evacp = p - evacn;
5366 #endif
5367
5368     /* This sets 'delta' to the accumulated value of all deltas so far */
5369     delta += old_delta;
5370     assert(delta);
5371
5372     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5373      * the string; otherwise store a 0 byte there and store 'delta' just prior
5374      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5375      * portion of the chopped part of the string */
5376     if (delta < 0x100) {
5377         *--p = (U8) delta;
5378     } else {
5379         *--p = 0;
5380         p -= sizeof(STRLEN);
5381         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5382     }
5383
5384 #ifdef DEBUGGING
5385     /* Fill the preceding buffer with sentinals to verify that no-one is
5386        using it.  */
5387     while (p > evacp) {
5388         --p;
5389         *p = (U8)PTR2UV(p);
5390     }
5391 #endif
5392 }
5393
5394 /*
5395 =for apidoc sv_catpvn
5396
5397 Concatenates the string onto the end of the string which is in the SV.
5398 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5399 status set, then the bytes appended should be valid UTF-8.
5400 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5401
5402 =for apidoc sv_catpvn_flags
5403
5404 Concatenates the string onto the end of the string which is in the SV.  The
5405 C<len> indicates number of bytes to copy.
5406
5407 By default, the string appended is assumed to be valid UTF-8 if the SV has
5408 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5409 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5410 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5411 string appended will be upgraded to UTF-8 if necessary.
5412
5413 If C<flags> has the C<SV_SMAGIC> bit set, will
5414 C<mg_set> on C<dsv> afterwards if appropriate.
5415 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5416 in terms of this function.
5417
5418 =cut
5419 */
5420
5421 void
5422 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5423 {
5424     STRLEN dlen;
5425     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5426
5427     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5428     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5429
5430     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5431       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5432          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5433          dlen = SvCUR(dsv);
5434       }
5435       else SvGROW(dsv, dlen + slen + 3);
5436       if (sstr == dstr)
5437         sstr = SvPVX_const(dsv);
5438       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5439       SvCUR_set(dsv, SvCUR(dsv) + slen);
5440     }
5441     else {
5442         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5443         const char * const send = sstr + slen;
5444         U8 *d;
5445
5446         /* Something this code does not account for, which I think is
5447            impossible; it would require the same pv to be treated as
5448            bytes *and* utf8, which would indicate a bug elsewhere. */
5449         assert(sstr != dstr);
5450
5451         SvGROW(dsv, dlen + slen * 2 + 3);
5452         d = (U8 *)SvPVX(dsv) + dlen;
5453
5454         while (sstr < send) {
5455             append_utf8_from_native_byte(*sstr, &d);
5456             sstr++;
5457         }
5458         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5459     }
5460     *SvEND(dsv) = '\0';
5461     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5462     SvTAINT(dsv);
5463     if (flags & SV_SMAGIC)
5464         SvSETMAGIC(dsv);
5465 }
5466
5467 /*
5468 =for apidoc sv_catsv
5469
5470 Concatenates the string from SV C<ssv> onto the end of the string in SV
5471 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5472 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5473 and C<L</sv_catsv_nomg>>.
5474
5475 =for apidoc sv_catsv_flags
5476
5477 Concatenates the string from SV C<ssv> onto the end of the string in SV
5478 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5479 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5480 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5481 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5482 and C<sv_catsv_mg> are implemented in terms of this function.
5483
5484 =cut */
5485
5486 void
5487 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5488 {
5489     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5490
5491     if (ssv) {
5492         STRLEN slen;
5493         const char *spv = SvPV_flags_const(ssv, slen, flags);
5494         if (flags & SV_GMAGIC)
5495                 SvGETMAGIC(dsv);
5496         sv_catpvn_flags(dsv, spv, slen,
5497                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5498         if (flags & SV_SMAGIC)
5499                 SvSETMAGIC(dsv);
5500     }
5501 }
5502
5503 /*
5504 =for apidoc sv_catpv
5505
5506 Concatenates the C<NUL>-terminated string onto the end of the string which is
5507 in the SV.
5508 If the SV has the UTF-8 status set, then the bytes appended should be
5509 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5510 C<L</sv_catpv_mg>>.
5511
5512 =cut */
5513
5514 void
5515 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5516 {
5517     STRLEN len;
5518     STRLEN tlen;
5519     char *junk;
5520
5521     PERL_ARGS_ASSERT_SV_CATPV;
5522
5523     if (!ptr)
5524         return;
5525     junk = SvPV_force(sv, tlen);
5526     len = strlen(ptr);
5527     SvGROW(sv, tlen + len + 1);
5528     if (ptr == junk)
5529         ptr = SvPVX_const(sv);
5530     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5531     SvCUR_set(sv, SvCUR(sv) + len);
5532     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5533     SvTAINT(sv);
5534 }
5535
5536 /*
5537 =for apidoc sv_catpv_flags
5538
5539 Concatenates the C<NUL>-terminated string onto the end of the string which is
5540 in the SV.
5541 If the SV has the UTF-8 status set, then the bytes appended should
5542 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5543 on the modified SV if appropriate.
5544
5545 =cut
5546 */
5547
5548 void
5549 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5550 {
5551     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5552     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5553 }
5554
5555 /*
5556 =for apidoc sv_catpv_mg
5557
5558 Like C<sv_catpv>, but also handles 'set' magic.
5559
5560 =cut
5561 */
5562
5563 void
5564 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5565 {
5566     PERL_ARGS_ASSERT_SV_CATPV_MG;
5567
5568     sv_catpv(sv,ptr);
5569     SvSETMAGIC(sv);
5570 }
5571
5572 /*
5573 =for apidoc newSV
5574
5575 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5576 bytes of preallocated string space the SV should have.  An extra byte for a
5577 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5578 space is allocated.)  The reference count for the new SV is set to 1.
5579
5580 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5581 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5582 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5583 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5584 modules supporting older perls.
5585
5586 =cut
5587 */
5588
5589 SV *
5590 Perl_newSV(pTHX_ const STRLEN len)
5591 {
5592     SV *sv;
5593
5594     new_SV(sv);
5595     if (len) {
5596         sv_grow(sv, len + 1);
5597     }
5598     return sv;
5599 }
5600 /*
5601 =for apidoc sv_magicext
5602
5603 Adds magic to an SV, upgrading it if necessary.  Applies the
5604 supplied C<vtable> and returns a pointer to the magic added.
5605
5606 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5607 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5608 one instance of the same C<how>.
5609
5610 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5611 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5612 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5613 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5614
5615 (This is now used as a subroutine by C<sv_magic>.)
5616
5617 =cut
5618 */
5619 MAGIC * 
5620 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5621                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5622 {
5623     MAGIC* mg;
5624
5625     PERL_ARGS_ASSERT_SV_MAGICEXT;
5626
5627     SvUPGRADE(sv, SVt_PVMG);
5628     Newxz(mg, 1, MAGIC);
5629     mg->mg_moremagic = SvMAGIC(sv);
5630     SvMAGIC_set(sv, mg);
5631
5632     /* Sometimes a magic contains a reference loop, where the sv and
5633        object refer to each other.  To prevent a reference loop that
5634        would prevent such objects being freed, we look for such loops
5635        and if we find one we avoid incrementing the object refcount.
5636
5637        Note we cannot do this to avoid self-tie loops as intervening RV must
5638        have its REFCNT incremented to keep it in existence.
5639
5640     */
5641     if (!obj || obj == sv ||
5642         how == PERL_MAGIC_arylen ||
5643         how == PERL_MAGIC_regdata ||
5644         how == PERL_MAGIC_regdatum ||
5645         how == PERL_MAGIC_symtab ||
5646         (SvTYPE(obj) == SVt_PVGV &&
5647             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5648              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5649              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5650     {
5651         mg->mg_obj = obj;
5652     }
5653     else {
5654         mg->mg_obj = SvREFCNT_inc_simple(obj);
5655         mg->mg_flags |= MGf_REFCOUNTED;
5656     }
5657
5658     /* Normal self-ties simply pass a null object, and instead of
5659        using mg_obj directly, use the SvTIED_obj macro to produce a
5660        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5661        with an RV obj pointing to the glob containing the PVIO.  In
5662        this case, to avoid a reference loop, we need to weaken the
5663        reference.
5664     */
5665
5666     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5667         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5668     {
5669       sv_rvweaken(obj);
5670     }
5671
5672     mg->mg_type = how;
5673     mg->mg_len = namlen;
5674     if (name) {
5675         if (namlen > 0)
5676             mg->mg_ptr = savepvn(name, namlen);
5677         else if (namlen == HEf_SVKEY) {
5678             /* Yes, this is casting away const. This is only for the case of
5679                HEf_SVKEY. I think we need to document this aberation of the
5680                constness of the API, rather than making name non-const, as
5681                that change propagating outwards a long way.  */
5682             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5683         } else
5684             mg->mg_ptr = (char *) name;
5685     }
5686     mg->mg_virtual = (MGVTBL *) vtable;
5687
5688     mg_magical(sv);
5689     return mg;
5690 }
5691
5692 MAGIC *
5693 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5694 {
5695     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5696     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5697         /* This sv is only a delegate.  //g magic must be attached to
5698            its target. */
5699         vivify_defelem(sv);
5700         sv = LvTARG(sv);
5701     }
5702     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5703                        &PL_vtbl_mglob, 0, 0);
5704 }
5705
5706 /*
5707 =for apidoc sv_magic
5708
5709 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5710 necessary, then adds a new magic item of type C<how> to the head of the
5711 magic list.
5712
5713 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5714 handling of the C<name> and C<namlen> arguments.
5715
5716 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5717 to add more than one instance of the same C<how>.
5718
5719 =cut
5720 */
5721
5722 void
5723 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5724              const char *const name, const I32 namlen)
5725 {
5726     const MGVTBL *vtable;
5727     MAGIC* mg;
5728     unsigned int flags;
5729     unsigned int vtable_index;
5730
5731     PERL_ARGS_ASSERT_SV_MAGIC;
5732
5733     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5734         || ((flags = PL_magic_data[how]),
5735             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5736             > magic_vtable_max))
5737         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5738
5739     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5740        Useful for attaching extension internal data to perl vars.
5741        Note that multiple extensions may clash if magical scalars
5742        etc holding private data from one are passed to another. */
5743
5744     vtable = (vtable_index == magic_vtable_max)
5745         ? NULL : PL_magic_vtables + vtable_index;
5746
5747     if (SvREADONLY(sv)) {
5748         if (
5749             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5750            )
5751         {
5752             Perl_croak_no_modify();
5753         }
5754     }
5755     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5756         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5757             /* sv_magic() refuses to add a magic of the same 'how' as an
5758                existing one
5759              */
5760             if (how == PERL_MAGIC_taint)
5761                 mg->mg_len |= 1;
5762             return;
5763         }
5764     }
5765
5766     /* Force pos to be stored as characters, not bytes. */
5767     if (SvMAGICAL(sv) && DO_UTF8(sv)
5768       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5769       && mg->mg_len != -1
5770       && mg->mg_flags & MGf_BYTES) {
5771         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5772                                                SV_CONST_RETURN);
5773         mg->mg_flags &= ~MGf_BYTES;
5774     }
5775
5776     /* Rest of work is done else where */
5777     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5778
5779     switch (how) {
5780     case PERL_MAGIC_taint:
5781         mg->mg_len = 1;
5782         break;
5783     case PERL_MAGIC_ext:
5784     case PERL_MAGIC_dbfile:
5785         SvRMAGICAL_on(sv);
5786         break;
5787     }
5788 }
5789
5790 static int
5791 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5792 {
5793     MAGIC* mg;
5794     MAGIC** mgp;
5795
5796     assert(flags <= 1);
5797
5798     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5799         return 0;
5800     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5801     for (mg = *mgp; mg; mg = *mgp) {
5802         const MGVTBL* const virt = mg->mg_virtual;
5803         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5804             *mgp = mg->mg_moremagic;
5805             if (virt && virt->svt_free)
5806                 virt->svt_free(aTHX_ sv, mg);
5807             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5808                 if (mg->mg_len > 0)
5809                     Safefree(mg->mg_ptr);
5810                 else if (mg->mg_len == HEf_SVKEY)
5811                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5812                 else if (mg->mg_type == PERL_MAGIC_utf8)
5813                     Safefree(mg->mg_ptr);
5814             }
5815             if (mg->mg_flags & MGf_REFCOUNTED)
5816                 SvREFCNT_dec(mg->mg_obj);
5817             Safefree(mg);
5818         }
5819         else
5820             mgp = &mg->mg_moremagic;
5821     }
5822     if (SvMAGIC(sv)) {
5823         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5824             mg_magical(sv);     /*    else fix the flags now */
5825     }
5826     else
5827         SvMAGICAL_off(sv);
5828
5829     return 0;
5830 }
5831
5832 /*
5833 =for apidoc sv_unmagic
5834
5835 Removes all magic of type C<type> from an SV.
5836
5837 =cut
5838 */
5839
5840 int
5841 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5842 {
5843     PERL_ARGS_ASSERT_SV_UNMAGIC;
5844     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5845 }
5846
5847 /*
5848 =for apidoc sv_unmagicext
5849
5850 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5851
5852 =cut
5853 */
5854
5855 int
5856 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5857 {
5858     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5859     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5860 }
5861
5862 /*
5863 =for apidoc sv_rvweaken
5864
5865 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5866 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5867 push a back-reference to this RV onto the array of backreferences
5868 associated with that magic.  If the RV is magical, set magic will be
5869 called after the RV is cleared.  Silently ignores C<undef> and warns
5870 on already-weak references.
5871
5872 =cut
5873 */
5874
5875 SV *
5876 Perl_sv_rvweaken(pTHX_ SV *const sv)
5877 {
5878     SV *tsv;
5879
5880     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5881
5882     if (!SvOK(sv))  /* let undefs pass */
5883         return sv;
5884     if (!SvROK(sv))
5885         Perl_croak(aTHX_ "Can't weaken a nonreference");
5886     else if (SvWEAKREF(sv)) {
5887         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5888         return sv;
5889     }
5890     else if (SvREADONLY(sv)) croak_no_modify();
5891     tsv = SvRV(sv);
5892     Perl_sv_add_backref(aTHX_ tsv, sv);
5893     SvWEAKREF_on(sv);
5894     SvREFCNT_dec_NN(tsv);
5895     return sv;
5896 }
5897
5898 /*
5899 =for apidoc sv_rvunweaken
5900
5901 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5902 the backreference to this RV from the array of backreferences
5903 associated with the target SV, increment the refcount of the target.
5904 Silently ignores C<undef> and warns on non-weak references.
5905
5906 =cut
5907 */
5908
5909 SV *
5910 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5911 {
5912     SV *tsv;
5913
5914     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5915
5916     if (!SvOK(sv)) /* let undefs pass */
5917         return sv;
5918     if (!SvROK(sv))
5919         Perl_croak(aTHX_ "Can't unweaken a nonreference");
5920     else if (!SvWEAKREF(sv)) {
5921         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
5922         return sv;
5923     }
5924     else if (SvREADONLY(sv)) croak_no_modify();
5925
5926     tsv = SvRV(sv);
5927     SvWEAKREF_off(sv);
5928     SvROK_on(sv);
5929     SvREFCNT_inc_NN(tsv);
5930     Perl_sv_del_backref(aTHX_ tsv, sv);
5931     return sv;
5932 }
5933
5934 /*
5935 =for apidoc sv_get_backrefs
5936
5937 If C<sv> is the target of a weak reference then it returns the back
5938 references structure associated with the sv; otherwise return C<NULL>.
5939
5940 When returning a non-null result the type of the return is relevant. If it
5941 is an AV then the elements of the AV are the weak reference RVs which
5942 point at this item. If it is any other type then the item itself is the
5943 weak reference.
5944
5945 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5946 C<Perl_sv_kill_backrefs()>
5947
5948 =cut
5949 */
5950
5951 SV *
5952 Perl_sv_get_backrefs(SV *const sv)
5953 {
5954     SV *backrefs= NULL;
5955
5956     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5957
5958     /* find slot to store array or singleton backref */
5959
5960     if (SvTYPE(sv) == SVt_PVHV) {
5961         if (SvOOK(sv)) {
5962             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5963             backrefs = (SV *)iter->xhv_backreferences;
5964         }
5965     } else if (SvMAGICAL(sv)) {
5966         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5967         if (mg)
5968             backrefs = mg->mg_obj;
5969     }
5970     return backrefs;
5971 }
5972
5973 /* Give tsv backref magic if it hasn't already got it, then push a
5974  * back-reference to sv onto the array associated with the backref magic.
5975  *
5976  * As an optimisation, if there's only one backref and it's not an AV,
5977  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5978  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5979  * active.)
5980  */
5981
5982 /* A discussion about the backreferences array and its refcount:
5983  *
5984  * The AV holding the backreferences is pointed to either as the mg_obj of
5985  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5986  * xhv_backreferences field. The array is created with a refcount
5987  * of 2. This means that if during global destruction the array gets
5988  * picked on before its parent to have its refcount decremented by the
5989  * random zapper, it won't actually be freed, meaning it's still there for
5990  * when its parent gets freed.
5991  *
5992  * When the parent SV is freed, the extra ref is killed by
5993  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5994  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5995  *
5996  * When a single backref SV is stored directly, it is not reference
5997  * counted.
5998  */
5999
6000 void
6001 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6002 {
6003     SV **svp;
6004     AV *av = NULL;
6005     MAGIC *mg = NULL;
6006
6007     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6008
6009     /* find slot to store array or singleton backref */
6010
6011     if (SvTYPE(tsv) == SVt_PVHV) {
6012         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6013     } else {
6014         if (SvMAGICAL(tsv))
6015             mg = mg_find(tsv, PERL_MAGIC_backref);
6016         if (!mg)
6017             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6018         svp = &(mg->mg_obj);
6019     }
6020
6021     /* create or retrieve the array */
6022
6023     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6024         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6025     ) {
6026         /* create array */
6027         if (mg)
6028             mg->mg_flags |= MGf_REFCOUNTED;
6029         av = newAV();
6030         AvREAL_off(av);
6031         SvREFCNT_inc_simple_void_NN(av);
6032         /* av now has a refcnt of 2; see discussion above */
6033         av_extend(av, *svp ? 2 : 1);
6034         if (*svp) {
6035             /* move single existing backref to the array */
6036             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6037         }
6038         *svp = (SV*)av;
6039     }
6040     else {
6041         av = MUTABLE_AV(*svp);
6042         if (!av) {
6043             /* optimisation: store single backref directly in HvAUX or mg_obj */
6044             *svp = sv;
6045             return;
6046         }
6047         assert(SvTYPE(av) == SVt_PVAV);
6048         if (AvFILLp(av) >= AvMAX(av)) {
6049             av_extend(av, AvFILLp(av)+1);
6050         }
6051     }
6052     /* push new backref */
6053     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6054 }
6055
6056 /* delete a back-reference to ourselves from the backref magic associated
6057  * with the SV we point to.
6058  */
6059
6060 void
6061 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6062 {
6063     SV **svp = NULL;
6064
6065     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6066
6067     if (SvTYPE(tsv) == SVt_PVHV) {
6068         if (SvOOK(tsv))
6069             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6070     }
6071     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6072         /* It's possible for the the last (strong) reference to tsv to have
6073            become freed *before* the last thing holding a weak reference.
6074            If both survive longer than the backreferences array, then when
6075            the referent's reference count drops to 0 and it is freed, it's
6076            not able to chase the backreferences, so they aren't NULLed.
6077
6078            For example, a CV holds a weak reference to its stash. If both the
6079            CV and the stash survive longer than the backreferences array,
6080            and the CV gets picked for the SvBREAK() treatment first,
6081            *and* it turns out that the stash is only being kept alive because
6082            of an our variable in the pad of the CV, then midway during CV
6083            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6084            It ends up pointing to the freed HV. Hence it's chased in here, and
6085            if this block wasn't here, it would hit the !svp panic just below.
6086
6087            I don't believe that "better" destruction ordering is going to help
6088            here - during global destruction there's always going to be the
6089            chance that something goes out of order. We've tried to make it
6090            foolproof before, and it only resulted in evolutionary pressure on
6091            fools. Which made us look foolish for our hubris. :-(
6092         */
6093         return;
6094     }
6095     else {
6096         MAGIC *const mg
6097             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6098         svp =  mg ? &(mg->mg_obj) : NULL;
6099     }
6100
6101     if (!svp)
6102         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6103     if (!*svp) {
6104         /* It's possible that sv is being freed recursively part way through the
6105            freeing of tsv. If this happens, the backreferences array of tsv has
6106            already been freed, and so svp will be NULL. If this is the case,
6107            we should not panic. Instead, nothing needs doing, so return.  */
6108         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6109             return;
6110         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6111                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6112     }
6113
6114     if (SvTYPE(*svp) == SVt_PVAV) {
6115 #ifdef DEBUGGING
6116         int count = 1;
6117 #endif
6118         AV * const av = (AV*)*svp;
6119         SSize_t fill;
6120         assert(!SvIS_FREED(av));
6121         fill = AvFILLp(av);
6122         assert(fill > -1);
6123         svp = AvARRAY(av);
6124         /* for an SV with N weak references to it, if all those
6125          * weak refs are deleted, then sv_del_backref will be called
6126          * N times and O(N^2) compares will be done within the backref
6127          * array. To ameliorate this potential slowness, we:
6128          * 1) make sure this code is as tight as possible;
6129          * 2) when looking for SV, look for it at both the head and tail of the
6130          *    array first before searching the rest, since some create/destroy
6131          *    patterns will cause the backrefs to be freed in order.
6132          */
6133         if (*svp == sv) {
6134             AvARRAY(av)++;
6135             AvMAX(av)--;
6136         }
6137         else {
6138             SV **p = &svp[fill];
6139             SV *const topsv = *p;
6140             if (topsv != sv) {
6141 #ifdef DEBUGGING
6142                 count = 0;
6143 #endif
6144                 while (--p > svp) {
6145                     if (*p == sv) {
6146                         /* We weren't the last entry.
6147                            An unordered list has this property that you
6148                            can take the last element off the end to fill
6149                            the hole, and it's still an unordered list :-)
6150                         */
6151                         *p = topsv;
6152 #ifdef DEBUGGING
6153                         count++;
6154 #else
6155                         break; /* should only be one */
6156 #endif
6157                     }
6158                 }
6159             }
6160         }
6161         assert(count ==1);
6162         AvFILLp(av) = fill-1;
6163     }
6164     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6165         /* freed AV; skip */
6166     }
6167     else {
6168         /* optimisation: only a single backref, stored directly */
6169         if (*svp != sv)
6170             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6171                        (void*)*svp, (void*)sv);
6172         *svp = NULL;
6173     }
6174
6175 }
6176
6177 void
6178 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6179 {
6180     SV **svp;
6181     SV **last;
6182     bool is_array;
6183
6184     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6185
6186     if (!av)
6187         return;
6188
6189     /* after multiple passes through Perl_sv_clean_all() for a thingy
6190      * that has badly leaked, the backref array may have gotten freed,
6191      * since we only protect it against 1 round of cleanup */
6192     if (SvIS_FREED(av)) {
6193         if (PL_in_clean_all) /* All is fair */
6194             return;
6195         Perl_croak(aTHX_
6196                    "panic: magic_killbackrefs (freed backref AV/SV)");
6197     }
6198
6199
6200     is_array = (SvTYPE(av) == SVt_PVAV);
6201     if (is_array) {
6202         assert(!SvIS_FREED(av));
6203         svp = AvARRAY(av);
6204         if (svp)
6205             last = svp + AvFILLp(av);
6206     }
6207     else {
6208         /* optimisation: only a single backref, stored directly */
6209         svp = (SV**)&av;
6210         last = svp;
6211     }
6212
6213     if (svp) {
6214         while (svp <= last) {
6215             if (*svp) {
6216                 SV *const referrer = *svp;
6217                 if (SvWEAKREF(referrer)) {
6218                     /* XXX Should we check that it hasn't changed? */
6219                     assert(SvROK(referrer));
6220                     SvRV_set(referrer, 0);
6221                     SvOK_off(referrer);
6222                     SvWEAKREF_off(referrer);
6223                     SvSETMAGIC(referrer);
6224                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6225                            SvTYPE(referrer) == SVt_PVLV) {
6226                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6227                     /* You lookin' at me?  */
6228                     assert(GvSTASH(referrer));
6229                     assert(GvSTASH(referrer) == (const HV *)sv);
6230                     GvSTASH(referrer) = 0;
6231                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6232                            SvTYPE(referrer) == SVt_PVFM) {
6233                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6234                         /* You lookin' at me?  */
6235                         assert(CvSTASH(referrer));
6236                         assert(CvSTASH(referrer) == (const HV *)sv);
6237                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6238                     }
6239                     else {
6240                         assert(SvTYPE(sv) == SVt_PVGV);
6241                         /* You lookin' at me?  */
6242                         assert(CvGV(referrer));
6243                         assert(CvGV(referrer) == (const GV *)sv);
6244                         anonymise_cv_maybe(MUTABLE_GV(sv),
6245                                                 MUTABLE_CV(referrer));
6246                     }
6247
6248                 } else {
6249                     Perl_croak(aTHX_
6250                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6251                                (UV)SvFLAGS(referrer));
6252                 }
6253
6254                 if (is_array)
6255                     *svp = NULL;
6256             }
6257             svp++;
6258         }
6259     }
6260     if (is_array) {
6261         AvFILLp(av) = -1;
6262         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6263     }
6264     return;
6265 }
6266
6267 /*
6268 =for apidoc sv_insert
6269
6270 Inserts a string at the specified offset/length within the SV.  Similar to
6271 the Perl C<substr()> function.  Handles get magic.
6272
6273 =for apidoc sv_insert_flags
6274
6275 Same as C<sv_insert>, but the extra C<flags> are passed to the
6276 C<SvPV_force_flags> that applies to C<bigstr>.
6277
6278 =cut
6279 */
6280
6281 void
6282 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6283 {
6284     char *big;
6285     char *mid;
6286     char *midend;
6287     char *bigend;
6288     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6289     STRLEN curlen;
6290
6291     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6292
6293     SvPV_force_flags(bigstr, curlen, flags);
6294     (void)SvPOK_only_UTF8(bigstr);
6295
6296     if (little >= SvPVX(bigstr) &&
6297         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6298         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6299            or little...little+littlelen might overlap offset...offset+len we make a copy
6300         */
6301         little = savepvn(little, littlelen);
6302         SAVEFREEPV(little);
6303     }
6304
6305     if (offset + len > curlen) {
6306         SvGROW(bigstr, offset+len+1);
6307         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6308         SvCUR_set(bigstr, offset+len);
6309     }
6310
6311     SvTAINT(bigstr);
6312     i = littlelen - len;
6313     if (i > 0) {                        /* string might grow */
6314         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6315         mid = big + offset + len;
6316         midend = bigend = big + SvCUR(bigstr);
6317         bigend += i;
6318         *bigend = '\0';
6319         while (midend > mid)            /* shove everything down */
6320             *--bigend = *--midend;
6321         Move(little,big+offset,littlelen,char);
6322         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6323         SvSETMAGIC(bigstr);
6324         return;
6325     }
6326     else if (i == 0) {
6327         Move(little,SvPVX(bigstr)+offset,len,char);
6328         SvSETMAGIC(bigstr);
6329         return;
6330     }
6331
6332     big = SvPVX(bigstr);
6333     mid = big + offset;
6334     midend = mid + len;
6335     bigend = big + SvCUR(bigstr);
6336
6337     if (midend > bigend)
6338         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6339                    midend, bigend);
6340
6341     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6342         if (littlelen) {
6343             Move(little, mid, littlelen,char);
6344             mid += littlelen;
6345         }
6346         i = bigend - midend;
6347         if (i > 0) {
6348             Move(midend, mid, i,char);
6349             mid += i;
6350         }
6351         *mid = '\0';
6352         SvCUR_set(bigstr, mid - big);
6353     }
6354     else if ((i = mid - big)) { /* faster from front */
6355         midend -= littlelen;
6356         mid = midend;
6357         Move(big, midend - i, i, char);
6358         sv_chop(bigstr,midend-i);
6359         if (littlelen)
6360             Move(little, mid, littlelen,char);
6361     }
6362     else if (littlelen) {
6363         midend -= littlelen;
6364         sv_chop(bigstr,midend);
6365         Move(little,midend,littlelen,char);
6366     }
6367     else {
6368         sv_chop(bigstr,midend);
6369     }
6370     SvSETMAGIC(bigstr);
6371 }
6372
6373 /*
6374 =for apidoc sv_replace
6375
6376 Make the first argument a copy of the second, then delete the original.
6377 The target SV physically takes over ownership of the body of the source SV
6378 and inherits its flags; however, the target keeps any magic it owns,
6379 and any magic in the source is discarded.
6380 Note that this is a rather specialist SV copying operation; most of the
6381 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6382
6383 =cut
6384 */
6385
6386 void
6387 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6388 {
6389     const U32 refcnt = SvREFCNT(sv);
6390
6391     PERL_ARGS_ASSERT_SV_REPLACE;
6392
6393     SV_CHECK_THINKFIRST_COW_DROP(sv);
6394     if (SvREFCNT(nsv) != 1) {
6395         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6396                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6397     }
6398     if (SvMAGICAL(sv)) {
6399         if (SvMAGICAL(nsv))
6400             mg_free(nsv);
6401         else
6402             sv_upgrade(nsv, SVt_PVMG);
6403         SvMAGIC_set(nsv, SvMAGIC(sv));
6404         SvFLAGS(nsv) |= SvMAGICAL(sv);
6405         SvMAGICAL_off(sv);
6406         SvMAGIC_set(sv, NULL);
6407     }
6408     SvREFCNT(sv) = 0;
6409     sv_clear(sv);
6410     assert(!SvREFCNT(sv));
6411 #ifdef DEBUG_LEAKING_SCALARS
6412     sv->sv_flags  = nsv->sv_flags;
6413     sv->sv_any    = nsv->sv_any;
6414     sv->sv_refcnt = nsv->sv_refcnt;
6415     sv->sv_u      = nsv->sv_u;
6416 #else
6417     StructCopy(nsv,sv,SV);
6418 #endif
6419     if(SvTYPE(sv) == SVt_IV) {
6420         SET_SVANY_FOR_BODYLESS_IV(sv);
6421     }
6422         
6423
6424     SvREFCNT(sv) = refcnt;
6425     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6426     SvREFCNT(nsv) = 0;
6427     del_SV(nsv);
6428 }
6429
6430 /* We're about to free a GV which has a CV that refers back to us.
6431  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6432  * field) */
6433
6434 STATIC void
6435 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6436 {
6437     SV *gvname;
6438     GV *anongv;
6439
6440     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6441
6442     /* be assertive! */
6443     assert(SvREFCNT(gv) == 0);
6444     assert(isGV(gv) && isGV_with_GP(gv));
6445     assert(GvGP(gv));
6446     assert(!CvANON(cv));
6447     assert(CvGV(cv) == gv);
6448     assert(!CvNAMED(cv));
6449
6450     /* will the CV shortly be freed by gp_free() ? */
6451     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6452         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6453         return;
6454     }
6455
6456     /* if not, anonymise: */
6457     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6458                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6459                     : newSVpvn_flags( "__ANON__", 8, 0 );
6460     sv_catpvs(gvname, "::__ANON__");
6461     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6462     SvREFCNT_dec_NN(gvname);
6463
6464     CvANON_on(cv);
6465     CvCVGV_RC_on(cv);
6466     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6467 }
6468
6469
6470 /*
6471 =for apidoc sv_clear
6472
6473 Clear an SV: call any destructors, free up any memory used by the body,
6474 and free the body itself.  The SV's head is I<not> freed, although
6475 its type is set to all 1's so that it won't inadvertently be assumed
6476 to be live during global destruction etc.
6477 This function should only be called when C<REFCNT> is zero.  Most of the time
6478 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6479 instead.
6480
6481 =cut
6482 */
6483
6484 void
6485 Perl_sv_clear(pTHX_ SV *const orig_sv)
6486 {
6487     dVAR;
6488     HV *stash;
6489     U32 type;
6490     const struct body_details *sv_type_details;
6491     SV* iter_sv = NULL;
6492     SV* next_sv = NULL;
6493     SV *sv = orig_sv;
6494     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6495                               Not strictly necessary */
6496
6497     PERL_ARGS_ASSERT_SV_CLEAR;
6498
6499     /* within this loop, sv is the SV currently being freed, and
6500      * iter_sv is the most recent AV or whatever that's being iterated
6501      * over to provide more SVs */
6502
6503     while (sv) {
6504
6505         type = SvTYPE(sv);
6506
6507         assert(SvREFCNT(sv) == 0);
6508         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6509
6510         if (type <= SVt_IV) {
6511             /* See the comment in sv.h about the collusion between this
6512              * early return and the overloading of the NULL slots in the
6513              * size table.  */
6514             if (SvROK(sv))
6515                 goto free_rv;
6516             SvFLAGS(sv) &= SVf_BREAK;
6517             SvFLAGS(sv) |= SVTYPEMASK;
6518             goto free_head;
6519         }
6520
6521         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6522            for another purpose  */
6523         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6524
6525         if (type >= SVt_PVMG) {
6526             if (SvOBJECT(sv)) {
6527                 if (!curse(sv, 1)) goto get_next_sv;
6528                 type = SvTYPE(sv); /* destructor may have changed it */
6529             }
6530             /* Free back-references before magic, in case the magic calls
6531              * Perl code that has weak references to sv. */
6532             if (type == SVt_PVHV) {
6533                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6534                 if (SvMAGIC(sv))
6535                     mg_free(sv);
6536             }
6537             else if (SvMAGIC(sv)) {
6538                 /* Free back-references before other types of magic. */
6539                 sv_unmagic(sv, PERL_MAGIC_backref);
6540                 mg_free(sv);
6541             }
6542             SvMAGICAL_off(sv);
6543         }
6544         switch (type) {
6545             /* case SVt_INVLIST: */
6546         case SVt_PVIO:
6547             if (IoIFP(sv) &&
6548                 IoIFP(sv) != PerlIO_stdin() &&
6549                 IoIFP(sv) != PerlIO_stdout() &&
6550                 IoIFP(sv) != PerlIO_stderr() &&
6551                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6552             {
6553                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6554                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6555                           IoTYPE(sv) == IoTYPE_RDWR   ||
6556                           IoTYPE(sv) == IoTYPE_APPEND));
6557             }
6558             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6559                 PerlDir_close(IoDIRP(sv));
6560             IoDIRP(sv) = (DIR*)NULL;
6561             Safefree(IoTOP_NAME(sv));
6562             Safefree(IoFMT_NAME(sv));
6563             Safefree(IoBOTTOM_NAME(sv));
6564             if ((const GV *)sv == PL_statgv)
6565                 PL_statgv = NULL;
6566             goto freescalar;
6567         case SVt_REGEXP:
6568             /* FIXME for plugins */
6569             pregfree2((REGEXP*) sv);
6570             goto freescalar;
6571         case SVt_PVCV:
6572         case SVt_PVFM:
6573             cv_undef(MUTABLE_CV(sv));
6574             /* If we're in a stash, we don't own a reference to it.
6575              * However it does have a back reference to us, which needs to
6576              * be cleared.  */
6577             if ((stash = CvSTASH(sv)))
6578                 sv_del_backref(MUTABLE_SV(stash), sv);
6579             goto freescalar;
6580         case SVt_PVHV:
6581             if (PL_last_swash_hv == (const HV *)sv) {
6582                 PL_last_swash_hv = NULL;
6583             }
6584             if (HvTOTALKEYS((HV*)sv) > 0) {
6585                 const HEK *hek;
6586                 /* this statement should match the one at the beginning of
6587                  * hv_undef_flags() */
6588                 if (   PL_phase != PERL_PHASE_DESTRUCT
6589                     && (hek = HvNAME_HEK((HV*)sv)))
6590                 {
6591                     if (PL_stashcache) {
6592                         DEBUG_o(Perl_deb(aTHX_
6593                             "sv_clear clearing PL_stashcache for '%" HEKf
6594                             "'\n",
6595                              HEKfARG(hek)));
6596                         (void)hv_deletehek(PL_stashcache,
6597                                            hek, G_DISCARD);
6598                     }
6599                     hv_name_set((HV*)sv, NULL, 0, 0);
6600                 }
6601
6602                 /* save old iter_sv in unused SvSTASH field */
6603                 assert(!SvOBJECT(sv));
6604                 SvSTASH(sv) = (HV*)iter_sv;
6605                 iter_sv = sv;
6606
6607                 /* save old hash_index in unused SvMAGIC field */
6608                 assert(!SvMAGICAL(sv));
6609                 assert(!SvMAGIC(sv));
6610                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6611                 hash_index = 0;
6612
6613                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6614                 goto get_next_sv; /* process this new sv */
6615             }
6616             /* free empty hash */
6617             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6618             assert(!HvARRAY((HV*)sv));
6619             break;
6620         case SVt_PVAV:
6621             {
6622                 AV* av = MUTABLE_AV(sv);
6623                 if (PL_comppad == av) {
6624                     PL_comppad = NULL;
6625                     PL_curpad = NULL;
6626                 }
6627                 if (AvREAL(av) && AvFILLp(av) > -1) {
6628                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6629                     /* save old iter_sv in top-most slot of AV,
6630                      * and pray that it doesn't get wiped in the meantime */
6631                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6632                     iter_sv = sv;
6633                     goto get_next_sv; /* process this new sv */
6634                 }
6635                 Safefree(AvALLOC(av));
6636             }
6637
6638             break;
6639         case SVt_PVLV:
6640             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6641                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6642                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6643                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6644             }
6645             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6646                 SvREFCNT_dec(LvTARG(sv));
6647             if (isREGEXP(sv)) {
6648                 /* SvLEN points to a regex body. Free the body, then
6649                  * set SvLEN to whatever value was in the now-freed
6650                  * regex body. The PVX buffer is shared by multiple re's
6651                  * and only freed once, by the re whose len in non-null */
6652                 STRLEN len = ReANY(sv)->xpv_len;
6653                 pregfree2((REGEXP*) sv);
6654                 SvLEN_set((sv), len);
6655                 goto freescalar;
6656             }
6657             /* FALLTHROUGH */
6658         case SVt_PVGV:
6659             if (isGV_with_GP(sv)) {
6660                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6661                    && HvENAME_get(stash))
6662                     mro_method_changed_in(stash);
6663                 gp_free(MUTABLE_GV(sv));
6664                 if (GvNAME_HEK(sv))
6665                     unshare_hek(GvNAME_HEK(sv));
6666                 /* If we're in a stash, we don't own a reference to it.
6667                  * However it does have a back reference to us, which
6668                  * needs to be cleared.  */
6669                 if ((stash = GvSTASH(sv)))
6670                         sv_del_backref(MUTABLE_SV(stash), sv);
6671             }
6672             /* FIXME. There are probably more unreferenced pointers to SVs
6673              * in the interpreter struct that we should check and tidy in
6674              * a similar fashion to this:  */
6675             /* See also S_sv_unglob, which does the same thing. */
6676             if ((const GV *)sv == PL_last_in_gv)
6677                 PL_last_in_gv = NULL;
6678             else if ((const GV *)sv == PL_statgv)
6679                 PL_statgv = NULL;
6680             else if ((const GV *)sv == PL_stderrgv)
6681                 PL_stderrgv = NULL;
6682             /* FALLTHROUGH */
6683         case SVt_PVMG:
6684         case SVt_PVNV:
6685         case SVt_PVIV:
6686         case SVt_INVLIST:
6687         case SVt_PV:
6688           freescalar:
6689             /* Don't bother with SvOOK_off(sv); as we're only going to
6690              * free it.  */
6691             if (SvOOK(sv)) {
6692                 STRLEN offset;
6693                 SvOOK_offset(sv, offset);
6694                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6695                 /* Don't even bother with turning off the OOK flag.  */
6696             }
6697             if (SvROK(sv)) {
6698             free_rv:
6699                 {
6700                     SV * const target = SvRV(sv);
6701                     if (SvWEAKREF(sv))
6702                         sv_del_backref(target, sv);
6703                     else
6704                         next_sv = target;
6705                 }
6706             }
6707 #ifdef PERL_ANY_COW
6708             else if (SvPVX_const(sv)
6709                      && !(SvTYPE(sv) == SVt_PVIO
6710                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6711             {
6712                 if (SvIsCOW(sv)) {
6713 #ifdef DEBUGGING
6714                     if (DEBUG_C_TEST) {
6715                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6716                         sv_dump(sv);
6717                     }
6718 #endif
6719                     if (SvLEN(sv)) {
6720                         if (CowREFCNT(sv)) {
6721                             sv_buf_to_rw(sv);
6722                             CowREFCNT(sv)--;
6723                             sv_buf_to_ro(sv);
6724                             SvLEN_set(sv, 0);
6725                         }
6726                     } else {
6727                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6728                     }
6729
6730                 }
6731                 if (SvLEN(sv)) {
6732                     Safefree(SvPVX_mutable(sv));
6733                 }
6734             }
6735 #else
6736             else if (SvPVX_const(sv) && SvLEN(sv)
6737                      && !(SvTYPE(sv) == SVt_PVIO
6738                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6739                 Safefree(SvPVX_mutable(sv));
6740             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6741                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6742             }
6743 #endif
6744             break;
6745         case SVt_NV:
6746             break;
6747         }
6748
6749       free_body:
6750
6751         SvFLAGS(sv) &= SVf_BREAK;
6752         SvFLAGS(sv) |= SVTYPEMASK;
6753
6754         sv_type_details = bodies_by_type + type;
6755         if (sv_type_details->arena) {
6756             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6757                      &PL_body_roots[type]);
6758         }
6759         else if (sv_type_details->body_size) {
6760             safefree(SvANY(sv));
6761         }
6762
6763       free_head:
6764         /* caller is responsible for freeing the head of the original sv */
6765         if (sv != orig_sv && !SvREFCNT(sv))
6766             del_SV(sv);
6767
6768         /* grab and free next sv, if any */
6769       get_next_sv:
6770         while (1) {
6771             sv = NULL;
6772             if (next_sv) {
6773                 sv = next_sv;
6774                 next_sv = NULL;
6775             }
6776             else if (!iter_sv) {
6777                 break;
6778             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6779                 AV *const av = (AV*)iter_sv;
6780                 if (AvFILLp(av) > -1) {
6781                     sv = AvARRAY(av)[AvFILLp(av)--];
6782                 }
6783                 else { /* no more elements of current AV to free */
6784                     sv = iter_sv;
6785                     type = SvTYPE(sv);
6786                     /* restore previous value, squirrelled away */
6787                     iter_sv = AvARRAY(av)[AvMAX(av)];
6788                     Safefree(AvALLOC(av));
6789                     goto free_body;
6790                 }
6791             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6792                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6793                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6794                     /* no more elements of current HV to free */
6795                     sv = iter_sv;
6796                     type = SvTYPE(sv);
6797                     /* Restore previous values of iter_sv and hash_index,
6798                      * squirrelled away */
6799                     assert(!SvOBJECT(sv));
6800                     iter_sv = (SV*)SvSTASH(sv);
6801                     assert(!SvMAGICAL(sv));
6802                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6803 #ifdef DEBUGGING
6804                     /* perl -DA does not like rubbish in SvMAGIC. */
6805                     SvMAGIC_set(sv, 0);
6806 #endif
6807
6808                     /* free any remaining detritus from the hash struct */
6809                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6810                     assert(!HvARRAY((HV*)sv));
6811                     goto free_body;
6812                 }
6813             }
6814
6815             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6816
6817             if (!sv)
6818                 continue;
6819             if (!SvREFCNT(sv)) {
6820                 sv_free(sv);
6821                 continue;
6822             }
6823             if (--(SvREFCNT(sv)))
6824                 continue;
6825 #ifdef DEBUGGING
6826             if (SvTEMP(sv)) {
6827                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6828                          "Attempt to free temp prematurely: SV 0x%" UVxf
6829                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6830                 continue;
6831             }
6832 #endif
6833             if (SvIMMORTAL(sv)) {
6834                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6835                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6836                 continue;
6837             }
6838             break;
6839         } /* while 1 */
6840
6841     } /* while sv */
6842 }
6843
6844 /* This routine curses the sv itself, not the object referenced by sv. So
6845    sv does not have to be ROK. */
6846
6847 static bool
6848 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6849     PERL_ARGS_ASSERT_CURSE;
6850     assert(SvOBJECT(sv));
6851
6852     if (PL_defstash &&  /* Still have a symbol table? */
6853         SvDESTROYABLE(sv))
6854     {
6855         dSP;
6856         HV* stash;
6857         do {
6858           stash = SvSTASH(sv);
6859           assert(SvTYPE(stash) == SVt_PVHV);
6860           if (HvNAME(stash)) {
6861             CV* destructor = NULL;
6862             struct mro_meta *meta;
6863
6864             assert (SvOOK(stash));
6865
6866             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6867                          HvNAME(stash)) );
6868
6869             /* don't make this an initialization above the assert, since it needs
6870                an AUX structure */
6871             meta = HvMROMETA(stash);
6872             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6873                 destructor = meta->destroy;
6874                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6875                              (void *)destructor, HvNAME(stash)) );
6876             }
6877             else {
6878                 bool autoload = FALSE;
6879                 GV *gv =
6880                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6881                 if (gv)
6882                     destructor = GvCV(gv);
6883                 if (!destructor) {
6884                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6885                                          GV_AUTOLOAD_ISMETHOD);
6886                     if (gv)
6887                         destructor = GvCV(gv);
6888                     if (destructor)
6889                         autoload = TRUE;
6890                 }
6891                 /* we don't cache AUTOLOAD for DESTROY, since this code
6892                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6893                    equivalent for XS AUTOLOADs */
6894                 if (!autoload) {
6895                     meta->destroy_gen = PL_sub_generation;
6896                     meta->destroy = destructor;
6897
6898                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6899                                       (void *)destructor, HvNAME(stash)) );
6900                 }
6901                 else {
6902                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6903                                       HvNAME(stash)) );
6904                 }
6905             }
6906             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6907             if (destructor
6908                 /* A constant subroutine can have no side effects, so
6909                    don't bother calling it.  */
6910                 && !CvCONST(destructor)
6911                 /* Don't bother calling an empty destructor or one that
6912                    returns immediately. */
6913                 && (CvISXSUB(destructor)
6914                 || (CvSTART(destructor)
6915                     && (CvSTART(destructor)->op_next->op_type
6916                                         != OP_LEAVESUB)
6917                     && (CvSTART(destructor)->op_next->op_type
6918                                         != OP_PUSHMARK
6919                         || CvSTART(destructor)->op_next->op_next->op_type
6920                                         != OP_RETURN
6921                        )
6922                    ))
6923                )
6924             {
6925                 SV* const tmpref = newRV(sv);
6926                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6927                 ENTER;
6928                 PUSHSTACKi(PERLSI_DESTROY);
6929                 EXTEND(SP, 2);
6930                 PUSHMARK(SP);
6931                 PUSHs(tmpref);
6932                 PUTBACK;
6933                 call_sv(MUTABLE_SV(destructor),
6934                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6935                 POPSTACK;
6936                 SPAGAIN;
6937                 LEAVE;
6938                 if(SvREFCNT(tmpref) < 2) {
6939                     /* tmpref is not kept alive! */
6940                     SvREFCNT(sv)--;
6941                     SvRV_set(tmpref, NULL);
6942                     SvROK_off(tmpref);
6943                 }
6944                 SvREFCNT_dec_NN(tmpref);
6945             }
6946           }
6947         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6948
6949
6950         if (check_refcnt && SvREFCNT(sv)) {
6951             if (PL_in_clean_objs)
6952                 Perl_croak(aTHX_
6953                   "DESTROY created new reference to dead object '%" HEKf "'",
6954                    HEKfARG(HvNAME_HEK(stash)));
6955             /* DESTROY gave object new lease on life */
6956             return FALSE;
6957         }
6958     }
6959
6960     if (SvOBJECT(sv)) {
6961         HV * const stash = SvSTASH(sv);
6962         /* Curse before freeing the stash, as freeing the stash could cause
6963            a recursive call into S_curse. */
6964         SvOBJECT_off(sv);       /* Curse the object. */
6965         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6966         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6967     }
6968     return TRUE;
6969 }
6970
6971 /*
6972 =for apidoc sv_newref
6973
6974 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6975 instead.
6976
6977 =cut
6978 */
6979
6980 SV *
6981 Perl_sv_newref(pTHX_ SV *const sv)
6982 {
6983     PERL_UNUSED_CONTEXT;
6984     if (sv)
6985         (SvREFCNT(sv))++;
6986     return sv;
6987 }
6988
6989 /*
6990 =for apidoc sv_free
6991
6992 Decrement an SV's reference count, and if it drops to zero, call
6993 C<sv_clear> to invoke destructors and free up any memory used by
6994 the body; finally, deallocating the SV's head itself.
6995 Normally called via a wrapper macro C<SvREFCNT_dec>.
6996
6997 =cut
6998 */
6999
7000 void
7001 Perl_sv_free(pTHX_ SV *const sv)
7002 {
7003     SvREFCNT_dec(sv);
7004 }
7005
7006
7007 /* Private helper function for SvREFCNT_dec().
7008  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7009
7010 void
7011 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7012 {
7013     dVAR;
7014
7015     PERL_ARGS_ASSERT_SV_FREE2;
7016
7017     if (LIKELY( rc == 1 )) {
7018         /* normal case */
7019         SvREFCNT(sv) = 0;
7020
7021 #ifdef DEBUGGING
7022         if (SvTEMP(sv)) {
7023             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7024                              "Attempt to free temp prematurely: SV 0x%" UVxf
7025                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7026             return;
7027         }
7028 #endif
7029         if (SvIMMORTAL(sv)) {
7030             /* make sure SvREFCNT(sv)==0 happens very seldom */
7031             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7032             return;
7033         }
7034         sv_clear(sv);
7035         if (! SvREFCNT(sv)) /* may have have been resurrected */
7036             del_SV(sv);
7037         return;
7038     }
7039
7040     /* handle exceptional cases */
7041
7042     assert(rc == 0);
7043
7044     if (SvFLAGS(sv) & SVf_BREAK)
7045         /* this SV's refcnt has been artificially decremented to
7046          * trigger cleanup */
7047         return;
7048     if (PL_in_clean_all) /* All is fair */
7049         return;
7050     if (SvIMMORTAL(sv)) {
7051         /* make sure SvREFCNT(sv)==0 happens very seldom */
7052         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7053         return;
7054     }
7055     if (ckWARN_d(WARN_INTERNAL)) {
7056 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7057         Perl_dump_sv_child(aTHX_ sv);
7058 #else
7059     #ifdef DEBUG_LEAKING_SCALARS
7060         sv_dump(sv);
7061     #endif
7062 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7063         if (PL_warnhook == PERL_WARNHOOK_FATAL
7064             || ckDEAD(packWARN(WARN_INTERNAL))) {
7065             /* Don't let Perl_warner cause us to escape our fate:  */
7066             abort();
7067         }
7068 #endif
7069         /* This may not return:  */
7070         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7071                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7072                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7073 #endif
7074     }
7075 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7076     abort();
7077 #endif
7078
7079 }
7080
7081
7082 /*
7083 =for apidoc sv_len
7084
7085 Returns the length of the string in the SV.  Handles magic and type
7086 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7087 gives raw access to the C<xpv_cur> slot.
7088
7089 =cut
7090 */
7091
7092 STRLEN
7093 Perl_sv_len(pTHX_ SV *const sv)
7094 {
7095     STRLEN len;
7096
7097     if (!sv)
7098         return 0;
7099
7100     (void)SvPV_const(sv, len);
7101     return len;
7102 }
7103
7104 /*
7105 =for apidoc sv_len_utf8
7106
7107 Returns the number of characters in the string in an SV, counting wide
7108 UTF-8 bytes as a single character.  Handles magic and type coercion.
7109
7110 =cut
7111 */
7112
7113 /*
7114  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7115  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7116  * (Note that the mg_len is not the length of the mg_ptr field.
7117  * This allows the cache to store the character length of the string without
7118  * needing to malloc() extra storage to attach to the mg_ptr.)
7119  *
7120  */
7121
7122 STRLEN
7123 Perl_sv_len_utf8(pTHX_ SV *const sv)
7124 {
7125     if (!sv)
7126         return 0;
7127
7128     SvGETMAGIC(sv);
7129     return sv_len_utf8_nomg(sv);
7130 }
7131
7132 STRLEN
7133 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7134 {
7135     STRLEN len;
7136     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7137
7138     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7139
7140     if (PL_utf8cache && SvUTF8(sv)) {
7141             STRLEN ulen;
7142             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7143
7144             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7145                 if (mg->mg_len != -1)
7146                     ulen = mg->mg_len;
7147                 else {
7148                     /* We can use the offset cache for a headstart.
7149                        The longer value is stored in the first pair.  */
7150                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7151
7152                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7153                                                        s + len);
7154                 }
7155                 
7156                 if (PL_utf8cache < 0) {
7157                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7158                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7159                 }
7160             }
7161             else {
7162                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7163                 utf8_mg_len_cache_update(sv, &mg, ulen);
7164             }
7165             return ulen;
7166     }
7167     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7168 }
7169
7170 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7171    offset.  */
7172 static STRLEN
7173 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7174                       STRLEN *const uoffset_p, bool *const at_end)
7175 {
7176     const U8 *s = start;
7177     STRLEN uoffset = *uoffset_p;
7178
7179     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7180
7181     while (s < send && uoffset) {
7182         --uoffset;
7183         s += UTF8SKIP(s);
7184     }
7185     if (s == send) {
7186         *at_end = TRUE;
7187     }
7188     else if (s > send) {
7189         *at_end = TRUE;
7190         /* This is the existing behaviour. Possibly it should be a croak, as
7191            it's actually a bounds error  */
7192         s = send;
7193     }
7194     *uoffset_p -= uoffset;
7195     return s - start;
7196 }
7197
7198 /* Given the length of the string in both bytes and UTF-8 characters, decide
7199    whether to walk forwards or backwards to find the byte corresponding to
7200    the passed in UTF-8 offset.  */
7201 static STRLEN
7202 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7203                     STRLEN uoffset, const STRLEN uend)
7204 {
7205     STRLEN backw = uend - uoffset;
7206
7207     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7208
7209     if (uoffset < 2 * backw) {
7210         /* The assumption is that going forwards is twice the speed of going
7211            forward (that's where the 2 * backw comes from).
7212            (The real figure of course depends on the UTF-8 data.)  */
7213         const U8 *s = start;
7214
7215         while (s < send && uoffset--)
7216             s += UTF8SKIP(s);
7217         assert (s <= send);
7218         if (s > send)
7219             s = send;
7220         return s - start;
7221     }
7222
7223     while (backw--) {
7224         send--;
7225         while (UTF8_IS_CONTINUATION(*send))
7226             send--;
7227     }
7228     return send - start;
7229 }
7230
7231 /* For the string representation of the given scalar, find the byte
7232    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7233    give another position in the string, *before* the sought offset, which
7234    (which is always true, as 0, 0 is a valid pair of positions), which should
7235    help reduce the amount of linear searching.
7236    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7237    will be used to reduce the amount of linear searching. The cache will be
7238    created if necessary, and the found value offered to it for update.  */
7239 static STRLEN
7240 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7241                     const U8 *const send, STRLEN uoffset,
7242                     STRLEN uoffset0, STRLEN boffset0)
7243 {
7244     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7245     bool found = FALSE;
7246     bool at_end = FALSE;
7247
7248     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7249
7250     assert (uoffset >= uoffset0);
7251
7252     if (!uoffset)
7253         return 0;
7254
7255     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7256         && PL_utf8cache
7257         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7258                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7259         if ((*mgp)->mg_ptr) {
7260             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7261             if (cache[0] == uoffset) {
7262                 /* An exact match. */
7263                 return cache[1];
7264             }
7265             if (cache[2] == uoffset) {
7266                 /* An exact match. */
7267                 return cache[3];
7268             }
7269
7270             if (cache[0] < uoffset) {
7271                 /* The cache already knows part of the way.   */
7272                 if (cache[0] > uoffset0) {
7273                     /* The cache knows more than the passed in pair  */
7274                     uoffset0 = cache[0];
7275                     boffset0 = cache[1];
7276                 }
7277                 if ((*mgp)->mg_len != -1) {
7278                     /* And we know the end too.  */
7279                     boffset = boffset0
7280                         + sv_pos_u2b_midway(start + boffset0, send,
7281                                               uoffset - uoffset0,
7282                                               (*mgp)->mg_len - uoffset0);
7283                 } else {
7284                     uoffset -= uoffset0;
7285                     boffset = boffset0
7286                         + sv_pos_u2b_forwards(start + boffset0,
7287                                               send, &uoffset, &at_end);
7288                     uoffset += uoffset0;
7289                 }
7290             }
7291             else if (cache[2] < uoffset) {
7292                 /* We're between the two cache entries.  */
7293                 if (cache[2] > uoffset0) {
7294                     /* and the cache knows more than the passed in pair  */
7295                     uoffset0 = cache[2];
7296                     boffset0 = cache[3];
7297                 }
7298
7299                 boffset = boffset0
7300                     + sv_pos_u2b_midway(start + boffset0,
7301                                           start + cache[1],
7302                                           uoffset - uoffset0,
7303                                           cache[0] - uoffset0);
7304             } else {
7305                 boffset = boffset0
7306                     + sv_pos_u2b_midway(start + boffset0,
7307                                           start + cache[3],
7308                                           uoffset - uoffset0,
7309                                           cache[2] - uoffset0);
7310             }
7311             found = TRUE;
7312         }
7313         else if ((*mgp)->mg_len != -1) {
7314             /* If we can take advantage of a passed in offset, do so.  */
7315             /* In fact, offset0 is either 0, or less than offset, so don't
7316                need to worry about the other possibility.  */
7317             boffset = boffset0
7318                 + sv_pos_u2b_midway(start + boffset0, send,
7319                                       uoffset - uoffset0,
7320                                       (*mgp)->mg_len - uoffset0);
7321             found = TRUE;
7322         }
7323     }
7324
7325     if (!found || PL_utf8cache < 0) {
7326         STRLEN real_boffset;
7327         uoffset -= uoffset0;
7328         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7329                                                       send, &uoffset, &at_end);
7330         uoffset += uoffset0;
7331
7332         if (found && PL_utf8cache < 0)
7333             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7334                                        real_boffset, sv);
7335         boffset = real_boffset;
7336     }
7337
7338     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7339         if (at_end)
7340             utf8_mg_len_cache_update(sv, mgp, uoffset);
7341         else
7342             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7343     }
7344     return boffset;
7345 }
7346
7347
7348 /*
7349 =for apidoc sv_pos_u2b_flags
7350
7351 Converts the offset from a count of UTF-8 chars from
7352 the start of the string, to a count of the equivalent number of bytes; if
7353 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7354 C<offset>, rather than from the start
7355 of the string.  Handles type coercion.
7356 C<flags> is passed to C<SvPV_flags>, and usually should be
7357 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7358
7359 =cut
7360 */
7361
7362 /*
7363  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7364  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7365  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7366  *
7367  */
7368
7369 STRLEN
7370 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7371                       U32 flags)
7372 {
7373     const U8 *start;
7374     STRLEN len;
7375     STRLEN boffset;
7376
7377     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7378
7379     start = (U8*)SvPV_flags(sv, len, flags);
7380     if (len) {
7381         const U8 * const send = start + len;
7382         MAGIC *mg = NULL;
7383         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7384
7385         if (lenp
7386             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7387                         is 0, and *lenp is already set to that.  */) {
7388             /* Convert the relative offset to absolute.  */
7389             const STRLEN uoffset2 = uoffset + *lenp;
7390             const STRLEN boffset2
7391                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7392                                       uoffset, boffset) - boffset;
7393
7394             *lenp = boffset2;
7395         }
7396     } else {
7397         if (lenp)
7398             *lenp = 0;
7399         boffset = 0;
7400     }
7401
7402     return boffset;
7403 }
7404
7405 /*
7406 =for apidoc sv_pos_u2b
7407
7408 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7409 the start of the string, to a count of the equivalent number of bytes; if
7410 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7411 the offset, rather than from the start of the string.  Handles magic and
7412 type coercion.
7413
7414 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7415 than 2Gb.
7416
7417 =cut
7418 */
7419
7420 /*
7421  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7422  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7423  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7424  *
7425  */
7426
7427 /* This function is subject to size and sign problems */
7428
7429 void
7430 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7431 {
7432     PERL_ARGS_ASSERT_SV_POS_U2B;
7433
7434     if (lenp) {
7435         STRLEN ulen = (STRLEN)*lenp;
7436         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7437                                          SV_GMAGIC|SV_CONST_RETURN);
7438         *lenp = (I32)ulen;
7439     } else {
7440         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7441                                          SV_GMAGIC|SV_CONST_RETURN);
7442     }
7443 }
7444
7445 static void
7446 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7447                            const STRLEN ulen)
7448 {
7449     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7450     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7451         return;
7452
7453     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7454                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7455         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7456     }
7457     assert(*mgp);
7458
7459     (*mgp)->mg_len = ulen;
7460 }
7461
7462 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7463    byte length pairing. The (byte) length of the total SV is passed in too,
7464    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7465    may not have updated SvCUR, so we can't rely on reading it directly.
7466
7467    The proffered utf8/byte length pairing isn't used if the cache already has
7468    two pairs, and swapping either for the proffered pair would increase the
7469    RMS of the intervals between known byte offsets.
7470
7471    The cache itself consists of 4 STRLEN values
7472    0: larger UTF-8 offset
7473    1: corresponding byte offset
7474    2: smaller UTF-8 offset
7475    3: corresponding byte offset
7476
7477    Unused cache pairs have the value 0, 0.
7478    Keeping the cache "backwards" means that the invariant of
7479    cache[0] >= cache[2] is maintained even with empty slots, which means that
7480    the code that uses it doesn't need to worry if only 1 entry has actually
7481    been set to non-zero.  It also makes the "position beyond the end of the
7482    cache" logic much simpler, as the first slot is always the one to start
7483    from.   
7484 */
7485 static void
7486 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7487                            const STRLEN utf8, const STRLEN blen)
7488 {
7489     STRLEN *cache;
7490
7491     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7492
7493     if (SvREADONLY(sv))
7494         return;
7495
7496     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7497                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7498         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7499                            0);
7500         (*mgp)->mg_len = -1;
7501     }
7502     assert(*mgp);
7503
7504     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7505         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7506         (*mgp)->mg_ptr = (char *) cache;
7507     }
7508     assert(cache);
7509
7510     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7511         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7512            a pointer.  Note that we no longer cache utf8 offsets on refer-
7513            ences, but this check is still a good idea, for robustness.  */
7514         const U8 *start = (const U8 *) SvPVX_const(sv);
7515         const STRLEN realutf8 = utf8_length(start, start + byte);
7516
7517         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7518                                    sv);
7519     }
7520
7521     /* Cache is held with the later position first, to simplify the code
7522        that deals with unbounded ends.  */
7523        
7524     ASSERT_UTF8_CACHE(cache);
7525     if (cache[1] == 0) {
7526         /* Cache is totally empty  */
7527         cache[0] = utf8;
7528         cache[1] = byte;
7529     } else if (cache[3] == 0) {
7530         if (byte > cache[1]) {
7531             /* New one is larger, so goes first.  */
7532             cache[2] = cache[0];
7533             cache[3] = cache[1];
7534             cache[0] = utf8;
7535             cache[1] = byte;
7536         } else {
7537             cache[2] = utf8;
7538             cache[3] = byte;
7539         }
7540     } else {
7541 /* float casts necessary? XXX */
7542 #define THREEWAY_SQUARE(a,b,c,d) \
7543             ((float)((d) - (c))) * ((float)((d) - (c))) \
7544             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7545                + ((float)((b) - (a))) * ((float)((b) - (a)))
7546
7547         /* Cache has 2 slots in use, and we know three potential pairs.
7548            Keep the two that give the lowest RMS distance. Do the
7549            calculation in bytes simply because we always know the byte
7550            length.  squareroot has the same ordering as the positive value,
7551            so don't bother with the actual square root.  */
7552         if (byte > cache[1]) {
7553             /* New position is after the existing pair of pairs.  */
7554             const float keep_earlier
7555                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7556             const float keep_later
7557                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7558
7559             if (keep_later < keep_earlier) {
7560                 cache[2] = cache[0];
7561                 cache[3] = cache[1];
7562             }
7563             cache[0] = utf8;
7564             cache[1] = byte;
7565         }
7566         else {
7567             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7568             float b, c, keep_earlier;
7569             if (byte > cache[3]) {
7570                 /* New position is between the existing pair of pairs.  */
7571                 b = (float)cache[3];
7572                 c = (float)byte;
7573             } else {
7574                 /* New position is before the existing pair of pairs.  */
7575                 b = (float)byte;
7576                 c = (float)cache[3];
7577             }
7578             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7579             if (byte > cache[3]) {
7580                 if (keep_later < keep_earlier) {
7581                     cache[2] = utf8;
7582                     cache[3] = byte;
7583                 }
7584                 else {
7585                     cache[0] = utf8;
7586                     cache[1] = byte;
7587                 }
7588             }
7589             else {
7590                 if (! (keep_later < keep_earlier)) {
7591                     cache[0] = cache[2];
7592                     cache[1] = cache[3];
7593                 }
7594                 cache[2] = utf8;
7595                 cache[3] = byte;
7596             }
7597         }
7598     }
7599     ASSERT_UTF8_CACHE(cache);
7600 }
7601
7602 /* We already know all of the way, now we may be able to walk back.  The same
7603    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7604    backward is half the speed of walking forward. */
7605 static STRLEN
7606 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7607                     const U8 *end, STRLEN endu)
7608 {
7609     const STRLEN forw = target - s;
7610     STRLEN backw = end - target;
7611
7612     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7613
7614     if (forw < 2 * backw) {
7615         return utf8_length(s, target);
7616     }
7617
7618     while (end > target) {
7619         end--;
7620         while (UTF8_IS_CONTINUATION(*end)) {
7621             end--;
7622         }
7623         endu--;
7624     }
7625     return endu;
7626 }
7627
7628 /*
7629 =for apidoc sv_pos_b2u_flags
7630
7631 Converts C<offset> from a count of bytes from the start of the string, to
7632 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7633 C<flags> is passed to C<SvPV_flags>, and usually should be
7634 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7635
7636 =cut
7637 */
7638
7639 /*
7640  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7641  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7642  * and byte offsets.
7643  *
7644  */
7645 STRLEN
7646 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7647 {
7648     const U8* s;
7649     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7650     STRLEN blen;
7651     MAGIC* mg = NULL;
7652     const U8* send;
7653     bool found = FALSE;
7654
7655     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7656
7657     s = (const U8*)SvPV_flags(sv, blen, flags);
7658
7659     if (blen < offset)
7660         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7661                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7662
7663     send = s + offset;
7664
7665     if (!SvREADONLY(sv)
7666         && PL_utf8cache
7667         && SvTYPE(sv) >= SVt_PVMG
7668         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7669     {
7670         if (mg->mg_ptr) {
7671             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7672             if (cache[1] == offset) {
7673                 /* An exact match. */
7674                 return cache[0];
7675             }
7676             if (cache[3] == offset) {
7677                 /* An exact match. */
7678                 return cache[2];
7679             }
7680
7681             if (cache[1] < offset) {
7682                 /* We already know part of the way. */
7683                 if (mg->mg_len != -1) {
7684                     /* Actually, we know the end too.  */
7685                     len = cache[0]
7686                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7687                                               s + blen, mg->mg_len - cache[0]);
7688                 } else {
7689                     len = cache[0] + utf8_length(s + cache[1], send);
7690                 }
7691             }
7692             else if (cache[3] < offset) {
7693                 /* We're between the two cached pairs, so we do the calculation
7694                    offset by the byte/utf-8 positions for the earlier pair,
7695                    then add the utf-8 characters from the string start to
7696                    there.  */
7697                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7698                                           s + cache[1], cache[0] - cache[2])
7699                     + cache[2];
7700
7701             }
7702             else { /* cache[3] > offset */
7703                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7704                                           cache[2]);
7705
7706             }
7707             ASSERT_UTF8_CACHE(cache);
7708             found = TRUE;
7709         } else if (mg->mg_len != -1) {
7710             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7711             found = TRUE;
7712         }
7713     }
7714     if (!found || PL_utf8cache < 0) {
7715         const STRLEN real_len = utf8_length(s, send);
7716
7717         if (found && PL_utf8cache < 0)
7718             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7719         len = real_len;
7720     }
7721
7722     if (PL_utf8cache) {
7723         if (blen == offset)
7724             utf8_mg_len_cache_update(sv, &mg, len);
7725         else
7726             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7727     }
7728
7729     return len;
7730 }
7731
7732 /*
7733 =for apidoc sv_pos_b2u
7734
7735 Converts the value pointed to by C<offsetp> from a count of bytes from the
7736 start of the string, to a count of the equivalent number of UTF-8 chars.
7737 Handles magic and type coercion.
7738
7739 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7740 longer than 2Gb.
7741
7742 =cut
7743 */
7744
7745 /*
7746  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7747  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7748  * byte offsets.
7749  *
7750  */
7751 void
7752 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7753 {
7754     PERL_ARGS_ASSERT_SV_POS_B2U;
7755
7756     if (!sv)
7757         return;
7758
7759     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7760                                      SV_GMAGIC|SV_CONST_RETURN);
7761 }
7762
7763 static void
7764 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7765                              STRLEN real, SV *const sv)
7766 {
7767     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7768
7769     /* As this is debugging only code, save space by keeping this test here,
7770        rather than inlining it in all the callers.  */
7771     if (from_cache == real)
7772         return;
7773
7774     /* Need to turn the assertions off otherwise we may recurse infinitely
7775        while printing error messages.  */
7776     SAVEI8(PL_utf8cache);
7777     PL_utf8cache = 0;
7778     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7779                func, (UV) from_cache, (UV) real, SVfARG(sv));
7780 }
7781
7782 /*
7783 =for apidoc sv_eq
7784
7785 Returns a boolean indicating whether the strings in the two SVs are
7786 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7787 coerce its args to strings if necessary.
7788
7789 =for apidoc sv_eq_flags
7790
7791 Returns a boolean indicating whether the strings in the two SVs are
7792 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7793 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7794
7795 =cut
7796 */
7797
7798 I32
7799 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7800 {
7801     const char *pv1;
7802     STRLEN cur1;
7803     const char *pv2;
7804     STRLEN cur2;
7805     I32  eq     = 0;
7806     SV* svrecode = NULL;
7807
7808     if (!sv1) {
7809         pv1 = "";
7810         cur1 = 0;
7811     }
7812     else {
7813         /* if pv1 and pv2 are the same, second SvPV_const call may
7814          * invalidate pv1 (if we are handling magic), so we may need to
7815          * make a copy */
7816         if (sv1 == sv2 && flags & SV_GMAGIC
7817          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7818             pv1 = SvPV_const(sv1, cur1);
7819             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7820         }
7821         pv1 = SvPV_flags_const(sv1, cur1, flags);
7822     }
7823
7824     if (!sv2){
7825         pv2 = "";
7826         cur2 = 0;
7827     }
7828     else
7829         pv2 = SvPV_flags_const(sv2, cur2, flags);
7830
7831     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7832         /* Differing utf8ness.  */
7833         if (SvUTF8(sv1)) {
7834                   /* sv1 is the UTF-8 one  */
7835                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7836                                         (const U8*)pv1, cur1) == 0;
7837         }
7838         else {
7839                   /* sv2 is the UTF-8 one  */
7840                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7841                                         (const U8*)pv2, cur2) == 0;
7842         }
7843     }
7844
7845     if (cur1 == cur2)
7846         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7847         
7848     SvREFCNT_dec(svrecode);
7849
7850     return eq;
7851 }
7852
7853 /*
7854 =for apidoc sv_cmp
7855
7856 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7857 string in C<sv1> is less than, equal to, or greater than the string in
7858 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7859 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7860
7861 =for apidoc sv_cmp_flags
7862
7863 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7864 string in C<sv1> is less than, equal to, or greater than the string in
7865 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7866 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7867 also C<L</sv_cmp_locale_flags>>.
7868
7869 =cut
7870 */
7871
7872 I32
7873 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7874 {
7875     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7876 }
7877
7878 I32
7879 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7880                   const U32 flags)
7881 {
7882     STRLEN cur1, cur2;
7883     const char *pv1, *pv2;
7884     I32  cmp;
7885     SV *svrecode = NULL;
7886
7887     if (!sv1) {
7888         pv1 = "";
7889         cur1 = 0;
7890     }
7891     else
7892         pv1 = SvPV_flags_const(sv1, cur1, flags);
7893
7894     if (!sv2) {
7895         pv2 = "";
7896         cur2 = 0;
7897     }
7898     else
7899         pv2 = SvPV_flags_const(sv2, cur2, flags);
7900
7901     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7902         /* Differing utf8ness.  */
7903         if (SvUTF8(sv1)) {
7904                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7905                                                    (const U8*)pv1, cur1);
7906                 return retval ? retval < 0 ? -1 : +1 : 0;
7907         }
7908         else {
7909                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7910                                                   (const U8*)pv2, cur2);
7911                 return retval ? retval < 0 ? -1 : +1 : 0;
7912         }
7913     }
7914
7915     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7916
7917     if (!cur1) {
7918         cmp = cur2 ? -1 : 0;
7919     } else if (!cur2) {
7920         cmp = 1;
7921     } else {
7922         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7923
7924 #ifdef EBCDIC
7925         if (! DO_UTF8(sv1)) {
7926 #endif
7927             const I32 retval = memcmp((const void*)pv1,
7928                                       (const void*)pv2,
7929                                       shortest_len);
7930             if (retval) {
7931                 cmp = retval < 0 ? -1 : 1;
7932             } else if (cur1 == cur2) {
7933                 cmp = 0;
7934             } else {
7935                 cmp = cur1 < cur2 ? -1 : 1;
7936             }
7937 #ifdef EBCDIC
7938         }
7939         else {  /* Both are to be treated as UTF-EBCDIC */
7940
7941             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7942              * which remaps code points 0-255.  We therefore generally have to
7943              * unmap back to the original values to get an accurate comparison.
7944              * But we don't have to do that for UTF-8 invariants, as by
7945              * definition, they aren't remapped, nor do we have to do it for
7946              * above-latin1 code points, as they also aren't remapped.  (This
7947              * code also works on ASCII platforms, but the memcmp() above is
7948              * much faster). */
7949
7950             const char *e = pv1 + shortest_len;
7951
7952             /* Find the first bytes that differ between the two strings */
7953             while (pv1 < e && *pv1 == *pv2) {
7954                 pv1++;
7955                 pv2++;
7956             }
7957
7958
7959             if (pv1 == e) { /* Are the same all the way to the end */
7960                 if (cur1 == cur2) {
7961                     cmp = 0;
7962                 } else {
7963                     cmp = cur1 < cur2 ? -1 : 1;
7964                 }
7965             }
7966             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7967                     * in the strings were.  The current bytes may or may not be
7968                     * at the beginning of a character.  But neither or both are
7969                     * (or else earlier bytes would have been different).  And
7970                     * if we are in the middle of a character, the two
7971                     * characters are comprised of the same number of bytes
7972                     * (because in this case the start bytes are the same, and
7973                     * the start bytes encode the character's length). */
7974                  if (UTF8_IS_INVARIANT(*pv1))
7975             {
7976                 /* If both are invariants; can just compare directly */
7977                 if (UTF8_IS_INVARIANT(*pv2)) {
7978                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7979                 }
7980                 else   /* Since *pv1 is invariant, it is the whole character,
7981                           which means it is at the beginning of a character.
7982                           That means pv2 is also at the beginning of a
7983                           character (see earlier comment).  Since it isn't
7984                           invariant, it must be a start byte.  If it starts a
7985                           character whose code point is above 255, that
7986                           character is greater than any single-byte char, which
7987                           *pv1 is */
7988                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7989                 {
7990                     cmp = -1;
7991                 }
7992                 else {
7993                     /* Here, pv2 points to a character composed of 2 bytes
7994                      * whose code point is < 256.  Get its code point and
7995                      * compare with *pv1 */
7996                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7997                            ?  -1
7998                            : 1;
7999                 }
8000             }
8001             else   /* The code point starting at pv1 isn't a single byte */
8002                  if (UTF8_IS_INVARIANT(*pv2))
8003             {
8004                 /* But here, the code point starting at *pv2 is a single byte,
8005                  * and so *pv1 must begin a character, hence is a start byte.
8006                  * If that character is above 255, it is larger than any
8007                  * single-byte char, which *pv2 is */
8008                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8009                     cmp = 1;
8010                 }
8011                 else {
8012                     /* Here, pv1 points to a character composed of 2 bytes
8013                      * whose code point is < 256.  Get its code point and
8014                      * compare with the single byte character *pv2 */
8015                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8016                           ?  -1
8017                           : 1;
8018                 }
8019             }
8020             else   /* Here, we've ruled out either *pv1 and *pv2 being
8021                       invariant.  That means both are part of variants, but not
8022                       necessarily at the start of a character */
8023                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8024                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8025             {
8026                 /* Here, at least one is the start of a character, which means
8027                  * the other is also a start byte.  And the code point of at
8028                  * least one of the characters is above 255.  It is a
8029                  * characteristic of UTF-EBCDIC that all start bytes for
8030                  * above-latin1 code points are well behaved as far as code
8031                  * point comparisons go, and all are larger than all other
8032                  * start bytes, so the comparison with those is also well
8033                  * behaved */
8034                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8035             }
8036             else {
8037                 /* Here both *pv1 and *pv2 are part of variant characters.
8038                  * They could be both continuations, or both start characters.
8039                  * (One or both could even be an illegal start character (for
8040                  * an overlong) which for the purposes of sorting we treat as
8041                  * legal. */
8042                 if (UTF8_IS_CONTINUATION(*pv1)) {
8043
8044                     /* If they are continuations for code points above 255,
8045                      * then comparing the current byte is sufficient, as there
8046                      * is no remapping of these and so the comparison is
8047                      * well-behaved.   We determine if they are such
8048                      * continuations by looking at the preceding byte.  It
8049                      * could be a start byte, from which we can tell if it is
8050                      * for an above 255 code point.  Or it could be a
8051                      * continuation, which means the character occupies at
8052                      * least 3 bytes, so must be above 255.  */
8053                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8054                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8055                     {
8056                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8057                         goto cmp_done;
8058                     }
8059
8060                     /* Here, the continuations are for code points below 256;
8061                      * back up one to get to the start byte */
8062                     pv1--;
8063                     pv2--;
8064                 }
8065
8066                 /* We need to get the actual native code point of each of these
8067                  * variants in order to compare them */
8068                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8069                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8070                         ? -1
8071                         : 1;
8072             }
8073         }
8074       cmp_done: ;
8075 #endif
8076     }
8077
8078     SvREFCNT_dec(svrecode);
8079
8080     return cmp;
8081 }
8082
8083 /*
8084 =for apidoc sv_cmp_locale
8085
8086 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8087 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8088 if necessary.  See also C<L</sv_cmp>>.
8089
8090 =for apidoc sv_cmp_locale_flags
8091
8092 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8093 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8094 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8095 C<L</sv_cmp_flags>>.
8096
8097 =cut
8098 */
8099
8100 I32
8101 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8102 {
8103     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8104 }
8105
8106 I32
8107 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8108                          const U32 flags)
8109 {
8110 #ifdef USE_LOCALE_COLLATE
8111
8112     char *pv1, *pv2;
8113     STRLEN len1, len2;
8114     I32 retval;
8115
8116     if (PL_collation_standard)
8117         goto raw_compare;
8118
8119     len1 = len2 = 0;
8120
8121     /* Revert to using raw compare if both operands exist, but either one
8122      * doesn't transform properly for collation */
8123     if (sv1 && sv2) {
8124         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8125         if (! pv1) {
8126             goto raw_compare;
8127         }
8128         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8129         if (! pv2) {
8130             goto raw_compare;
8131         }
8132     }
8133     else {
8134         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8135         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8136     }
8137
8138     if (!pv1 || !len1) {
8139         if (pv2 && len2)
8140             return -1;
8141         else
8142             goto raw_compare;
8143     }
8144     else {
8145         if (!pv2 || !len2)
8146             return 1;
8147     }
8148
8149     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8150
8151     if (retval)
8152         return retval < 0 ? -1 : 1;
8153
8154     /*
8155      * When the result of collation is equality, that doesn't mean
8156      * that there are no differences -- some locales exclude some
8157      * characters from consideration.  So to avoid false equalities,
8158      * we use the raw string as a tiebreaker.
8159      */
8160
8161   raw_compare:
8162     /* FALLTHROUGH */
8163
8164 #else
8165     PERL_UNUSED_ARG(flags);
8166 #endif /* USE_LOCALE_COLLATE */
8167
8168     return sv_cmp(sv1, sv2);
8169 }
8170
8171
8172 #ifdef USE_LOCALE_COLLATE
8173
8174 /*
8175 =for apidoc sv_collxfrm
8176
8177 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8178 C<L</sv_collxfrm_flags>>.
8179
8180 =for apidoc sv_collxfrm_flags
8181
8182 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8183 flags contain C<SV_GMAGIC>, it handles get-magic.
8184
8185 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8186 scalar data of the variable, but transformed to such a format that a normal
8187 memory comparison can be used to compare the data according to the locale
8188 settings.
8189
8190 =cut
8191 */
8192
8193 char *
8194 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8195 {
8196     MAGIC *mg;
8197
8198     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8199
8200     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8201
8202     /* If we don't have collation magic on 'sv', or the locale has changed
8203      * since the last time we calculated it, get it and save it now */
8204     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8205         const char *s;
8206         char *xf;
8207         STRLEN len, xlen;
8208
8209         /* Free the old space */
8210         if (mg)
8211             Safefree(mg->mg_ptr);
8212
8213         s = SvPV_flags_const(sv, len, flags);
8214         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8215             if (! mg) {
8216                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8217                                  0, 0);
8218                 assert(mg);
8219             }
8220             mg->mg_ptr = xf;
8221             mg->mg_len = xlen;
8222         }
8223         else {
8224             if (mg) {
8225                 mg->mg_ptr = NULL;
8226                 mg->mg_len = -1;
8227             }
8228         }
8229     }
8230
8231     if (mg && mg->mg_ptr) {
8232         *nxp = mg->mg_len;
8233         return mg->mg_ptr + sizeof(PL_collation_ix);
8234     }
8235     else {
8236         *nxp = 0;
8237         return NULL;
8238     }
8239 }
8240
8241 #endif /* USE_LOCALE_COLLATE */
8242
8243 static char *
8244 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8245 {
8246     SV * const tsv = newSV(0);
8247     ENTER;
8248     SAVEFREESV(tsv);
8249     sv_gets(tsv, fp, 0);
8250     sv_utf8_upgrade_nomg(tsv);
8251     SvCUR_set(sv,append);
8252     sv_catsv(sv,tsv);
8253     LEAVE;
8254     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8255 }
8256
8257 static char *
8258 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8259 {
8260     SSize_t bytesread;
8261     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8262       /* Grab the size of the record we're getting */
8263     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8264     
8265     /* Go yank in */
8266 #ifdef __VMS
8267     int fd;
8268     Stat_t st;
8269
8270     /* With a true, record-oriented file on VMS, we need to use read directly
8271      * to ensure that we respect RMS record boundaries.  The user is responsible
8272      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8273      * record size) field.  N.B. This is likely to produce invalid results on
8274      * varying-width character data when a record ends mid-character.
8275      */
8276     fd = PerlIO_fileno(fp);
8277     if (fd != -1
8278         && PerlLIO_fstat(fd, &st) == 0
8279         && (st.st_fab_rfm == FAB$C_VAR
8280             || st.st_fab_rfm == FAB$C_VFC
8281             || st.st_fab_rfm == FAB$C_FIX)) {
8282
8283         bytesread = PerlLIO_read(fd, buffer, recsize);
8284     }
8285     else /* in-memory file from PerlIO::Scalar
8286           * or not a record-oriented file
8287           */
8288 #endif
8289     {
8290         bytesread = PerlIO_read(fp, buffer, recsize);
8291
8292         /* At this point, the logic in sv_get() means that sv will
8293            be treated as utf-8 if the handle is utf8.
8294         */
8295         if (PerlIO_isutf8(fp) && bytesread > 0) {
8296             char *bend = buffer + bytesread;
8297             char *bufp = buffer;
8298             size_t charcount = 0;
8299             bool charstart = TRUE;
8300             STRLEN skip = 0;
8301
8302             while (charcount < recsize) {
8303                 /* count accumulated characters */
8304                 while (bufp < bend) {
8305                     if (charstart) {
8306                         skip = UTF8SKIP(bufp);
8307                     }
8308                     if (bufp + skip > bend) {
8309                         /* partial at the end */
8310                         charstart = FALSE;
8311                         break;
8312                     }
8313                     else {
8314                         ++charcount;
8315                         bufp += skip;
8316                         charstart = TRUE;
8317                     }
8318                 }
8319
8320                 if (charcount < recsize) {
8321                     STRLEN readsize;
8322                     STRLEN bufp_offset = bufp - buffer;
8323                     SSize_t morebytesread;
8324
8325                     /* originally I read enough to fill any incomplete
8326                        character and the first byte of the next
8327                        character if needed, but if there's many
8328                        multi-byte encoded characters we're going to be
8329                        making a read call for every character beyond
8330                        the original read size.
8331
8332                        So instead, read the rest of the character if
8333                        any, and enough bytes to match at least the
8334                        start bytes for each character we're going to
8335                        read.
8336                     */
8337                     if (charstart)
8338                         readsize = recsize - charcount;
8339                     else 
8340                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8341                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8342                     bend = buffer + bytesread;
8343                     morebytesread = PerlIO_read(fp, bend, readsize);
8344                     if (morebytesread <= 0) {
8345                         /* we're done, if we still have incomplete
8346                            characters the check code in sv_gets() will
8347                            warn about them.
8348
8349                            I'd originally considered doing
8350                            PerlIO_ungetc() on all but the lead
8351                            character of the incomplete character, but
8352                            read() doesn't do that, so I don't.
8353                         */
8354                         break;
8355                     }
8356
8357                     /* prepare to scan some more */
8358                     bytesread += morebytesread;
8359                     bend = buffer + bytesread;
8360                     bufp = buffer + bufp_offset;
8361                 }
8362             }
8363         }
8364     }
8365
8366     if (bytesread < 0)
8367         bytesread = 0;
8368     SvCUR_set(sv, bytesread + append);
8369     buffer[bytesread] = '\0';
8370     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8371 }
8372
8373 /*
8374 =for apidoc sv_gets
8375
8376 Get a line from the filehandle and store it into the SV, optionally
8377 appending to the currently-stored string.  If C<append> is not 0, the
8378 line is appended to the SV instead of overwriting it.  C<append> should
8379 be set to the byte offset that the appended string should start at
8380 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8381
8382 =cut
8383 */
8384
8385 char *
8386 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8387 {
8388     const char *rsptr;
8389     STRLEN rslen;
8390     STDCHAR rslast;
8391     STDCHAR *bp;
8392     SSize_t cnt;
8393     int i = 0;
8394     int rspara = 0;
8395
8396     PERL_ARGS_ASSERT_SV_GETS;
8397
8398     if (SvTHINKFIRST(sv))
8399         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8400     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8401        from <>.
8402        However, perlbench says it's slower, because the existing swipe code
8403        is faster than copy on write.
8404        Swings and roundabouts.  */
8405     SvUPGRADE(sv, SVt_PV);
8406
8407     if (append) {
8408         /* line is going to be appended to the existing buffer in the sv */
8409         if (PerlIO_isutf8(fp)) {
8410             if (!SvUTF8(sv)) {
8411                 sv_utf8_upgrade_nomg(sv);
8412                 sv_pos_u2b(sv,&append,0);
8413             }
8414         } else if (SvUTF8(sv)) {
8415             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8416         }
8417     }
8418
8419     SvPOK_only(sv);
8420     if (!append) {
8421         /* not appending - "clear" the string by setting SvCUR to 0,
8422          * the pv is still avaiable. */
8423         SvCUR_set(sv,0);
8424     }
8425     if (PerlIO_isutf8(fp))
8426         SvUTF8_on(sv);
8427
8428     if (IN_PERL_COMPILETIME) {
8429         /* we always read code in line mode */
8430         rsptr = "\n";
8431         rslen = 1;
8432     }
8433     else if (RsSNARF(PL_rs)) {
8434         /* If it is a regular disk file use size from stat() as estimate
8435            of amount we are going to read -- may result in mallocing
8436            more memory than we really need if the layers below reduce
8437            the size we read (e.g. CRLF or a gzip layer).
8438          */
8439         Stat_t st;
8440         int fd = PerlIO_fileno(fp);
8441         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8442             const Off_t offset = PerlIO_tell(fp);
8443             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8444 #ifdef PERL_COPY_ON_WRITE
8445                 /* Add an extra byte for the sake of copy-on-write's
8446                  * buffer reference count. */
8447                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8448 #else
8449                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8450 #endif
8451             }
8452         }
8453         rsptr = NULL;
8454         rslen = 0;
8455     }
8456     else if (RsRECORD(PL_rs)) {
8457         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8458     }
8459     else if (RsPARA(PL_rs)) {
8460         rsptr = "\n\n";
8461         rslen = 2;
8462         rspara = 1;
8463     }
8464     else {
8465         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8466         if (PerlIO_isutf8(fp)) {
8467             rsptr = SvPVutf8(PL_rs, rslen);
8468         }
8469         else {
8470             if (SvUTF8(PL_rs)) {
8471                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8472                     Perl_croak(aTHX_ "Wide character in $/");
8473                 }
8474             }
8475             /* extract the raw pointer to the record separator */
8476             rsptr = SvPV_const(PL_rs, rslen);
8477         }
8478     }
8479
8480     /* rslast is the last character in the record separator
8481      * note we don't use rslast except when rslen is true, so the
8482      * null assign is a placeholder. */
8483     rslast = rslen ? rsptr[rslen - 1] : '\0';
8484
8485     if (rspara) {               /* have to do this both before and after */
8486         do {                    /* to make sure file boundaries work right */
8487             if (PerlIO_eof(fp))
8488                 return 0;
8489             i = PerlIO_getc(fp);
8490             if (i != '\n') {
8491                 if (i == -1)
8492                     return 0;
8493                 PerlIO_ungetc(fp,i);
8494                 break;
8495             }
8496         } while (i != EOF);
8497     }
8498
8499     /* See if we know enough about I/O mechanism to cheat it ! */
8500
8501     /* This used to be #ifdef test - it is made run-time test for ease
8502        of abstracting out stdio interface. One call should be cheap
8503        enough here - and may even be a macro allowing compile
8504        time optimization.
8505      */
8506
8507     if (PerlIO_fast_gets(fp)) {
8508     /*
8509      * We can do buffer based IO operations on this filehandle.
8510      *
8511      * This means we can bypass a lot of subcalls and process
8512      * the buffer directly, it also means we know the upper bound
8513      * on the amount of data we might read of the current buffer
8514      * into our sv. Knowing this allows us to preallocate the pv
8515      * to be able to hold that maximum, which allows us to simplify
8516      * a lot of logic. */
8517
8518     /*
8519      * We're going to steal some values from the stdio struct
8520      * and put EVERYTHING in the innermost loop into registers.
8521      */
8522     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8523     STRLEN bpx;         /* length of the data in the target sv
8524                            used to fix pointers after a SvGROW */
8525     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8526                            of data left in the read-ahead buffer.
8527                            If 0 then the pv buffer can hold the full
8528                            amount left, otherwise this is the amount it
8529                            can hold. */
8530
8531     /* Here is some breathtakingly efficient cheating */
8532
8533     /* When you read the following logic resist the urge to think
8534      * of record separators that are 1 byte long. They are an
8535      * uninteresting special (simple) case.
8536      *
8537      * Instead think of record separators which are at least 2 bytes
8538      * long, and keep in mind that we need to deal with such
8539      * separators when they cross a read-ahead buffer boundary.
8540      *
8541      * Also consider that we need to gracefully deal with separators
8542      * that may be longer than a single read ahead buffer.
8543      *
8544      * Lastly do not forget we want to copy the delimiter as well. We
8545      * are copying all data in the file _up_to_and_including_ the separator
8546      * itself.
8547      *
8548      * Now that you have all that in mind here is what is happening below:
8549      *
8550      * 1. When we first enter the loop we do some memory book keeping to see
8551      * how much free space there is in the target SV. (This sub assumes that
8552      * it is operating on the same SV most of the time via $_ and that it is
8553      * going to be able to reuse the same pv buffer each call.) If there is
8554      * "enough" room then we set "shortbuffered" to how much space there is
8555      * and start reading forward.
8556      *
8557      * 2. When we scan forward we copy from the read-ahead buffer to the target
8558      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8559      * and the end of the of pv, as well as for the "rslast", which is the last
8560      * char of the separator.
8561      *
8562      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8563      * (which has a "complete" record up to the point we saw rslast) and check
8564      * it to see if it matches the separator. If it does we are done. If it doesn't
8565      * we continue on with the scan/copy.
8566      *
8567      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8568      * the IO system to read the next buffer. We do this by doing a getc(), which
8569      * returns a single char read (or EOF), and prefills the buffer, and also
8570      * allows us to find out how full the buffer is.  We use this information to
8571      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8572      * the returned single char into the target sv, and then go back into scan
8573      * forward mode.
8574      *
8575      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8576      * remaining space in the read-buffer.
8577      *
8578      * Note that this code despite its twisty-turny nature is pretty darn slick.
8579      * It manages single byte separators, multi-byte cross boundary separators,
8580      * and cross-read-buffer separators cleanly and efficiently at the cost
8581      * of potentially greatly overallocating the target SV.
8582      *
8583      * Yves
8584      */
8585
8586
8587     /* get the number of bytes remaining in the read-ahead buffer
8588      * on first call on a given fp this will return 0.*/
8589     cnt = PerlIO_get_cnt(fp);
8590
8591     /* make sure we have the room */
8592     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8593         /* Not room for all of it
8594            if we are looking for a separator and room for some
8595          */
8596         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8597             /* just process what we have room for */
8598             shortbuffered = cnt - SvLEN(sv) + append + 1;
8599             cnt -= shortbuffered;
8600         }
8601         else {
8602             /* ensure that the target sv has enough room to hold
8603              * the rest of the read-ahead buffer */
8604             shortbuffered = 0;
8605             /* remember that cnt can be negative */
8606             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8607         }
8608     }
8609     else {
8610         /* we have enough room to hold the full buffer, lets scream */
8611         shortbuffered = 0;
8612     }
8613
8614     /* extract the pointer to sv's string buffer, offset by append as necessary */
8615     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8616     /* extract the point to the read-ahead buffer */
8617     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8618
8619     /* some trace debug output */
8620     DEBUG_P(PerlIO_printf(Perl_debug_log,
8621         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8622     DEBUG_P(PerlIO_printf(Perl_debug_log,
8623         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8624          UVuf "\n",
8625                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8626                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8627
8628     for (;;) {
8629       screamer:
8630         /* if there is stuff left in the read-ahead buffer */
8631         if (cnt > 0) {
8632             /* if there is a separator */
8633             if (rslen) {
8634                 /* find next rslast */
8635                 STDCHAR *p;
8636
8637                 /* shortcut common case of blank line */
8638                 cnt--;
8639                 if ((*bp++ = *ptr++) == rslast)
8640                     goto thats_all_folks;
8641
8642                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8643                 if (p) {
8644                     SSize_t got = p - ptr + 1;
8645                     Copy(ptr, bp, got, STDCHAR);
8646                     ptr += got;
8647                     bp  += got;
8648                     cnt -= got;
8649                     goto thats_all_folks;
8650                 }
8651                 Copy(ptr, bp, cnt, STDCHAR);
8652                 ptr += cnt;
8653                 bp  += cnt;
8654                 cnt = 0;
8655             }
8656             else {
8657                 /* no separator, slurp the full buffer */
8658                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8659                 bp += cnt;                           /* screams  |  dust */
8660                 ptr += cnt;                          /* louder   |  sed :-) */
8661                 cnt = 0;
8662                 assert (!shortbuffered);
8663                 goto cannot_be_shortbuffered;
8664             }
8665         }
8666         
8667         if (shortbuffered) {            /* oh well, must extend */
8668             /* we didnt have enough room to fit the line into the target buffer
8669              * so we must extend the target buffer and keep going */
8670             cnt = shortbuffered;
8671             shortbuffered = 0;
8672             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8673             SvCUR_set(sv, bpx);
8674             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8675             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8676             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8677             continue;
8678         }
8679
8680     cannot_be_shortbuffered:
8681         /* we need to refill the read-ahead buffer if possible */
8682
8683         DEBUG_P(PerlIO_printf(Perl_debug_log,
8684                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8685                               PTR2UV(ptr),(IV)cnt));
8686         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8687
8688         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8689            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8690             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8691             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8692
8693         /*
8694             call PerlIO_getc() to let it prefill the lookahead buffer
8695
8696             This used to call 'filbuf' in stdio form, but as that behaves like
8697             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8698             another abstraction.
8699
8700             Note we have to deal with the char in 'i' if we are not at EOF
8701         */
8702         i   = PerlIO_getc(fp);          /* get more characters */
8703
8704         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8705            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8706             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8707             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8708
8709         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8710         cnt = PerlIO_get_cnt(fp);
8711         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8712         DEBUG_P(PerlIO_printf(Perl_debug_log,
8713             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8714             PTR2UV(ptr),(IV)cnt));
8715
8716         if (i == EOF)                   /* all done for ever? */
8717             goto thats_really_all_folks;
8718
8719         /* make sure we have enough space in the target sv */
8720         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8721         SvCUR_set(sv, bpx);
8722         SvGROW(sv, bpx + cnt + 2);
8723         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8724
8725         /* copy of the char we got from getc() */
8726         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8727
8728         /* make sure we deal with the i being the last character of a separator */
8729         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8730             goto thats_all_folks;
8731     }
8732
8733   thats_all_folks:
8734     /* check if we have actually found the separator - only really applies
8735      * when rslen > 1 */
8736     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8737           memNE((char*)bp - rslen, rsptr, rslen))
8738         goto screamer;                          /* go back to the fray */
8739   thats_really_all_folks:
8740     if (shortbuffered)
8741         cnt += shortbuffered;
8742         DEBUG_P(PerlIO_printf(Perl_debug_log,
8743              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8744     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8745     DEBUG_P(PerlIO_printf(Perl_debug_log,
8746         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8747         "\n",
8748         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8749         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8750     *bp = '\0';
8751     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8752     DEBUG_P(PerlIO_printf(Perl_debug_log,
8753         "Screamer: done, len=%ld, string=|%.*s|\n",
8754         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8755     }
8756    else
8757     {
8758        /*The big, slow, and stupid way. */
8759 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8760         STDCHAR *buf = NULL;
8761         Newx(buf, 8192, STDCHAR);
8762         assert(buf);
8763 #else
8764         STDCHAR buf[8192];
8765 #endif
8766
8767       screamer2:
8768         if (rslen) {
8769             const STDCHAR * const bpe = buf + sizeof(buf);
8770             bp = buf;
8771             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8772                 ; /* keep reading */
8773             cnt = bp - buf;
8774         }
8775         else {
8776             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8777             /* Accommodate broken VAXC compiler, which applies U8 cast to
8778              * both args of ?: operator, causing EOF to change into 255
8779              */
8780             if (cnt > 0)
8781                  i = (U8)buf[cnt - 1];
8782             else
8783                  i = EOF;
8784         }
8785
8786         if (cnt < 0)
8787             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8788         if (append)
8789             sv_catpvn_nomg(sv, (char *) buf, cnt);
8790         else
8791             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8792
8793         if (i != EOF &&                 /* joy */
8794             (!rslen ||
8795              SvCUR(sv) < rslen ||
8796              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8797         {
8798             append = -1;
8799             /*
8800              * If we're reading from a TTY and we get a short read,
8801              * indicating that the user hit his EOF character, we need
8802              * to notice it now, because if we try to read from the TTY
8803              * again, the EOF condition will disappear.
8804              *
8805              * The comparison of cnt to sizeof(buf) is an optimization
8806              * that prevents unnecessary calls to feof().
8807              *
8808              * - jik 9/25/96
8809              */
8810             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8811                 goto screamer2;
8812         }
8813
8814 #ifdef USE_HEAP_INSTEAD_OF_STACK
8815         Safefree(buf);
8816 #endif
8817     }
8818
8819     if (rspara) {               /* have to do this both before and after */
8820         while (i != EOF) {      /* to make sure file boundaries work right */
8821             i = PerlIO_getc(fp);
8822             if (i != '\n') {
8823                 PerlIO_ungetc(fp,i);
8824                 break;
8825             }
8826         }
8827     }
8828
8829     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8830 }
8831
8832 /*
8833 =for apidoc sv_inc
8834
8835 Auto-increment of the value in the SV, doing string to numeric conversion
8836 if necessary.  Handles 'get' magic and operator overloading.
8837
8838 =cut
8839 */
8840
8841 void
8842 Perl_sv_inc(pTHX_ SV *const sv)
8843 {
8844     if (!sv)
8845         return;
8846     SvGETMAGIC(sv);
8847     sv_inc_nomg(sv);
8848 }
8849
8850 /*
8851 =for apidoc sv_inc_nomg
8852
8853 Auto-increment of the value in the SV, doing string to numeric conversion
8854 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8855
8856 =cut
8857 */
8858
8859 void
8860 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8861 {
8862     char *d;
8863     int flags;
8864
8865     if (!sv)
8866         return;
8867     if (SvTHINKFIRST(sv)) {
8868         if (SvREADONLY(sv)) {
8869                 Perl_croak_no_modify();
8870         }
8871         if (SvROK(sv)) {
8872             IV i;
8873             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8874                 return;
8875             i = PTR2IV(SvRV(sv));
8876             sv_unref(sv);
8877             sv_setiv(sv, i);
8878         }
8879         else sv_force_normal_flags(sv, 0);
8880     }
8881     flags = SvFLAGS(sv);
8882     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8883         /* It's (privately or publicly) a float, but not tested as an
8884            integer, so test it to see. */
8885         (void) SvIV(sv);
8886         flags = SvFLAGS(sv);
8887     }
8888     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8889         /* It's publicly an integer, or privately an integer-not-float */
8890 #ifdef PERL_PRESERVE_IVUV
8891       oops_its_int:
8892 #endif
8893         if (SvIsUV(sv)) {
8894             if (SvUVX(sv) == UV_MAX)
8895                 sv_setnv(sv, UV_MAX_P1);
8896             else
8897                 (void)SvIOK_only_UV(sv);
8898                 SvUV_set(sv, SvUVX(sv) + 1);
8899         } else {
8900             if (SvIVX(sv) == IV_MAX)
8901                 sv_setuv(sv, (UV)IV_MAX + 1);
8902             else {
8903                 (void)SvIOK_only(sv);
8904                 SvIV_set(sv, SvIVX(sv) + 1);
8905             }   
8906         }
8907         return;
8908     }
8909     if (flags & SVp_NOK) {
8910         const NV was = SvNVX(sv);
8911         if (LIKELY(!Perl_isinfnan(was)) &&
8912             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8913             was >= NV_OVERFLOWS_INTEGERS_AT) {
8914             /* diag_listed_as: Lost precision when %s %f by 1 */
8915             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8916                            "Lost precision when incrementing %" NVff " by 1",
8917                            was);
8918         }
8919         (void)SvNOK_only(sv);
8920         SvNV_set(sv, was + 1.0);
8921         return;
8922     }
8923
8924     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8925     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8926         Perl_croak_no_modify();
8927
8928     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8929         if ((flags & SVTYPEMASK) < SVt_PVIV)
8930             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8931         (void)SvIOK_only(sv);
8932         SvIV_set(sv, 1);
8933         return;
8934     }
8935     d = SvPVX(sv);
8936     while (isALPHA(*d)) d++;
8937     while (isDIGIT(*d)) d++;
8938     if (d < SvEND(sv)) {
8939         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8940 #ifdef PERL_PRESERVE_IVUV
8941         /* Got to punt this as an integer if needs be, but we don't issue
8942            warnings. Probably ought to make the sv_iv_please() that does
8943            the conversion if possible, and silently.  */
8944         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8945             /* Need to try really hard to see if it's an integer.
8946                9.22337203685478e+18 is an integer.
8947                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8948                so $a="9.22337203685478e+18"; $a+0; $a++
8949                needs to be the same as $a="9.22337203685478e+18"; $a++
8950                or we go insane. */
8951         
8952             (void) sv_2iv(sv);
8953             if (SvIOK(sv))
8954                 goto oops_its_int;
8955
8956             /* sv_2iv *should* have made this an NV */
8957             if (flags & SVp_NOK) {
8958                 (void)SvNOK_only(sv);
8959                 SvNV_set(sv, SvNVX(sv) + 1.0);
8960                 return;
8961             }
8962             /* I don't think we can get here. Maybe I should assert this
8963                And if we do get here I suspect that sv_setnv will croak. NWC
8964                Fall through. */
8965             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
8966                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8967         }
8968 #endif /* PERL_PRESERVE_IVUV */
8969         if (!numtype && ckWARN(WARN_NUMERIC))
8970             not_incrementable(sv);
8971         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8972         return;
8973     }
8974     d--;
8975     while (d >= SvPVX_const(sv)) {
8976         if (isDIGIT(*d)) {
8977             if (++*d <= '9')
8978                 return;
8979             *(d--) = '0';
8980         }
8981         else {
8982 #ifdef EBCDIC
8983             /* MKS: The original code here died if letters weren't consecutive.
8984              * at least it didn't have to worry about non-C locales.  The
8985              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8986              * arranged in order (although not consecutively) and that only
8987              * [A-Za-z] are accepted by isALPHA in the C locale.
8988              */
8989             if (isALPHA_FOLD_NE(*d, 'z')) {
8990                 do { ++*d; } while (!isALPHA(*d));
8991                 return;
8992             }
8993             *(d--) -= 'z' - 'a';
8994 #else
8995             ++*d;
8996             if (isALPHA(*d))
8997                 return;
8998             *(d--) -= 'z' - 'a' + 1;
8999 #endif
9000         }
9001     }
9002     /* oh,oh, the number grew */
9003     SvGROW(sv, SvCUR(sv) + 2);
9004     SvCUR_set(sv, SvCUR(sv) + 1);
9005     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9006         *d = d[-1];
9007     if (isDIGIT(d[1]))
9008         *d = '1';
9009     else
9010         *d = d[1];
9011 }
9012
9013 /*
9014 =for apidoc sv_dec
9015
9016 Auto-decrement of the value in the SV, doing string to numeric conversion
9017 if necessary.  Handles 'get' magic and operator overloading.
9018
9019 =cut
9020 */
9021
9022 void
9023 Perl_sv_dec(pTHX_ SV *const sv)
9024 {
9025     if (!sv)
9026         return;
9027     SvGETMAGIC(sv);
9028     sv_dec_nomg(sv);
9029 }
9030
9031 /*
9032 =for apidoc sv_dec_nomg
9033
9034 Auto-decrement of the value in the SV, doing string to numeric conversion
9035 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9036
9037 =cut
9038 */
9039
9040 void
9041 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9042 {
9043     int flags;
9044
9045     if (!sv)
9046         return;
9047     if (SvTHINKFIRST(sv)) {
9048         if (SvREADONLY(sv)) {
9049                 Perl_croak_no_modify();
9050         }
9051         if (SvROK(sv)) {
9052             IV i;
9053             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9054                 return;
9055             i = PTR2IV(SvRV(sv));
9056             sv_unref(sv);
9057             sv_setiv(sv, i);
9058         }
9059         else sv_force_normal_flags(sv, 0);
9060     }
9061     /* Unlike sv_inc we don't have to worry about string-never-numbers
9062        and keeping them magic. But we mustn't warn on punting */
9063     flags = SvFLAGS(sv);
9064     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9065         /* It's publicly an integer, or privately an integer-not-float */
9066 #ifdef PERL_PRESERVE_IVUV
9067       oops_its_int:
9068 #endif
9069         if (SvIsUV(sv)) {
9070             if (SvUVX(sv) == 0) {
9071                 (void)SvIOK_only(sv);
9072                 SvIV_set(sv, -1);
9073             }
9074             else {
9075                 (void)SvIOK_only_UV(sv);
9076                 SvUV_set(sv, SvUVX(sv) - 1);
9077             }   
9078         } else {
9079             if (SvIVX(sv) == IV_MIN) {
9080                 sv_setnv(sv, (NV)IV_MIN);
9081                 goto oops_its_num;
9082             }
9083             else {
9084                 (void)SvIOK_only(sv);
9085                 SvIV_set(sv, SvIVX(sv) - 1);
9086             }   
9087         }
9088         return;
9089     }
9090     if (flags & SVp_NOK) {
9091     oops_its_num:
9092         {
9093             const NV was = SvNVX(sv);
9094             if (LIKELY(!Perl_isinfnan(was)) &&
9095                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9096                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9097                 /* diag_listed_as: Lost precision when %s %f by 1 */
9098                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9099                                "Lost precision when decrementing %" NVff " by 1",
9100                                was);
9101             }
9102             (void)SvNOK_only(sv);
9103             SvNV_set(sv, was - 1.0);
9104             return;
9105         }
9106     }
9107
9108     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9109     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9110         Perl_croak_no_modify();
9111
9112     if (!(flags & SVp_POK)) {
9113         if ((flags & SVTYPEMASK) < SVt_PVIV)
9114             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9115         SvIV_set(sv, -1);
9116         (void)SvIOK_only(sv);
9117         return;
9118     }
9119 #ifdef PERL_PRESERVE_IVUV
9120     {
9121         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9122         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9123             /* Need to try really hard to see if it's an integer.
9124                9.22337203685478e+18 is an integer.
9125                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9126                so $a="9.22337203685478e+18"; $a+0; $a--
9127                needs to be the same as $a="9.22337203685478e+18"; $a--
9128                or we go insane. */
9129         
9130             (void) sv_2iv(sv);
9131             if (SvIOK(sv))
9132                 goto oops_its_int;
9133
9134             /* sv_2iv *should* have made this an NV */
9135             if (flags & SVp_NOK) {
9136                 (void)SvNOK_only(sv);
9137                 SvNV_set(sv, SvNVX(sv) - 1.0);
9138                 return;
9139             }
9140             /* I don't think we can get here. Maybe I should assert this
9141                And if we do get here I suspect that sv_setnv will croak. NWC
9142                Fall through. */
9143             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9144                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9145         }
9146     }
9147 #endif /* PERL_PRESERVE_IVUV */
9148     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9149 }
9150
9151 /* this define is used to eliminate a chunk of duplicated but shared logic
9152  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9153  * used anywhere but here - yves
9154  */
9155 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9156     STMT_START {      \
9157         SSize_t ix = ++PL_tmps_ix;              \
9158         if (UNLIKELY(ix >= PL_tmps_max))        \
9159             ix = tmps_grow_p(ix);                       \
9160         PL_tmps_stack[ix] = (AnSv); \
9161     } STMT_END
9162
9163 /*
9164 =for apidoc sv_mortalcopy
9165
9166 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9167 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9168 explicit call to C<FREETMPS>, or by an implicit call at places such as
9169 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9170
9171 =cut
9172 */
9173
9174 /* Make a string that will exist for the duration of the expression
9175  * evaluation.  Actually, it may have to last longer than that, but
9176  * hopefully we won't free it until it has been assigned to a
9177  * permanent location. */
9178
9179 SV *
9180 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9181 {
9182     SV *sv;
9183
9184     if (flags & SV_GMAGIC)
9185         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9186     new_SV(sv);
9187     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9188     PUSH_EXTEND_MORTAL__SV_C(sv);
9189     SvTEMP_on(sv);
9190     return sv;
9191 }
9192
9193 /*
9194 =for apidoc sv_newmortal
9195
9196 Creates a new null SV which is mortal.  The reference count of the SV is
9197 set to 1.  It will be destroyed "soon", either by an explicit call to
9198 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9199 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9200
9201 =cut
9202 */
9203
9204 SV *
9205 Perl_sv_newmortal(pTHX)
9206 {
9207     SV *sv;
9208
9209     new_SV(sv);
9210     SvFLAGS(sv) = SVs_TEMP;
9211     PUSH_EXTEND_MORTAL__SV_C(sv);
9212     return sv;
9213 }
9214
9215
9216 /*
9217 =for apidoc newSVpvn_flags
9218
9219 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9220 characters) into it.  The reference count for the
9221 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9222 string.  You are responsible for ensuring that the source string is at least
9223 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9224 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9225 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9226 returning.  If C<SVf_UTF8> is set, C<s>
9227 is considered to be in UTF-8 and the
9228 C<SVf_UTF8> flag will be set on the new SV.
9229 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9230
9231     #define newSVpvn_utf8(s, len, u)                    \
9232         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9233
9234 =cut
9235 */
9236
9237 SV *
9238 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9239 {
9240     SV *sv;
9241
9242     /* All the flags we don't support must be zero.
9243        And we're new code so I'm going to assert this from the start.  */
9244     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9245     new_SV(sv);
9246     sv_setpvn(sv,s,len);
9247
9248     /* This code used to do a sv_2mortal(), however we now unroll the call to
9249      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9250      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9251      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9252      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9253      * means that we eliminate quite a few steps than it looks - Yves
9254      * (explaining patch by gfx) */
9255
9256     SvFLAGS(sv) |= flags;
9257
9258     if(flags & SVs_TEMP){
9259         PUSH_EXTEND_MORTAL__SV_C(sv);
9260     }
9261
9262     return sv;
9263 }
9264
9265 /*
9266 =for apidoc sv_2mortal
9267
9268 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9269 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9270 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9271 string buffer can be "stolen" if this SV is copied.  See also
9272 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9273
9274 =cut
9275 */
9276
9277 SV *
9278 Perl_sv_2mortal(pTHX_ SV *const sv)
9279 {
9280     dVAR;
9281     if (!sv)
9282         return sv;
9283     if (SvIMMORTAL(sv))
9284         return sv;
9285     PUSH_EXTEND_MORTAL__SV_C(sv);
9286     SvTEMP_on(sv);
9287     return sv;
9288 }
9289
9290 /*
9291 =for apidoc newSVpv
9292
9293 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9294 characters) into it.  The reference count for the
9295 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9296 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9297 C<NUL> characters and has to have a terminating C<NUL> byte).
9298
9299 This function can cause reliability issues if you are likely to pass in
9300 empty strings that are not null terminated, because it will run
9301 strlen on the string and potentially run past valid memory.
9302
9303 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9304 For string literals use L</newSVpvs> instead.  This function will work fine for
9305 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9306 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9307
9308 =cut
9309 */
9310
9311 SV *
9312 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9313 {
9314     SV *sv;
9315
9316     new_SV(sv);
9317     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9318     return sv;
9319 }
9320
9321 /*
9322 =for apidoc newSVpvn
9323
9324 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9325 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9326 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9327 are responsible for ensuring that the source buffer is at least
9328 C<len> bytes long.  If the C<s> argument is NULL the new SV will be
9329 undefined.
9330
9331 =cut
9332 */
9333
9334 SV *
9335 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9336 {
9337     SV *sv;
9338     new_SV(sv);
9339     sv_setpvn(sv,buffer,len);
9340     return sv;
9341 }
9342
9343 /*
9344 =for apidoc newSVhek
9345
9346 Creates a new SV from the hash key structure.  It will generate scalars that
9347 point to the shared string table where possible.  Returns a new (undefined)
9348 SV if C<hek> is NULL.
9349
9350 =cut
9351 */
9352
9353 SV *
9354 Perl_newSVhek(pTHX_ const HEK *const hek)
9355 {
9356     if (!hek) {
9357         SV *sv;
9358
9359         new_SV(sv);
9360         return sv;
9361     }
9362
9363     if (HEK_LEN(hek) == HEf_SVKEY) {
9364         return newSVsv(*(SV**)HEK_KEY(hek));
9365     } else {
9366         const int flags = HEK_FLAGS(hek);
9367         if (flags & HVhek_WASUTF8) {
9368             /* Trouble :-)
9369                Andreas would like keys he put in as utf8 to come back as utf8
9370             */
9371             STRLEN utf8_len = HEK_LEN(hek);
9372             SV * const sv = newSV_type(SVt_PV);
9373             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9374             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9375             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9376             SvUTF8_on (sv);
9377             return sv;
9378         } else if (flags & HVhek_UNSHARED) {
9379             /* A hash that isn't using shared hash keys has to have
9380                the flag in every key so that we know not to try to call
9381                share_hek_hek on it.  */
9382
9383             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9384             if (HEK_UTF8(hek))
9385                 SvUTF8_on (sv);
9386             return sv;
9387         }
9388         /* This will be overwhelminly the most common case.  */
9389         {
9390             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9391                more efficient than sharepvn().  */
9392             SV *sv;
9393
9394             new_SV(sv);
9395             sv_upgrade(sv, SVt_PV);
9396             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9397             SvCUR_set(sv, HEK_LEN(hek));
9398             SvLEN_set(sv, 0);
9399             SvIsCOW_on(sv);
9400             SvPOK_on(sv);
9401             if (HEK_UTF8(hek))
9402                 SvUTF8_on(sv);
9403             return sv;
9404         }
9405     }
9406 }
9407
9408 /*
9409 =for apidoc newSVpvn_share
9410
9411 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9412 table.  If the string does not already exist in the table, it is
9413 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9414 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9415 is non-zero, that value is used; otherwise the hash is computed.
9416 The string's hash can later be retrieved from the SV
9417 with the C<SvSHARED_HASH()> macro.  The idea here is
9418 that as the string table is used for shared hash keys these strings will have
9419 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9420
9421 =cut
9422 */
9423
9424 SV *
9425 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9426 {
9427     dVAR;
9428     SV *sv;
9429     bool is_utf8 = FALSE;
9430     const char *const orig_src = src;
9431
9432     if (len < 0) {
9433         STRLEN tmplen = -len;
9434         is_utf8 = TRUE;
9435         /* See the note in hv.c:hv_fetch() --jhi */
9436         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9437         len = tmplen;
9438     }
9439     if (!hash)
9440         PERL_HASH(hash, src, len);
9441     new_SV(sv);
9442     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9443        changes here, update it there too.  */
9444     sv_upgrade(sv, SVt_PV);
9445     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9446     SvCUR_set(sv, len);
9447     SvLEN_set(sv, 0);
9448     SvIsCOW_on(sv);
9449     SvPOK_on(sv);
9450     if (is_utf8)
9451         SvUTF8_on(sv);
9452     if (src != orig_src)
9453         Safefree(src);
9454     return sv;
9455 }
9456
9457 /*
9458 =for apidoc newSVpv_share
9459
9460 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9461 string/length pair.
9462
9463 =cut
9464 */
9465
9466 SV *
9467 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9468 {
9469     return newSVpvn_share(src, strlen(src), hash);
9470 }
9471
9472 #if defined(PERL_IMPLICIT_CONTEXT)
9473
9474 /* pTHX_ magic can't cope with varargs, so this is a no-context
9475  * version of the main function, (which may itself be aliased to us).
9476  * Don't access this version directly.
9477  */
9478
9479 SV *
9480 Perl_newSVpvf_nocontext(const char *const pat, ...)
9481 {
9482     dTHX;
9483     SV *sv;
9484     va_list args;
9485
9486     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9487
9488     va_start(args, pat);
9489     sv = vnewSVpvf(pat, &args);
9490     va_end(args);
9491     return sv;
9492 }
9493 #endif
9494
9495 /*
9496 =for apidoc newSVpvf
9497
9498 Creates a new SV and initializes it with the string formatted like
9499 C<sv_catpvf>.
9500
9501 =cut
9502 */
9503
9504 SV *
9505 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9506 {
9507     SV *sv;
9508     va_list args;
9509
9510     PERL_ARGS_ASSERT_NEWSVPVF;
9511
9512     va_start(args, pat);
9513     sv = vnewSVpvf(pat, &args);
9514     va_end(args);
9515     return sv;
9516 }
9517
9518 /* backend for newSVpvf() and newSVpvf_nocontext() */
9519
9520 SV *
9521 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9522 {
9523     SV *sv;
9524
9525     PERL_ARGS_ASSERT_VNEWSVPVF;
9526
9527     new_SV(sv);
9528     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9529     return sv;
9530 }
9531
9532 /*
9533 =for apidoc newSVnv
9534
9535 Creates a new SV and copies a floating point value into it.
9536 The reference count for the SV is set to 1.
9537
9538 =cut
9539 */
9540
9541 SV *
9542 Perl_newSVnv(pTHX_ const NV n)
9543 {
9544     SV *sv;
9545
9546     new_SV(sv);
9547     sv_setnv(sv,n);
9548     return sv;
9549 }
9550
9551 /*
9552 =for apidoc newSViv
9553
9554 Creates a new SV and copies an integer into it.  The reference count for the
9555 SV is set to 1.
9556
9557 =cut
9558 */
9559
9560 SV *
9561 Perl_newSViv(pTHX_ const IV i)
9562 {
9563     SV *sv;
9564
9565     new_SV(sv);
9566
9567     /* Inlining ONLY the small relevant subset of sv_setiv here
9568      * for performance. Makes a significant difference. */
9569
9570     /* We're starting from SVt_FIRST, so provided that's
9571      * actual 0, we don't have to unset any SV type flags
9572      * to promote to SVt_IV. */
9573     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9574
9575     SET_SVANY_FOR_BODYLESS_IV(sv);
9576     SvFLAGS(sv) |= SVt_IV;
9577     (void)SvIOK_on(sv);
9578
9579     SvIV_set(sv, i);
9580     SvTAINT(sv);
9581
9582     return sv;
9583 }
9584
9585 /*
9586 =for apidoc newSVuv
9587
9588 Creates a new SV and copies an unsigned integer into it.
9589 The reference count for the SV is set to 1.
9590
9591 =cut
9592 */
9593
9594 SV *
9595 Perl_newSVuv(pTHX_ const UV u)
9596 {
9597     SV *sv;
9598
9599     /* Inlining ONLY the small relevant subset of sv_setuv here
9600      * for performance. Makes a significant difference. */
9601
9602     /* Using ivs is more efficient than using uvs - see sv_setuv */
9603     if (u <= (UV)IV_MAX) {
9604         return newSViv((IV)u);
9605     }
9606
9607     new_SV(sv);
9608
9609     /* We're starting from SVt_FIRST, so provided that's
9610      * actual 0, we don't have to unset any SV type flags
9611      * to promote to SVt_IV. */
9612     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9613
9614     SET_SVANY_FOR_BODYLESS_IV(sv);
9615     SvFLAGS(sv) |= SVt_IV;
9616     (void)SvIOK_on(sv);
9617     (void)SvIsUV_on(sv);
9618
9619     SvUV_set(sv, u);
9620     SvTAINT(sv);
9621
9622     return sv;
9623 }
9624
9625 /*
9626 =for apidoc newSV_type
9627
9628 Creates a new SV, of the type specified.  The reference count for the new SV
9629 is set to 1.
9630
9631 =cut
9632 */
9633
9634 SV *
9635 Perl_newSV_type(pTHX_ const svtype type)
9636 {
9637     SV *sv;
9638
9639     new_SV(sv);
9640     ASSUME(SvTYPE(sv) == SVt_FIRST);
9641     if(type != SVt_FIRST)
9642         sv_upgrade(sv, type);
9643     return sv;
9644 }
9645
9646 /*
9647 =for apidoc newRV_noinc
9648
9649 Creates an RV wrapper for an SV.  The reference count for the original
9650 SV is B<not> incremented.
9651
9652 =cut
9653 */
9654
9655 SV *
9656 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9657 {
9658     SV *sv;
9659
9660     PERL_ARGS_ASSERT_NEWRV_NOINC;
9661
9662     new_SV(sv);
9663
9664     /* We're starting from SVt_FIRST, so provided that's
9665      * actual 0, we don't have to unset any SV type flags
9666      * to promote to SVt_IV. */
9667     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9668
9669     SET_SVANY_FOR_BODYLESS_IV(sv);
9670     SvFLAGS(sv) |= SVt_IV;
9671     SvROK_on(sv);
9672     SvIV_set(sv, 0);
9673
9674     SvTEMP_off(tmpRef);
9675     SvRV_set(sv, tmpRef);
9676
9677     return sv;
9678 }
9679
9680 /* newRV_inc is the official function name to use now.
9681  * newRV_inc is in fact #defined to newRV in sv.h
9682  */
9683
9684 SV *
9685 Perl_newRV(pTHX_ SV *const sv)
9686 {
9687     PERL_ARGS_ASSERT_NEWRV;
9688
9689     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9690 }
9691
9692 /*
9693 =for apidoc newSVsv
9694
9695 Creates a new SV which is an exact duplicate of the original SV.
9696 (Uses C<sv_setsv>.)
9697
9698 =cut
9699 */
9700
9701 SV *
9702 Perl_newSVsv(pTHX_ SV *const old)
9703 {
9704     SV *sv;
9705
9706     if (!old)
9707         return NULL;
9708     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9709         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9710         return NULL;
9711     }
9712     /* Do this here, otherwise we leak the new SV if this croaks. */
9713     SvGETMAGIC(old);
9714     new_SV(sv);
9715     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9716        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9717     sv_setsv_flags(sv, old, SV_NOSTEAL);
9718     return sv;
9719 }
9720
9721 /*
9722 =for apidoc sv_reset
9723
9724 Underlying implementation for the C<reset> Perl function.
9725 Note that the perl-level function is vaguely deprecated.
9726
9727 =cut
9728 */
9729
9730 void
9731 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9732 {
9733     PERL_ARGS_ASSERT_SV_RESET;
9734
9735     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9736 }
9737
9738 void
9739 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9740 {
9741     char todo[PERL_UCHAR_MAX+1];
9742     const char *send;
9743
9744     if (!stash || SvTYPE(stash) != SVt_PVHV)
9745         return;
9746
9747     if (!s) {           /* reset ?? searches */
9748         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9749         if (mg) {
9750             const U32 count = mg->mg_len / sizeof(PMOP**);
9751             PMOP **pmp = (PMOP**) mg->mg_ptr;
9752             PMOP *const *const end = pmp + count;
9753
9754             while (pmp < end) {
9755 #ifdef USE_ITHREADS
9756                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9757 #else
9758                 (*pmp)->op_pmflags &= ~PMf_USED;
9759 #endif
9760                 ++pmp;
9761             }
9762         }
9763         return;
9764     }
9765
9766     /* reset variables */
9767
9768     if (!HvARRAY(stash))
9769         return;
9770
9771     Zero(todo, 256, char);
9772     send = s + len;
9773     while (s < send) {
9774         I32 max;
9775         I32 i = (unsigned char)*s;
9776         if (s[1] == '-') {
9777             s += 2;
9778         }
9779         max = (unsigned char)*s++;
9780         for ( ; i <= max; i++) {
9781             todo[i] = 1;
9782         }
9783         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9784             HE *entry;
9785             for (entry = HvARRAY(stash)[i];
9786                  entry;
9787                  entry = HeNEXT(entry))
9788             {
9789                 GV *gv;
9790                 SV *sv;
9791
9792                 if (!todo[(U8)*HeKEY(entry)])
9793                     continue;
9794                 gv = MUTABLE_GV(HeVAL(entry));
9795                 if (!isGV(gv))
9796                     continue;
9797                 sv = GvSV(gv);
9798                 if (sv && !SvREADONLY(sv)) {
9799                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9800                     if (!isGV(sv)) SvOK_off(sv);
9801                 }
9802                 if (GvAV(gv)) {
9803                     av_clear(GvAV(gv));
9804                 }
9805                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9806                     hv_clear(GvHV(gv));
9807                 }
9808             }
9809         }
9810     }
9811 }
9812
9813 /*
9814 =for apidoc sv_2io
9815
9816 Using various gambits, try to get an IO from an SV: the IO slot if its a
9817 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9818 named after the PV if we're a string.
9819
9820 'Get' magic is ignored on the C<sv> passed in, but will be called on
9821 C<SvRV(sv)> if C<sv> is an RV.
9822
9823 =cut
9824 */
9825
9826 IO*
9827 Perl_sv_2io(pTHX_ SV *const sv)
9828 {
9829     IO* io;
9830     GV* gv;
9831
9832     PERL_ARGS_ASSERT_SV_2IO;
9833
9834     switch (SvTYPE(sv)) {
9835     case SVt_PVIO:
9836         io = MUTABLE_IO(sv);
9837         break;
9838     case SVt_PVGV:
9839     case SVt_PVLV:
9840         if (isGV_with_GP(sv)) {
9841             gv = MUTABLE_GV(sv);
9842             io = GvIO(gv);
9843             if (!io)
9844                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9845                                     HEKfARG(GvNAME_HEK(gv)));
9846             break;
9847         }
9848         /* FALLTHROUGH */
9849     default:
9850         if (!SvOK(sv))
9851             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9852         if (SvROK(sv)) {
9853             SvGETMAGIC(SvRV(sv));
9854             return sv_2io(SvRV(sv));
9855         }
9856         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9857         if (gv)
9858             io = GvIO(gv);
9859         else
9860             io = 0;
9861         if (!io) {
9862             SV *newsv = sv;
9863             if (SvGMAGICAL(sv)) {
9864                 newsv = sv_newmortal();
9865                 sv_setsv_nomg(newsv, sv);
9866             }
9867             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9868         }
9869         break;
9870     }
9871     return io;
9872 }
9873
9874 /*
9875 =for apidoc sv_2cv
9876
9877 Using various gambits, try to get a CV from an SV; in addition, try if
9878 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9879 The flags in C<lref> are passed to C<gv_fetchsv>.
9880
9881 =cut
9882 */
9883
9884 CV *
9885 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9886 {
9887     GV *gv = NULL;
9888     CV *cv = NULL;
9889
9890     PERL_ARGS_ASSERT_SV_2CV;
9891
9892     if (!sv) {
9893         *st = NULL;
9894         *gvp = NULL;
9895         return NULL;
9896     }
9897     switch (SvTYPE(sv)) {
9898     case SVt_PVCV:
9899         *st = CvSTASH(sv);
9900         *gvp = NULL;
9901         return MUTABLE_CV(sv);
9902     case SVt_PVHV:
9903     case SVt_PVAV:
9904         *st = NULL;
9905         *gvp = NULL;
9906         return NULL;
9907     default:
9908         SvGETMAGIC(sv);
9909         if (SvROK(sv)) {
9910             if (SvAMAGIC(sv))
9911                 sv = amagic_deref_call(sv, to_cv_amg);
9912
9913             sv = SvRV(sv);
9914             if (SvTYPE(sv) == SVt_PVCV) {
9915                 cv = MUTABLE_CV(sv);
9916                 *gvp = NULL;
9917                 *st = CvSTASH(cv);
9918                 return cv;
9919             }
9920             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9921                 gv = MUTABLE_GV(sv);
9922             else
9923                 Perl_croak(aTHX_ "Not a subroutine reference");
9924         }
9925         else if (isGV_with_GP(sv)) {
9926             gv = MUTABLE_GV(sv);
9927         }
9928         else {
9929             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9930         }
9931         *gvp = gv;
9932         if (!gv) {
9933             *st = NULL;
9934             return NULL;
9935         }
9936         /* Some flags to gv_fetchsv mean don't really create the GV  */
9937         if (!isGV_with_GP(gv)) {
9938             *st = NULL;
9939             return NULL;
9940         }
9941         *st = GvESTASH(gv);
9942         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9943             /* XXX this is probably not what they think they're getting.
9944              * It has the same effect as "sub name;", i.e. just a forward
9945              * declaration! */
9946             newSTUB(gv,0);
9947         }
9948         return GvCVu(gv);
9949     }
9950 }
9951
9952 /*
9953 =for apidoc sv_true
9954
9955 Returns true if the SV has a true value by Perl's rules.
9956 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9957 instead use an in-line version.
9958
9959 =cut
9960 */
9961
9962 I32
9963 Perl_sv_true(pTHX_ SV *const sv)
9964 {
9965     if (!sv)
9966         return 0;
9967     if (SvPOK(sv)) {
9968         const XPV* const tXpv = (XPV*)SvANY(sv);
9969         if (tXpv &&
9970                 (tXpv->xpv_cur > 1 ||
9971                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9972             return 1;
9973         else
9974             return 0;
9975     }
9976     else {
9977         if (SvIOK(sv))
9978             return SvIVX(sv) != 0;
9979         else {
9980             if (SvNOK(sv))
9981                 return SvNVX(sv) != 0.0;
9982             else
9983                 return sv_2bool(sv);
9984         }
9985     }
9986 }
9987
9988 /*
9989 =for apidoc sv_pvn_force
9990
9991 Get a sensible string out of the SV somehow.
9992 A private implementation of the C<SvPV_force> macro for compilers which
9993 can't cope with complex macro expressions.  Always use the macro instead.
9994
9995 =for apidoc sv_pvn_force_flags
9996
9997 Get a sensible string out of the SV somehow.
9998 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9999 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10000 implemented in terms of this function.
10001 You normally want to use the various wrapper macros instead: see
10002 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10003
10004 =cut
10005 */
10006
10007 char *
10008 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10009 {
10010     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10011
10012     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10013     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10014         sv_force_normal_flags(sv, 0);
10015
10016     if (SvPOK(sv)) {
10017         if (lp)
10018             *lp = SvCUR(sv);
10019     }
10020     else {
10021         char *s;
10022         STRLEN len;
10023  
10024         if (SvTYPE(sv) > SVt_PVLV
10025             || isGV_with_GP(sv))
10026             /* diag_listed_as: Can't coerce %s to %s in %s */
10027             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10028                 OP_DESC(PL_op));
10029         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10030         if (!s) {
10031           s = (char *)"";
10032         }
10033         if (lp)
10034             *lp = len;
10035
10036         if (SvTYPE(sv) < SVt_PV ||
10037             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10038             if (SvROK(sv))
10039                 sv_unref(sv);
10040             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10041             SvGROW(sv, len + 1);
10042             Move(s,SvPVX(sv),len,char);
10043             SvCUR_set(sv, len);
10044             SvPVX(sv)[len] = '\0';
10045         }
10046         if (!SvPOK(sv)) {
10047             SvPOK_on(sv);               /* validate pointer */
10048             SvTAINT(sv);
10049             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10050                                   PTR2UV(sv),SvPVX_const(sv)));
10051         }
10052     }
10053     (void)SvPOK_only_UTF8(sv);
10054     return SvPVX_mutable(sv);
10055 }
10056
10057 /*
10058 =for apidoc sv_pvbyten_force
10059
10060 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10061 instead.
10062
10063 =cut
10064 */
10065
10066 char *
10067 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10068 {
10069     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10070
10071     sv_pvn_force(sv,lp);
10072     sv_utf8_downgrade(sv,0);
10073     *lp = SvCUR(sv);
10074     return SvPVX(sv);
10075 }
10076
10077 /*
10078 =for apidoc sv_pvutf8n_force
10079
10080 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10081 instead.
10082
10083 =cut
10084 */
10085
10086 char *
10087 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10088 {
10089     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10090
10091     sv_pvn_force(sv,0);
10092     sv_utf8_upgrade_nomg(sv);
10093     *lp = SvCUR(sv);
10094     return SvPVX(sv);
10095 }
10096
10097 /*
10098 =for apidoc sv_reftype
10099
10100 Returns a string describing what the SV is a reference to.
10101
10102 If ob is true and the SV is blessed, the string is the class name,
10103 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10104
10105 =cut
10106 */
10107
10108 const char *
10109 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10110 {
10111     PERL_ARGS_ASSERT_SV_REFTYPE;
10112     if (ob && SvOBJECT(sv)) {
10113         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10114     }
10115     else {
10116         /* WARNING - There is code, for instance in mg.c, that assumes that
10117          * the only reason that sv_reftype(sv,0) would return a string starting
10118          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10119          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10120          * this routine inside other subs, and it saves time.
10121          * Do not change this assumption without searching for "dodgy type check" in
10122          * the code.
10123          * - Yves */
10124         switch (SvTYPE(sv)) {
10125         case SVt_NULL:
10126         case SVt_IV:
10127         case SVt_NV:
10128         case SVt_PV:
10129         case SVt_PVIV:
10130         case SVt_PVNV:
10131         case SVt_PVMG:
10132                                 if (SvVOK(sv))
10133                                     return "VSTRING";
10134                                 if (SvROK(sv))
10135                                     return "REF";
10136                                 else
10137                                     return "SCALAR";
10138
10139         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10140                                 /* tied lvalues should appear to be
10141                                  * scalars for backwards compatibility */
10142                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10143                                     ? "SCALAR" : "LVALUE");
10144         case SVt_PVAV:          return "ARRAY";
10145         case SVt_PVHV:          return "HASH";
10146         case SVt_PVCV:          return "CODE";
10147         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10148                                     ? "GLOB" : "SCALAR");
10149         case SVt_PVFM:          return "FORMAT";
10150         case SVt_PVIO:          return "IO";
10151         case SVt_INVLIST:       return "INVLIST";
10152         case SVt_REGEXP:        return "REGEXP";
10153         default:                return "UNKNOWN";
10154         }
10155     }
10156 }
10157
10158 /*
10159 =for apidoc sv_ref
10160
10161 Returns a SV describing what the SV passed in is a reference to.
10162
10163 dst can be a SV to be set to the description or NULL, in which case a
10164 mortal SV is returned.
10165
10166 If ob is true and the SV is blessed, the description is the class
10167 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10168
10169 =cut
10170 */
10171
10172 SV *
10173 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10174 {
10175     PERL_ARGS_ASSERT_SV_REF;
10176
10177     if (!dst)
10178         dst = sv_newmortal();
10179
10180     if (ob && SvOBJECT(sv)) {
10181         HvNAME_get(SvSTASH(sv))
10182                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10183                     : sv_setpvs(dst, "__ANON__");
10184     }
10185     else {
10186         const char * reftype = sv_reftype(sv, 0);
10187         sv_setpv(dst, reftype);
10188     }
10189     return dst;
10190 }
10191
10192 /*
10193 =for apidoc sv_isobject
10194
10195 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10196 object.  If the SV is not an RV, or if the object is not blessed, then this
10197 will return false.
10198
10199 =cut
10200 */
10201
10202 int
10203 Perl_sv_isobject(pTHX_ SV *sv)
10204 {
10205     if (!sv)
10206         return 0;
10207     SvGETMAGIC(sv);
10208     if (!SvROK(sv))
10209         return 0;
10210     sv = SvRV(sv);
10211     if (!SvOBJECT(sv))
10212         return 0;
10213     return 1;
10214 }
10215
10216 /*
10217 =for apidoc sv_isa
10218
10219 Returns a boolean indicating whether the SV is blessed into the specified
10220 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10221 an inheritance relationship.
10222
10223 =cut
10224 */
10225
10226 int
10227 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10228 {
10229     const char *hvname;
10230
10231     PERL_ARGS_ASSERT_SV_ISA;
10232
10233     if (!sv)
10234         return 0;
10235     SvGETMAGIC(sv);
10236     if (!SvROK(sv))
10237         return 0;
10238     sv = SvRV(sv);
10239     if (!SvOBJECT(sv))
10240         return 0;
10241     hvname = HvNAME_get(SvSTASH(sv));
10242     if (!hvname)
10243         return 0;
10244
10245     return strEQ(hvname, name);
10246 }
10247
10248 /*
10249 =for apidoc newSVrv
10250
10251 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10252 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10253 SV will be blessed in the specified package.  The new SV is returned and its
10254 reference count is 1.  The reference count 1 is owned by C<rv>.
10255
10256 =cut
10257 */
10258
10259 SV*
10260 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10261 {
10262     SV *sv;
10263
10264     PERL_ARGS_ASSERT_NEWSVRV;
10265
10266     new_SV(sv);
10267
10268     SV_CHECK_THINKFIRST_COW_DROP(rv);
10269
10270     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10271         const U32 refcnt = SvREFCNT(rv);
10272         SvREFCNT(rv) = 0;
10273         sv_clear(rv);
10274         SvFLAGS(rv) = 0;
10275         SvREFCNT(rv) = refcnt;
10276
10277         sv_upgrade(rv, SVt_IV);
10278     } else if (SvROK(rv)) {
10279         SvREFCNT_dec(SvRV(rv));
10280     } else {
10281         prepare_SV_for_RV(rv);
10282     }
10283
10284     SvOK_off(rv);
10285     SvRV_set(rv, sv);
10286     SvROK_on(rv);
10287
10288     if (classname) {
10289         HV* const stash = gv_stashpv(classname, GV_ADD);
10290         (void)sv_bless(rv, stash);
10291     }
10292     return sv;
10293 }
10294
10295 SV *
10296 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10297 {
10298     SV * const lv = newSV_type(SVt_PVLV);
10299     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10300     LvTYPE(lv) = 'y';
10301     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10302     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10303     LvSTARGOFF(lv) = ix;
10304     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10305     return lv;
10306 }
10307
10308 /*
10309 =for apidoc sv_setref_pv
10310
10311 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10312 argument will be upgraded to an RV.  That RV will be modified to point to
10313 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10314 into the SV.  The C<classname> argument indicates the package for the
10315 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10316 will have a reference count of 1, and the RV will be returned.
10317
10318 Do not use with other Perl types such as HV, AV, SV, CV, because those
10319 objects will become corrupted by the pointer copy process.
10320
10321 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10322
10323 =cut
10324 */
10325
10326 SV*
10327 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10328 {
10329     PERL_ARGS_ASSERT_SV_SETREF_PV;
10330
10331     if (!pv) {
10332         sv_set_undef(rv);
10333         SvSETMAGIC(rv);
10334     }
10335     else
10336         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10337     return rv;
10338 }
10339
10340 /*
10341 =for apidoc sv_setref_iv
10342
10343 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10344 argument will be upgraded to an RV.  That RV will be modified to point to
10345 the new SV.  The C<classname> argument indicates the package for the
10346 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10347 will have a reference count of 1, and the RV will be returned.
10348
10349 =cut
10350 */
10351
10352 SV*
10353 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10354 {
10355     PERL_ARGS_ASSERT_SV_SETREF_IV;
10356
10357     sv_setiv(newSVrv(rv,classname), iv);
10358     return rv;
10359 }
10360
10361 /*
10362 =for apidoc sv_setref_uv
10363
10364 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10365 argument will be upgraded to an RV.  That RV will be modified to point to
10366 the new SV.  The C<classname> argument indicates the package for the
10367 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10368 will have a reference count of 1, and the RV will be returned.
10369
10370 =cut
10371 */
10372
10373 SV*
10374 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10375 {
10376     PERL_ARGS_ASSERT_SV_SETREF_UV;
10377
10378     sv_setuv(newSVrv(rv,classname), uv);
10379     return rv;
10380 }
10381
10382 /*
10383 =for apidoc sv_setref_nv
10384
10385 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10386 argument will be upgraded to an RV.  That RV will be modified to point to
10387 the new SV.  The C<classname> argument indicates the package for the
10388 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10389 will have a reference count of 1, and the RV will be returned.
10390
10391 =cut
10392 */
10393
10394 SV*
10395 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10396 {
10397     PERL_ARGS_ASSERT_SV_SETREF_NV;
10398
10399     sv_setnv(newSVrv(rv,classname), nv);
10400     return rv;
10401 }
10402
10403 /*
10404 =for apidoc sv_setref_pvn
10405
10406 Copies a string into a new SV, optionally blessing the SV.  The length of the
10407 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10408 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10409 argument indicates the package for the blessing.  Set C<classname> to
10410 C<NULL> to avoid the blessing.  The new SV will have a reference count
10411 of 1, and the RV will be returned.
10412
10413 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10414
10415 =cut
10416 */
10417
10418 SV*
10419 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10420                    const char *const pv, const STRLEN n)
10421 {
10422     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10423
10424     sv_setpvn(newSVrv(rv,classname), pv, n);
10425     return rv;
10426 }
10427
10428 /*
10429 =for apidoc sv_bless
10430
10431 Blesses an SV into a specified package.  The SV must be an RV.  The package
10432 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10433 of the SV is unaffected.
10434
10435 =cut
10436 */
10437
10438 SV*
10439 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10440 {
10441     SV *tmpRef;
10442     HV *oldstash = NULL;
10443
10444     PERL_ARGS_ASSERT_SV_BLESS;
10445
10446     SvGETMAGIC(sv);
10447     if (!SvROK(sv))
10448         Perl_croak(aTHX_ "Can't bless non-reference value");
10449     tmpRef = SvRV(sv);
10450     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10451         if (SvREADONLY(tmpRef))
10452             Perl_croak_no_modify();
10453         if (SvOBJECT(tmpRef)) {
10454             oldstash = SvSTASH(tmpRef);
10455         }
10456     }
10457     SvOBJECT_on(tmpRef);
10458     SvUPGRADE(tmpRef, SVt_PVMG);
10459     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10460     SvREFCNT_dec(oldstash);
10461
10462     if(SvSMAGICAL(tmpRef))
10463         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10464             mg_set(tmpRef);
10465
10466
10467
10468     return sv;
10469 }
10470
10471 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10472  * as it is after unglobbing it.
10473  */
10474
10475 PERL_STATIC_INLINE void
10476 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10477 {
10478     void *xpvmg;
10479     HV *stash;
10480     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10481
10482     PERL_ARGS_ASSERT_SV_UNGLOB;
10483
10484     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10485     SvFAKE_off(sv);
10486     if (!(flags & SV_COW_DROP_PV))
10487         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10488
10489     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10490     if (GvGP(sv)) {
10491         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10492            && HvNAME_get(stash))
10493             mro_method_changed_in(stash);
10494         gp_free(MUTABLE_GV(sv));
10495     }
10496     if (GvSTASH(sv)) {
10497         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10498         GvSTASH(sv) = NULL;
10499     }
10500     GvMULTI_off(sv);
10501     if (GvNAME_HEK(sv)) {
10502         unshare_hek(GvNAME_HEK(sv));
10503     }
10504     isGV_with_GP_off(sv);
10505
10506     if(SvTYPE(sv) == SVt_PVGV) {
10507         /* need to keep SvANY(sv) in the right arena */
10508         xpvmg = new_XPVMG();
10509         StructCopy(SvANY(sv), xpvmg, XPVMG);
10510         del_XPVGV(SvANY(sv));
10511         SvANY(sv) = xpvmg;
10512
10513         SvFLAGS(sv) &= ~SVTYPEMASK;
10514         SvFLAGS(sv) |= SVt_PVMG;
10515     }
10516
10517     /* Intentionally not calling any local SET magic, as this isn't so much a
10518        set operation as merely an internal storage change.  */
10519     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10520     else sv_setsv_flags(sv, temp, 0);
10521
10522     if ((const GV *)sv == PL_last_in_gv)
10523         PL_last_in_gv = NULL;
10524     else if ((const GV *)sv == PL_statgv)
10525         PL_statgv = NULL;
10526 }
10527
10528 /*
10529 =for apidoc sv_unref_flags
10530
10531 Unsets the RV status of the SV, and decrements the reference count of
10532 whatever was being referenced by the RV.  This can almost be thought of
10533 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10534 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10535 (otherwise the decrementing is conditional on the reference count being
10536 different from one or the reference being a readonly SV).
10537 See C<L</SvROK_off>>.
10538
10539 =cut
10540 */
10541
10542 void
10543 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10544 {
10545     SV* const target = SvRV(ref);
10546
10547     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10548
10549     if (SvWEAKREF(ref)) {
10550         sv_del_backref(target, ref);
10551         SvWEAKREF_off(ref);
10552         SvRV_set(ref, NULL);
10553         return;
10554     }
10555     SvRV_set(ref, NULL);
10556     SvROK_off(ref);
10557     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10558        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10559     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10560         SvREFCNT_dec_NN(target);
10561     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10562         sv_2mortal(target);     /* Schedule for freeing later */
10563 }
10564
10565 /*
10566 =for apidoc sv_untaint
10567
10568 Untaint an SV.  Use C<SvTAINTED_off> instead.
10569
10570 =cut
10571 */
10572
10573 void
10574 Perl_sv_untaint(pTHX_ SV *const sv)
10575 {
10576     PERL_ARGS_ASSERT_SV_UNTAINT;
10577     PERL_UNUSED_CONTEXT;
10578
10579     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10580         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10581         if (mg)
10582             mg->mg_len &= ~1;
10583     }
10584 }
10585
10586 /*
10587 =for apidoc sv_tainted
10588
10589 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10590
10591 =cut
10592 */
10593
10594 bool
10595 Perl_sv_tainted(pTHX_ SV *const sv)
10596 {
10597     PERL_ARGS_ASSERT_SV_TAINTED;
10598     PERL_UNUSED_CONTEXT;
10599
10600     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10601         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10602         if (mg && (mg->mg_len & 1) )
10603             return TRUE;
10604     }
10605     return FALSE;
10606 }
10607
10608 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10609                        private to this file */
10610
10611 /*
10612 =for apidoc sv_setpviv
10613
10614 Copies an integer into the given SV, also updating its string value.
10615 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10616
10617 =cut
10618 */
10619
10620 void
10621 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10622 {
10623     char buf[TYPE_CHARS(UV)];
10624     char *ebuf;
10625     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10626
10627     PERL_ARGS_ASSERT_SV_SETPVIV;
10628
10629     sv_setpvn(sv, ptr, ebuf - ptr);
10630 }
10631
10632 /*
10633 =for apidoc sv_setpviv_mg
10634
10635 Like C<sv_setpviv>, but also handles 'set' magic.
10636
10637 =cut
10638 */
10639
10640 void
10641 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10642 {
10643     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10644
10645     sv_setpviv(sv, iv);
10646     SvSETMAGIC(sv);
10647 }
10648
10649 #endif  /* NO_MATHOMS */
10650
10651 #if defined(PERL_IMPLICIT_CONTEXT)
10652
10653 /* pTHX_ magic can't cope with varargs, so this is a no-context
10654  * version of the main function, (which may itself be aliased to us).
10655  * Don't access this version directly.
10656  */
10657
10658 void
10659 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10660 {
10661     dTHX;
10662     va_list args;
10663
10664     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10665
10666     va_start(args, pat);
10667     sv_vsetpvf(sv, pat, &args);
10668     va_end(args);
10669 }
10670
10671 /* pTHX_ magic can't cope with varargs, so this is a no-context
10672  * version of the main function, (which may itself be aliased to us).
10673  * Don't access this version directly.
10674  */
10675
10676 void
10677 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10678 {
10679     dTHX;
10680     va_list args;
10681
10682     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10683
10684     va_start(args, pat);
10685     sv_vsetpvf_mg(sv, pat, &args);
10686     va_end(args);
10687 }
10688 #endif
10689
10690 /*
10691 =for apidoc sv_setpvf
10692
10693 Works like C<sv_catpvf> but copies the text into the SV instead of
10694 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10695
10696 =cut
10697 */
10698
10699 void
10700 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10701 {
10702     va_list args;
10703
10704     PERL_ARGS_ASSERT_SV_SETPVF;
10705
10706     va_start(args, pat);
10707     sv_vsetpvf(sv, pat, &args);
10708     va_end(args);
10709 }
10710
10711 /*
10712 =for apidoc sv_vsetpvf
10713
10714 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10715 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10716
10717 Usually used via its frontend C<sv_setpvf>.
10718
10719 =cut
10720 */
10721
10722 void
10723 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10724 {
10725     PERL_ARGS_ASSERT_SV_VSETPVF;
10726
10727     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10728 }
10729
10730 /*
10731 =for apidoc sv_setpvf_mg
10732
10733 Like C<sv_setpvf>, but also handles 'set' magic.
10734
10735 =cut
10736 */
10737
10738 void
10739 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10740 {
10741     va_list args;
10742
10743     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10744
10745     va_start(args, pat);
10746     sv_vsetpvf_mg(sv, pat, &args);
10747     va_end(args);
10748 }
10749
10750 /*
10751 =for apidoc sv_vsetpvf_mg
10752
10753 Like C<sv_vsetpvf>, but also handles 'set' magic.
10754
10755 Usually used via its frontend C<sv_setpvf_mg>.
10756
10757 =cut
10758 */
10759
10760 void
10761 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10762 {
10763     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10764
10765     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10766     SvSETMAGIC(sv);
10767 }
10768
10769 #if defined(PERL_IMPLICIT_CONTEXT)
10770
10771 /* pTHX_ magic can't cope with varargs, so this is a no-context
10772  * version of the main function, (which may itself be aliased to us).
10773  * Don't access this version directly.
10774  */
10775
10776 void
10777 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10778 {
10779     dTHX;
10780     va_list args;
10781
10782     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10783
10784     va_start(args, pat);
10785     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10786     va_end(args);
10787 }
10788
10789 /* pTHX_ magic can't cope with varargs, so this is a no-context
10790  * version of the main function, (which may itself be aliased to us).
10791  * Don't access this version directly.
10792  */
10793
10794 void
10795 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10796 {
10797     dTHX;
10798     va_list args;
10799
10800     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10801
10802     va_start(args, pat);
10803     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10804     SvSETMAGIC(sv);
10805     va_end(args);
10806 }
10807 #endif
10808
10809 /*
10810 =for apidoc sv_catpvf
10811
10812 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10813 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10814 variable argument list, argument reordering is not supported.
10815 If the appended data contains "wide" characters
10816 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10817 and characters >255 formatted with C<%c>), the original SV might get
10818 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10819 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10820 valid UTF-8; if the original SV was bytes, the pattern should be too.
10821
10822 =cut */
10823
10824 void
10825 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10826 {
10827     va_list args;
10828
10829     PERL_ARGS_ASSERT_SV_CATPVF;
10830
10831     va_start(args, pat);
10832     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10833     va_end(args);
10834 }
10835
10836 /*
10837 =for apidoc sv_vcatpvf
10838
10839 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10840 variable argument list, and appends the formatted output
10841 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10842
10843 Usually used via its frontend C<sv_catpvf>.
10844
10845 =cut
10846 */
10847
10848 void
10849 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10850 {
10851     PERL_ARGS_ASSERT_SV_VCATPVF;
10852
10853     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10854 }
10855
10856 /*
10857 =for apidoc sv_catpvf_mg
10858
10859 Like C<sv_catpvf>, but also handles 'set' magic.
10860
10861 =cut
10862 */
10863
10864 void
10865 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10866 {
10867     va_list args;
10868
10869     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10870
10871     va_start(args, pat);
10872     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10873     SvSETMAGIC(sv);
10874     va_end(args);
10875 }
10876
10877 /*
10878 =for apidoc sv_vcatpvf_mg
10879
10880 Like C<sv_vcatpvf>, but also handles 'set' magic.
10881
10882 Usually used via its frontend C<sv_catpvf_mg>.
10883
10884 =cut
10885 */
10886
10887 void
10888 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10889 {
10890     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10891
10892     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10893     SvSETMAGIC(sv);
10894 }
10895
10896 /*
10897 =for apidoc sv_vsetpvfn
10898
10899 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10900 appending it.
10901
10902 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10903
10904 =cut
10905 */
10906
10907 void
10908 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10909                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
10910 {
10911     PERL_ARGS_ASSERT_SV_VSETPVFN;
10912
10913     SvPVCLEAR(sv);
10914     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
10915 }
10916
10917
10918 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
10919
10920 PERL_STATIC_INLINE void
10921 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
10922 {
10923     STRLEN const need = len + SvCUR(sv) + 1;
10924     char *end;
10925
10926     /* can't wrap as both len and SvCUR() are allocated in
10927      * memory and together can't consume all the address space
10928      */
10929     assert(need > len);
10930
10931     assert(SvPOK(sv));
10932     SvGROW(sv, need);
10933     end = SvEND(sv);
10934     Copy(buf, end, len, char);
10935     end += len;
10936     *end = '\0';
10937     SvCUR_set(sv, need - 1);
10938 }
10939
10940
10941 /*
10942  * Warn of missing argument to sprintf. The value used in place of such
10943  * arguments should be &PL_sv_no; an undefined value would yield
10944  * inappropriate "use of uninit" warnings [perl #71000].
10945  */
10946 STATIC void
10947 S_warn_vcatpvfn_missing_argument(pTHX) {
10948     if (ckWARN(WARN_MISSING)) {
10949         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10950                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10951     }
10952 }
10953
10954
10955 static void
10956 S_croak_overflow()
10957 {
10958     dTHX;
10959     Perl_croak(aTHX_ "Integer overflow in format string for %s",
10960                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10961 }
10962
10963
10964 /* Given an int i from the next arg (if args is true) or an sv from an arg
10965  * (if args is false), try to extract a STRLEN-ranged value from the arg,
10966  * with overflow checking.
10967  * Sets *neg to true if the value was negative (untouched otherwise.
10968  * Returns the absolute value.
10969  * As an extra margin of safety, it croaks if the returned value would
10970  * exceed the maximum value of a STRLEN / 4.
10971  */
10972
10973 static STRLEN
10974 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
10975 {
10976     IV iv;
10977
10978     if (args) {
10979         iv = i;
10980         goto do_iv;
10981     }
10982
10983     if (!sv)
10984         return 0;
10985
10986     SvGETMAGIC(sv);
10987
10988     if (UNLIKELY(SvIsUV(sv))) {
10989         UV uv = SvUV_nomg(sv);
10990         if (uv > IV_MAX)
10991             S_croak_overflow();
10992         iv = uv;
10993     }
10994     else {
10995         iv = SvIV_nomg(sv);
10996       do_iv:
10997         if (iv < 0) {
10998             if (iv < -IV_MAX)
10999                 S_croak_overflow();
11000             iv = -iv;
11001             *neg = TRUE;
11002         }
11003     }
11004
11005     if (iv > (IV)(((STRLEN)~0) / 4))
11006         S_croak_overflow();
11007
11008     return (STRLEN)iv;
11009 }
11010
11011
11012 /* Returns true if c is in the range '1'..'9'
11013  * Written with the cast so it only needs one conditional test
11014  */
11015 #define IS_1_TO_9(c) ((U8)(c - '1') <= 8)
11016
11017 /* Read in and return a number. Updates *pattern to point to the char
11018  * following the number. Expects the first char to 1..9.
11019  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11020  * This is a belt-and-braces safety measure to complement any
11021  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11022  * It means that e.g. on a 32-bit system the width/precision can't be more
11023  * than 1G, which seems reasonable.
11024  */
11025
11026 STATIC STRLEN
11027 S_expect_number(pTHX_ const char **const pattern)
11028 {
11029     STRLEN var;
11030
11031     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11032
11033     assert(IS_1_TO_9(**pattern));
11034
11035     var = *(*pattern)++ - '0';
11036     while (isDIGIT(**pattern)) {
11037         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11038         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11039             S_croak_overflow();
11040         var = var * 10 + (*(*pattern)++ - '0');
11041     }
11042     return var;
11043 }
11044
11045 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11046  * ensures it's big enough), back fill it with the rounded integer part of
11047  * nv. Returns ptr to start of string, and sets *len to its length.
11048  * Returns NULL if not convertible.
11049  */
11050
11051 STATIC char *
11052 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11053 {
11054     const int neg = nv < 0;
11055     UV uv;
11056
11057     PERL_ARGS_ASSERT_F0CONVERT;
11058
11059     assert(!Perl_isinfnan(nv));
11060     if (neg)
11061         nv = -nv;
11062     if (nv != 0.0 && nv < UV_MAX) {
11063         char *p = endbuf;
11064         uv = (UV)nv;
11065         if (uv != nv) {
11066             nv += 0.5;
11067             uv = (UV)nv;
11068             if (uv & 1 && uv == nv)
11069                 uv--;                   /* Round to even */
11070         }
11071         do {
11072             const unsigned dig = uv % 10;
11073             *--p = '0' + dig;
11074         } while (uv /= 10);
11075         if (neg)
11076             *--p = '-';
11077         *len = endbuf - p;
11078         return p;
11079     }
11080     return NULL;
11081 }
11082
11083
11084 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11085
11086 void
11087 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11088                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11089 {
11090     PERL_ARGS_ASSERT_SV_VCATPVFN;
11091
11092     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11093 }
11094
11095
11096 /* For the vcatpvfn code, we need a long double target in case
11097  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11098  * with long double formats, even without NV being long double.  But we
11099  * call the target 'fv' instead of 'nv', since most of the time it is not
11100  * (most compilers these days recognize "long double", even if only as a
11101  * synonym for "double").
11102 */
11103 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11104         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11105 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11106 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11107        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11108 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11109             STMT_START {                                \
11110                 double _dv = nv;                        \
11111                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11112             } STMT_END
11113 #  else
11114 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11115 #  endif
11116    typedef long double vcatpvfn_long_double_t;
11117 #else
11118 #  define VCATPVFN_FV_GF NVgf
11119 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11120    typedef NV vcatpvfn_long_double_t;
11121 #endif
11122
11123 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11124 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11125  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11126  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11127  * after the first 1023 zero bits.
11128  *
11129  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11130  * of dynamically growing buffer might be better, start at just 16 bytes
11131  * (for example) and grow only when necessary.  Or maybe just by looking
11132  * at the exponents of the two doubles? */
11133 #  define DOUBLEDOUBLE_MAXBITS 2098
11134 #endif
11135
11136 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11137  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11138  * per xdigit.  For the double-double case, this can be rather many.
11139  * The non-double-double-long-double overshoots since all bits of NV
11140  * are not mantissa bits, there are also exponent bits. */
11141 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11142 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11143 #else
11144 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11145 #endif
11146
11147 /* If we do not have a known long double format, (including not using
11148  * long doubles, or long doubles being equal to doubles) then we will
11149  * fall back to the ldexp/frexp route, with which we can retrieve at
11150  * most as many bits as our widest unsigned integer type is.  We try
11151  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11152  *
11153  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11154  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11155  */
11156 #if defined(HAS_QUAD) && defined(Uquad_t)
11157 #  define MANTISSATYPE Uquad_t
11158 #  define MANTISSASIZE 8
11159 #else
11160 #  define MANTISSATYPE UV
11161 #  define MANTISSASIZE UVSIZE
11162 #endif
11163
11164 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11165 #  define HEXTRACT_LITTLE_ENDIAN
11166 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11167 #  define HEXTRACT_BIG_ENDIAN
11168 #else
11169 #  define HEXTRACT_MIX_ENDIAN
11170 #endif
11171
11172 /* S_hextract() is a helper for S_format_hexfp, for extracting
11173  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11174  * are being extracted from (either directly from the long double in-memory
11175  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11176  * is used to update the exponent.  The subnormal is set to true
11177  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11178  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11179  *
11180  * The tricky part is that S_hextract() needs to be called twice:
11181  * the first time with vend as NULL, and the second time with vend as
11182  * the pointer returned by the first call.  What happens is that on
11183  * the first round the output size is computed, and the intended
11184  * extraction sanity checked.  On the second round the actual output
11185  * (the extraction of the hexadecimal values) takes place.
11186  * Sanity failures cause fatal failures during both rounds. */
11187 STATIC U8*
11188 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11189            U8* vhex, U8* vend)
11190 {
11191     U8* v = vhex;
11192     int ix;
11193     int ixmin = 0, ixmax = 0;
11194
11195     /* XXX Inf/NaN are not handled here, since it is
11196      * assumed they are to be output as "Inf" and "NaN". */
11197
11198     /* These macros are just to reduce typos, they have multiple
11199      * repetitions below, but usually only one (or sometimes two)
11200      * of them is really being used. */
11201     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11202 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11203 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11204 #define HEXTRACT_OUTPUT(ix) \
11205     STMT_START { \
11206       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11207    } STMT_END
11208 #define HEXTRACT_COUNT(ix, c) \
11209     STMT_START { \
11210       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11211    } STMT_END
11212 #define HEXTRACT_BYTE(ix) \
11213     STMT_START { \
11214       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11215    } STMT_END
11216 #define HEXTRACT_LO_NYBBLE(ix) \
11217     STMT_START { \
11218       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11219    } STMT_END
11220     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11221      * to make it look less odd when the top bits of a NV
11222      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11223      * order bits can be in the "low nybble" of a byte. */
11224 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11225 #define HEXTRACT_BYTES_LE(a, b) \
11226     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11227 #define HEXTRACT_BYTES_BE(a, b) \
11228     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11229 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11230 #define HEXTRACT_IMPLICIT_BIT(nv) \
11231     STMT_START { \
11232         if (!*subnormal) { \
11233             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11234         } \
11235    } STMT_END
11236
11237 /* Most formats do.  Those which don't should undef this.
11238  *
11239  * But also note that IEEE 754 subnormals do not have it, or,
11240  * expressed alternatively, their implicit bit is zero. */
11241 #define HEXTRACT_HAS_IMPLICIT_BIT
11242
11243 /* Many formats do.  Those which don't should undef this. */
11244 #define HEXTRACT_HAS_TOP_NYBBLE
11245
11246     /* HEXTRACTSIZE is the maximum number of xdigits. */
11247 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11248 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11249 #else
11250 #  define HEXTRACTSIZE 2 * NVSIZE
11251 #endif
11252
11253     const U8* vmaxend = vhex + HEXTRACTSIZE;
11254
11255     assert(HEXTRACTSIZE <= VHEX_SIZE);
11256
11257     PERL_UNUSED_VAR(ix); /* might happen */
11258     (void)Perl_frexp(PERL_ABS(nv), exponent);
11259     *subnormal = FALSE;
11260     if (vend && (vend <= vhex || vend > vmaxend)) {
11261         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11262         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11263     }
11264     {
11265         /* First check if using long doubles. */
11266 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11267 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11268         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11269          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11270         /* The bytes 13..0 are the mantissa/fraction,
11271          * the 15,14 are the sign+exponent. */
11272         const U8* nvp = (const U8*)(&nv);
11273         HEXTRACT_GET_SUBNORMAL(nv);
11274         HEXTRACT_IMPLICIT_BIT(nv);
11275 #    undef HEXTRACT_HAS_TOP_NYBBLE
11276         HEXTRACT_BYTES_LE(13, 0);
11277 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11278         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11279          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11280         /* The bytes 2..15 are the mantissa/fraction,
11281          * the 0,1 are the sign+exponent. */
11282         const U8* nvp = (const U8*)(&nv);
11283         HEXTRACT_GET_SUBNORMAL(nv);
11284         HEXTRACT_IMPLICIT_BIT(nv);
11285 #    undef HEXTRACT_HAS_TOP_NYBBLE
11286         HEXTRACT_BYTES_BE(2, 15);
11287 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11288         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11289          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11290          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11291          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11292         /* The bytes 0..1 are the sign+exponent,
11293          * the bytes 2..9 are the mantissa/fraction. */
11294         const U8* nvp = (const U8*)(&nv);
11295 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11296 #    undef HEXTRACT_HAS_TOP_NYBBLE
11297         HEXTRACT_GET_SUBNORMAL(nv);
11298         HEXTRACT_BYTES_LE(7, 0);
11299 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11300         /* Does this format ever happen? (Wikipedia says the Motorola
11301          * 6888x math coprocessors used format _like_ this but padded
11302          * to 96 bits with 16 unused bits between the exponent and the
11303          * mantissa.) */
11304         const U8* nvp = (const U8*)(&nv);
11305 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11306 #    undef HEXTRACT_HAS_TOP_NYBBLE
11307         HEXTRACT_GET_SUBNORMAL(nv);
11308         HEXTRACT_BYTES_BE(0, 7);
11309 #  else
11310 #    define HEXTRACT_FALLBACK
11311         /* Double-double format: two doubles next to each other.
11312          * The first double is the high-order one, exactly like
11313          * it would be for a "lone" double.  The second double
11314          * is shifted down using the exponent so that that there
11315          * are no common bits.  The tricky part is that the value
11316          * of the double-double is the SUM of the two doubles and
11317          * the second one can be also NEGATIVE.
11318          *
11319          * Because of this tricky construction the bytewise extraction we
11320          * use for the other long double formats doesn't work, we must
11321          * extract the values bit by bit.
11322          *
11323          * The little-endian double-double is used .. somewhere?
11324          *
11325          * The big endian double-double is used in e.g. PPC/Power (AIX)
11326          * and MIPS (SGI).
11327          *
11328          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11329          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11330          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11331          */
11332 #  endif
11333 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11334         /* Using normal doubles, not long doubles.
11335          *
11336          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11337          * bytes, since we might need to handle printf precision, and
11338          * also need to insert the radix. */
11339 #  if NVSIZE == 8
11340 #    ifdef HEXTRACT_LITTLE_ENDIAN
11341         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11342         const U8* nvp = (const U8*)(&nv);
11343         HEXTRACT_GET_SUBNORMAL(nv);
11344         HEXTRACT_IMPLICIT_BIT(nv);
11345         HEXTRACT_TOP_NYBBLE(6);
11346         HEXTRACT_BYTES_LE(5, 0);
11347 #    elif defined(HEXTRACT_BIG_ENDIAN)
11348         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11349         const U8* nvp = (const U8*)(&nv);
11350         HEXTRACT_GET_SUBNORMAL(nv);
11351         HEXTRACT_IMPLICIT_BIT(nv);
11352         HEXTRACT_TOP_NYBBLE(1);
11353         HEXTRACT_BYTES_BE(2, 7);
11354 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11355         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11356         const U8* nvp = (const U8*)(&nv);
11357         HEXTRACT_GET_SUBNORMAL(nv);
11358         HEXTRACT_IMPLICIT_BIT(nv);
11359         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11360         HEXTRACT_BYTE(1); /* 5 */
11361         HEXTRACT_BYTE(0); /* 4 */
11362         HEXTRACT_BYTE(7); /* 3 */
11363         HEXTRACT_BYTE(6); /* 2 */
11364         HEXTRACT_BYTE(5); /* 1 */
11365         HEXTRACT_BYTE(4); /* 0 */
11366 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11367         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11368         const U8* nvp = (const U8*)(&nv);
11369         HEXTRACT_GET_SUBNORMAL(nv);
11370         HEXTRACT_IMPLICIT_BIT(nv);
11371         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11372         HEXTRACT_BYTE(6); /* 5 */
11373         HEXTRACT_BYTE(7); /* 4 */
11374         HEXTRACT_BYTE(0); /* 3 */
11375         HEXTRACT_BYTE(1); /* 2 */
11376         HEXTRACT_BYTE(2); /* 1 */
11377         HEXTRACT_BYTE(3); /* 0 */
11378 #    else
11379 #      define HEXTRACT_FALLBACK
11380 #    endif
11381 #  else
11382 #    define HEXTRACT_FALLBACK
11383 #  endif
11384 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11385
11386 #ifdef HEXTRACT_FALLBACK
11387         HEXTRACT_GET_SUBNORMAL(nv);
11388 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11389         /* The fallback is used for the double-double format, and
11390          * for unknown long double formats, and for unknown double
11391          * formats, or in general unknown NV formats. */
11392         if (nv == (NV)0.0) {
11393             if (vend)
11394                 *v++ = 0;
11395             else
11396                 v++;
11397             *exponent = 0;
11398         }
11399         else {
11400             NV d = nv < 0 ? -nv : nv;
11401             NV e = (NV)1.0;
11402             U8 ha = 0x0; /* hexvalue accumulator */
11403             U8 hd = 0x8; /* hexvalue digit */
11404
11405             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11406              * this is essentially manual frexp(). Multiplying by 0.5 and
11407              * doubling should be lossless in binary floating point. */
11408
11409             *exponent = 1;
11410
11411             while (e > d) {
11412                 e *= (NV)0.5;
11413                 (*exponent)--;
11414             }
11415             /* Now d >= e */
11416
11417             while (d >= e + e) {
11418                 e += e;
11419                 (*exponent)++;
11420             }
11421             /* Now e <= d < 2*e */
11422
11423             /* First extract the leading hexdigit (the implicit bit). */
11424             if (d >= e) {
11425                 d -= e;
11426                 if (vend)
11427                     *v++ = 1;
11428                 else
11429                     v++;
11430             }
11431             else {
11432                 if (vend)
11433                     *v++ = 0;
11434                 else
11435                     v++;
11436             }
11437             e *= (NV)0.5;
11438
11439             /* Then extract the remaining hexdigits. */
11440             while (d > (NV)0.0) {
11441                 if (d >= e) {
11442                     ha |= hd;
11443                     d -= e;
11444                 }
11445                 if (hd == 1) {
11446                     /* Output or count in groups of four bits,
11447                      * that is, when the hexdigit is down to one. */
11448                     if (vend)
11449                         *v++ = ha;
11450                     else
11451                         v++;
11452                     /* Reset the hexvalue. */
11453                     ha = 0x0;
11454                     hd = 0x8;
11455                 }
11456                 else
11457                     hd >>= 1;
11458                 e *= (NV)0.5;
11459             }
11460
11461             /* Flush possible pending hexvalue. */
11462             if (ha) {
11463                 if (vend)
11464                     *v++ = ha;
11465                 else
11466                     v++;
11467             }
11468         }
11469 #endif
11470     }
11471     /* Croak for various reasons: if the output pointer escaped the
11472      * output buffer, if the extraction index escaped the extraction
11473      * buffer, or if the ending output pointer didn't match the
11474      * previously computed value. */
11475     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11476         /* For double-double the ixmin and ixmax stay at zero,
11477          * which is convenient since the HEXTRACTSIZE is tricky
11478          * for double-double. */
11479         ixmin < 0 || ixmax >= NVSIZE ||
11480         (vend && v != vend)) {
11481         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11482         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11483     }
11484     return v;
11485 }
11486
11487
11488 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11489  *
11490  * Processes the %a/%A hexadecimal floating-point format, since the
11491  * built-in snprintf()s which are used for most of the f/p formats, don't
11492  * universally handle %a/%A.
11493  * Populates buf of length bufsize, and returns the length of the created
11494  * string.
11495  * The rest of the args have the same meaning as the local vars of the
11496  * same name within Perl_sv_vcatpvfn_flags().
11497  *
11498  * It assumes the caller has already done STORE_LC_NUMERIC_SET_TO_NEEDED();
11499  *
11500  * It requires the caller to make buf large enough.
11501  */
11502
11503 static STRLEN
11504 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11505                     const NV nv, const vcatpvfn_long_double_t fv,
11506                     bool has_precis, STRLEN precis, STRLEN width,
11507                     bool alt, char plus, bool left, bool fill)
11508 {
11509     /* Hexadecimal floating point. */
11510     char* p = buf;
11511     U8 vhex[VHEX_SIZE];
11512     U8* v = vhex; /* working pointer to vhex */
11513     U8* vend; /* pointer to one beyond last digit of vhex */
11514     U8* vfnz = NULL; /* first non-zero */
11515     U8* vlnz = NULL; /* last non-zero */
11516     U8* v0 = NULL; /* first output */
11517     const bool lower = (c == 'a');
11518     /* At output the values of vhex (up to vend) will
11519      * be mapped through the xdig to get the actual
11520      * human-readable xdigits. */
11521     const char* xdig = PL_hexdigit;
11522     STRLEN zerotail = 0; /* how many extra zeros to append */
11523     int exponent = 0; /* exponent of the floating point input */
11524     bool hexradix = FALSE; /* should we output the radix */
11525     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11526     bool negative = FALSE;
11527     STRLEN elen;
11528
11529     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11530      *
11531      * For example with denormals, (assuming the vanilla
11532      * 64-bit double): the exponent is zero. 1xp-1074 is
11533      * the smallest denormal and the smallest double, it
11534      * could be output also as 0x0.0000000000001p-1022 to
11535      * match its internal structure. */
11536
11537     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11538     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11539
11540 #if NVSIZE > DOUBLESIZE
11541 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11542     /* In this case there is an implicit bit,
11543      * and therefore the exponent is shifted by one. */
11544     exponent--;
11545 #  elif defined(NV_X86_80_BIT)
11546     if (subnormal) {
11547         /* The subnormals of the x86-80 have a base exponent of -16382,
11548          * (while the physical exponent bits are zero) but the frexp()
11549          * returned the scientific-style floating exponent.  We want
11550          * to map the last one as:
11551          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11552          * -16835..-16388 -> -16384
11553          * since we want to keep the first hexdigit
11554          * as one of the [8421]. */
11555         exponent = -4 * ( (exponent + 1) / -4) - 2;
11556     } else {
11557         exponent -= 4;
11558     }
11559     /* TBD: other non-implicit-bit platforms than the x86-80. */
11560 #  endif
11561 #endif
11562
11563     negative = fv < 0 || Perl_signbit(nv);
11564     if (negative)
11565         *p++ = '-';
11566     else if (plus)
11567         *p++ = plus;
11568     *p++ = '0';
11569     if (lower) {
11570         *p++ = 'x';
11571     }
11572     else {
11573         *p++ = 'X';
11574         xdig += 16; /* Use uppercase hex. */
11575     }
11576
11577     /* Find the first non-zero xdigit. */
11578     for (v = vhex; v < vend; v++) {
11579         if (*v) {
11580             vfnz = v;
11581             break;
11582         }
11583     }
11584
11585     if (vfnz) {
11586         /* Find the last non-zero xdigit. */
11587         for (v = vend - 1; v >= vhex; v--) {
11588             if (*v) {
11589                 vlnz = v;
11590                 break;
11591             }
11592         }
11593
11594 #if NVSIZE == DOUBLESIZE
11595         if (fv != 0.0)
11596             exponent--;
11597 #endif
11598
11599         if (subnormal) {
11600 #ifndef NV_X86_80_BIT
11601           if (vfnz[0] > 1) {
11602             /* IEEE 754 subnormals (but not the x86 80-bit):
11603              * we want "normalize" the subnormal,
11604              * so we need to right shift the hex nybbles
11605              * so that the output of the subnormal starts
11606              * from the first true bit.  (Another, equally
11607              * valid, policy would be to dump the subnormal
11608              * nybbles as-is, to display the "physical" layout.) */
11609             int i, n;
11610             U8 *vshr;
11611             /* Find the ceil(log2(v[0])) of
11612              * the top non-zero nybble. */
11613             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11614             assert(n < 4);
11615             assert(vlnz);
11616             vlnz[1] = 0;
11617             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11618               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11619               vshr[0] >>= n;
11620             }
11621             if (vlnz[1]) {
11622               vlnz++;
11623             }
11624           }
11625 #endif
11626           v0 = vfnz;
11627         } else {
11628           v0 = vhex;
11629         }
11630
11631         if (has_precis) {
11632             U8* ve = (subnormal ? vlnz + 1 : vend);
11633             SSize_t vn = ve - v0;
11634             assert(vn >= 1);
11635             if (precis < (Size_t)(vn - 1)) {
11636                 bool overflow = FALSE;
11637                 if (v0[precis + 1] < 0x8) {
11638                     /* Round down, nothing to do. */
11639                 } else if (v0[precis + 1] > 0x8) {
11640                     /* Round up. */
11641                     v0[precis]++;
11642                     overflow = v0[precis] > 0xF;
11643                     v0[precis] &= 0xF;
11644                 } else { /* v0[precis] == 0x8 */
11645                     /* Half-point: round towards the one
11646                      * with the even least-significant digit:
11647                      * 08 -> 0  88 -> 8
11648                      * 18 -> 2  98 -> a
11649                      * 28 -> 2  a8 -> a
11650                      * 38 -> 4  b8 -> c
11651                      * 48 -> 4  c8 -> c
11652                      * 58 -> 6  d8 -> e
11653                      * 68 -> 6  e8 -> e
11654                      * 78 -> 8  f8 -> 10 */
11655                     if ((v0[precis] & 0x1)) {
11656                         v0[precis]++;
11657                     }
11658                     overflow = v0[precis] > 0xF;
11659                     v0[precis] &= 0xF;
11660                 }
11661
11662                 if (overflow) {
11663                     for (v = v0 + precis - 1; v >= v0; v--) {
11664                         (*v)++;
11665                         overflow = *v > 0xF;
11666                         (*v) &= 0xF;
11667                         if (!overflow) {
11668                             break;
11669                         }
11670                     }
11671                     if (v == v0 - 1 && overflow) {
11672                         /* If the overflow goes all the
11673                          * way to the front, we need to
11674                          * insert 0x1 in front, and adjust
11675                          * the exponent. */
11676                         Move(v0, v0 + 1, vn - 1, char);
11677                         *v0 = 0x1;
11678                         exponent += 4;
11679                     }
11680                 }
11681
11682                 /* The new effective "last non zero". */
11683                 vlnz = v0 + precis;
11684             }
11685             else {
11686                 zerotail =
11687                   subnormal ? precis - vn + 1 :
11688                   precis - (vlnz - vhex);
11689             }
11690         }
11691
11692         v = v0;
11693         *p++ = xdig[*v++];
11694
11695         /* If there are non-zero xdigits, the radix
11696          * is output after the first one. */
11697         if (vfnz < vlnz) {
11698           hexradix = TRUE;
11699         }
11700     }
11701     else {
11702         *p++ = '0';
11703         exponent = 0;
11704         zerotail = precis;
11705     }
11706
11707     /* The radix is always output if precis, or if alt. */
11708     if (precis > 0 || alt) {
11709       hexradix = TRUE;
11710     }
11711
11712     if (hexradix) {
11713 #ifndef USE_LOCALE_NUMERIC
11714             *p++ = '.';
11715 #else
11716             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
11717                 STRLEN n;
11718                 const char* r = SvPV(PL_numeric_radix_sv, n);
11719                 Copy(r, p, n, char);
11720                 p += n;
11721             }
11722             else {
11723                 *p++ = '.';
11724             }
11725 #endif
11726     }
11727
11728     if (vlnz) {
11729         while (v <= vlnz)
11730             *p++ = xdig[*v++];
11731     }
11732
11733     if (zerotail > 0) {
11734       while (zerotail--) {
11735         *p++ = '0';
11736       }
11737     }
11738
11739     elen = p - buf;
11740
11741     /* sanity checks */
11742     if (elen >= bufsize || width >= bufsize)
11743         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11744         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11745
11746     elen += my_snprintf(p, bufsize - elen,
11747                         "%c%+d", lower ? 'p' : 'P',
11748                         exponent);
11749
11750     if (elen < width) {
11751         STRLEN gap = (STRLEN)(width - elen);
11752         if (left) {
11753             /* Pad the back with spaces. */
11754             memset(buf + elen, ' ', gap);
11755         }
11756         else if (fill) {
11757             /* Insert the zeros after the "0x" and the
11758              * the potential sign, but before the digits,
11759              * otherwise we end up with "0000xH.HHH...",
11760              * when we want "0x000H.HHH..."  */
11761             STRLEN nzero = gap;
11762             char* zerox = buf + 2;
11763             STRLEN nmove = elen - 2;
11764             if (negative || plus) {
11765                 zerox++;
11766                 nmove--;
11767             }
11768             Move(zerox, zerox + nzero, nmove, char);
11769             memset(zerox, fill ? '0' : ' ', nzero);
11770         }
11771         else {
11772             /* Move it to the right. */
11773             Move(buf, buf + gap,
11774                  elen, char);
11775             /* Pad the front with spaces. */
11776             memset(buf, ' ', gap);
11777         }
11778         elen = width;
11779     }
11780     return elen;
11781 }
11782
11783
11784 /*
11785 =for apidoc sv_vcatpvfn
11786
11787 =for apidoc sv_vcatpvfn_flags
11788
11789 Processes its arguments like C<vsprintf> and appends the formatted output
11790 to an SV.  Uses an array of SVs if the C-style variable argument list is
11791 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11792 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11793 C<va_list> argument list with a format string that uses argument reordering
11794 will yield an exception.
11795
11796 When running with taint checks enabled, indicates via
11797 C<maybe_tainted> if results are untrustworthy (often due to the use of
11798 locales).
11799
11800 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11801
11802 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11803 responsibility to ensure that this is so.
11804
11805 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11806
11807 =cut
11808 */
11809
11810
11811 void
11812 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11813                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11814                        const U32 flags)
11815 {
11816     const char *fmtstart; /* character following the current '%' */
11817     const char *q;        /* current position within format */
11818     const char *patend;
11819     STRLEN origlen;
11820     Size_t svix = 0;
11821     static const char nullstr[] = "(null)";
11822     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11823     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11824     /* Times 4: a decimal digit takes more than 3 binary digits.
11825      * NV_DIG: mantissa takes that many decimal digits.
11826      * Plus 32: Playing safe. */
11827     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11828     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11829 #ifdef USE_LOCALE_NUMERIC
11830     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11831     bool lc_numeric_set = FALSE; /* called STORE_LC_NUMERIC_SET_TO_NEEDED? */
11832 #endif
11833
11834     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11835     PERL_UNUSED_ARG(maybe_tainted);
11836
11837     if (flags & SV_GMAGIC)
11838         SvGETMAGIC(sv);
11839
11840     /* no matter what, this is a string now */
11841     (void)SvPV_force_nomg(sv, origlen);
11842
11843     /* the code that scans for flags etc following a % relies on
11844      * a '\0' being present to avoid falling off the end. Ideally that
11845      * should be fixed */
11846     assert(pat[patlen] == '\0');
11847
11848
11849     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11850      * In each case, if there isn't the correct number of args, instead
11851      * fall through to the main code to handle the issuing of any
11852      * warnings etc.
11853      */
11854
11855     if (patlen == 0 && (args || sv_count == 0))
11856         return;
11857
11858     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11859
11860         /* "%s" */
11861         if (patlen == 2 && pat[1] == 's') {
11862             if (args) {
11863                 const char * const s = va_arg(*args, char*);
11864                 sv_catpv_nomg(sv, s ? s : nullstr);
11865             }
11866             else {
11867                 /* we want get magic on the source but not the target.
11868                  * sv_catsv can't do that, though */
11869                 SvGETMAGIC(*svargs);
11870                 sv_catsv_nomg(sv, *svargs);
11871             }
11872             return;
11873         }
11874
11875         /* "%-p" */
11876         if (args) {
11877             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11878                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11879                 sv_catsv_nomg(sv, asv);
11880                 return;
11881             }
11882         }
11883 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11884         /* special-case "%.0f" */
11885         else if (   patlen == 4
11886                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11887         {
11888             const NV nv = SvNV(*svargs);
11889             if (LIKELY(!Perl_isinfnan(nv))) {
11890                 STRLEN l;
11891                 char *p;
11892
11893                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11894                     sv_catpvn_nomg(sv, p, l);
11895                     return;
11896                 }
11897             }
11898         }
11899 #endif /* !USE_LONG_DOUBLE */
11900     }
11901
11902
11903     patend = (char*)pat + patlen;
11904     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
11905         char intsize     = 0;         /* size qualifier in "%hi..." etc */
11906         bool alt         = FALSE;     /* has      "%#..."    */
11907         bool left        = FALSE;     /* has      "%-..."    */
11908         bool fill        = FALSE;     /* has      "%0..."    */
11909         char plus        = 0;         /* has      "%+..."    */
11910         STRLEN width     = 0;         /* value of "%NNN..."  */
11911         bool has_precis  = FALSE;     /* has      "%.NNN..." */
11912         STRLEN precis    = 0;         /* value of "%.NNN..." */
11913         int base         = 0;         /* base to print in, e.g. 8 for %o */
11914         UV uv            = 0;         /* the value to print of int-ish args */
11915
11916         bool vectorize   = FALSE;     /* has      "%v..."    */
11917         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
11918         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
11919         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
11920         const char *dotstr = NULL;    /* separator string for %v */
11921         STRLEN dotstrlen;             /* length of separator string for %v */
11922
11923         Size_t efix      = 0;         /* explicit format parameter index */
11924         const Size_t osvix  = svix;   /* original index in case of bad fmt */
11925
11926         SV *argsv        = NULL;
11927         bool is_utf8     = FALSE;     /* is this item utf8?   */
11928         bool arg_missing = FALSE;     /* give "Missing argument" warning */
11929         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
11930         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
11931         STRLEN zeros     = 0;         /* how many '0' to prepend */
11932
11933         const char *eptr = NULL;      /* the address of the element string */
11934         STRLEN elen      = 0;         /* the length  of the element string */
11935
11936         char c;                       /* the actual format ('d', s' etc) */
11937
11938
11939         /* echo everything up to the next format specification */
11940         for (q = fmtstart; q < patend && *q != '%'; ++q)
11941             {};
11942
11943         if (q > fmtstart) {
11944             if (has_utf8 && !pat_utf8) {
11945                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
11946                  * the fly */
11947                 const char *p;
11948                 char *dst;
11949                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
11950
11951                 for (p = fmtstart; p < q; p++)
11952                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
11953                         need++;
11954                 SvGROW(sv, need);
11955
11956                 dst = SvEND(sv);
11957                 for (p = fmtstart; p < q; p++)
11958                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
11959                 *dst = '\0';
11960                 SvCUR_set(sv, need - 1);
11961             }
11962             else
11963                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
11964         }
11965         if (q++ >= patend)
11966             break;
11967
11968         fmtstart = q; /* fmtstart is char following the '%' */
11969
11970 /*
11971     We allow format specification elements in this order:
11972         \d+\$              explicit format parameter index
11973         [-+ 0#]+           flags
11974         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11975         0                  flag (as above): repeated to allow "v02"     
11976         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11977         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11978         [hlqLV]            size
11979     [%bcdefginopsuxDFOUX] format (mandatory)
11980 */
11981
11982         if (IS_1_TO_9(*q)) {
11983             width = expect_number(&q);
11984             if (*q == '$') {
11985                 if (args)
11986                     Perl_croak_nocontext(
11987                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11988                 ++q;
11989                 efix = (Size_t)width;
11990                 width = 0;
11991                 no_redundant_warning = TRUE;
11992             } else {
11993                 goto gotwidth;
11994             }
11995         }
11996
11997         /* FLAGS */
11998
11999         while (*q) {
12000             switch (*q) {
12001             case ' ':
12002             case '+':
12003                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12004                     q++;
12005                 else
12006                     plus = *q++;
12007                 continue;
12008
12009             case '-':
12010                 left = TRUE;
12011                 q++;
12012                 continue;
12013
12014             case '0':
12015                 fill = TRUE;
12016                 q++;
12017                 continue;
12018
12019             case '#':
12020                 alt = TRUE;
12021                 q++;
12022                 continue;
12023
12024             default:
12025                 break;
12026             }
12027             break;
12028         }
12029
12030       /* at this point we can expect one of:
12031        *
12032        *  123  an explicit width
12033        *  *    width taken from next arg
12034        *  *12$ width taken from 12th arg
12035        *       or no width
12036        *
12037        * But any width specification may be preceded by a v, in one of its
12038        * forms:
12039        *        v
12040        *        *v
12041        *        *12$v
12042        * So an asterisk may be either a width specifier or a vector
12043        * separator arg specifier, and we don't know which initially
12044        */
12045
12046       tryasterisk:
12047         if (*q == '*') {
12048             STRLEN ix; /* explicit width/vector separator index */
12049             q++;
12050             if (IS_1_TO_9(*q)) {
12051                 ix = expect_number(&q);
12052                 if (*q++ == '$') {
12053                     if (args)
12054                         Perl_croak_nocontext(
12055                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
12056                     no_redundant_warning = TRUE;
12057                 } else
12058                     goto unknown;
12059             }
12060             else
12061                 ix = 0;
12062
12063             if (*q == 'v') {
12064                 SV *vecsv;
12065                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12066                  * with the default "." */
12067                 q++;
12068                 if (vectorize)
12069                     goto unknown;
12070                 if (args)
12071                     vecsv = va_arg(*args, SV*);
12072                 else {
12073                     ix = ix ? ix - 1 : svix++;
12074                     vecsv = ix < sv_count ? svargs[ix]
12075                                        : (arg_missing = TRUE, &PL_sv_no);
12076                 }
12077                 dotstr = SvPV_const(vecsv, dotstrlen);
12078                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12079                    bad with tied or overloaded values that return UTF8.  */
12080                 if (DO_UTF8(vecsv))
12081                     is_utf8 = TRUE;
12082                 else if (has_utf8) {
12083                     vecsv = sv_mortalcopy(vecsv);
12084                     sv_utf8_upgrade(vecsv);
12085                     dotstr = SvPV_const(vecsv, dotstrlen);
12086                     is_utf8 = TRUE;
12087                 }
12088                 vectorize = TRUE;
12089                 goto tryasterisk;
12090             }
12091
12092             /* the asterisk specified a width */
12093             {
12094                 int i = 0;
12095                 SV *sv = NULL;
12096                 if (args)
12097                     i = va_arg(*args, int);
12098                 else {
12099                     ix = ix ? ix - 1 : svix++;
12100                     sv = (ix < sv_count) ? svargs[ix]
12101                                       : (arg_missing = TRUE, (SV*)NULL);
12102                 }
12103                 width = S_sprintf_arg_num_val(aTHX_ args, i, sv, &left);
12104             }
12105         }
12106         else if (*q == 'v') {
12107             q++;
12108             if (vectorize)
12109                 goto unknown;
12110             vectorize = TRUE;
12111             dotstr = ".";
12112             dotstrlen = 1;
12113             goto tryasterisk;
12114
12115         }
12116         else {
12117         /* explicit width? */
12118             if(*q == '0') {
12119                 fill = TRUE;
12120                 q++;
12121             }
12122             if (IS_1_TO_9(*q))
12123                 width = expect_number(&q);
12124         }
12125
12126       gotwidth:
12127
12128         /* PRECISION */
12129
12130         if (*q == '.') {
12131             q++;
12132             if (*q == '*') {
12133                 STRLEN ix; /* explicit precision index */
12134                 q++;
12135                 if (IS_1_TO_9(*q)) {
12136                     ix = expect_number(&q);
12137                     if (*q++ == '$') {
12138                         if (args)
12139                             Perl_croak_nocontext(
12140                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
12141                         no_redundant_warning = TRUE;
12142                     } else
12143                         goto unknown;
12144                 }
12145                 else
12146                     ix = 0;
12147
12148                 {
12149                     int i = 0;
12150                     SV *sv = NULL;
12151                     bool neg = FALSE;
12152
12153                     if (args)
12154                         i = va_arg(*args, int);
12155                     else {
12156                         ix = ix ? ix - 1 : svix++;
12157                         sv = (ix < sv_count) ? svargs[ix]
12158                                           : (arg_missing = TRUE, (SV*)NULL);
12159                     }
12160                     precis = S_sprintf_arg_num_val(aTHX_ args, i, sv, &neg);
12161                     has_precis = !neg;
12162                 }
12163             }
12164             else {
12165                 /* although it doesn't seem documented, this code has long
12166                  * behaved so that:
12167                  *   no digits following the '.' is treated like '.0'
12168                  *   the number may be preceded by any number of zeroes,
12169                  *      e.g. "%.0001f", which is the same as "%.1f"
12170                  * so I've kept that behaviour. DAPM May 2017
12171                  */
12172                 while (*q == '0')
12173                     q++;
12174                 precis = IS_1_TO_9(*q) ? expect_number(&q) : 0;
12175                 has_precis = TRUE;
12176             }
12177         }
12178
12179         /* SIZE */
12180
12181         switch (*q) {
12182 #ifdef WIN32
12183         case 'I':                       /* Ix, I32x, and I64x */
12184 #  ifdef USE_64_BIT_INT
12185             if (q[1] == '6' && q[2] == '4') {
12186                 q += 3;
12187                 intsize = 'q';
12188                 break;
12189             }
12190 #  endif
12191             if (q[1] == '3' && q[2] == '2') {
12192                 q += 3;
12193                 break;
12194             }
12195 #  ifdef USE_64_BIT_INT
12196             intsize = 'q';
12197 #  endif
12198             q++;
12199             break;
12200 #endif
12201 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12202     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12203         case 'L':                       /* Ld */
12204             /* FALLTHROUGH */
12205 #  ifdef USE_QUADMATH
12206         case 'Q':
12207             /* FALLTHROUGH */
12208 #  endif
12209 #  if IVSIZE >= 8
12210         case 'q':                       /* qd */
12211 #  endif
12212             intsize = 'q';
12213             q++;
12214             break;
12215 #endif
12216         case 'l':
12217             ++q;
12218 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12219     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12220             if (*q == 'l') {    /* lld, llf */
12221                 intsize = 'q';
12222                 ++q;
12223             }
12224             else
12225 #endif
12226                 intsize = 'l';
12227             break;
12228         case 'h':
12229             if (*++q == 'h') {  /* hhd, hhu */
12230                 intsize = 'c';
12231                 ++q;
12232             }
12233             else
12234                 intsize = 'h';
12235             break;
12236         case 'V':
12237         case 'z':
12238         case 't':
12239         case 'j':
12240             intsize = *q++;
12241             break;
12242         }
12243
12244         /* CONVERSION */
12245
12246         c = *q++; /* c now holds the conversion type */
12247
12248         /* '%' doesn't have an arg, so skip arg processing */
12249         if (c == '%') {
12250             eptr = q - 1;
12251             elen = 1;
12252             if (vectorize)
12253                 goto unknown;
12254             goto string;
12255         }
12256
12257         if (vectorize && !strchr("BbDdiOouUXx", c))
12258             goto unknown;
12259
12260         /* get next arg (individual branches do their own va_arg()
12261          * handling for the args case) */
12262
12263         if (!args) {
12264             efix = efix ? efix - 1 : svix++;
12265             argsv = efix < sv_count ? svargs[efix]
12266                                  : (arg_missing = TRUE, &PL_sv_no);
12267         }
12268
12269
12270         switch (c) {
12271
12272             /* STRINGS */
12273
12274         case 's':
12275             if (args) {
12276                 eptr = va_arg(*args, char*);
12277                 if (eptr)
12278                     if (has_precis)
12279                         elen = my_strnlen(eptr, precis);
12280                     else
12281                         elen = strlen(eptr);
12282                 else {
12283                     eptr = (char *)nullstr;
12284                     elen = sizeof nullstr - 1;
12285                 }
12286             }
12287             else {
12288                 eptr = SvPV_const(argsv, elen);
12289                 if (DO_UTF8(argsv)) {
12290                     STRLEN old_precis = precis;
12291                     if (has_precis && precis < elen) {
12292                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12293                         STRLEN p = precis > ulen ? ulen : precis;
12294                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12295                                                         /* sticks at end */
12296                     }
12297                     if (width) { /* fudge width (can't fudge elen) */
12298                         if (has_precis && precis < elen)
12299                             width += precis - old_precis;
12300                         else
12301                             width +=
12302                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12303                     }
12304                     is_utf8 = TRUE;
12305                 }
12306             }
12307
12308         string:
12309             if (has_precis && precis < elen)
12310                 elen = precis;
12311             break;
12312
12313             /* INTEGERS */
12314
12315         case 'p':
12316             if (alt)
12317                 goto unknown;
12318
12319             /* %p extensions:
12320              *
12321              * "%...p" is normally treated like "%...x", except that the
12322              * number to print is the SV's address (or a pointer address
12323              * for C-ish sprintf).
12324              *
12325              * However, the C-ish sprintf variant allows a few special
12326              * extensions. These are currently:
12327              *
12328              * %-p       (SVf)  Like %s, but gets the string from an SV*
12329              *                  arg rather than a char* arg.
12330              *                  (This was previously %_).
12331              *
12332              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12333              *
12334              * %2p       (HEKf) Like %s, but using the key string in a HEK
12335              *
12336              * %3p       (HEKf256) Ditto but like %.256s
12337              *
12338              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12339              *                       (cBOOL(utf8), len, string_buf).
12340              *                   It's handled by the "case 'd'" branch
12341              *                   rather than here.
12342              *
12343              * %<num>p   where num is 1 or > 4: reserved for future
12344              *           extensions. Warns, but then is treated as a
12345              *           general %p (print hex address) format.
12346              */
12347
12348             if (   args
12349                 && !intsize
12350                 && !fill
12351                 && !plus
12352                 && !has_precis
12353                     /* not %*p or %*1$p - any width was explicit */
12354                 && q[-2] != '*'
12355                 && q[-2] != '$'
12356             ) {
12357                 if (left) {                     /* %-p (SVf), %-NNNp */
12358                     if (width) {
12359                         precis = width;
12360                         has_precis = TRUE;
12361                     }
12362                     argsv = MUTABLE_SV(va_arg(*args, void*));
12363                     eptr = SvPV_const(argsv, elen);
12364                     if (DO_UTF8(argsv))
12365                         is_utf8 = TRUE;
12366                     width = 0;
12367                     goto string;
12368                 }
12369                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12370                     HEK * const hek = va_arg(*args, HEK *);
12371                     eptr = HEK_KEY(hek);
12372                     elen = HEK_LEN(hek);
12373                     if (HEK_UTF8(hek))
12374                         is_utf8 = TRUE;
12375                     if (width == 3) {
12376                         precis = 256;
12377                         has_precis = TRUE;
12378                     }
12379                     width = 0;
12380                     goto string;
12381                 }
12382                 else if (width) {
12383                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12384                          "internal %%<num>p might conflict with future printf extensions");
12385                 }
12386             }
12387
12388             /* treat as normal %...p */
12389
12390             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12391             base = 16;
12392             goto do_integer;
12393
12394         case 'c':
12395             /* Ignore any size specifiers, since they're not documented as
12396              * being allowed for %c (ideally we should warn on e.g. '%hc').
12397              * Setting a default intsize, along with a positive
12398              * (which signals unsigned) base, causes, for C-ish use, the
12399              * va_arg to be interpreted as as unsigned int, when it's
12400              * actually signed, which will convert -ve values to high +ve
12401              * values. Note that unlike the libc %c, values > 255 will
12402              * convert to high unicode points rather than being truncated
12403              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12404              * will again convert -ve args to high -ve values.
12405              */
12406             intsize = 0;
12407             base = 1; /* special value that indicates we're doing a 'c' */
12408             goto get_int_arg_val;
12409
12410         case 'D':
12411 #ifdef IV_IS_QUAD
12412             intsize = 'q';
12413 #else
12414             intsize = 'l';
12415 #endif
12416             base = -10;
12417             goto get_int_arg_val;
12418
12419         case 'd':
12420             /* probably just a plain %d, but it might be the start of the
12421              * special UTF8f format, which usually looks something like
12422              * "%d%lu%4p" (the lu may vary by platform)
12423              */
12424             assert((UTF8f)[0] == 'd');
12425             assert((UTF8f)[1] == '%');
12426
12427              if (   args              /* UTF8f only valid for C-ish sprintf */
12428                  && q == fmtstart + 1 /* plain %d, not %....d */
12429                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12430                  && *q == '%'
12431                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12432             {
12433                 /* The argument has already gone through cBOOL, so the cast
12434                    is safe. */
12435                 is_utf8 = (bool)va_arg(*args, int);
12436                 elen = va_arg(*args, UV);
12437                 /* if utf8 length is larger than 0x7ffff..., then it might
12438                  * have been a signed value that wrapped */
12439                 if (elen  > ((~(STRLEN)0) >> 1)) {
12440                     assert(0); /* in DEBUGGING build we want to crash */
12441                     elen = 0; /* otherwise we want to treat this as an empty string */
12442                 }
12443                 eptr = va_arg(*args, char *);
12444                 q += sizeof(UTF8f) - 2;
12445                 goto string;
12446             }
12447
12448             /* FALLTHROUGH */
12449         case 'i':
12450             base = -10;
12451             goto get_int_arg_val;
12452
12453         case 'U':
12454 #ifdef IV_IS_QUAD
12455             intsize = 'q';
12456 #else
12457             intsize = 'l';
12458 #endif
12459             /* FALLTHROUGH */
12460         case 'u':
12461             base = 10;
12462             goto get_int_arg_val;
12463
12464         case 'B':
12465         case 'b':
12466             base = 2;
12467             goto get_int_arg_val;
12468
12469         case 'O':
12470 #ifdef IV_IS_QUAD
12471             intsize = 'q';
12472 #else
12473             intsize = 'l';
12474 #endif
12475             /* FALLTHROUGH */
12476         case 'o':
12477             base = 8;
12478             goto get_int_arg_val;
12479
12480         case 'X':
12481         case 'x':
12482             base = 16;
12483
12484           get_int_arg_val:
12485
12486             if (vectorize) {
12487                 STRLEN ulen;
12488                 SV *vecsv;
12489
12490                 if (base < 0) {
12491                     base = -base;
12492                     if (plus)
12493                          esignbuf[esignlen++] = plus;
12494                 }
12495
12496                 /* initialise the vector string to iterate over */
12497
12498                 vecsv = args ? va_arg(*args, SV*) : argsv;
12499
12500                 /* if this is a version object, we need to convert
12501                  * back into v-string notation and then let the
12502                  * vectorize happen normally
12503                  */
12504                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12505                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12506                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12507                         "vector argument not supported with alpha versions");
12508                         vecsv = &PL_sv_no;
12509                     }
12510                     else {
12511                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12512                         vecsv = sv_newmortal();
12513                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12514                                      vecsv);
12515                     }
12516                 }
12517                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12518                 vec_utf8 = DO_UTF8(vecsv);
12519
12520               /* This is the re-entry point for when we're iterating
12521                * over the individual characters of a vector arg */
12522               vector:
12523                 if (!veclen)
12524                     goto done_valid_conversion;
12525                 if (vec_utf8)
12526                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12527                                         UTF8_ALLOW_ANYUV);
12528                 else {
12529                     uv = *vecstr;
12530                     ulen = 1;
12531                 }
12532                 vecstr += ulen;
12533                 veclen -= ulen;
12534             }
12535             else {
12536                 /* test arg for inf/nan. This can trigger an unwanted
12537                  * 'str' overload, so manually force 'num' overload first
12538                  * if necessary */
12539                 if (argsv) {
12540                     SvGETMAGIC(argsv);
12541                     if (UNLIKELY(SvAMAGIC(argsv)))
12542                         argsv = sv_2num(argsv);
12543                     if (UNLIKELY(isinfnansv(argsv)))
12544                         goto handle_infnan_argsv;
12545                 }
12546
12547                 if (base < 0) {
12548                     /* signed int type */
12549                     IV iv;
12550                     base = -base;
12551                     if (args) {
12552                         switch (intsize) {
12553                         case 'c':  iv = (char)va_arg(*args, int);  break;
12554                         case 'h':  iv = (short)va_arg(*args, int); break;
12555                         case 'l':  iv = va_arg(*args, long);       break;
12556                         case 'V':  iv = va_arg(*args, IV);         break;
12557                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12558 #ifdef HAS_PTRDIFF_T
12559                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12560 #endif
12561                         default:   iv = va_arg(*args, int);        break;
12562                         case 'j':  iv = va_arg(*args, PERL_INTMAX_T); break;
12563                         case 'q':
12564 #if IVSIZE >= 8
12565                                    iv = va_arg(*args, Quad_t);     break;
12566 #else
12567                                    goto unknown;
12568 #endif
12569                         }
12570                     }
12571                     else {
12572                         /* assign to tiv then cast to iv to work around
12573                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12574                         IV tiv = SvIV_nomg(argsv);
12575                         switch (intsize) {
12576                         case 'c':  iv = (char)tiv;   break;
12577                         case 'h':  iv = (short)tiv;  break;
12578                         case 'l':  iv = (long)tiv;   break;
12579                         case 'V':
12580                         default:   iv = tiv;         break;
12581                         case 'q':
12582 #if IVSIZE >= 8
12583                                    iv = (Quad_t)tiv; break;
12584 #else
12585                                    goto unknown;
12586 #endif
12587                         }
12588                     }
12589
12590                     /* now convert iv to uv */
12591                     if (iv >= 0) {
12592                         uv = iv;
12593                         if (plus)
12594                             esignbuf[esignlen++] = plus;
12595                     }
12596                     else {
12597                         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12598                         esignbuf[esignlen++] = '-';
12599                     }
12600                 }
12601                 else {
12602                     /* unsigned int type */
12603                     if (args) {
12604                         switch (intsize) {
12605                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12606                                   break;
12607                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12608                                   break;
12609                         case 'l': uv = va_arg(*args, unsigned long); break;
12610                         case 'V': uv = va_arg(*args, UV);            break;
12611                         case 'z': uv = va_arg(*args, Size_t);        break;
12612 #ifdef HAS_PTRDIFF_T
12613                                   /* will sign extend, but there is no
12614                                    * uptrdiff_t, so oh well */
12615                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12616 #endif
12617                         case 'j': uv = va_arg(*args, PERL_UINTMAX_T); break;
12618                         default:  uv = va_arg(*args, unsigned);      break;
12619                         case 'q':
12620 #if IVSIZE >= 8
12621                                   uv = va_arg(*args, Uquad_t);       break;
12622 #else
12623                                   goto unknown;
12624 #endif
12625                         }
12626                     }
12627                     else {
12628                         /* assign to tiv then cast to iv to work around
12629                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12630                         UV tuv = SvUV_nomg(argsv);
12631                         switch (intsize) {
12632                         case 'c': uv = (unsigned char)tuv;  break;
12633                         case 'h': uv = (unsigned short)tuv; break;
12634                         case 'l': uv = (unsigned long)tuv;  break;
12635                         case 'V':
12636                         default:  uv = tuv;                 break;
12637                         case 'q':
12638 #if IVSIZE >= 8
12639                                   uv = (Uquad_t)tuv;        break;
12640 #else
12641                                   goto unknown;
12642 #endif
12643                         }
12644                     }
12645                 }
12646             }
12647
12648         do_integer:
12649             {
12650                 char *ptr = ebuf + sizeof ebuf;
12651                 unsigned dig;
12652                 zeros = 0;
12653
12654                 switch (base) {
12655                 case 16:
12656                     {
12657                     const char * const p =
12658                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12659
12660                         do {
12661                             dig = uv & 15;
12662                             *--ptr = p[dig];
12663                         } while (uv >>= 4);
12664                         if (alt && *ptr != '0') {
12665                             esignbuf[esignlen++] = '0';
12666                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12667                         }
12668                         break;
12669                     }
12670                 case 8:
12671                     do {
12672                         dig = uv & 7;
12673                         *--ptr = '0' + dig;
12674                     } while (uv >>= 3);
12675                     if (alt && *ptr != '0')
12676                         *--ptr = '0';
12677                     break;
12678                 case 2:
12679                     do {
12680                         dig = uv & 1;
12681                         *--ptr = '0' + dig;
12682                     } while (uv >>= 1);
12683                     if (alt && *ptr != '0') {
12684                         esignbuf[esignlen++] = '0';
12685                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12686                     }
12687                     break;
12688
12689                 case 1:
12690                     /* special-case: base 1 indicates a 'c' format:
12691                      * we use the common code for extracting a uv,
12692                      * but handle that value differently here than
12693                      * all the other int types */
12694                     if ((uv > 255 ||
12695                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12696                         && !IN_BYTES)
12697                     {
12698                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12699                         eptr = ebuf;
12700                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12701                         is_utf8 = TRUE;
12702                     }
12703                     else {
12704                         eptr = ebuf;
12705                         ebuf[0] = (char)uv;
12706                         elen = 1;
12707                     }
12708                     goto string;
12709
12710                 default:                /* it had better be ten or less */
12711                     do {
12712                         dig = uv % base;
12713                         *--ptr = '0' + dig;
12714                     } while (uv /= base);
12715                     break;
12716                 }
12717                 elen = (ebuf + sizeof ebuf) - ptr;
12718                 eptr = ptr;
12719                 if (has_precis) {
12720                     if (precis > elen)
12721                         zeros = precis - elen;
12722                     else if (precis == 0 && elen == 1 && *eptr == '0'
12723                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12724                         elen = 0;
12725
12726                     /* a precision nullifies the 0 flag. */
12727                     fill = FALSE;
12728                 }
12729             }
12730             break;
12731
12732             /* FLOATING POINT */
12733
12734         case 'F':
12735             c = 'f';            /* maybe %F isn't supported here */
12736             /* FALLTHROUGH */
12737         case 'e': case 'E':
12738         case 'f':
12739         case 'g': case 'G':
12740         case 'a': case 'A':
12741
12742         {
12743             STRLEN float_need; /* what PL_efloatsize needs to become */
12744             bool hexfp;        /* hexadecimal floating point? */
12745
12746             vcatpvfn_long_double_t fv;
12747             NV                     nv;
12748
12749             /* This is evil, but floating point is even more evil */
12750
12751             /* for SV-style calling, we can only get NV
12752                for C-style calling, we assume %f is double;
12753                for simplicity we allow any of %Lf, %llf, %qf for long double
12754             */
12755             switch (intsize) {
12756             case 'V':
12757 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12758                 intsize = 'q';
12759 #endif
12760                 break;
12761 /* [perl #20339] - we should accept and ignore %lf rather than die */
12762             case 'l':
12763                 /* FALLTHROUGH */
12764             default:
12765 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12766                 intsize = args ? 0 : 'q';
12767 #endif
12768                 break;
12769             case 'q':
12770 #if defined(HAS_LONG_DOUBLE)
12771                 break;
12772 #else
12773                 /* FALLTHROUGH */
12774 #endif
12775             case 'c':
12776             case 'h':
12777             case 'z':
12778             case 't':
12779             case 'j':
12780                 goto unknown;
12781             }
12782
12783             /* Now we need (long double) if intsize == 'q', else (double). */
12784             if (args) {
12785                 /* Note: do not pull NVs off the va_list with va_arg()
12786                  * (pull doubles instead) because if you have a build
12787                  * with long doubles, you would always be pulling long
12788                  * doubles, which would badly break anyone using only
12789                  * doubles (i.e. the majority of builds). In other
12790                  * words, you cannot mix doubles and long doubles.
12791                  * The only case where you can pull off long doubles
12792                  * is when the format specifier explicitly asks so with
12793                  * e.g. "%Lg". */
12794 #ifdef USE_QUADMATH
12795                 fv = intsize == 'q' ?
12796                     va_arg(*args, NV) : va_arg(*args, double);
12797                 nv = fv;
12798 #elif LONG_DOUBLESIZE > DOUBLESIZE
12799                 if (intsize == 'q') {
12800                     fv = va_arg(*args, long double);
12801                     nv = fv;
12802                 } else {
12803                     nv = va_arg(*args, double);
12804                     VCATPVFN_NV_TO_FV(nv, fv);
12805                 }
12806 #else
12807                 nv = va_arg(*args, double);
12808                 fv = nv;
12809 #endif
12810             }
12811             else
12812             {
12813                 SvGETMAGIC(argsv);
12814                 /* we jump here if an int-ish format encountered an
12815                  * infinite/Nan argsv. After setting nv/fv, it falls
12816                  * into the isinfnan block which follows */
12817               handle_infnan_argsv:
12818                 nv = SvNV_nomg(argsv);
12819                 VCATPVFN_NV_TO_FV(nv, fv);
12820             }
12821
12822             if (Perl_isinfnan(nv)) {
12823                 if (c == 'c')
12824                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12825                            SvNV_nomg(argsv), (int)c);
12826
12827                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12828                 assert(elen);
12829                 eptr = ebuf;
12830                 zeros     = 0;
12831                 esignlen  = 0;
12832                 dotstrlen = 0;
12833                 break;
12834             }
12835
12836             /* special-case "%.0f" */
12837             if (   c == 'f'
12838                 && !precis
12839                 && has_precis
12840                 && !(width || left || plus || alt)
12841                 && !fill
12842                 && intsize != 'q'
12843                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12844             )
12845                 goto float_concat;
12846
12847             /* Determine the buffer size needed for the various
12848              * floating-point formats.
12849              *
12850              * The basic possibilities are:
12851              *
12852              *               <---P--->
12853              *    %f 1111111.123456789
12854              *    %e       1.111111123e+06
12855              *    %a     0x1.0f4471f9bp+20
12856              *    %g        1111111.12
12857              *    %g        1.11111112e+15
12858              *
12859              * where P is the value of the precision in the format, or 6
12860              * if not specified. Note the two possible output formats of
12861              * %g; in both cases the number of significant digits is <=
12862              * precision.
12863              *
12864              * For most of the format types the maximum buffer size needed
12865              * is precision, plus: any leading 1 or 0x1, the radix
12866              * point, and an exponent.  The difficult one is %f: for a
12867              * large positive exponent it can have many leading digits,
12868              * which needs to be calculated specially. Also %a is slightly
12869              * different in that in the absence of a specified precision,
12870              * it uses as many digits as necessary to distinguish
12871              * different values.
12872              *
12873              * First, here are the constant bits. For ease of calculation
12874              * we over-estimate the needed buffer size, for example by
12875              * assuming all formats have an exponent and a leading 0x1.
12876              *
12877              * Also for production use, add a little extra overhead for
12878              * safety's sake. Under debugging don't, as it means we're
12879              * more likely to quickly spot issues during development.
12880              */
12881
12882             float_need =     1  /* possible unary minus */
12883                           +  4  /* "0x1" plus very unlikely carry */
12884                           +  1  /* default radix point '.' */
12885                           +  2  /* "e-", "p+" etc */
12886                           +  6  /* exponent: up to 16383 (quad fp) */
12887 #ifndef DEBUGGING
12888                           + 20  /* safety net */
12889 #endif
12890                           +  1; /* \0 */
12891
12892
12893             /* determine the radix point len, e.g. length(".") in "1.2" */
12894 #ifdef USE_LOCALE_NUMERIC
12895             /* note that we may either explicitly use PL_numeric_radix_sv
12896              * below, or implicitly, via an snprintf() variant.
12897              * Note also things like ps_AF.utf8 which has
12898              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
12899             if (!lc_numeric_set) {
12900                 /* only set once and reuse in-locale value on subsequent
12901                  * iterations.
12902                  * XXX what happens if we die in an eval?
12903                  */
12904                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12905                 lc_numeric_set = TRUE;
12906             }
12907
12908             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12909                 /* this can't wrap unless PL_numeric_radix_sv is a string
12910                  * consuming virtually all the 32-bit or 64-bit address
12911                  * space
12912                  */
12913                 float_need += (SvCUR(PL_numeric_radix_sv) - 1);
12914
12915                 /* floating-point formats only get utf8 if the radix point
12916                  * is utf8. All other characters in the string are < 128
12917                  * and so can be safely appended to both a non-utf8 and utf8
12918                  * string as-is.
12919                  * Note that this will convert the output to utf8 even if
12920                  * the radix point didn't get output.
12921                  */
12922                 if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
12923                     sv_utf8_upgrade(sv);
12924                     has_utf8 = TRUE;
12925                 }
12926             }
12927 #endif
12928
12929             hexfp = FALSE;
12930
12931             if (isALPHA_FOLD_EQ(c, 'f')) {
12932                 /* Determine how many digits before the radix point
12933                  * might be emitted.  frexp() (or frexpl) has some
12934                  * unspecified behaviour for nan/inf/-inf, so lucky we've
12935                  * already handled them above */
12936                 STRLEN digits;
12937                 int i = PERL_INT_MIN;
12938                 (void)Perl_frexp((NV)fv, &i);
12939                 if (i == PERL_INT_MIN)
12940                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
12941
12942                 if (i > 0) {
12943                     digits = BIT_DIGITS(i);
12944                     /* this can't overflow. 'digits' will only be a few
12945                      * thousand even for the largest floating-point types.
12946                      * And up until now float_need is just some small
12947                      * constants plus radix len, which can't be in
12948                      * overflow territory unless the radix SV is consuming
12949                      * over 1/2 the address space */
12950                     assert(float_need < ((STRLEN)~0) - digits);
12951                     float_need += digits;
12952                 }
12953             }
12954             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
12955                 hexfp = TRUE;
12956                 if (!has_precis) {
12957                     /* %a in the absence of precision may print as many
12958                      * digits as needed to represent the entire mantissa
12959                      * bit pattern.
12960                      * This estimate seriously overshoots in most cases,
12961                      * but better the undershooting.  Firstly, all bytes
12962                      * of the NV are not mantissa, some of them are
12963                      * exponent.  Secondly, for the reasonably common
12964                      * long doubles case, the "80-bit extended", two
12965                      * or six bytes of the NV are unused. Also, we'll
12966                      * still pick up an extra +6 from the default
12967                      * precision calculation below. */
12968                     STRLEN digits =
12969 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12970                         /* For the "double double", we need more.
12971                          * Since each double has their own exponent, the
12972                          * doubles may float (haha) rather far from each
12973                          * other, and the number of required bits is much
12974                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12975                          * See the definition of DOUBLEDOUBLE_MAXBITS.
12976                          *
12977                          * Need 2 hexdigits for each byte. */
12978                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12979 #else
12980                         NVSIZE * 2; /* 2 hexdigits for each byte */
12981 #endif
12982                     /* see "this can't overflow" comment above */
12983                     assert(float_need < ((STRLEN)~0) - digits);
12984                     float_need += digits;
12985                 }
12986             }
12987             /* special-case "%.<number>g" if it will fit in ebuf */
12988             else if (c == 'g'
12989                 && precis   /* See earlier comment about buggy Gconvert
12990                                when digits, aka precis, is 0  */
12991                 && has_precis
12992                 /* check, in manner not involving wrapping, that it will
12993                  * fit in ebuf  */
12994                 && float_need < sizeof(ebuf)
12995                 && sizeof(ebuf) - float_need > precis
12996                 && !(width || left || plus || alt)
12997                 && !fill
12998                 && intsize != 'q'
12999             ) {
13000                 SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
13001                 elen = strlen(ebuf);
13002                 eptr = ebuf;
13003                 goto float_concat;
13004             }
13005
13006
13007             {
13008                 STRLEN pr = has_precis ? precis : 6; /* known default */
13009                 /* this probably can't wrap, since precis is limited
13010                  * to 1/4 address space size, but better safe than sorry
13011                  */
13012                 if (float_need >= ((STRLEN)~0) - pr)
13013                     croak_memory_wrap();
13014                 float_need += pr;
13015             }
13016
13017             if (float_need < width)
13018                 float_need = width;
13019
13020             if (PL_efloatsize <= float_need) {
13021                 /* PL_efloatbuf should be at least 1 greater than
13022                  * float_need to allow a trailing \0 to be returned by
13023                  * snprintf().  If we need to grow, overgrow for the
13024                  * benefit of future generations */
13025                 const STRLEN extra = 0x20;
13026                 if (float_need >= ((STRLEN)~0) - extra)
13027                     croak_memory_wrap();
13028                 float_need += extra;
13029                 Safefree(PL_efloatbuf);
13030                 PL_efloatsize = float_need;
13031                 Newx(PL_efloatbuf, PL_efloatsize, char);
13032                 PL_efloatbuf[0] = '\0';
13033             }
13034
13035             if (UNLIKELY(hexfp)) {
13036                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13037                                 nv, fv, has_precis, precis, width,
13038                                 alt, plus, left, fill);
13039             }
13040             else {
13041                 char *ptr = ebuf + sizeof ebuf;
13042                 *--ptr = '\0';
13043                 *--ptr = c;
13044 #if defined(USE_QUADMATH)
13045                 if (intsize == 'q') {
13046                     /* "g" -> "Qg" */
13047                     *--ptr = 'Q';
13048                 }
13049                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13050 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13051                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13052                  * not USE_LONG_DOUBLE and NVff.  In other words,
13053                  * this needs to work without USE_LONG_DOUBLE. */
13054                 if (intsize == 'q') {
13055                     /* Copy the one or more characters in a long double
13056                      * format before the 'base' ([efgEFG]) character to
13057                      * the format string. */
13058                     static char const ldblf[] = PERL_PRIfldbl;
13059                     char const *p = ldblf + sizeof(ldblf) - 3;
13060                     while (p >= ldblf) { *--ptr = *p--; }
13061                 }
13062 #endif
13063                 if (has_precis) {
13064                     base = precis;
13065                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13066                     *--ptr = '.';
13067                 }
13068                 if (width) {
13069                     base = width;
13070                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13071                 }
13072                 if (fill)
13073                     *--ptr = '0';
13074                 if (left)
13075                     *--ptr = '-';
13076                 if (plus)
13077                     *--ptr = plus;
13078                 if (alt)
13079                     *--ptr = '#';
13080                 *--ptr = '%';
13081
13082                 /* No taint.  Otherwise we are in the strange situation
13083                  * where printf() taints but print($float) doesn't.
13084                  * --jhi */
13085
13086                 /* hopefully the above makes ptr a very constrained format
13087                  * that is safe to use, even though it's not literal */
13088                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13089 #ifdef USE_QUADMATH
13090                 {
13091                     const char* qfmt = quadmath_format_single(ptr);
13092                     if (!qfmt)
13093                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13094                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13095                                              qfmt, nv);
13096                     if ((IV)elen == -1) {
13097                         if (qfmt != ptr)
13098                             SAVEFREEPV(qfmt);
13099                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
13100                     }
13101                     if (qfmt != ptr)
13102                         Safefree(qfmt);
13103                 }
13104 #elif defined(HAS_LONG_DOUBLE)
13105                 elen = ((intsize == 'q')
13106                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13107                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
13108 #else
13109                 elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv);
13110 #endif
13111                 GCC_DIAG_RESTORE_STMT;
13112             }
13113
13114             eptr = PL_efloatbuf;
13115
13116           float_concat:
13117
13118             /* Since floating-point formats do their own formatting and
13119              * padding, we skip the main block of code at the end of this
13120              * loop which handles appending eptr to sv, and do our own
13121              * stripped-down version */
13122
13123             assert(!zeros);
13124             assert(!esignlen);
13125             assert(elen);
13126             assert(elen >= width);
13127
13128             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13129
13130             goto done_valid_conversion;
13131         }
13132
13133             /* SPECIAL */
13134
13135         case 'n':
13136             {
13137                 STRLEN len;
13138                 /* XXX ideally we should warn if any flags etc have been
13139                  * set, e.g. "%-4.5n" */
13140                 /* XXX if sv was originally non-utf8 with a char in the
13141                  * range 0x80-0xff, then if it got upgraded, we should
13142                  * calculate char len rather than byte len here */
13143                 len = SvCUR(sv) - origlen;
13144                 if (args) {
13145                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13146
13147                     switch (intsize) {
13148                     case 'c':  *(va_arg(*args, char*))      = i; break;
13149                     case 'h':  *(va_arg(*args, short*))     = i; break;
13150                     default:   *(va_arg(*args, int*))       = i; break;
13151                     case 'l':  *(va_arg(*args, long*))      = i; break;
13152                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13153                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13154 #ifdef HAS_PTRDIFF_T
13155                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13156 #endif
13157                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13158                     case 'q':
13159 #if IVSIZE >= 8
13160                                *(va_arg(*args, Quad_t*))    = i; break;
13161 #else
13162                                goto unknown;
13163 #endif
13164                     }
13165                 }
13166                 else {
13167                     if (arg_missing)
13168                         Perl_croak_nocontext(
13169                             "Missing argument for %%n in %s",
13170                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13171                     sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)len);
13172                 }
13173                 goto done_valid_conversion;
13174             }
13175
13176             /* UNKNOWN */
13177
13178         default:
13179       unknown:
13180             if (!args
13181                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13182                 && ckWARN(WARN_PRINTF))
13183             {
13184                 SV * const msg = sv_newmortal();
13185                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13186                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13187                 if (fmtstart < patend) {
13188                     const char * const fmtend = q < patend ? q : patend;
13189                     const char * f;
13190                     sv_catpvs(msg, "\"%");
13191                     for (f = fmtstart; f < fmtend; f++) {
13192                         if (isPRINT(*f)) {
13193                             sv_catpvn_nomg(msg, f, 1);
13194                         } else {
13195                             Perl_sv_catpvf(aTHX_ msg,
13196                                            "\\%03" UVof, (UV)*f & 0xFF);
13197                         }
13198                     }
13199                     sv_catpvs(msg, "\"");
13200                 } else {
13201                     sv_catpvs(msg, "end of string");
13202                 }
13203                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13204             }
13205
13206             /* mangled format: output the '%', then continue from the
13207              * character following that */
13208             sv_catpvn_nomg(sv, fmtstart-1, 1);
13209             q = fmtstart;
13210             svix = osvix;
13211             /* Any "redundant arg" warning from now onwards will probably
13212              * just be misleading, so don't bother. */
13213             no_redundant_warning = TRUE;
13214             continue;   /* not "break" */
13215         }
13216
13217         if (is_utf8 != has_utf8) {
13218             if (is_utf8) {
13219                 if (SvCUR(sv))
13220                     sv_utf8_upgrade(sv);
13221             }
13222             else {
13223                 const STRLEN old_elen = elen;
13224                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13225                 sv_utf8_upgrade(nsv);
13226                 eptr = SvPVX_const(nsv);
13227                 elen = SvCUR(nsv);
13228
13229                 if (width) { /* fudge width (can't fudge elen) */
13230                     width += elen - old_elen;
13231                 }
13232                 is_utf8 = TRUE;
13233             }
13234         }
13235
13236
13237         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13238
13239         {
13240             STRLEN need, have, gap;
13241             STRLEN i;
13242             char *s;
13243
13244             /* signed value that's wrapped? */
13245             assert(elen  <= ((~(STRLEN)0) >> 1));
13246
13247             /* if zeros is non-zero, then it represents filler between
13248              * elen and precis. So adding elen and zeros together will
13249              * always be <= precis, and the addition can never wrap */
13250             assert(!zeros || (precis > elen && precis - elen == zeros));
13251             have = elen + zeros;
13252
13253             if (have >= (((STRLEN)~0) - esignlen))
13254                 croak_memory_wrap();
13255             have += esignlen;
13256
13257             need = (have > width ? have : width);
13258             gap = need - have;
13259
13260             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13261                 croak_memory_wrap();
13262             need += (SvCUR(sv) + 1);
13263
13264             SvGROW(sv, need);
13265
13266             s = SvEND(sv);
13267
13268             if (left) {
13269                 for (i = 0; i < esignlen; i++)
13270                     *s++ = esignbuf[i];
13271                 for (i = zeros; i; i--)
13272                     *s++ = '0';
13273                 Copy(eptr, s, elen, char);
13274                 s += elen;
13275                 for (i = gap; i; i--)
13276                     *s++ = ' ';
13277             }
13278             else {
13279                 if (fill) {
13280                     for (i = 0; i < esignlen; i++)
13281                         *s++ = esignbuf[i];
13282                     assert(!zeros);
13283                     zeros = gap;
13284                 }
13285                 else {
13286                     for (i = gap; i; i--)
13287                         *s++ = ' ';
13288                     for (i = 0; i < esignlen; i++)
13289                         *s++ = esignbuf[i];
13290                 }
13291
13292                 for (i = zeros; i; i--)
13293                     *s++ = '0';
13294                 Copy(eptr, s, elen, char);
13295                 s += elen;
13296             }
13297
13298             *s = '\0';
13299             SvCUR_set(sv, s - SvPVX_const(sv));
13300
13301             if (is_utf8)
13302                 has_utf8 = TRUE;
13303             if (has_utf8)
13304                 SvUTF8_on(sv);
13305         }
13306
13307         if (vectorize && veclen) {
13308             /* we append the vector separator separately since %v isn't
13309              * very common: don't slow down the general case by adding
13310              * dotstrlen to need etc */
13311             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13312             esignlen = 0;
13313             goto vector; /* do next iteration */
13314         }
13315
13316       done_valid_conversion:
13317
13318         if (arg_missing)
13319             S_warn_vcatpvfn_missing_argument(aTHX);
13320     }
13321
13322     /* Now that we've consumed all our printf format arguments (svix)
13323      * do we have things left on the stack that we didn't use?
13324      */
13325     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13326         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13327                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13328     }
13329
13330     SvTAINT(sv);
13331
13332     if (lc_numeric_set) {
13333         RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to
13334                                    save/restore each iteration. */
13335     }
13336 }
13337
13338 /* =========================================================================
13339
13340 =head1 Cloning an interpreter
13341
13342 =cut
13343
13344 All the macros and functions in this section are for the private use of
13345 the main function, perl_clone().
13346
13347 The foo_dup() functions make an exact copy of an existing foo thingy.
13348 During the course of a cloning, a hash table is used to map old addresses
13349 to new addresses.  The table is created and manipulated with the
13350 ptr_table_* functions.
13351
13352  * =========================================================================*/
13353
13354
13355 #if defined(USE_ITHREADS)
13356
13357 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13358 #ifndef GpREFCNT_inc
13359 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13360 #endif
13361
13362
13363 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13364    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13365    If this changes, please unmerge ss_dup.
13366    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13367 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13368 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13369 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13370 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13371 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13372 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13373 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13374 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13375 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13376 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13377 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13378 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13379 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13380
13381 /* clone a parser */
13382
13383 yy_parser *
13384 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13385 {
13386     yy_parser *parser;
13387
13388     PERL_ARGS_ASSERT_PARSER_DUP;
13389
13390     if (!proto)
13391         return NULL;
13392
13393     /* look for it in the table first */
13394     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13395     if (parser)
13396         return parser;
13397
13398     /* create anew and remember what it is */
13399     Newxz(parser, 1, yy_parser);
13400     ptr_table_store(PL_ptr_table, proto, parser);
13401
13402     /* XXX eventually, just Copy() most of the parser struct ? */
13403
13404     parser->lex_brackets = proto->lex_brackets;
13405     parser->lex_casemods = proto->lex_casemods;
13406     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13407                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13408     parser->lex_casestack = savepvn(proto->lex_casestack,
13409                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13410     parser->lex_defer   = proto->lex_defer;
13411     parser->lex_dojoin  = proto->lex_dojoin;
13412     parser->lex_formbrack = proto->lex_formbrack;
13413     parser->lex_inpat   = proto->lex_inpat;
13414     parser->lex_inwhat  = proto->lex_inwhat;
13415     parser->lex_op      = proto->lex_op;
13416     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13417     parser->lex_starts  = proto->lex_starts;
13418     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13419     parser->multi_close = proto->multi_close;
13420     parser->multi_open  = proto->multi_open;
13421     parser->multi_start = proto->multi_start;
13422     parser->multi_end   = proto->multi_end;
13423     parser->preambled   = proto->preambled;
13424     parser->lex_super_state = proto->lex_super_state;
13425     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13426     parser->lex_sub_op  = proto->lex_sub_op;
13427     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13428     parser->linestr     = sv_dup_inc(proto->linestr, param);
13429     parser->expect      = proto->expect;
13430     parser->copline     = proto->copline;
13431     parser->last_lop_op = proto->last_lop_op;
13432     parser->lex_state   = proto->lex_state;
13433     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13434     /* rsfp_filters entries have fake IoDIRP() */
13435     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13436     parser->in_my       = proto->in_my;
13437     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13438     parser->error_count = proto->error_count;
13439     parser->sig_elems   = proto->sig_elems;
13440     parser->sig_optelems= proto->sig_optelems;
13441     parser->sig_slurpy  = proto->sig_slurpy;
13442     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13443
13444     {
13445         char * const ols = SvPVX(proto->linestr);
13446         char * const ls  = SvPVX(parser->linestr);
13447
13448         parser->bufptr      = ls + (proto->bufptr >= ols ?
13449                                     proto->bufptr -  ols : 0);
13450         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13451                                     proto->oldbufptr -  ols : 0);
13452         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13453                                     proto->oldoldbufptr -  ols : 0);
13454         parser->linestart   = ls + (proto->linestart >= ols ?
13455                                     proto->linestart -  ols : 0);
13456         parser->last_uni    = ls + (proto->last_uni >= ols ?
13457                                     proto->last_uni -  ols : 0);
13458         parser->last_lop    = ls + (proto->last_lop >= ols ?
13459                                     proto->last_lop -  ols : 0);
13460
13461         parser->bufend      = ls + SvCUR(parser->linestr);
13462     }
13463
13464     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13465
13466
13467     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13468     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13469     parser->nexttoke    = proto->nexttoke;
13470
13471     /* XXX should clone saved_curcop here, but we aren't passed
13472      * proto_perl; so do it in perl_clone_using instead */
13473
13474     return parser;
13475 }
13476
13477
13478 /* duplicate a file handle */
13479
13480 PerlIO *
13481 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13482 {
13483     PerlIO *ret;
13484
13485     PERL_ARGS_ASSERT_FP_DUP;
13486     PERL_UNUSED_ARG(type);
13487
13488     if (!fp)
13489         return (PerlIO*)NULL;
13490
13491     /* look for it in the table first */
13492     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13493     if (ret)
13494         return ret;
13495
13496     /* create anew and remember what it is */
13497 #ifdef __amigaos4__
13498     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13499 #else
13500     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13501 #endif
13502     ptr_table_store(PL_ptr_table, fp, ret);
13503     return ret;
13504 }
13505
13506 /* duplicate a directory handle */
13507
13508 DIR *
13509 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13510 {
13511     DIR *ret;
13512
13513 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13514     DIR *pwd;
13515     const Direntry_t *dirent;
13516     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13517     char *name = NULL;
13518     STRLEN len = 0;
13519     long pos;
13520 #endif
13521
13522     PERL_UNUSED_CONTEXT;
13523     PERL_ARGS_ASSERT_DIRP_DUP;
13524
13525     if (!dp)
13526         return (DIR*)NULL;
13527
13528     /* look for it in the table first */
13529     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13530     if (ret)
13531         return ret;
13532
13533 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13534
13535     PERL_UNUSED_ARG(param);
13536
13537     /* create anew */
13538
13539     /* open the current directory (so we can switch back) */
13540     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13541
13542     /* chdir to our dir handle and open the present working directory */
13543     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13544         PerlDir_close(pwd);
13545         return (DIR *)NULL;
13546     }
13547     /* Now we should have two dir handles pointing to the same dir. */
13548
13549     /* Be nice to the calling code and chdir back to where we were. */
13550     /* XXX If this fails, then what? */
13551     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13552
13553     /* We have no need of the pwd handle any more. */
13554     PerlDir_close(pwd);
13555
13556 #ifdef DIRNAMLEN
13557 # define d_namlen(d) (d)->d_namlen
13558 #else
13559 # define d_namlen(d) strlen((d)->d_name)
13560 #endif
13561     /* Iterate once through dp, to get the file name at the current posi-
13562        tion. Then step back. */
13563     pos = PerlDir_tell(dp);
13564     if ((dirent = PerlDir_read(dp))) {
13565         len = d_namlen(dirent);
13566         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13567             /* If the len is somehow magically longer than the
13568              * maximum length of the directory entry, even though
13569              * we could fit it in a buffer, we could not copy it
13570              * from the dirent.  Bail out. */
13571             PerlDir_close(ret);
13572             return (DIR*)NULL;
13573         }
13574         if (len <= sizeof smallbuf) name = smallbuf;
13575         else Newx(name, len, char);
13576         Move(dirent->d_name, name, len, char);
13577     }
13578     PerlDir_seek(dp, pos);
13579
13580     /* Iterate through the new dir handle, till we find a file with the
13581        right name. */
13582     if (!dirent) /* just before the end */
13583         for(;;) {
13584             pos = PerlDir_tell(ret);
13585             if (PerlDir_read(ret)) continue; /* not there yet */
13586             PerlDir_seek(ret, pos); /* step back */
13587             break;
13588         }
13589     else {
13590         const long pos0 = PerlDir_tell(ret);
13591         for(;;) {
13592             pos = PerlDir_tell(ret);
13593             if ((dirent = PerlDir_read(ret))) {
13594                 if (len == (STRLEN)d_namlen(dirent)
13595                     && memEQ(name, dirent->d_name, len)) {
13596                     /* found it */
13597                     PerlDir_seek(ret, pos); /* step back */
13598                     break;
13599                 }
13600                 /* else we are not there yet; keep iterating */
13601             }
13602             else { /* This is not meant to happen. The best we can do is
13603                       reset the iterator to the beginning. */
13604                 PerlDir_seek(ret, pos0);
13605                 break;
13606             }
13607         }
13608     }
13609 #undef d_namlen
13610
13611     if (name && name != smallbuf)
13612         Safefree(name);
13613 #endif
13614
13615 #ifdef WIN32
13616     ret = win32_dirp_dup(dp, param);
13617 #endif
13618
13619     /* pop it in the pointer table */
13620     if (ret)
13621         ptr_table_store(PL_ptr_table, dp, ret);
13622
13623     return ret;
13624 }
13625
13626 /* duplicate a typeglob */
13627
13628 GP *
13629 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13630 {
13631     GP *ret;
13632
13633     PERL_ARGS_ASSERT_GP_DUP;
13634
13635     if (!gp)
13636         return (GP*)NULL;
13637     /* look for it in the table first */
13638     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13639     if (ret)
13640         return ret;
13641
13642     /* create anew and remember what it is */
13643     Newxz(ret, 1, GP);
13644     ptr_table_store(PL_ptr_table, gp, ret);
13645
13646     /* clone */
13647     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13648        on Newxz() to do this for us.  */
13649     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13650     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13651     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13652     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13653     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13654     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13655     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13656     ret->gp_cvgen       = gp->gp_cvgen;
13657     ret->gp_line        = gp->gp_line;
13658     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13659     return ret;
13660 }
13661
13662 /* duplicate a chain of magic */
13663
13664 MAGIC *
13665 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13666 {
13667     MAGIC *mgret = NULL;
13668     MAGIC **mgprev_p = &mgret;
13669
13670     PERL_ARGS_ASSERT_MG_DUP;
13671
13672     for (; mg; mg = mg->mg_moremagic) {
13673         MAGIC *nmg;
13674
13675         if ((param->flags & CLONEf_JOIN_IN)
13676                 && mg->mg_type == PERL_MAGIC_backref)
13677             /* when joining, we let the individual SVs add themselves to
13678              * backref as needed. */
13679             continue;
13680
13681         Newx(nmg, 1, MAGIC);
13682         *mgprev_p = nmg;
13683         mgprev_p = &(nmg->mg_moremagic);
13684
13685         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13686            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13687            from the original commit adding Perl_mg_dup() - revision 4538.
13688            Similarly there is the annotation "XXX random ptr?" next to the
13689            assignment to nmg->mg_ptr.  */
13690         *nmg = *mg;
13691
13692         /* FIXME for plugins
13693         if (nmg->mg_type == PERL_MAGIC_qr) {
13694             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13695         }
13696         else
13697         */
13698         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13699                           ? nmg->mg_type == PERL_MAGIC_backref
13700                                 /* The backref AV has its reference
13701                                  * count deliberately bumped by 1 */
13702                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13703                                                     nmg->mg_obj, param))
13704                                 : sv_dup_inc(nmg->mg_obj, param)
13705                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13706                              nmg->mg_type == PERL_MAGIC_regdata)
13707                                   ? nmg->mg_obj
13708                                   : sv_dup(nmg->mg_obj, param);
13709
13710         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13711             if (nmg->mg_len > 0) {
13712                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13713                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13714                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13715                 {
13716                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13717                     sv_dup_inc_multiple((SV**)(namtp->table),
13718                                         (SV**)(namtp->table), NofAMmeth, param);
13719                 }
13720             }
13721             else if (nmg->mg_len == HEf_SVKEY)
13722                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13723         }
13724         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13725             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13726         }
13727     }
13728     return mgret;
13729 }
13730
13731 #endif /* USE_ITHREADS */
13732
13733 struct ptr_tbl_arena {
13734     struct ptr_tbl_arena *next;
13735     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13736 };
13737
13738 /* create a new pointer-mapping table */
13739
13740 PTR_TBL_t *
13741 Perl_ptr_table_new(pTHX)
13742 {
13743     PTR_TBL_t *tbl;
13744     PERL_UNUSED_CONTEXT;
13745
13746     Newx(tbl, 1, PTR_TBL_t);
13747     tbl->tbl_max        = 511;
13748     tbl->tbl_items      = 0;
13749     tbl->tbl_arena      = NULL;
13750     tbl->tbl_arena_next = NULL;
13751     tbl->tbl_arena_end  = NULL;
13752     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13753     return tbl;
13754 }
13755
13756 #define PTR_TABLE_HASH(ptr) \
13757   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13758
13759 /* map an existing pointer using a table */
13760
13761 STATIC PTR_TBL_ENT_t *
13762 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13763 {
13764     PTR_TBL_ENT_t *tblent;
13765     const UV hash = PTR_TABLE_HASH(sv);
13766
13767     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13768
13769     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13770     for (; tblent; tblent = tblent->next) {
13771         if (tblent->oldval == sv)
13772             return tblent;
13773     }
13774     return NULL;
13775 }
13776
13777 void *
13778 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13779 {
13780     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13781
13782     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13783     PERL_UNUSED_CONTEXT;
13784
13785     return tblent ? tblent->newval : NULL;
13786 }
13787
13788 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13789  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13790  * the core's typical use of ptr_tables in thread cloning. */
13791
13792 void
13793 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13794 {
13795     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13796
13797     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13798     PERL_UNUSED_CONTEXT;
13799
13800     if (tblent) {
13801         tblent->newval = newsv;
13802     } else {
13803         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13804
13805         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13806             struct ptr_tbl_arena *new_arena;
13807
13808             Newx(new_arena, 1, struct ptr_tbl_arena);
13809             new_arena->next = tbl->tbl_arena;
13810             tbl->tbl_arena = new_arena;
13811             tbl->tbl_arena_next = new_arena->array;
13812             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13813         }
13814
13815         tblent = tbl->tbl_arena_next++;
13816
13817         tblent->oldval = oldsv;
13818         tblent->newval = newsv;
13819         tblent->next = tbl->tbl_ary[entry];
13820         tbl->tbl_ary[entry] = tblent;
13821         tbl->tbl_items++;
13822         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13823             ptr_table_split(tbl);
13824     }
13825 }
13826
13827 /* double the hash bucket size of an existing ptr table */
13828
13829 void
13830 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13831 {
13832     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13833     const UV oldsize = tbl->tbl_max + 1;
13834     UV newsize = oldsize * 2;
13835     UV i;
13836
13837     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13838     PERL_UNUSED_CONTEXT;
13839
13840     Renew(ary, newsize, PTR_TBL_ENT_t*);
13841     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13842     tbl->tbl_max = --newsize;
13843     tbl->tbl_ary = ary;
13844     for (i=0; i < oldsize; i++, ary++) {
13845         PTR_TBL_ENT_t **entp = ary;
13846         PTR_TBL_ENT_t *ent = *ary;
13847         PTR_TBL_ENT_t **curentp;
13848         if (!ent)
13849             continue;
13850         curentp = ary + oldsize;
13851         do {
13852             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13853                 *entp = ent->next;
13854                 ent->next = *curentp;
13855                 *curentp = ent;
13856             }
13857             else
13858                 entp = &ent->next;
13859             ent = *entp;
13860         } while (ent);
13861     }
13862 }
13863
13864 /* remove all the entries from a ptr table */
13865 /* Deprecated - will be removed post 5.14 */
13866
13867 void
13868 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13869 {
13870     PERL_UNUSED_CONTEXT;
13871     if (tbl && tbl->tbl_items) {
13872         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13873
13874         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13875
13876         while (arena) {
13877             struct ptr_tbl_arena *next = arena->next;
13878
13879             Safefree(arena);
13880             arena = next;
13881         };
13882
13883         tbl->tbl_items = 0;
13884         tbl->tbl_arena = NULL;
13885         tbl->tbl_arena_next = NULL;
13886         tbl->tbl_arena_end = NULL;
13887     }
13888 }
13889
13890 /* clear and free a ptr table */
13891
13892 void
13893 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13894 {
13895     struct ptr_tbl_arena *arena;
13896
13897     PERL_UNUSED_CONTEXT;
13898
13899     if (!tbl) {
13900         return;
13901     }
13902
13903     arena = tbl->tbl_arena;
13904
13905     while (arena) {
13906         struct ptr_tbl_arena *next = arena->next;
13907
13908         Safefree(arena);
13909         arena = next;
13910     }
13911
13912     Safefree(tbl->tbl_ary);
13913     Safefree(tbl);
13914 }
13915
13916 #if defined(USE_ITHREADS)
13917
13918 void
13919 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13920 {
13921     PERL_ARGS_ASSERT_RVPV_DUP;
13922
13923     assert(!isREGEXP(sstr));
13924     if (SvROK(sstr)) {
13925         if (SvWEAKREF(sstr)) {
13926             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13927             if (param->flags & CLONEf_JOIN_IN) {
13928                 /* if joining, we add any back references individually rather
13929                  * than copying the whole backref array */
13930                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13931             }
13932         }
13933         else
13934             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13935     }
13936     else if (SvPVX_const(sstr)) {
13937         /* Has something there */
13938         if (SvLEN(sstr)) {
13939             /* Normal PV - clone whole allocated space */
13940             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13941             /* sstr may not be that normal, but actually copy on write.
13942                But we are a true, independent SV, so:  */
13943             SvIsCOW_off(dstr);
13944         }
13945         else {
13946             /* Special case - not normally malloced for some reason */
13947             if (isGV_with_GP(sstr)) {
13948                 /* Don't need to do anything here.  */
13949             }
13950             else if ((SvIsCOW(sstr))) {
13951                 /* A "shared" PV - clone it as "shared" PV */
13952                 SvPV_set(dstr,
13953                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13954                                          param)));
13955             }
13956             else {
13957                 /* Some other special case - random pointer */
13958                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13959             }
13960         }
13961     }
13962     else {
13963         /* Copy the NULL */
13964         SvPV_set(dstr, NULL);
13965     }
13966 }
13967
13968 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13969 static SV **
13970 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13971                       SSize_t items, CLONE_PARAMS *const param)
13972 {
13973     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13974
13975     while (items-- > 0) {
13976         *dest++ = sv_dup_inc(*source++, param);
13977     }
13978
13979     return dest;
13980 }
13981
13982 /* duplicate an SV of any type (including AV, HV etc) */
13983
13984 static SV *
13985 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13986 {
13987     dVAR;
13988     SV *dstr;
13989
13990     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13991
13992     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13993 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13994         abort();
13995 #endif
13996         return NULL;
13997     }
13998     /* look for it in the table first */
13999     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14000     if (dstr)
14001         return dstr;
14002
14003     if(param->flags & CLONEf_JOIN_IN) {
14004         /** We are joining here so we don't want do clone
14005             something that is bad **/
14006         if (SvTYPE(sstr) == SVt_PVHV) {
14007             const HEK * const hvname = HvNAME_HEK(sstr);
14008             if (hvname) {
14009                 /** don't clone stashes if they already exist **/
14010                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14011                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14012                 ptr_table_store(PL_ptr_table, sstr, dstr);
14013                 return dstr;
14014             }
14015         }
14016         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14017             HV *stash = GvSTASH(sstr);
14018             const HEK * hvname;
14019             if (stash && (hvname = HvNAME_HEK(stash))) {
14020                 /** don't clone GVs if they already exist **/
14021                 SV **svp;
14022                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14023                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14024                 svp = hv_fetch(
14025                         stash, GvNAME(sstr),
14026                         GvNAMEUTF8(sstr)
14027                             ? -GvNAMELEN(sstr)
14028                             :  GvNAMELEN(sstr),
14029                         0
14030                       );
14031                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14032                     ptr_table_store(PL_ptr_table, sstr, *svp);
14033                     return *svp;
14034                 }
14035             }
14036         }
14037     }
14038
14039     /* create anew and remember what it is */
14040     new_SV(dstr);
14041
14042 #ifdef DEBUG_LEAKING_SCALARS
14043     dstr->sv_debug_optype = sstr->sv_debug_optype;
14044     dstr->sv_debug_line = sstr->sv_debug_line;
14045     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14046     dstr->sv_debug_parent = (SV*)sstr;
14047     FREE_SV_DEBUG_FILE(dstr);
14048     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14049 #endif
14050
14051     ptr_table_store(PL_ptr_table, sstr, dstr);
14052
14053     /* clone */
14054     SvFLAGS(dstr)       = SvFLAGS(sstr);
14055     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14056     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14057
14058 #ifdef DEBUGGING
14059     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14060         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14061                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14062 #endif
14063
14064     /* don't clone objects whose class has asked us not to */
14065     if (SvOBJECT(sstr)
14066      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14067     {
14068         SvFLAGS(dstr) = 0;
14069         return dstr;
14070     }
14071
14072     switch (SvTYPE(sstr)) {
14073     case SVt_NULL:
14074         SvANY(dstr)     = NULL;
14075         break;
14076     case SVt_IV:
14077         SET_SVANY_FOR_BODYLESS_IV(dstr);
14078         if(SvROK(sstr)) {
14079             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14080         } else {
14081             SvIV_set(dstr, SvIVX(sstr));
14082         }
14083         break;
14084     case SVt_NV:
14085 #if NVSIZE <= IVSIZE
14086         SET_SVANY_FOR_BODYLESS_NV(dstr);
14087 #else
14088         SvANY(dstr)     = new_XNV();
14089 #endif
14090         SvNV_set(dstr, SvNVX(sstr));
14091         break;
14092     default:
14093         {
14094             /* These are all the types that need complex bodies allocating.  */
14095             void *new_body;
14096             const svtype sv_type = SvTYPE(sstr);
14097             const struct body_details *const sv_type_details
14098                 = bodies_by_type + sv_type;
14099
14100             switch (sv_type) {
14101             default:
14102                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14103                 NOT_REACHED; /* NOTREACHED */
14104                 break;
14105
14106             case SVt_PVGV:
14107             case SVt_PVIO:
14108             case SVt_PVFM:
14109             case SVt_PVHV:
14110             case SVt_PVAV:
14111             case SVt_PVCV:
14112             case SVt_PVLV:
14113             case SVt_REGEXP:
14114             case SVt_PVMG:
14115             case SVt_PVNV:
14116             case SVt_PVIV:
14117             case SVt_INVLIST:
14118             case SVt_PV:
14119                 assert(sv_type_details->body_size);
14120                 if (sv_type_details->arena) {
14121                     new_body_inline(new_body, sv_type);
14122                     new_body
14123                         = (void*)((char*)new_body - sv_type_details->offset);
14124                 } else {
14125                     new_body = new_NOARENA(sv_type_details);
14126                 }
14127             }
14128             assert(new_body);
14129             SvANY(dstr) = new_body;
14130
14131 #ifndef PURIFY
14132             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14133                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14134                  sv_type_details->copy, char);
14135 #else
14136             Copy(((char*)SvANY(sstr)),
14137                  ((char*)SvANY(dstr)),
14138                  sv_type_details->body_size + sv_type_details->offset, char);
14139 #endif
14140
14141             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14142                 && !isGV_with_GP(dstr)
14143                 && !isREGEXP(dstr)
14144                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14145                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14146
14147             /* The Copy above means that all the source (unduplicated) pointers
14148                are now in the destination.  We can check the flags and the
14149                pointers in either, but it's possible that there's less cache
14150                missing by always going for the destination.
14151                FIXME - instrument and check that assumption  */
14152             if (sv_type >= SVt_PVMG) {
14153                 if (SvMAGIC(dstr))
14154                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14155                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14156                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14157                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14158             }
14159
14160             /* The cast silences a GCC warning about unhandled types.  */
14161             switch ((int)sv_type) {
14162             case SVt_PV:
14163                 break;
14164             case SVt_PVIV:
14165                 break;
14166             case SVt_PVNV:
14167                 break;
14168             case SVt_PVMG:
14169                 break;
14170             case SVt_REGEXP:
14171               duprex:
14172                 /* FIXME for plugins */
14173                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14174                 break;
14175             case SVt_PVLV:
14176                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14177                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14178                     LvTARG(dstr) = dstr;
14179                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14180                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14181                 else
14182                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14183                 if (isREGEXP(sstr)) goto duprex;
14184                 /* FALLTHROUGH */
14185             case SVt_PVGV:
14186                 /* non-GP case already handled above */
14187                 if(isGV_with_GP(sstr)) {
14188                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14189                     /* Don't call sv_add_backref here as it's going to be
14190                        created as part of the magic cloning of the symbol
14191                        table--unless this is during a join and the stash
14192                        is not actually being cloned.  */
14193                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14194                        at the point of this comment.  */
14195                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14196                     if (param->flags & CLONEf_JOIN_IN)
14197                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14198                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14199                     (void)GpREFCNT_inc(GvGP(dstr));
14200                 }
14201                 break;
14202             case SVt_PVIO:
14203                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14204                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14205                     /* I have no idea why fake dirp (rsfps)
14206                        should be treated differently but otherwise
14207                        we end up with leaks -- sky*/
14208                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14209                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14210                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14211                 } else {
14212                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14213                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14214                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14215                     if (IoDIRP(dstr)) {
14216                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14217                     } else {
14218                         NOOP;
14219                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14220                     }
14221                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14222                 }
14223                 if (IoOFP(dstr) == IoIFP(sstr))
14224                     IoOFP(dstr) = IoIFP(dstr);
14225                 else
14226                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14227                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14228                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14229                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14230                 break;
14231             case SVt_PVAV:
14232                 /* avoid cloning an empty array */
14233                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14234                     SV **dst_ary, **src_ary;
14235                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14236
14237                     src_ary = AvARRAY((const AV *)sstr);
14238                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14239                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14240                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14241                     AvALLOC((const AV *)dstr) = dst_ary;
14242                     if (AvREAL((const AV *)sstr)) {
14243                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14244                                                       param);
14245                     }
14246                     else {
14247                         while (items-- > 0)
14248                             *dst_ary++ = sv_dup(*src_ary++, param);
14249                     }
14250                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14251                     while (items-- > 0) {
14252                         *dst_ary++ = NULL;
14253                     }
14254                 }
14255                 else {
14256                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14257                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14258                     AvMAX(  (const AV *)dstr)   = -1;
14259                     AvFILLp((const AV *)dstr)   = -1;
14260                 }
14261                 break;
14262             case SVt_PVHV:
14263                 if (HvARRAY((const HV *)sstr)) {
14264                     STRLEN i = 0;
14265                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14266                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14267                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14268                     char *darray;
14269                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14270                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14271                         char);
14272                     HvARRAY(dstr) = (HE**)darray;
14273                     while (i <= sxhv->xhv_max) {
14274                         const HE * const source = HvARRAY(sstr)[i];
14275                         HvARRAY(dstr)[i] = source
14276                             ? he_dup(source, sharekeys, param) : 0;
14277                         ++i;
14278                     }
14279                     if (SvOOK(sstr)) {
14280                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14281                         struct xpvhv_aux * const daux = HvAUX(dstr);
14282                         /* This flag isn't copied.  */
14283                         SvOOK_on(dstr);
14284
14285                         if (saux->xhv_name_count) {
14286                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14287                             const I32 count
14288                              = saux->xhv_name_count < 0
14289                                 ? -saux->xhv_name_count
14290                                 :  saux->xhv_name_count;
14291                             HEK **shekp = sname + count;
14292                             HEK **dhekp;
14293                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14294                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14295                             while (shekp-- > sname) {
14296                                 dhekp--;
14297                                 *dhekp = hek_dup(*shekp, param);
14298                             }
14299                         }
14300                         else {
14301                             daux->xhv_name_u.xhvnameu_name
14302                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14303                                           param);
14304                         }
14305                         daux->xhv_name_count = saux->xhv_name_count;
14306
14307                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14308 #ifdef PERL_HASH_RANDOMIZE_KEYS
14309                         daux->xhv_rand = saux->xhv_rand;
14310                         daux->xhv_last_rand = saux->xhv_last_rand;
14311 #endif
14312                         daux->xhv_riter = saux->xhv_riter;
14313                         daux->xhv_eiter = saux->xhv_eiter
14314                             ? he_dup(saux->xhv_eiter,
14315                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14316                         /* backref array needs refcnt=2; see sv_add_backref */
14317                         daux->xhv_backreferences =
14318                             (param->flags & CLONEf_JOIN_IN)
14319                                 /* when joining, we let the individual GVs and
14320                                  * CVs add themselves to backref as
14321                                  * needed. This avoids pulling in stuff
14322                                  * that isn't required, and simplifies the
14323                                  * case where stashes aren't cloned back
14324                                  * if they already exist in the parent
14325                                  * thread */
14326                             ? NULL
14327                             : saux->xhv_backreferences
14328                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14329                                     ? MUTABLE_AV(SvREFCNT_inc(
14330                                           sv_dup_inc((const SV *)
14331                                             saux->xhv_backreferences, param)))
14332                                     : MUTABLE_AV(sv_dup((const SV *)
14333                                             saux->xhv_backreferences, param))
14334                                 : 0;
14335
14336                         daux->xhv_mro_meta = saux->xhv_mro_meta
14337                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14338                             : 0;
14339
14340                         /* Record stashes for possible cloning in Perl_clone(). */
14341                         if (HvNAME(sstr))
14342                             av_push(param->stashes, dstr);
14343                     }
14344                 }
14345                 else
14346                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14347                 break;
14348             case SVt_PVCV:
14349                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14350                     CvDEPTH(dstr) = 0;
14351                 }
14352                 /* FALLTHROUGH */
14353             case SVt_PVFM:
14354                 /* NOTE: not refcounted */
14355                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14356                     hv_dup(CvSTASH(dstr), param);
14357                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14358                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14359                 if (!CvISXSUB(dstr)) {
14360                     OP_REFCNT_LOCK;
14361                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14362                     OP_REFCNT_UNLOCK;
14363                     CvSLABBED_off(dstr);
14364                 } else if (CvCONST(dstr)) {
14365                     CvXSUBANY(dstr).any_ptr =
14366                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14367                 }
14368                 assert(!CvSLABBED(dstr));
14369                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14370                 if (CvNAMED(dstr))
14371                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14372                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14373                 /* don't dup if copying back - CvGV isn't refcounted, so the
14374                  * duped GV may never be freed. A bit of a hack! DAPM */
14375                 else
14376                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14377                     CvCVGV_RC(dstr)
14378                     ? gv_dup_inc(CvGV(sstr), param)
14379                     : (param->flags & CLONEf_JOIN_IN)
14380                         ? NULL
14381                         : gv_dup(CvGV(sstr), param);
14382
14383                 if (!CvISXSUB(sstr)) {
14384                     PADLIST * padlist = CvPADLIST(sstr);
14385                     if(padlist)
14386                         padlist = padlist_dup(padlist, param);
14387                     CvPADLIST_set(dstr, padlist);
14388                 } else
14389 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14390                     PoisonPADLIST(dstr);
14391
14392                 CvOUTSIDE(dstr) =
14393                     CvWEAKOUTSIDE(sstr)
14394                     ? cv_dup(    CvOUTSIDE(dstr), param)
14395                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14396                 break;
14397             }
14398         }
14399     }
14400
14401     return dstr;
14402  }
14403
14404 SV *
14405 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14406 {
14407     PERL_ARGS_ASSERT_SV_DUP_INC;
14408     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14409 }
14410
14411 SV *
14412 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14413 {
14414     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14415     PERL_ARGS_ASSERT_SV_DUP;
14416
14417     /* Track every SV that (at least initially) had a reference count of 0.
14418        We need to do this by holding an actual reference to it in this array.
14419        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14420        (akin to the stashes hash, and the perl stack), we come unstuck if
14421        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14422        thread) is manipulated in a CLONE method, because CLONE runs before the
14423        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14424        (and fix things up by giving each a reference via the temps stack).
14425        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14426        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14427        before the walk of unreferenced happens and a reference to that is SV
14428        added to the temps stack. At which point we have the same SV considered
14429        to be in use, and free to be re-used. Not good.
14430     */
14431     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14432         assert(param->unreferenced);
14433         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14434     }
14435
14436     return dstr;
14437 }
14438
14439 /* duplicate a context */
14440
14441 PERL_CONTEXT *
14442 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14443 {
14444     PERL_CONTEXT *ncxs;
14445
14446     PERL_ARGS_ASSERT_CX_DUP;
14447
14448     if (!cxs)
14449         return (PERL_CONTEXT*)NULL;
14450
14451     /* look for it in the table first */
14452     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14453     if (ncxs)
14454         return ncxs;
14455
14456     /* create anew and remember what it is */
14457     Newx(ncxs, max + 1, PERL_CONTEXT);
14458     ptr_table_store(PL_ptr_table, cxs, ncxs);
14459     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14460
14461     while (ix >= 0) {
14462         PERL_CONTEXT * const ncx = &ncxs[ix];
14463         if (CxTYPE(ncx) == CXt_SUBST) {
14464             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14465         }
14466         else {
14467             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14468             switch (CxTYPE(ncx)) {
14469             case CXt_SUB:
14470                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14471                 if(CxHASARGS(ncx)){
14472                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14473                 } else {
14474                     ncx->blk_sub.savearray = NULL;
14475                 }
14476                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14477                                            ncx->blk_sub.prevcomppad);
14478                 break;
14479             case CXt_EVAL:
14480                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14481                                                       param);
14482                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14483                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14484                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14485                 /* XXX what do do with cur_top_env ???? */
14486                 break;
14487             case CXt_LOOP_LAZYSV:
14488                 ncx->blk_loop.state_u.lazysv.end
14489                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14490                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14491                    duplication code instead.
14492                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14493                    actually being the same function, and (2) order
14494                    equivalence of the two unions.
14495                    We can assert the later [but only at run time :-(]  */
14496                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14497                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14498                 /* FALLTHROUGH */
14499             case CXt_LOOP_ARY:
14500                 ncx->blk_loop.state_u.ary.ary
14501                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14502                 /* FALLTHROUGH */
14503             case CXt_LOOP_LIST:
14504             case CXt_LOOP_LAZYIV:
14505                 /* code common to all 'for' CXt_LOOP_* types */
14506                 ncx->blk_loop.itersave =
14507                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14508                 if (CxPADLOOP(ncx)) {
14509                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14510                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14511                     ncx->blk_loop.oldcomppad =
14512                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14513                                                 ncx->blk_loop.oldcomppad);
14514                     ncx->blk_loop.itervar_u.svp =
14515                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14516                 }
14517                 else {
14518                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14519                      * alias (for \$x (...)) - relies on gv_dup being the
14520                      * same as sv_dup */
14521                     ncx->blk_loop.itervar_u.gv
14522                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14523                                     param);
14524                 }
14525                 break;
14526             case CXt_LOOP_PLAIN:
14527                 break;
14528             case CXt_FORMAT:
14529                 ncx->blk_format.prevcomppad =
14530                         (PAD*)ptr_table_fetch(PL_ptr_table,
14531                                            ncx->blk_format.prevcomppad);
14532                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14533                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14534                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14535                                                      param);
14536                 break;
14537             case CXt_GIVEN:
14538                 ncx->blk_givwhen.defsv_save =
14539                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14540                 break;
14541             case CXt_BLOCK:
14542             case CXt_NULL:
14543             case CXt_WHEN:
14544                 break;
14545             }
14546         }
14547         --ix;
14548     }
14549     return ncxs;
14550 }
14551
14552 /* duplicate a stack info structure */
14553
14554 PERL_SI *
14555 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14556 {
14557     PERL_SI *nsi;
14558
14559     PERL_ARGS_ASSERT_SI_DUP;
14560
14561     if (!si)
14562         return (PERL_SI*)NULL;
14563
14564     /* look for it in the table first */
14565     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14566     if (nsi)
14567         return nsi;
14568
14569     /* create anew and remember what it is */
14570     Newx(nsi, 1, PERL_SI);
14571     ptr_table_store(PL_ptr_table, si, nsi);
14572
14573     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14574     nsi->si_cxix        = si->si_cxix;
14575     nsi->si_cxmax       = si->si_cxmax;
14576     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14577     nsi->si_type        = si->si_type;
14578     nsi->si_prev        = si_dup(si->si_prev, param);
14579     nsi->si_next        = si_dup(si->si_next, param);
14580     nsi->si_markoff     = si->si_markoff;
14581 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14582     nsi->si_stack_hwm   = 0;
14583 #endif
14584
14585     return nsi;
14586 }
14587
14588 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14589 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14590 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14591 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14592 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14593 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14594 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14595 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14596 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14597 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14598 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14599 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14600 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14601 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14602 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14603 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14604
14605 /* XXXXX todo */
14606 #define pv_dup_inc(p)   SAVEPV(p)
14607 #define pv_dup(p)       SAVEPV(p)
14608 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14609
14610 /* map any object to the new equivent - either something in the
14611  * ptr table, or something in the interpreter structure
14612  */
14613
14614 void *
14615 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14616 {
14617     void *ret;
14618
14619     PERL_ARGS_ASSERT_ANY_DUP;
14620
14621     if (!v)
14622         return (void*)NULL;
14623
14624     /* look for it in the table first */
14625     ret = ptr_table_fetch(PL_ptr_table, v);
14626     if (ret)
14627         return ret;
14628
14629     /* see if it is part of the interpreter structure */
14630     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14631         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14632     else {
14633         ret = v;
14634     }
14635
14636     return ret;
14637 }
14638
14639 /* duplicate the save stack */
14640
14641 ANY *
14642 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14643 {
14644     dVAR;
14645     ANY * const ss      = proto_perl->Isavestack;
14646     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14647     I32 ix              = proto_perl->Isavestack_ix;
14648     ANY *nss;
14649     const SV *sv;
14650     const GV *gv;
14651     const AV *av;
14652     const HV *hv;
14653     void* ptr;
14654     int intval;
14655     long longval;
14656     GP *gp;
14657     IV iv;
14658     I32 i;
14659     char *c = NULL;
14660     void (*dptr) (void*);
14661     void (*dxptr) (pTHX_ void*);
14662
14663     PERL_ARGS_ASSERT_SS_DUP;
14664
14665     Newx(nss, max, ANY);
14666
14667     while (ix > 0) {
14668         const UV uv = POPUV(ss,ix);
14669         const U8 type = (U8)uv & SAVE_MASK;
14670
14671         TOPUV(nss,ix) = uv;
14672         switch (type) {
14673         case SAVEt_CLEARSV:
14674         case SAVEt_CLEARPADRANGE:
14675             break;
14676         case SAVEt_HELEM:               /* hash element */
14677         case SAVEt_SV:                  /* scalar reference */
14678             sv = (const SV *)POPPTR(ss,ix);
14679             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14680             /* FALLTHROUGH */
14681         case SAVEt_ITEM:                        /* normal string */
14682         case SAVEt_GVSV:                        /* scalar slot in GV */
14683             sv = (const SV *)POPPTR(ss,ix);
14684             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14685             if (type == SAVEt_SV)
14686                 break;
14687             /* FALLTHROUGH */
14688         case SAVEt_FREESV:
14689         case SAVEt_MORTALIZESV:
14690         case SAVEt_READONLY_OFF:
14691             sv = (const SV *)POPPTR(ss,ix);
14692             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14693             break;
14694         case SAVEt_FREEPADNAME:
14695             ptr = POPPTR(ss,ix);
14696             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14697             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14698             break;
14699         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14700             c = (char*)POPPTR(ss,ix);
14701             TOPPTR(nss,ix) = savesharedpv(c);
14702             ptr = POPPTR(ss,ix);
14703             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14704             break;
14705         case SAVEt_GENERIC_SVREF:               /* generic sv */
14706         case SAVEt_SVREF:                       /* scalar reference */
14707             sv = (const SV *)POPPTR(ss,ix);
14708             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14709             if (type == SAVEt_SVREF)
14710                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14711             ptr = POPPTR(ss,ix);
14712             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14713             break;
14714         case SAVEt_GVSLOT:              /* any slot in GV */
14715             sv = (const SV *)POPPTR(ss,ix);
14716             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14717             ptr = POPPTR(ss,ix);
14718             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14719             sv = (const SV *)POPPTR(ss,ix);
14720             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14721             break;
14722         case SAVEt_HV:                          /* hash reference */
14723         case SAVEt_AV:                          /* array reference */
14724             sv = (const SV *) POPPTR(ss,ix);
14725             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14726             /* FALLTHROUGH */
14727         case SAVEt_COMPPAD:
14728         case SAVEt_NSTAB:
14729             sv = (const SV *) POPPTR(ss,ix);
14730             TOPPTR(nss,ix) = sv_dup(sv, param);
14731             break;
14732         case SAVEt_INT:                         /* int reference */
14733             ptr = POPPTR(ss,ix);
14734             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14735             intval = (int)POPINT(ss,ix);
14736             TOPINT(nss,ix) = intval;
14737             break;
14738         case SAVEt_LONG:                        /* long reference */
14739             ptr = POPPTR(ss,ix);
14740             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14741             longval = (long)POPLONG(ss,ix);
14742             TOPLONG(nss,ix) = longval;
14743             break;
14744         case SAVEt_I32:                         /* I32 reference */
14745             ptr = POPPTR(ss,ix);
14746             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14747             i = POPINT(ss,ix);
14748             TOPINT(nss,ix) = i;
14749             break;
14750         case SAVEt_IV:                          /* IV reference */
14751         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14752             ptr = POPPTR(ss,ix);
14753             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14754             iv = POPIV(ss,ix);
14755             TOPIV(nss,ix) = iv;
14756             break;
14757         case SAVEt_TMPSFLOOR:
14758             iv = POPIV(ss,ix);
14759             TOPIV(nss,ix) = iv;
14760             break;
14761         case SAVEt_HPTR:                        /* HV* reference */
14762         case SAVEt_APTR:                        /* AV* reference */
14763         case SAVEt_SPTR:                        /* SV* reference */
14764             ptr = POPPTR(ss,ix);
14765             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14766             sv = (const SV *)POPPTR(ss,ix);
14767             TOPPTR(nss,ix) = sv_dup(sv, param);
14768             break;
14769         case SAVEt_VPTR:                        /* random* reference */
14770             ptr = POPPTR(ss,ix);
14771             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14772             /* FALLTHROUGH */
14773         case SAVEt_INT_SMALL:
14774         case SAVEt_I32_SMALL:
14775         case SAVEt_I16:                         /* I16 reference */
14776         case SAVEt_I8:                          /* I8 reference */
14777         case SAVEt_BOOL:
14778             ptr = POPPTR(ss,ix);
14779             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14780             break;
14781         case SAVEt_GENERIC_PVREF:               /* generic char* */
14782         case SAVEt_PPTR:                        /* char* reference */
14783             ptr = POPPTR(ss,ix);
14784             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14785             c = (char*)POPPTR(ss,ix);
14786             TOPPTR(nss,ix) = pv_dup(c);
14787             break;
14788         case SAVEt_GP:                          /* scalar reference */
14789             gp = (GP*)POPPTR(ss,ix);
14790             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14791             (void)GpREFCNT_inc(gp);
14792             gv = (const GV *)POPPTR(ss,ix);
14793             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14794             break;
14795         case SAVEt_FREEOP:
14796             ptr = POPPTR(ss,ix);
14797             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14798                 /* these are assumed to be refcounted properly */
14799                 OP *o;
14800                 switch (((OP*)ptr)->op_type) {
14801                 case OP_LEAVESUB:
14802                 case OP_LEAVESUBLV:
14803                 case OP_LEAVEEVAL:
14804                 case OP_LEAVE:
14805                 case OP_SCOPE:
14806                 case OP_LEAVEWRITE:
14807                     TOPPTR(nss,ix) = ptr;
14808                     o = (OP*)ptr;
14809                     OP_REFCNT_LOCK;
14810                     (void) OpREFCNT_inc(o);
14811                     OP_REFCNT_UNLOCK;
14812                     break;
14813                 default:
14814                     TOPPTR(nss,ix) = NULL;
14815                     break;
14816                 }
14817             }
14818             else
14819                 TOPPTR(nss,ix) = NULL;
14820             break;
14821         case SAVEt_FREECOPHH:
14822             ptr = POPPTR(ss,ix);
14823             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14824             break;
14825         case SAVEt_ADELETE:
14826             av = (const AV *)POPPTR(ss,ix);
14827             TOPPTR(nss,ix) = av_dup_inc(av, param);
14828             i = POPINT(ss,ix);
14829             TOPINT(nss,ix) = i;
14830             break;
14831         case SAVEt_DELETE:
14832             hv = (const HV *)POPPTR(ss,ix);
14833             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14834             i = POPINT(ss,ix);
14835             TOPINT(nss,ix) = i;
14836             /* FALLTHROUGH */
14837         case SAVEt_FREEPV:
14838             c = (char*)POPPTR(ss,ix);
14839             TOPPTR(nss,ix) = pv_dup_inc(c);
14840             break;
14841         case SAVEt_STACK_POS:           /* Position on Perl stack */
14842             i = POPINT(ss,ix);
14843             TOPINT(nss,ix) = i;
14844             break;
14845         case SAVEt_DESTRUCTOR:
14846             ptr = POPPTR(ss,ix);
14847             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14848             dptr = POPDPTR(ss,ix);
14849             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14850                                         any_dup(FPTR2DPTR(void *, dptr),
14851                                                 proto_perl));
14852             break;
14853         case SAVEt_DESTRUCTOR_X:
14854             ptr = POPPTR(ss,ix);
14855             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14856             dxptr = POPDXPTR(ss,ix);
14857             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14858                                          any_dup(FPTR2DPTR(void *, dxptr),
14859                                                  proto_perl));
14860             break;
14861         case SAVEt_REGCONTEXT:
14862         case SAVEt_ALLOC:
14863             ix -= uv >> SAVE_TIGHT_SHIFT;
14864             break;
14865         case SAVEt_AELEM:               /* array element */
14866             sv = (const SV *)POPPTR(ss,ix);
14867             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14868             iv = POPIV(ss,ix);
14869             TOPIV(nss,ix) = iv;
14870             av = (const AV *)POPPTR(ss,ix);
14871             TOPPTR(nss,ix) = av_dup_inc(av, param);
14872             break;
14873         case SAVEt_OP:
14874             ptr = POPPTR(ss,ix);
14875             TOPPTR(nss,ix) = ptr;
14876             break;
14877         case SAVEt_HINTS:
14878             ptr = POPPTR(ss,ix);
14879             ptr = cophh_copy((COPHH*)ptr);
14880             TOPPTR(nss,ix) = ptr;
14881             i = POPINT(ss,ix);
14882             TOPINT(nss,ix) = i;
14883             if (i & HINT_LOCALIZE_HH) {
14884                 hv = (const HV *)POPPTR(ss,ix);
14885                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14886             }
14887             break;
14888         case SAVEt_PADSV_AND_MORTALIZE:
14889             longval = (long)POPLONG(ss,ix);
14890             TOPLONG(nss,ix) = longval;
14891             ptr = POPPTR(ss,ix);
14892             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14893             sv = (const SV *)POPPTR(ss,ix);
14894             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14895             break;
14896         case SAVEt_SET_SVFLAGS:
14897             i = POPINT(ss,ix);
14898             TOPINT(nss,ix) = i;
14899             i = POPINT(ss,ix);
14900             TOPINT(nss,ix) = i;
14901             sv = (const SV *)POPPTR(ss,ix);
14902             TOPPTR(nss,ix) = sv_dup(sv, param);
14903             break;
14904         case SAVEt_COMPILE_WARNINGS:
14905             ptr = POPPTR(ss,ix);
14906             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14907             break;
14908         case SAVEt_PARSER:
14909             ptr = POPPTR(ss,ix);
14910             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14911             break;
14912         default:
14913             Perl_croak(aTHX_
14914                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14915         }
14916     }
14917
14918     return nss;
14919 }
14920
14921
14922 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14923  * flag to the result. This is done for each stash before cloning starts,
14924  * so we know which stashes want their objects cloned */
14925
14926 static void
14927 do_mark_cloneable_stash(pTHX_ SV *const sv)
14928 {
14929     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14930     if (hvname) {
14931         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14932         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14933         if (cloner && GvCV(cloner)) {
14934             dSP;
14935             UV status;
14936
14937             ENTER;
14938             SAVETMPS;
14939             PUSHMARK(SP);
14940             mXPUSHs(newSVhek(hvname));
14941             PUTBACK;
14942             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14943             SPAGAIN;
14944             status = POPu;
14945             PUTBACK;
14946             FREETMPS;
14947             LEAVE;
14948             if (status)
14949                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14950         }
14951     }
14952 }
14953
14954
14955
14956 /*
14957 =for apidoc perl_clone
14958
14959 Create and return a new interpreter by cloning the current one.
14960
14961 C<perl_clone> takes these flags as parameters:
14962
14963 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14964 without it we only clone the data and zero the stacks,
14965 with it we copy the stacks and the new perl interpreter is
14966 ready to run at the exact same point as the previous one.
14967 The pseudo-fork code uses C<COPY_STACKS> while the
14968 threads->create doesn't.
14969
14970 C<CLONEf_KEEP_PTR_TABLE> -
14971 C<perl_clone> keeps a ptr_table with the pointer of the old
14972 variable as a key and the new variable as a value,
14973 this allows it to check if something has been cloned and not
14974 clone it again but rather just use the value and increase the
14975 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14976 the ptr_table using the function
14977 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14978 reason to keep it around is if you want to dup some of your own
14979 variable who are outside the graph perl scans, an example of this
14980 code is in F<threads.xs> create.
14981
14982 C<CLONEf_CLONE_HOST> -
14983 This is a win32 thing, it is ignored on unix, it tells perls
14984 win32host code (which is c++) to clone itself, this is needed on
14985 win32 if you want to run two threads at the same time,
14986 if you just want to do some stuff in a separate perl interpreter
14987 and then throw it away and return to the original one,
14988 you don't need to do anything.
14989
14990 =cut
14991 */
14992
14993 /* XXX the above needs expanding by someone who actually understands it ! */
14994 EXTERN_C PerlInterpreter *
14995 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14996
14997 PerlInterpreter *
14998 perl_clone(PerlInterpreter *proto_perl, UV flags)
14999 {
15000    dVAR;
15001 #ifdef PERL_IMPLICIT_SYS
15002
15003     PERL_ARGS_ASSERT_PERL_CLONE;
15004
15005    /* perlhost.h so we need to call into it
15006    to clone the host, CPerlHost should have a c interface, sky */
15007
15008 #ifndef __amigaos4__
15009    if (flags & CLONEf_CLONE_HOST) {
15010        return perl_clone_host(proto_perl,flags);
15011    }
15012 #endif
15013    return perl_clone_using(proto_perl, flags,
15014                             proto_perl->IMem,
15015                             proto_perl->IMemShared,
15016                             proto_perl->IMemParse,
15017                             proto_perl->IEnv,
15018                             proto_perl->IStdIO,
15019                             proto_perl->ILIO,
15020                             proto_perl->IDir,
15021                             proto_perl->ISock,
15022                             proto_perl->IProc);
15023 }
15024
15025 PerlInterpreter *
15026 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15027                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15028                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15029                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15030                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15031                  struct IPerlProc* ipP)
15032 {
15033     /* XXX many of the string copies here can be optimized if they're
15034      * constants; they need to be allocated as common memory and just
15035      * their pointers copied. */
15036
15037     IV i;
15038     CLONE_PARAMS clone_params;
15039     CLONE_PARAMS* const param = &clone_params;
15040
15041     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15042
15043     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15044 #else           /* !PERL_IMPLICIT_SYS */
15045     IV i;
15046     CLONE_PARAMS clone_params;
15047     CLONE_PARAMS* param = &clone_params;
15048     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15049
15050     PERL_ARGS_ASSERT_PERL_CLONE;
15051 #endif          /* PERL_IMPLICIT_SYS */
15052
15053     /* for each stash, determine whether its objects should be cloned */
15054     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15055     PERL_SET_THX(my_perl);
15056
15057 #ifdef DEBUGGING
15058     PoisonNew(my_perl, 1, PerlInterpreter);
15059     PL_op = NULL;
15060     PL_curcop = NULL;
15061     PL_defstash = NULL; /* may be used by perl malloc() */
15062     PL_markstack = 0;
15063     PL_scopestack = 0;
15064     PL_scopestack_name = 0;
15065     PL_savestack = 0;
15066     PL_savestack_ix = 0;
15067     PL_savestack_max = -1;
15068     PL_sig_pending = 0;
15069     PL_parser = NULL;
15070     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15071     Zero(&PL_padname_undef, 1, PADNAME);
15072     Zero(&PL_padname_const, 1, PADNAME);
15073 #  ifdef DEBUG_LEAKING_SCALARS
15074     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15075 #  endif
15076 #  ifdef PERL_TRACE_OPS
15077     Zero(PL_op_exec_cnt, OP_max+2, UV);
15078 #  endif
15079 #else   /* !DEBUGGING */
15080     Zero(my_perl, 1, PerlInterpreter);
15081 #endif  /* DEBUGGING */
15082
15083 #ifdef PERL_IMPLICIT_SYS
15084     /* host pointers */
15085     PL_Mem              = ipM;
15086     PL_MemShared        = ipMS;
15087     PL_MemParse         = ipMP;
15088     PL_Env              = ipE;
15089     PL_StdIO            = ipStd;
15090     PL_LIO              = ipLIO;
15091     PL_Dir              = ipD;
15092     PL_Sock             = ipS;
15093     PL_Proc             = ipP;
15094 #endif          /* PERL_IMPLICIT_SYS */
15095
15096
15097     param->flags = flags;
15098     /* Nothing in the core code uses this, but we make it available to
15099        extensions (using mg_dup).  */
15100     param->proto_perl = proto_perl;
15101     /* Likely nothing will use this, but it is initialised to be consistent
15102        with Perl_clone_params_new().  */
15103     param->new_perl = my_perl;
15104     param->unreferenced = NULL;
15105
15106
15107     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15108
15109     PL_body_arenas = NULL;
15110     Zero(&PL_body_roots, 1, PL_body_roots);
15111     
15112     PL_sv_count         = 0;
15113     PL_sv_root          = NULL;
15114     PL_sv_arenaroot     = NULL;
15115
15116     PL_debug            = proto_perl->Idebug;
15117
15118     /* dbargs array probably holds garbage */
15119     PL_dbargs           = NULL;
15120
15121     PL_compiling = proto_perl->Icompiling;
15122
15123     /* pseudo environmental stuff */
15124     PL_origargc         = proto_perl->Iorigargc;
15125     PL_origargv         = proto_perl->Iorigargv;
15126
15127 #ifndef NO_TAINT_SUPPORT
15128     /* Set tainting stuff before PerlIO_debug can possibly get called */
15129     PL_tainting         = proto_perl->Itainting;
15130     PL_taint_warn       = proto_perl->Itaint_warn;
15131 #else
15132     PL_tainting         = FALSE;
15133     PL_taint_warn       = FALSE;
15134 #endif
15135
15136     PL_minus_c          = proto_perl->Iminus_c;
15137
15138     PL_localpatches     = proto_perl->Ilocalpatches;
15139     PL_splitstr         = proto_perl->Isplitstr;
15140     PL_minus_n          = proto_perl->Iminus_n;
15141     PL_minus_p          = proto_perl->Iminus_p;
15142     PL_minus_l          = proto_perl->Iminus_l;
15143     PL_minus_a          = proto_perl->Iminus_a;
15144     PL_minus_E          = proto_perl->Iminus_E;
15145     PL_minus_F          = proto_perl->Iminus_F;
15146     PL_doswitches       = proto_perl->Idoswitches;
15147     PL_dowarn           = proto_perl->Idowarn;
15148 #ifdef PERL_SAWAMPERSAND
15149     PL_sawampersand     = proto_perl->Isawampersand;
15150 #endif
15151     PL_unsafe           = proto_perl->Iunsafe;
15152     PL_perldb           = proto_perl->Iperldb;
15153     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15154     PL_exit_flags       = proto_perl->Iexit_flags;
15155
15156     /* XXX time(&PL_basetime) when asked for? */
15157     PL_basetime         = proto_perl->Ibasetime;
15158
15159     PL_maxsysfd         = proto_perl->Imaxsysfd;
15160     PL_statusvalue      = proto_perl->Istatusvalue;
15161 #ifdef __VMS
15162     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15163 #else
15164     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15165 #endif
15166
15167     /* RE engine related */
15168     PL_regmatch_slab    = NULL;
15169     PL_reg_curpm        = NULL;
15170
15171     PL_sub_generation   = proto_perl->Isub_generation;
15172
15173     /* funky return mechanisms */
15174     PL_forkprocess      = proto_perl->Iforkprocess;
15175
15176     /* internal state */
15177     PL_main_start       = proto_perl->Imain_start;
15178     PL_eval_root        = proto_perl->Ieval_root;
15179     PL_eval_start       = proto_perl->Ieval_start;
15180
15181     PL_filemode         = proto_perl->Ifilemode;
15182     PL_lastfd           = proto_perl->Ilastfd;
15183     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15184     PL_gensym           = proto_perl->Igensym;
15185
15186     PL_laststatval      = proto_perl->Ilaststatval;
15187     PL_laststype        = proto_perl->Ilaststype;
15188     PL_mess_sv          = NULL;
15189
15190     PL_profiledata      = NULL;
15191
15192     PL_generation       = proto_perl->Igeneration;
15193
15194     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15195     PL_in_clean_all     = proto_perl->Iin_clean_all;
15196
15197     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15198     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15199     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15200     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15201     PL_nomemok          = proto_perl->Inomemok;
15202     PL_an               = proto_perl->Ian;
15203     PL_evalseq          = proto_perl->Ievalseq;
15204     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15205     PL_origalen         = proto_perl->Iorigalen;
15206
15207     PL_sighandlerp      = proto_perl->Isighandlerp;
15208
15209     PL_runops           = proto_perl->Irunops;
15210
15211     PL_subline          = proto_perl->Isubline;
15212
15213     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15214
15215 #ifdef FCRYPT
15216     PL_cryptseen        = proto_perl->Icryptseen;
15217 #endif
15218
15219 #ifdef USE_LOCALE_COLLATE
15220     PL_collation_ix     = proto_perl->Icollation_ix;
15221     PL_collation_standard       = proto_perl->Icollation_standard;
15222     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15223     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15224     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15225 #endif /* USE_LOCALE_COLLATE */
15226
15227 #ifdef USE_LOCALE_NUMERIC
15228     PL_numeric_standard = proto_perl->Inumeric_standard;
15229     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15230     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15231 #endif /* !USE_LOCALE_NUMERIC */
15232
15233     /* Did the locale setup indicate UTF-8? */
15234     PL_utf8locale       = proto_perl->Iutf8locale;
15235     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15236     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15237     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15238     /* Unicode features (see perlrun/-C) */
15239     PL_unicode          = proto_perl->Iunicode;
15240
15241     /* Pre-5.8 signals control */
15242     PL_signals          = proto_perl->Isignals;
15243
15244     /* times() ticks per second */
15245     PL_clocktick        = proto_perl->Iclocktick;
15246
15247     /* Recursion stopper for PerlIO_find_layer */
15248     PL_in_load_module   = proto_perl->Iin_load_module;
15249
15250     /* sort() routine */
15251     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15252
15253     /* Not really needed/useful since the reenrant_retint is "volatile",
15254      * but do it for consistency's sake. */
15255     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15256
15257     /* Hooks to shared SVs and locks. */
15258     PL_sharehook        = proto_perl->Isharehook;
15259     PL_lockhook         = proto_perl->Ilockhook;
15260     PL_unlockhook       = proto_perl->Iunlockhook;
15261     PL_threadhook       = proto_perl->Ithreadhook;
15262     PL_destroyhook      = proto_perl->Idestroyhook;
15263     PL_signalhook       = proto_perl->Isignalhook;
15264
15265     PL_globhook         = proto_perl->Iglobhook;
15266
15267     /* swatch cache */
15268     PL_last_swash_hv    = NULL; /* reinits on demand */
15269     PL_last_swash_klen  = 0;
15270     PL_last_swash_key[0]= '\0';
15271     PL_last_swash_tmps  = (U8*)NULL;
15272     PL_last_swash_slen  = 0;
15273
15274     PL_srand_called     = proto_perl->Isrand_called;
15275     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15276
15277     if (flags & CLONEf_COPY_STACKS) {
15278         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15279         PL_tmps_ix              = proto_perl->Itmps_ix;
15280         PL_tmps_max             = proto_perl->Itmps_max;
15281         PL_tmps_floor           = proto_perl->Itmps_floor;
15282
15283         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15284          * NOTE: unlike the others! */
15285         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15286         PL_scopestack_max       = proto_perl->Iscopestack_max;
15287
15288         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15289          * NOTE: unlike the others! */
15290         PL_savestack_ix         = proto_perl->Isavestack_ix;
15291         PL_savestack_max        = proto_perl->Isavestack_max;
15292     }
15293
15294     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15295     PL_top_env          = &PL_start_env;
15296
15297     PL_op               = proto_perl->Iop;
15298
15299     PL_Sv               = NULL;
15300     PL_Xpv              = (XPV*)NULL;
15301     my_perl->Ina        = proto_perl->Ina;
15302
15303     PL_statcache        = proto_perl->Istatcache;
15304
15305 #ifndef NO_TAINT_SUPPORT
15306     PL_tainted          = proto_perl->Itainted;
15307 #else
15308     PL_tainted          = FALSE;
15309 #endif
15310     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15311
15312     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15313
15314     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15315     PL_restartop        = proto_perl->Irestartop;
15316     PL_in_eval          = proto_perl->Iin_eval;
15317     PL_delaymagic       = proto_perl->Idelaymagic;
15318     PL_phase            = proto_perl->Iphase;
15319     PL_localizing       = proto_perl->Ilocalizing;
15320
15321     PL_hv_fetch_ent_mh  = NULL;
15322     PL_modcount         = proto_perl->Imodcount;
15323     PL_lastgotoprobe    = NULL;
15324     PL_dumpindent       = proto_perl->Idumpindent;
15325
15326     PL_efloatbuf        = NULL;         /* reinits on demand */
15327     PL_efloatsize       = 0;                    /* reinits on demand */
15328
15329     /* regex stuff */
15330
15331     PL_colorset         = 0;            /* reinits PL_colors[] */
15332     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15333
15334     /* Pluggable optimizer */
15335     PL_peepp            = proto_perl->Ipeepp;
15336     PL_rpeepp           = proto_perl->Irpeepp;
15337     /* op_free() hook */
15338     PL_opfreehook       = proto_perl->Iopfreehook;
15339
15340 #ifdef USE_REENTRANT_API
15341     /* XXX: things like -Dm will segfault here in perlio, but doing
15342      *  PERL_SET_CONTEXT(proto_perl);
15343      * breaks too many other things
15344      */
15345     Perl_reentrant_init(aTHX);
15346 #endif
15347
15348     /* create SV map for pointer relocation */
15349     PL_ptr_table = ptr_table_new();
15350
15351     /* initialize these special pointers as early as possible */
15352     init_constants();
15353     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15354     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15355     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15356     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15357     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15358                     &PL_padname_const);
15359
15360     /* create (a non-shared!) shared string table */
15361     PL_strtab           = newHV();
15362     HvSHAREKEYS_off(PL_strtab);
15363     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15364     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15365
15366     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15367
15368     /* This PV will be free'd special way so must set it same way op.c does */
15369     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15370     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15371
15372     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15373     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15374     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15375     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15376
15377     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15378     /* This makes no difference to the implementation, as it always pushes
15379        and shifts pointers to other SVs without changing their reference
15380        count, with the array becoming empty before it is freed. However, it
15381        makes it conceptually clear what is going on, and will avoid some
15382        work inside av.c, filling slots between AvFILL() and AvMAX() with
15383        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15384     AvREAL_off(param->stashes);
15385
15386     if (!(flags & CLONEf_COPY_STACKS)) {
15387         param->unreferenced = newAV();
15388     }
15389
15390 #ifdef PERLIO_LAYERS
15391     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15392     PerlIO_clone(aTHX_ proto_perl, param);
15393 #endif
15394
15395     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15396     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15397     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15398     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15399     PL_xsubfilename     = proto_perl->Ixsubfilename;
15400     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15401     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15402
15403     /* switches */
15404     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15405     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15406     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15407
15408     /* magical thingies */
15409
15410     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15411     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15412     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15413
15414    
15415     /* Clone the regex array */
15416     /* ORANGE FIXME for plugins, probably in the SV dup code.
15417        newSViv(PTR2IV(CALLREGDUPE(
15418        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15419     */
15420     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15421     PL_regex_pad = AvARRAY(PL_regex_padav);
15422
15423     PL_stashpadmax      = proto_perl->Istashpadmax;
15424     PL_stashpadix       = proto_perl->Istashpadix ;
15425     Newx(PL_stashpad, PL_stashpadmax, HV *);
15426     {
15427         PADOFFSET o = 0;
15428         for (; o < PL_stashpadmax; ++o)
15429             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15430     }
15431
15432     /* shortcuts to various I/O objects */
15433     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15434     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15435     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15436     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15437     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15438     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15439     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15440
15441     /* shortcuts to regexp stuff */
15442     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15443
15444     /* shortcuts to misc objects */
15445     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15446
15447     /* shortcuts to debugging objects */
15448     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15449     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15450     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15451     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15452     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15453     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15454     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15455
15456     /* symbol tables */
15457     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15458     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15459     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15460     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15461     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15462
15463     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15464     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15465     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15466     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15467     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15468     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15469     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15470     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15471     PL_savebegin        = proto_perl->Isavebegin;
15472
15473     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15474
15475     /* subprocess state */
15476     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15477
15478     if (proto_perl->Iop_mask)
15479         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15480     else
15481         PL_op_mask      = NULL;
15482     /* PL_asserting        = proto_perl->Iasserting; */
15483
15484     /* current interpreter roots */
15485     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15486     OP_REFCNT_LOCK;
15487     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15488     OP_REFCNT_UNLOCK;
15489
15490     /* runtime control stuff */
15491     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15492
15493     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15494
15495     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15496
15497     /* interpreter atexit processing */
15498     PL_exitlistlen      = proto_perl->Iexitlistlen;
15499     if (PL_exitlistlen) {
15500         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15501         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15502     }
15503     else
15504         PL_exitlist     = (PerlExitListEntry*)NULL;
15505
15506     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15507     if (PL_my_cxt_size) {
15508         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15509         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15510 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15511         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15512         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15513 #endif
15514     }
15515     else {
15516         PL_my_cxt_list  = (void**)NULL;
15517 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15518         PL_my_cxt_keys  = (const char**)NULL;
15519 #endif
15520     }
15521     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15522     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15523     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15524     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15525
15526     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15527
15528     PAD_CLONE_VARS(proto_perl, param);
15529
15530 #ifdef HAVE_INTERP_INTERN
15531     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15532 #endif
15533
15534     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15535
15536 #ifdef PERL_USES_PL_PIDSTATUS
15537     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15538 #endif
15539     PL_osname           = SAVEPV(proto_perl->Iosname);
15540     PL_parser           = parser_dup(proto_perl->Iparser, param);
15541
15542     /* XXX this only works if the saved cop has already been cloned */
15543     if (proto_perl->Iparser) {
15544         PL_parser->saved_curcop = (COP*)any_dup(
15545                                     proto_perl->Iparser->saved_curcop,
15546                                     proto_perl);
15547     }
15548
15549     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15550
15551 #ifdef USE_LOCALE_CTYPE
15552     /* Should we warn if uses locale? */
15553     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15554 #endif
15555
15556 #ifdef USE_LOCALE_COLLATE
15557     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15558 #endif /* USE_LOCALE_COLLATE */
15559
15560 #ifdef USE_LOCALE_NUMERIC
15561     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15562     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15563 #endif /* !USE_LOCALE_NUMERIC */
15564
15565     PL_langinfo_buf = NULL;
15566     PL_langinfo_bufsize = 0;
15567
15568     /* Unicode inversion lists */
15569     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15570     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15571     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15572     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15573
15574     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15575     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15576
15577     /* utf8 character class swashes */
15578     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15579         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15580     }
15581     for (i = 0; i < POSIX_CC_COUNT; i++) {
15582         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15583     }
15584     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15585     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15586     PL_SCX_invlist = sv_dup_inc(proto_perl->ISCX_invlist, param);
15587     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15588     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15589     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15590     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15591     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15592     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15593     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15594     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15595     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15596     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15597     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15598     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15599     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15600     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15601     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15602     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15603
15604     if (proto_perl->Ipsig_pend) {
15605         Newxz(PL_psig_pend, SIG_SIZE, int);
15606     }
15607     else {
15608         PL_psig_pend    = (int*)NULL;
15609     }
15610
15611     if (proto_perl->Ipsig_name) {
15612         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15613         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15614                             param);
15615         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15616     }
15617     else {
15618         PL_psig_ptr     = (SV**)NULL;
15619         PL_psig_name    = (SV**)NULL;
15620     }
15621
15622     if (flags & CLONEf_COPY_STACKS) {
15623         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15624         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15625                             PL_tmps_ix+1, param);
15626
15627         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15628         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15629         Newx(PL_markstack, i, I32);
15630         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15631                                                   - proto_perl->Imarkstack);
15632         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15633                                                   - proto_perl->Imarkstack);
15634         Copy(proto_perl->Imarkstack, PL_markstack,
15635              PL_markstack_ptr - PL_markstack + 1, I32);
15636
15637         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15638          * NOTE: unlike the others! */
15639         Newx(PL_scopestack, PL_scopestack_max, I32);
15640         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15641
15642 #ifdef DEBUGGING
15643         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15644         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15645 #endif
15646         /* reset stack AV to correct length before its duped via
15647          * PL_curstackinfo */
15648         AvFILLp(proto_perl->Icurstack) =
15649                             proto_perl->Istack_sp - proto_perl->Istack_base;
15650
15651         /* NOTE: si_dup() looks at PL_markstack */
15652         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15653
15654         /* PL_curstack          = PL_curstackinfo->si_stack; */
15655         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15656         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15657
15658         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15659         PL_stack_base           = AvARRAY(PL_curstack);
15660         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15661                                                    - proto_perl->Istack_base);
15662         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15663
15664         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15665         PL_savestack            = ss_dup(proto_perl, param);
15666     }
15667     else {
15668         init_stacks();
15669         ENTER;                  /* perl_destruct() wants to LEAVE; */
15670     }
15671
15672     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15673     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15674
15675     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15676     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15677     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15678     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15679     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15680     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15681
15682     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15683
15684     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15685     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15686     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15687
15688     PL_stashcache       = newHV();
15689
15690     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15691                                             proto_perl->Iwatchaddr);
15692     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15693     if (PL_debug && PL_watchaddr) {
15694         PerlIO_printf(Perl_debug_log,
15695           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15696           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15697           PTR2UV(PL_watchok));
15698     }
15699
15700     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15701     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15702     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15703
15704     /* Call the ->CLONE method, if it exists, for each of the stashes
15705        identified by sv_dup() above.
15706     */
15707     while(av_tindex(param->stashes) != -1) {
15708         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15709         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15710         if (cloner && GvCV(cloner)) {
15711             dSP;
15712             ENTER;
15713             SAVETMPS;
15714             PUSHMARK(SP);
15715             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15716             PUTBACK;
15717             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15718             FREETMPS;
15719             LEAVE;
15720         }
15721     }
15722
15723     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15724         ptr_table_free(PL_ptr_table);
15725         PL_ptr_table = NULL;
15726     }
15727
15728     if (!(flags & CLONEf_COPY_STACKS)) {
15729         unreferenced_to_tmp_stack(param->unreferenced);
15730     }
15731
15732     SvREFCNT_dec(param->stashes);
15733
15734     /* orphaned? eg threads->new inside BEGIN or use */
15735     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15736         SvREFCNT_inc_simple_void(PL_compcv);
15737         SAVEFREESV(PL_compcv);
15738     }
15739
15740     return my_perl;
15741 }
15742
15743 static void
15744 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15745 {
15746     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15747     
15748     if (AvFILLp(unreferenced) > -1) {
15749         SV **svp = AvARRAY(unreferenced);
15750         SV **const last = svp + AvFILLp(unreferenced);
15751         SSize_t count = 0;
15752
15753         do {
15754             if (SvREFCNT(*svp) == 1)
15755                 ++count;
15756         } while (++svp <= last);
15757
15758         EXTEND_MORTAL(count);
15759         svp = AvARRAY(unreferenced);
15760
15761         do {
15762             if (SvREFCNT(*svp) == 1) {
15763                 /* Our reference is the only one to this SV. This means that
15764                    in this thread, the scalar effectively has a 0 reference.
15765                    That doesn't work (cleanup never happens), so donate our
15766                    reference to it onto the save stack. */
15767                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15768             } else {
15769                 /* As an optimisation, because we are already walking the
15770                    entire array, instead of above doing either
15771                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15772                    release our reference to the scalar, so that at the end of
15773                    the array owns zero references to the scalars it happens to
15774                    point to. We are effectively converting the array from
15775                    AvREAL() on to AvREAL() off. This saves the av_clear()
15776                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15777                    walking the array a second time.  */
15778                 SvREFCNT_dec(*svp);
15779             }
15780
15781         } while (++svp <= last);
15782         AvREAL_off(unreferenced);
15783     }
15784     SvREFCNT_dec_NN(unreferenced);
15785 }
15786
15787 void
15788 Perl_clone_params_del(CLONE_PARAMS *param)
15789 {
15790     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15791        happy: */
15792     PerlInterpreter *const to = param->new_perl;
15793     dTHXa(to);
15794     PerlInterpreter *const was = PERL_GET_THX;
15795
15796     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15797
15798     if (was != to) {
15799         PERL_SET_THX(to);
15800     }
15801
15802     SvREFCNT_dec(param->stashes);
15803     if (param->unreferenced)
15804         unreferenced_to_tmp_stack(param->unreferenced);
15805
15806     Safefree(param);
15807
15808     if (was != to) {
15809         PERL_SET_THX(was);
15810     }
15811 }
15812
15813 CLONE_PARAMS *
15814 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15815 {
15816     dVAR;
15817     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15818        does a dTHX; to get the context from thread local storage.
15819        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15820        a version that passes in my_perl.  */
15821     PerlInterpreter *const was = PERL_GET_THX;
15822     CLONE_PARAMS *param;
15823
15824     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15825
15826     if (was != to) {
15827         PERL_SET_THX(to);
15828     }
15829
15830     /* Given that we've set the context, we can do this unshared.  */
15831     Newx(param, 1, CLONE_PARAMS);
15832
15833     param->flags = 0;
15834     param->proto_perl = from;
15835     param->new_perl = to;
15836     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15837     AvREAL_off(param->stashes);
15838     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15839
15840     if (was != to) {
15841         PERL_SET_THX(was);
15842     }
15843     return param;
15844 }
15845
15846 #endif /* USE_ITHREADS */
15847
15848 void
15849 Perl_init_constants(pTHX)
15850 {
15851     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15852     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15853     SvANY(&PL_sv_undef)         = NULL;
15854
15855     SvANY(&PL_sv_no)            = new_XPVNV();
15856     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15857     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15858                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15859                                   |SVp_POK|SVf_POK;
15860
15861     SvANY(&PL_sv_yes)           = new_XPVNV();
15862     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15863     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15864                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15865                                   |SVp_POK|SVf_POK;
15866
15867     SvANY(&PL_sv_zero)          = new_XPVNV();
15868     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
15869     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15870                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15871                                   |SVp_POK|SVf_POK
15872                                   |SVs_PADTMP;
15873
15874     SvPV_set(&PL_sv_no, (char*)PL_No);
15875     SvCUR_set(&PL_sv_no, 0);
15876     SvLEN_set(&PL_sv_no, 0);
15877     SvIV_set(&PL_sv_no, 0);
15878     SvNV_set(&PL_sv_no, 0);
15879
15880     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15881     SvCUR_set(&PL_sv_yes, 1);
15882     SvLEN_set(&PL_sv_yes, 0);
15883     SvIV_set(&PL_sv_yes, 1);
15884     SvNV_set(&PL_sv_yes, 1);
15885
15886     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
15887     SvCUR_set(&PL_sv_zero, 1);
15888     SvLEN_set(&PL_sv_zero, 0);
15889     SvIV_set(&PL_sv_zero, 0);
15890     SvNV_set(&PL_sv_zero, 0);
15891
15892     PadnamePV(&PL_padname_const) = (char *)PL_No;
15893
15894     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
15895     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
15896     assert(SvIMMORTAL_INTERP(&PL_sv_no));
15897     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
15898
15899     assert(SvIMMORTAL(&PL_sv_yes));
15900     assert(SvIMMORTAL(&PL_sv_undef));
15901     assert(SvIMMORTAL(&PL_sv_no));
15902     assert(SvIMMORTAL(&PL_sv_zero));
15903
15904     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
15905     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
15906     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
15907     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
15908
15909     assert( SvTRUE_nomg_NN(&PL_sv_yes));
15910     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
15911     assert(!SvTRUE_nomg_NN(&PL_sv_no));
15912     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
15913 }
15914
15915 /*
15916 =head1 Unicode Support
15917
15918 =for apidoc sv_recode_to_utf8
15919
15920 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15921 of C<sv> is assumed to be octets in that encoding, and C<sv>
15922 will be converted into Unicode (and UTF-8).
15923
15924 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15925 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15926 an C<Encode::XS> Encoding object, bad things will happen.
15927 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15928
15929 The PV of C<sv> is returned.
15930
15931 =cut */
15932
15933 char *
15934 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15935 {
15936     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15937
15938     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15939         SV *uni;
15940         STRLEN len;
15941         const char *s;
15942         dSP;
15943         SV *nsv = sv;
15944         ENTER;
15945         PUSHSTACK;
15946         SAVETMPS;
15947         if (SvPADTMP(nsv)) {
15948             nsv = sv_newmortal();
15949             SvSetSV_nosteal(nsv, sv);
15950         }
15951         save_re_context();
15952         PUSHMARK(sp);
15953         EXTEND(SP, 3);
15954         PUSHs(encoding);
15955         PUSHs(nsv);
15956 /*
15957   NI-S 2002/07/09
15958   Passing sv_yes is wrong - it needs to be or'ed set of constants
15959   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15960   remove converted chars from source.
15961
15962   Both will default the value - let them.
15963
15964         XPUSHs(&PL_sv_yes);
15965 */
15966         PUTBACK;
15967         call_method("decode", G_SCALAR);
15968         SPAGAIN;
15969         uni = POPs;
15970         PUTBACK;
15971         s = SvPV_const(uni, len);
15972         if (s != SvPVX_const(sv)) {
15973             SvGROW(sv, len + 1);
15974             Move(s, SvPVX(sv), len + 1, char);
15975             SvCUR_set(sv, len);
15976         }
15977         FREETMPS;
15978         POPSTACK;
15979         LEAVE;
15980         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15981             /* clear pos and any utf8 cache */
15982             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15983             if (mg)
15984                 mg->mg_len = -1;
15985             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15986                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15987         }
15988         SvUTF8_on(sv);
15989         return SvPVX(sv);
15990     }
15991     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15992 }
15993
15994 /*
15995 =for apidoc sv_cat_decode
15996
15997 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15998 assumed to be octets in that encoding and decoding the input starts
15999 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16000 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16001 when the string C<tstr> appears in decoding output or the input ends on
16002 the PV of C<ssv>.  The value which C<offset> points will be modified
16003 to the last input position on C<ssv>.
16004
16005 Returns TRUE if the terminator was found, else returns FALSE.
16006
16007 =cut */
16008
16009 bool
16010 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16011                    SV *ssv, int *offset, char *tstr, int tlen)
16012 {
16013     bool ret = FALSE;
16014
16015     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16016
16017     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16018         SV *offsv;
16019         dSP;
16020         ENTER;
16021         SAVETMPS;
16022         save_re_context();
16023         PUSHMARK(sp);
16024         EXTEND(SP, 6);
16025         PUSHs(encoding);
16026         PUSHs(dsv);
16027         PUSHs(ssv);
16028         offsv = newSViv(*offset);
16029         mPUSHs(offsv);
16030         mPUSHp(tstr, tlen);
16031         PUTBACK;
16032         call_method("cat_decode", G_SCALAR);
16033         SPAGAIN;
16034         ret = SvTRUE(TOPs);
16035         *offset = SvIV(offsv);
16036         PUTBACK;
16037         FREETMPS;
16038         LEAVE;
16039     }
16040     else
16041         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16042     return ret;
16043
16044 }
16045
16046 /* ---------------------------------------------------------------------
16047  *
16048  * support functions for report_uninit()
16049  */
16050
16051 /* the maxiumum size of array or hash where we will scan looking
16052  * for the undefined element that triggered the warning */
16053
16054 #define FUV_MAX_SEARCH_SIZE 1000
16055
16056 /* Look for an entry in the hash whose value has the same SV as val;
16057  * If so, return a mortal copy of the key. */
16058
16059 STATIC SV*
16060 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16061 {
16062     dVAR;
16063     HE **array;
16064     I32 i;
16065
16066     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16067
16068     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16069                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16070         return NULL;
16071
16072     array = HvARRAY(hv);
16073
16074     for (i=HvMAX(hv); i>=0; i--) {
16075         HE *entry;
16076         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16077             if (HeVAL(entry) != val)
16078                 continue;
16079             if (    HeVAL(entry) == &PL_sv_undef ||
16080                     HeVAL(entry) == &PL_sv_placeholder)
16081                 continue;
16082             if (!HeKEY(entry))
16083                 return NULL;
16084             if (HeKLEN(entry) == HEf_SVKEY)
16085                 return sv_mortalcopy(HeKEY_sv(entry));
16086             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16087         }
16088     }
16089     return NULL;
16090 }
16091
16092 /* Look for an entry in the array whose value has the same SV as val;
16093  * If so, return the index, otherwise return -1. */
16094
16095 STATIC SSize_t
16096 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16097 {
16098     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16099
16100     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16101                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16102         return -1;
16103
16104     if (val != &PL_sv_undef) {
16105         SV ** const svp = AvARRAY(av);
16106         SSize_t i;
16107
16108         for (i=AvFILLp(av); i>=0; i--)
16109             if (svp[i] == val)
16110                 return i;
16111     }
16112     return -1;
16113 }
16114
16115 /* varname(): return the name of a variable, optionally with a subscript.
16116  * If gv is non-zero, use the name of that global, along with gvtype (one
16117  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16118  * targ.  Depending on the value of the subscript_type flag, return:
16119  */
16120
16121 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16122 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16123 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16124 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16125
16126 SV*
16127 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16128         const SV *const keyname, SSize_t aindex, int subscript_type)
16129 {
16130
16131     SV * const name = sv_newmortal();
16132     if (gv && isGV(gv)) {
16133         char buffer[2];
16134         buffer[0] = gvtype;
16135         buffer[1] = 0;
16136
16137         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16138
16139         gv_fullname4(name, gv, buffer, 0);
16140
16141         if ((unsigned int)SvPVX(name)[1] <= 26) {
16142             buffer[0] = '^';
16143             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16144
16145             /* Swap the 1 unprintable control character for the 2 byte pretty
16146                version - ie substr($name, 1, 1) = $buffer; */
16147             sv_insert(name, 1, 1, buffer, 2);
16148         }
16149     }
16150     else {
16151         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16152         PADNAME *sv;
16153
16154         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16155
16156         if (!cv || !CvPADLIST(cv))
16157             return NULL;
16158         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16159         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16160         SvUTF8_on(name);
16161     }
16162
16163     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16164         SV * const sv = newSV(0);
16165         STRLEN len;
16166         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16167
16168         *SvPVX(name) = '$';
16169         Perl_sv_catpvf(aTHX_ name, "{%s}",
16170             pv_pretty(sv, pv, len, 32, NULL, NULL,
16171                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16172         SvREFCNT_dec_NN(sv);
16173     }
16174     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16175         *SvPVX(name) = '$';
16176         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16177     }
16178     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16179         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16180         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16181     }
16182
16183     return name;
16184 }
16185
16186
16187 /*
16188 =for apidoc find_uninit_var
16189
16190 Find the name of the undefined variable (if any) that caused the operator
16191 to issue a "Use of uninitialized value" warning.
16192 If match is true, only return a name if its value matches C<uninit_sv>.
16193 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16194 warning, then following the direct child of the op may yield an
16195 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16196 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16197 the variable name if we get an exact match.
16198 C<desc_p> points to a string pointer holding the description of the op.
16199 This may be updated if needed.
16200
16201 The name is returned as a mortal SV.
16202
16203 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16204 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16205
16206 =cut
16207 */
16208
16209 STATIC SV *
16210 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16211                   bool match, const char **desc_p)
16212 {
16213     dVAR;
16214     SV *sv;
16215     const GV *gv;
16216     const OP *o, *o2, *kid;
16217
16218     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16219
16220     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16221                             uninit_sv == &PL_sv_placeholder)))
16222         return NULL;
16223
16224     switch (obase->op_type) {
16225
16226     case OP_UNDEF:
16227         /* undef should care if its args are undef - any warnings
16228          * will be from tied/magic vars */
16229         break;
16230
16231     case OP_RV2AV:
16232     case OP_RV2HV:
16233     case OP_PADAV:
16234     case OP_PADHV:
16235       {
16236         const bool pad  = (    obase->op_type == OP_PADAV
16237                             || obase->op_type == OP_PADHV
16238                             || obase->op_type == OP_PADRANGE
16239                           );
16240
16241         const bool hash = (    obase->op_type == OP_PADHV
16242                             || obase->op_type == OP_RV2HV
16243                             || (obase->op_type == OP_PADRANGE
16244                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16245                           );
16246         SSize_t index = 0;
16247         SV *keysv = NULL;
16248         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16249
16250         if (pad) { /* @lex, %lex */
16251             sv = PAD_SVl(obase->op_targ);
16252             gv = NULL;
16253         }
16254         else {
16255             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16256             /* @global, %global */
16257                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16258                 if (!gv)
16259                     break;
16260                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16261             }
16262             else if (obase == PL_op) /* @{expr}, %{expr} */
16263                 return find_uninit_var(cUNOPx(obase)->op_first,
16264                                                 uninit_sv, match, desc_p);
16265             else /* @{expr}, %{expr} as a sub-expression */
16266                 return NULL;
16267         }
16268
16269         /* attempt to find a match within the aggregate */
16270         if (hash) {
16271             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16272             if (keysv)
16273                 subscript_type = FUV_SUBSCRIPT_HASH;
16274         }
16275         else {
16276             index = find_array_subscript((const AV *)sv, uninit_sv);
16277             if (index >= 0)
16278                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16279         }
16280
16281         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16282             break;
16283
16284         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16285                                     keysv, index, subscript_type);
16286       }
16287
16288     case OP_RV2SV:
16289         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16290             /* $global */
16291             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16292             if (!gv || !GvSTASH(gv))
16293                 break;
16294             if (match && (GvSV(gv) != uninit_sv))
16295                 break;
16296             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16297         }
16298         /* ${expr} */
16299         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16300
16301     case OP_PADSV:
16302         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16303             break;
16304         return varname(NULL, '$', obase->op_targ,
16305                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16306
16307     case OP_GVSV:
16308         gv = cGVOPx_gv(obase);
16309         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16310             break;
16311         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16312
16313     case OP_AELEMFAST_LEX:
16314         if (match) {
16315             SV **svp;
16316             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16317             if (!av || SvRMAGICAL(av))
16318                 break;
16319             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16320             if (!svp || *svp != uninit_sv)
16321                 break;
16322         }
16323         return varname(NULL, '$', obase->op_targ,
16324                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16325     case OP_AELEMFAST:
16326         {
16327             gv = cGVOPx_gv(obase);
16328             if (!gv)
16329                 break;
16330             if (match) {
16331                 SV **svp;
16332                 AV *const av = GvAV(gv);
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(gv, '$', 0,
16340                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16341         }
16342         NOT_REACHED; /* NOTREACHED */
16343
16344     case OP_EXISTS:
16345         o = cUNOPx(obase)->op_first;
16346         if (!o || o->op_type != OP_NULL ||
16347                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16348             break;
16349         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16350
16351     case OP_AELEM:
16352     case OP_HELEM:
16353     {
16354         bool negate = FALSE;
16355
16356         if (PL_op == obase)
16357             /* $a[uninit_expr] or $h{uninit_expr} */
16358             return find_uninit_var(cBINOPx(obase)->op_last,
16359                                                 uninit_sv, match, desc_p);
16360
16361         gv = NULL;
16362         o = cBINOPx(obase)->op_first;
16363         kid = cBINOPx(obase)->op_last;
16364
16365         /* get the av or hv, and optionally the gv */
16366         sv = NULL;
16367         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16368             sv = PAD_SV(o->op_targ);
16369         }
16370         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16371                 && cUNOPo->op_first->op_type == OP_GV)
16372         {
16373             gv = cGVOPx_gv(cUNOPo->op_first);
16374             if (!gv)
16375                 break;
16376             sv = o->op_type
16377                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16378         }
16379         if (!sv)
16380             break;
16381
16382         if (kid && kid->op_type == OP_NEGATE) {
16383             negate = TRUE;
16384             kid = cUNOPx(kid)->op_first;
16385         }
16386
16387         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16388             /* index is constant */
16389             SV* kidsv;
16390             if (negate) {
16391                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16392                 sv_catsv(kidsv, cSVOPx_sv(kid));
16393             }
16394             else
16395                 kidsv = cSVOPx_sv(kid);
16396             if (match) {
16397                 if (SvMAGICAL(sv))
16398                     break;
16399                 if (obase->op_type == OP_HELEM) {
16400                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16401                     if (!he || HeVAL(he) != uninit_sv)
16402                         break;
16403                 }
16404                 else {
16405                     SV * const  opsv = cSVOPx_sv(kid);
16406                     const IV  opsviv = SvIV(opsv);
16407                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16408                         negate ? - opsviv : opsviv,
16409                         FALSE);
16410                     if (!svp || *svp != uninit_sv)
16411                         break;
16412                 }
16413             }
16414             if (obase->op_type == OP_HELEM)
16415                 return varname(gv, '%', o->op_targ,
16416                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16417             else
16418                 return varname(gv, '@', o->op_targ, NULL,
16419                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16420                     FUV_SUBSCRIPT_ARRAY);
16421         }
16422         else  {
16423             /* index is an expression;
16424              * attempt to find a match within the aggregate */
16425             if (obase->op_type == OP_HELEM) {
16426                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16427                 if (keysv)
16428                     return varname(gv, '%', o->op_targ,
16429                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16430             }
16431             else {
16432                 const SSize_t index
16433                     = find_array_subscript((const AV *)sv, uninit_sv);
16434                 if (index >= 0)
16435                     return varname(gv, '@', o->op_targ,
16436                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16437             }
16438             if (match)
16439                 break;
16440             return varname(gv,
16441                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16442                 ? '@' : '%'),
16443                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16444         }
16445         NOT_REACHED; /* NOTREACHED */
16446     }
16447
16448     case OP_MULTIDEREF: {
16449         /* If we were executing OP_MULTIDEREF when the undef warning
16450          * triggered, then it must be one of the index values within
16451          * that triggered it. If not, then the only possibility is that
16452          * the value retrieved by the last aggregate index might be the
16453          * culprit. For the former, we set PL_multideref_pc each time before
16454          * using an index, so work though the item list until we reach
16455          * that point. For the latter, just work through the entire item
16456          * list; the last aggregate retrieved will be the candidate.
16457          * There is a third rare possibility: something triggered
16458          * magic while fetching an array/hash element. Just display
16459          * nothing in this case.
16460          */
16461
16462         /* the named aggregate, if any */
16463         PADOFFSET agg_targ = 0;
16464         GV       *agg_gv   = NULL;
16465         /* the last-seen index */
16466         UV        index_type;
16467         PADOFFSET index_targ;
16468         GV       *index_gv;
16469         IV        index_const_iv = 0; /* init for spurious compiler warn */
16470         SV       *index_const_sv;
16471         int       depth = 0;  /* how many array/hash lookups we've done */
16472
16473         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16474         UNOP_AUX_item *last = NULL;
16475         UV actions = items->uv;
16476         bool is_hv;
16477
16478         if (PL_op == obase) {
16479             last = PL_multideref_pc;
16480             assert(last >= items && last <= items + items[-1].uv);
16481         }
16482
16483         assert(actions);
16484
16485         while (1) {
16486             is_hv = FALSE;
16487             switch (actions & MDEREF_ACTION_MASK) {
16488
16489             case MDEREF_reload:
16490                 actions = (++items)->uv;
16491                 continue;
16492
16493             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16494                 is_hv = TRUE;
16495                 /* FALLTHROUGH */
16496             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16497                 agg_targ = (++items)->pad_offset;
16498                 agg_gv = NULL;
16499                 break;
16500
16501             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16502                 is_hv = TRUE;
16503                 /* FALLTHROUGH */
16504             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16505                 agg_targ = 0;
16506                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16507                 assert(isGV_with_GP(agg_gv));
16508                 break;
16509
16510             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16511             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16512                 ++items;
16513                 /* FALLTHROUGH */
16514             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16515             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16516                 agg_targ = 0;
16517                 agg_gv   = NULL;
16518                 is_hv    = TRUE;
16519                 break;
16520
16521             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16522             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16523                 ++items;
16524                 /* FALLTHROUGH */
16525             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16526             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16527                 agg_targ = 0;
16528                 agg_gv   = NULL;
16529             } /* switch */
16530
16531             index_targ     = 0;
16532             index_gv       = NULL;
16533             index_const_sv = NULL;
16534
16535             index_type = (actions & MDEREF_INDEX_MASK);
16536             switch (index_type) {
16537             case MDEREF_INDEX_none:
16538                 break;
16539             case MDEREF_INDEX_const:
16540                 if (is_hv)
16541                     index_const_sv = UNOP_AUX_item_sv(++items)
16542                 else
16543                     index_const_iv = (++items)->iv;
16544                 break;
16545             case MDEREF_INDEX_padsv:
16546                 index_targ = (++items)->pad_offset;
16547                 break;
16548             case MDEREF_INDEX_gvsv:
16549                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16550                 assert(isGV_with_GP(index_gv));
16551                 break;
16552             }
16553
16554             if (index_type != MDEREF_INDEX_none)
16555                 depth++;
16556
16557             if (   index_type == MDEREF_INDEX_none
16558                 || (actions & MDEREF_FLAG_last)
16559                 || (last && items >= last)
16560             )
16561                 break;
16562
16563             actions >>= MDEREF_SHIFT;
16564         } /* while */
16565
16566         if (PL_op == obase) {
16567             /* most likely index was undef */
16568
16569             *desc_p = (    (actions & MDEREF_FLAG_last)
16570                         && (obase->op_private
16571                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16572                         ?
16573                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16574                                 ? "exists"
16575                                 : "delete"
16576                         : is_hv ? "hash element" : "array element";
16577             assert(index_type != MDEREF_INDEX_none);
16578             if (index_gv) {
16579                 if (GvSV(index_gv) == uninit_sv)
16580                     return varname(index_gv, '$', 0, NULL, 0,
16581                                                     FUV_SUBSCRIPT_NONE);
16582                 else
16583                     return NULL;
16584             }
16585             if (index_targ) {
16586                 if (PL_curpad[index_targ] == uninit_sv)
16587                     return varname(NULL, '$', index_targ,
16588                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16589                 else
16590                     return NULL;
16591             }
16592             /* If we got to this point it was undef on a const subscript,
16593              * so magic probably involved, e.g. $ISA[0]. Give up. */
16594             return NULL;
16595         }
16596
16597         /* the SV returned by pp_multideref() was undef, if anything was */
16598
16599         if (depth != 1)
16600             break;
16601
16602         if (agg_targ)
16603             sv = PAD_SV(agg_targ);
16604         else if (agg_gv)
16605             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16606         else
16607             break;
16608
16609         if (index_type == MDEREF_INDEX_const) {
16610             if (match) {
16611                 if (SvMAGICAL(sv))
16612                     break;
16613                 if (is_hv) {
16614                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16615                     if (!he || HeVAL(he) != uninit_sv)
16616                         break;
16617                 }
16618                 else {
16619                     SV * const * const svp =
16620                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16621                     if (!svp || *svp != uninit_sv)
16622                         break;
16623                 }
16624             }
16625             return is_hv
16626                 ? varname(agg_gv, '%', agg_targ,
16627                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16628                 : varname(agg_gv, '@', agg_targ,
16629                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16630         }
16631         else  {
16632             /* index is an var */
16633             if (is_hv) {
16634                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16635                 if (keysv)
16636                     return varname(agg_gv, '%', agg_targ,
16637                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16638             }
16639             else {
16640                 const SSize_t index
16641                     = find_array_subscript((const AV *)sv, uninit_sv);
16642                 if (index >= 0)
16643                     return varname(agg_gv, '@', agg_targ,
16644                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16645             }
16646             if (match)
16647                 break;
16648             return varname(agg_gv,
16649                 is_hv ? '%' : '@',
16650                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16651         }
16652         NOT_REACHED; /* NOTREACHED */
16653     }
16654
16655     case OP_AASSIGN:
16656         /* only examine RHS */
16657         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16658                                                                 match, desc_p);
16659
16660     case OP_OPEN:
16661         o = cUNOPx(obase)->op_first;
16662         if (   o->op_type == OP_PUSHMARK
16663            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16664         )
16665             o = OpSIBLING(o);
16666
16667         if (!OpHAS_SIBLING(o)) {
16668             /* one-arg version of open is highly magical */
16669
16670             if (o->op_type == OP_GV) { /* open FOO; */
16671                 gv = cGVOPx_gv(o);
16672                 if (match && GvSV(gv) != uninit_sv)
16673                     break;
16674                 return varname(gv, '$', 0,
16675                             NULL, 0, FUV_SUBSCRIPT_NONE);
16676             }
16677             /* other possibilities not handled are:
16678              * open $x; or open my $x;  should return '${*$x}'
16679              * open expr;               should return '$'.expr ideally
16680              */
16681              break;
16682         }
16683         match = 1;
16684         goto do_op;
16685
16686     /* ops where $_ may be an implicit arg */
16687     case OP_TRANS:
16688     case OP_TRANSR:
16689     case OP_SUBST:
16690     case OP_MATCH:
16691         if ( !(obase->op_flags & OPf_STACKED)) {
16692             if (uninit_sv == DEFSV)
16693                 return newSVpvs_flags("$_", SVs_TEMP);
16694             else if (obase->op_targ
16695                   && uninit_sv == PAD_SVl(obase->op_targ))
16696                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16697                                FUV_SUBSCRIPT_NONE);
16698         }
16699         goto do_op;
16700
16701     case OP_PRTF:
16702     case OP_PRINT:
16703     case OP_SAY:
16704         match = 1; /* print etc can return undef on defined args */
16705         /* skip filehandle as it can't produce 'undef' warning  */
16706         o = cUNOPx(obase)->op_first;
16707         if ((obase->op_flags & OPf_STACKED)
16708             &&
16709                (   o->op_type == OP_PUSHMARK
16710                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16711             o = OpSIBLING(OpSIBLING(o));
16712         goto do_op2;
16713
16714
16715     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16716     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16717
16718         /* the following ops are capable of returning PL_sv_undef even for
16719          * defined arg(s) */
16720
16721     case OP_BACKTICK:
16722     case OP_PIPE_OP:
16723     case OP_FILENO:
16724     case OP_BINMODE:
16725     case OP_TIED:
16726     case OP_GETC:
16727     case OP_SYSREAD:
16728     case OP_SEND:
16729     case OP_IOCTL:
16730     case OP_SOCKET:
16731     case OP_SOCKPAIR:
16732     case OP_BIND:
16733     case OP_CONNECT:
16734     case OP_LISTEN:
16735     case OP_ACCEPT:
16736     case OP_SHUTDOWN:
16737     case OP_SSOCKOPT:
16738     case OP_GETPEERNAME:
16739     case OP_FTRREAD:
16740     case OP_FTRWRITE:
16741     case OP_FTREXEC:
16742     case OP_FTROWNED:
16743     case OP_FTEREAD:
16744     case OP_FTEWRITE:
16745     case OP_FTEEXEC:
16746     case OP_FTEOWNED:
16747     case OP_FTIS:
16748     case OP_FTZERO:
16749     case OP_FTSIZE:
16750     case OP_FTFILE:
16751     case OP_FTDIR:
16752     case OP_FTLINK:
16753     case OP_FTPIPE:
16754     case OP_FTSOCK:
16755     case OP_FTBLK:
16756     case OP_FTCHR:
16757     case OP_FTTTY:
16758     case OP_FTSUID:
16759     case OP_FTSGID:
16760     case OP_FTSVTX:
16761     case OP_FTTEXT:
16762     case OP_FTBINARY:
16763     case OP_FTMTIME:
16764     case OP_FTATIME:
16765     case OP_FTCTIME:
16766     case OP_READLINK:
16767     case OP_OPEN_DIR:
16768     case OP_READDIR:
16769     case OP_TELLDIR:
16770     case OP_SEEKDIR:
16771     case OP_REWINDDIR:
16772     case OP_CLOSEDIR:
16773     case OP_GMTIME:
16774     case OP_ALARM:
16775     case OP_SEMGET:
16776     case OP_GETLOGIN:
16777     case OP_SUBSTR:
16778     case OP_AEACH:
16779     case OP_EACH:
16780     case OP_SORT:
16781     case OP_CALLER:
16782     case OP_DOFILE:
16783     case OP_PROTOTYPE:
16784     case OP_NCMP:
16785     case OP_SMARTMATCH:
16786     case OP_UNPACK:
16787     case OP_SYSOPEN:
16788     case OP_SYSSEEK:
16789         match = 1;
16790         goto do_op;
16791
16792     case OP_ENTERSUB:
16793     case OP_GOTO:
16794         /* XXX tmp hack: these two may call an XS sub, and currently
16795           XS subs don't have a SUB entry on the context stack, so CV and
16796           pad determination goes wrong, and BAD things happen. So, just
16797           don't try to determine the value under those circumstances.
16798           Need a better fix at dome point. DAPM 11/2007 */
16799         break;
16800
16801     case OP_FLIP:
16802     case OP_FLOP:
16803     {
16804         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16805         if (gv && GvSV(gv) == uninit_sv)
16806             return newSVpvs_flags("$.", SVs_TEMP);
16807         goto do_op;
16808     }
16809
16810     case OP_POS:
16811         /* def-ness of rval pos() is independent of the def-ness of its arg */
16812         if ( !(obase->op_flags & OPf_MOD))
16813             break;
16814         /* FALLTHROUGH */
16815
16816     case OP_SCHOMP:
16817     case OP_CHOMP:
16818         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16819             return newSVpvs_flags("${$/}", SVs_TEMP);
16820         /* FALLTHROUGH */
16821
16822     default:
16823     do_op:
16824         if (!(obase->op_flags & OPf_KIDS))
16825             break;
16826         o = cUNOPx(obase)->op_first;
16827         
16828     do_op2:
16829         if (!o)
16830             break;
16831
16832         /* This loop checks all the kid ops, skipping any that cannot pos-
16833          * sibly be responsible for the uninitialized value; i.e., defined
16834          * constants and ops that return nothing.  If there is only one op
16835          * left that is not skipped, then we *know* it is responsible for
16836          * the uninitialized value.  If there is more than one op left, we
16837          * have to look for an exact match in the while() loop below.
16838          * Note that we skip padrange, because the individual pad ops that
16839          * it replaced are still in the tree, so we work on them instead.
16840          */
16841         o2 = NULL;
16842         for (kid=o; kid; kid = OpSIBLING(kid)) {
16843             const OPCODE type = kid->op_type;
16844             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16845               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16846               || (type == OP_PUSHMARK)
16847               || (type == OP_PADRANGE)
16848             )
16849             continue;
16850
16851             if (o2) { /* more than one found */
16852                 o2 = NULL;
16853                 break;
16854             }
16855             o2 = kid;
16856         }
16857         if (o2)
16858             return find_uninit_var(o2, uninit_sv, match, desc_p);
16859
16860         /* scan all args */
16861         while (o) {
16862             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16863             if (sv)
16864                 return sv;
16865             o = OpSIBLING(o);
16866         }
16867         break;
16868     }
16869     return NULL;
16870 }
16871
16872
16873 /*
16874 =for apidoc report_uninit
16875
16876 Print appropriate "Use of uninitialized variable" warning.
16877
16878 =cut
16879 */
16880
16881 void
16882 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16883 {
16884     const char *desc = NULL;
16885     SV* varname = NULL;
16886
16887     if (PL_op) {
16888         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16889                 ? "join or string"
16890                 : PL_op->op_type == OP_MULTICONCAT
16891                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
16892                 ? "sprintf"
16893                 : OP_DESC(PL_op);
16894         if (uninit_sv && PL_curpad) {
16895             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16896             if (varname)
16897                 sv_insert(varname, 0, 0, " ", 1);
16898         }
16899     }
16900     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16901         /* we've reached the end of a sort block or sub,
16902          * and the uninit value is probably what that code returned */
16903         desc = "sort";
16904
16905     /* PL_warn_uninit_sv is constant */
16906     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
16907     if (desc)
16908         /* diag_listed_as: Use of uninitialized value%s */
16909         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16910                 SVfARG(varname ? varname : &PL_sv_no),
16911                 " in ", desc);
16912     else
16913         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16914                 "", "", "");
16915     GCC_DIAG_RESTORE_STMT;
16916 }
16917
16918 /*
16919  * ex: set ts=8 sts=4 sw=4 et:
16920  */