This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "re_intuit_start(): rename some local vars"
[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             STORE_LC_NUMERIC_UNDERLYING_SET_STANDARD();
2672             PerlIO_printf(Perl_debug_log,
2673                           "0x%" UVxf " num(%" NVgf ")\n",
2674                           PTR2UV(sv), SvNVX(sv));
2675             RESTORE_LC_NUMERIC_UNDERLYING();
2676         });
2677     }
2678     else if (SvTYPE(sv) < SVt_PVNV)
2679         sv_upgrade(sv, SVt_PVNV);
2680     if (SvNOKp(sv)) {
2681         return SvNVX(sv);
2682     }
2683     if (SvIOKp(sv)) {
2684         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2685 #ifdef NV_PRESERVES_UV
2686         if (SvIOK(sv))
2687             SvNOK_on(sv);
2688         else
2689             SvNOKp_on(sv);
2690 #else
2691         /* Only set the public NV OK flag if this NV preserves the IV  */
2692         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2693         if (SvIOK(sv) &&
2694             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2695                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2696             SvNOK_on(sv);
2697         else
2698             SvNOKp_on(sv);
2699 #endif
2700     }
2701     else if (SvPOKp(sv)) {
2702         UV value;
2703         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2704         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2705             not_a_number(sv);
2706 #ifdef NV_PRESERVES_UV
2707         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2708             == IS_NUMBER_IN_UV) {
2709             /* It's definitely an integer */
2710             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2711         } else {
2712             S_sv_setnv(aTHX_ sv, numtype);
2713         }
2714         if (numtype)
2715             SvNOK_on(sv);
2716         else
2717             SvNOKp_on(sv);
2718 #else
2719         SvNV_set(sv, Atof(SvPVX_const(sv)));
2720         /* Only set the public NV OK flag if this NV preserves the value in
2721            the PV at least as well as an IV/UV would.
2722            Not sure how to do this 100% reliably. */
2723         /* if that shift count is out of range then Configure's test is
2724            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2725            UV_BITS */
2726         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2727             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2728             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2729         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2730             /* Can't use strtol etc to convert this string, so don't try.
2731                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2732             SvNOK_on(sv);
2733         } else {
2734             /* value has been set.  It may not be precise.  */
2735             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2736                 /* 2s complement assumption for (UV)IV_MIN  */
2737                 SvNOK_on(sv); /* Integer is too negative.  */
2738             } else {
2739                 SvNOKp_on(sv);
2740                 SvIOKp_on(sv);
2741
2742                 if (numtype & IS_NUMBER_NEG) {
2743                     /* -IV_MIN is undefined, but we should never reach
2744                      * this point with both IS_NUMBER_NEG and value ==
2745                      * (UV)IV_MIN */
2746                     assert(value != (UV)IV_MIN);
2747                     SvIV_set(sv, -(IV)value);
2748                 } else if (value <= (UV)IV_MAX) {
2749                     SvIV_set(sv, (IV)value);
2750                 } else {
2751                     SvUV_set(sv, value);
2752                     SvIsUV_on(sv);
2753                 }
2754
2755                 if (numtype & IS_NUMBER_NOT_INT) {
2756                     /* I believe that even if the original PV had decimals,
2757                        they are lost beyond the limit of the FP precision.
2758                        However, neither is canonical, so both only get p
2759                        flags.  NWC, 2000/11/25 */
2760                     /* Both already have p flags, so do nothing */
2761                 } else {
2762                     const NV nv = SvNVX(sv);
2763                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2764                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2765                         if (SvIVX(sv) == I_V(nv)) {
2766                             SvNOK_on(sv);
2767                         } else {
2768                             /* It had no "." so it must be integer.  */
2769                         }
2770                         SvIOK_on(sv);
2771                     } else {
2772                         /* between IV_MAX and NV(UV_MAX).
2773                            Could be slightly > UV_MAX */
2774
2775                         if (numtype & IS_NUMBER_NOT_INT) {
2776                             /* UV and NV both imprecise.  */
2777                         } else {
2778                             const UV nv_as_uv = U_V(nv);
2779
2780                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2781                                 SvNOK_on(sv);
2782                             }
2783                             SvIOK_on(sv);
2784                         }
2785                     }
2786                 }
2787             }
2788         }
2789         /* It might be more code efficient to go through the entire logic above
2790            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2791            gets complex and potentially buggy, so more programmer efficient
2792            to do it this way, by turning off the public flags:  */
2793         if (!numtype)
2794             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2795 #endif /* NV_PRESERVES_UV */
2796     }
2797     else  {
2798         if (isGV_with_GP(sv)) {
2799             glob_2number(MUTABLE_GV(sv));
2800             return 0.0;
2801         }
2802
2803         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2804             report_uninit(sv);
2805         assert (SvTYPE(sv) >= SVt_NV);
2806         /* Typically the caller expects that sv_any is not NULL now.  */
2807         /* XXX Ilya implies that this is a bug in callers that assume this
2808            and ideally should be fixed.  */
2809         return 0.0;
2810     }
2811     DEBUG_c({
2812         STORE_LC_NUMERIC_UNDERLYING_SET_STANDARD();
2813         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2814                       PTR2UV(sv), SvNVX(sv));
2815         RESTORE_LC_NUMERIC_UNDERLYING();
2816     });
2817     return SvNVX(sv);
2818 }
2819
2820 /*
2821 =for apidoc sv_2num
2822
2823 Return an SV with the numeric value of the source SV, doing any necessary
2824 reference or overload conversion.  The caller is expected to have handled
2825 get-magic already.
2826
2827 =cut
2828 */
2829
2830 SV *
2831 Perl_sv_2num(pTHX_ SV *const sv)
2832 {
2833     PERL_ARGS_ASSERT_SV_2NUM;
2834
2835     if (!SvROK(sv))
2836         return sv;
2837     if (SvAMAGIC(sv)) {
2838         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2839         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2840         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2841             return sv_2num(tmpsv);
2842     }
2843     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2844 }
2845
2846 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2847  * UV as a string towards the end of buf, and return pointers to start and
2848  * end of it.
2849  *
2850  * We assume that buf is at least TYPE_CHARS(UV) long.
2851  */
2852
2853 static char *
2854 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2855 {
2856     char *ptr = buf + TYPE_CHARS(UV);
2857     char * const ebuf = ptr;
2858     int sign;
2859
2860     PERL_ARGS_ASSERT_UIV_2BUF;
2861
2862     if (is_uv)
2863         sign = 0;
2864     else if (iv >= 0) {
2865         uv = iv;
2866         sign = 0;
2867     } else {
2868         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2869         sign = 1;
2870     }
2871     do {
2872         *--ptr = '0' + (char)(uv % 10);
2873     } while (uv /= 10);
2874     if (sign)
2875         *--ptr = '-';
2876     *peob = ebuf;
2877     return ptr;
2878 }
2879
2880 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2881  * infinity or a not-a-number, writes the appropriate strings to the
2882  * buffer, including a zero byte.  On success returns the written length,
2883  * excluding the zero byte, on failure (not an infinity, not a nan)
2884  * returns zero, assert-fails on maxlen being too short.
2885  *
2886  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2887  * shared string constants we point to, instead of generating a new
2888  * string for each instance. */
2889 STATIC size_t
2890 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2891     char* s = buffer;
2892     assert(maxlen >= 4);
2893     if (Perl_isinf(nv)) {
2894         if (nv < 0) {
2895             if (maxlen < 5) /* "-Inf\0"  */
2896                 return 0;
2897             *s++ = '-';
2898         } else if (plus) {
2899             *s++ = '+';
2900         }
2901         *s++ = 'I';
2902         *s++ = 'n';
2903         *s++ = 'f';
2904     }
2905     else if (Perl_isnan(nv)) {
2906         *s++ = 'N';
2907         *s++ = 'a';
2908         *s++ = 'N';
2909         /* XXX optionally output the payload mantissa bits as
2910          * "(unsigned)" (to match the nan("...") C99 function,
2911          * or maybe as "(0xhhh...)"  would make more sense...
2912          * provide a format string so that the user can decide?
2913          * NOTE: would affect the maxlen and assert() logic.*/
2914     }
2915     else {
2916       return 0;
2917     }
2918     assert((s == buffer + 3) || (s == buffer + 4));
2919     *s = 0;
2920     return s - buffer;
2921 }
2922
2923 /*
2924 =for apidoc sv_2pv_flags
2925
2926 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2927 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2928 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2929 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2930
2931 =cut
2932 */
2933
2934 char *
2935 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2936 {
2937     char *s;
2938
2939     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2940
2941     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2942          && SvTYPE(sv) != SVt_PVFM);
2943     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2944         mg_get(sv);
2945     if (SvROK(sv)) {
2946         if (SvAMAGIC(sv)) {
2947             SV *tmpstr;
2948             if (flags & SV_SKIP_OVERLOAD)
2949                 return NULL;
2950             tmpstr = AMG_CALLunary(sv, string_amg);
2951             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2952             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2953                 /* Unwrap this:  */
2954                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2955                  */
2956
2957                 char *pv;
2958                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2959                     if (flags & SV_CONST_RETURN) {
2960                         pv = (char *) SvPVX_const(tmpstr);
2961                     } else {
2962                         pv = (flags & SV_MUTABLE_RETURN)
2963                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2964                     }
2965                     if (lp)
2966                         *lp = SvCUR(tmpstr);
2967                 } else {
2968                     pv = sv_2pv_flags(tmpstr, lp, flags);
2969                 }
2970                 if (SvUTF8(tmpstr))
2971                     SvUTF8_on(sv);
2972                 else
2973                     SvUTF8_off(sv);
2974                 return pv;
2975             }
2976         }
2977         {
2978             STRLEN len;
2979             char *retval;
2980             char *buffer;
2981             SV *const referent = SvRV(sv);
2982
2983             if (!referent) {
2984                 len = 7;
2985                 retval = buffer = savepvn("NULLREF", len);
2986             } else if (SvTYPE(referent) == SVt_REGEXP &&
2987                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2988                         amagic_is_enabled(string_amg))) {
2989                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2990
2991                 assert(re);
2992                         
2993                 /* If the regex is UTF-8 we want the containing scalar to
2994                    have an UTF-8 flag too */
2995                 if (RX_UTF8(re))
2996                     SvUTF8_on(sv);
2997                 else
2998                     SvUTF8_off(sv);     
2999
3000                 if (lp)
3001                     *lp = RX_WRAPLEN(re);
3002  
3003                 return RX_WRAPPED(re);
3004             } else {
3005                 const char *const typestr = sv_reftype(referent, 0);
3006                 const STRLEN typelen = strlen(typestr);
3007                 UV addr = PTR2UV(referent);
3008                 const char *stashname = NULL;
3009                 STRLEN stashnamelen = 0; /* hush, gcc */
3010                 const char *buffer_end;
3011
3012                 if (SvOBJECT(referent)) {
3013                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3014
3015                     if (name) {
3016                         stashname = HEK_KEY(name);
3017                         stashnamelen = HEK_LEN(name);
3018
3019                         if (HEK_UTF8(name)) {
3020                             SvUTF8_on(sv);
3021                         } else {
3022                             SvUTF8_off(sv);
3023                         }
3024                     } else {
3025                         stashname = "__ANON__";
3026                         stashnamelen = 8;
3027                     }
3028                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3029                         + 2 * sizeof(UV) + 2 /* )\0 */;
3030                 } else {
3031                     len = typelen + 3 /* (0x */
3032                         + 2 * sizeof(UV) + 2 /* )\0 */;
3033                 }
3034
3035                 Newx(buffer, len, char);
3036                 buffer_end = retval = buffer + len;
3037
3038                 /* Working backwards  */
3039                 *--retval = '\0';
3040                 *--retval = ')';
3041                 do {
3042                     *--retval = PL_hexdigit[addr & 15];
3043                 } while (addr >>= 4);
3044                 *--retval = 'x';
3045                 *--retval = '0';
3046                 *--retval = '(';
3047
3048                 retval -= typelen;
3049                 memcpy(retval, typestr, typelen);
3050
3051                 if (stashname) {
3052                     *--retval = '=';
3053                     retval -= stashnamelen;
3054                     memcpy(retval, stashname, stashnamelen);
3055                 }
3056                 /* retval may not necessarily have reached the start of the
3057                    buffer here.  */
3058                 assert (retval >= buffer);
3059
3060                 len = buffer_end - retval - 1; /* -1 for that \0  */
3061             }
3062             if (lp)
3063                 *lp = len;
3064             SAVEFREEPV(buffer);
3065             return retval;
3066         }
3067     }
3068
3069     if (SvPOKp(sv)) {
3070         if (lp)
3071             *lp = SvCUR(sv);
3072         if (flags & SV_MUTABLE_RETURN)
3073             return SvPVX_mutable(sv);
3074         if (flags & SV_CONST_RETURN)
3075             return (char *)SvPVX_const(sv);
3076         return SvPVX(sv);
3077     }
3078
3079     if (SvIOK(sv)) {
3080         /* I'm assuming that if both IV and NV are equally valid then
3081            converting the IV is going to be more efficient */
3082         const U32 isUIOK = SvIsUV(sv);
3083         char buf[TYPE_CHARS(UV)];
3084         char *ebuf, *ptr;
3085         STRLEN len;
3086
3087         if (SvTYPE(sv) < SVt_PVIV)
3088             sv_upgrade(sv, SVt_PVIV);
3089         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3090         len = ebuf - ptr;
3091         /* inlined from sv_setpvn */
3092         s = SvGROW_mutable(sv, len + 1);
3093         Move(ptr, s, len, char);
3094         s += len;
3095         *s = '\0';
3096         SvPOK_on(sv);
3097     }
3098     else if (SvNOK(sv)) {
3099         if (SvTYPE(sv) < SVt_PVNV)
3100             sv_upgrade(sv, SVt_PVNV);
3101         if (SvNVX(sv) == 0.0
3102 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3103             && !Perl_isnan(SvNVX(sv))
3104 #endif
3105         ) {
3106             s = SvGROW_mutable(sv, 2);
3107             *s++ = '0';
3108             *s = '\0';
3109         } else {
3110             STRLEN len;
3111             STRLEN size = 5; /* "-Inf\0" */
3112
3113             s = SvGROW_mutable(sv, size);
3114             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3115             if (len > 0) {
3116                 s += len;
3117                 SvPOK_on(sv);
3118             }
3119             else {
3120                 /* some Xenix systems wipe out errno here */
3121                 dSAVE_ERRNO;
3122
3123                 size =
3124                     1 + /* sign */
3125                     1 + /* "." */
3126                     NV_DIG +
3127                     1 + /* "e" */
3128                     1 + /* sign */
3129                     5 + /* exponent digits */
3130                     1 + /* \0 */
3131                     2; /* paranoia */
3132
3133                 s = SvGROW_mutable(sv, size);
3134 #ifndef USE_LOCALE_NUMERIC
3135                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3136
3137                 SvPOK_on(sv);
3138 #else
3139                 {
3140                     bool local_radix;
3141                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3142                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3143
3144                     local_radix = PL_numeric_underlying && PL_numeric_radix_sv;
3145                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3146                         size += SvCUR(PL_numeric_radix_sv) - 1;
3147                         s = SvGROW_mutable(sv, size);
3148                     }
3149
3150                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3151
3152                     /* If the radix character is UTF-8, and actually is in the
3153                      * output, turn on the UTF-8 flag for the scalar */
3154                     if (   local_radix
3155                         && SvUTF8(PL_numeric_radix_sv)
3156                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3157                     {
3158                         SvUTF8_on(sv);
3159                     }
3160
3161                     RESTORE_LC_NUMERIC();
3162                 }
3163
3164                 /* We don't call SvPOK_on(), because it may come to
3165                  * pass that the locale changes so that the
3166                  * stringification we just did is no longer correct.  We
3167                  * will have to re-stringify every time it is needed */
3168 #endif
3169                 RESTORE_ERRNO;
3170             }
3171             while (*s) s++;
3172         }
3173     }
3174     else if (isGV_with_GP(sv)) {
3175         GV *const gv = MUTABLE_GV(sv);
3176         SV *const buffer = sv_newmortal();
3177
3178         gv_efullname3(buffer, gv, "*");
3179
3180         assert(SvPOK(buffer));
3181         if (SvUTF8(buffer))
3182             SvUTF8_on(sv);
3183         else
3184             SvUTF8_off(sv);
3185         if (lp)
3186             *lp = SvCUR(buffer);
3187         return SvPVX(buffer);
3188     }
3189     else {
3190         if (lp)
3191             *lp = 0;
3192         if (flags & SV_UNDEF_RETURNS_NULL)
3193             return NULL;
3194         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3195             report_uninit(sv);
3196         /* Typically the caller expects that sv_any is not NULL now.  */
3197         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3198             sv_upgrade(sv, SVt_PV);
3199         return (char *)"";
3200     }
3201
3202     {
3203         const STRLEN len = s - SvPVX_const(sv);
3204         if (lp) 
3205             *lp = len;
3206         SvCUR_set(sv, len);
3207     }
3208     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3209                           PTR2UV(sv),SvPVX_const(sv)));
3210     if (flags & SV_CONST_RETURN)
3211         return (char *)SvPVX_const(sv);
3212     if (flags & SV_MUTABLE_RETURN)
3213         return SvPVX_mutable(sv);
3214     return SvPVX(sv);
3215 }
3216
3217 /*
3218 =for apidoc sv_copypv
3219
3220 Copies a stringified representation of the source SV into the
3221 destination SV.  Automatically performs any necessary C<mg_get> and
3222 coercion of numeric values into strings.  Guaranteed to preserve
3223 C<UTF8> flag even from overloaded objects.  Similar in nature to
3224 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3225 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3226 would lose the UTF-8'ness of the PV.
3227
3228 =for apidoc sv_copypv_nomg
3229
3230 Like C<sv_copypv>, but doesn't invoke get magic first.
3231
3232 =for apidoc sv_copypv_flags
3233
3234 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3235 has the C<SV_GMAGIC> bit set.
3236
3237 =cut
3238 */
3239
3240 void
3241 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3242 {
3243     STRLEN len;
3244     const char *s;
3245
3246     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3247
3248     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3249     sv_setpvn(dsv,s,len);
3250     if (SvUTF8(ssv))
3251         SvUTF8_on(dsv);
3252     else
3253         SvUTF8_off(dsv);
3254 }
3255
3256 /*
3257 =for apidoc sv_2pvbyte
3258
3259 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3260 to its length.  May cause the SV to be downgraded from UTF-8 as a
3261 side-effect.
3262
3263 Usually accessed via the C<SvPVbyte> macro.
3264
3265 =cut
3266 */
3267
3268 char *
3269 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3270 {
3271     PERL_ARGS_ASSERT_SV_2PVBYTE;
3272
3273     SvGETMAGIC(sv);
3274     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3275      || isGV_with_GP(sv) || SvROK(sv)) {
3276         SV *sv2 = sv_newmortal();
3277         sv_copypv_nomg(sv2,sv);
3278         sv = sv2;
3279     }
3280     sv_utf8_downgrade(sv,0);
3281     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3282 }
3283
3284 /*
3285 =for apidoc sv_2pvutf8
3286
3287 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3288 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3289
3290 Usually accessed via the C<SvPVutf8> macro.
3291
3292 =cut
3293 */
3294
3295 char *
3296 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3297 {
3298     PERL_ARGS_ASSERT_SV_2PVUTF8;
3299
3300     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3301      || isGV_with_GP(sv) || SvROK(sv))
3302         sv = sv_mortalcopy(sv);
3303     else
3304         SvGETMAGIC(sv);
3305     sv_utf8_upgrade_nomg(sv);
3306     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3307 }
3308
3309
3310 /*
3311 =for apidoc sv_2bool
3312
3313 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3314 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3315 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3316
3317 =for apidoc sv_2bool_flags
3318
3319 This function is only used by C<sv_true()> and friends,  and only if
3320 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3321 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3322
3323
3324 =cut
3325 */
3326
3327 bool
3328 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3329 {
3330     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3331
3332     restart:
3333     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3334
3335     if (!SvOK(sv))
3336         return 0;
3337     if (SvROK(sv)) {
3338         if (SvAMAGIC(sv)) {
3339             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3340             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3341                 bool svb;
3342                 sv = tmpsv;
3343                 if(SvGMAGICAL(sv)) {
3344                     flags = SV_GMAGIC;
3345                     goto restart; /* call sv_2bool */
3346                 }
3347                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3348                 else if(!SvOK(sv)) {
3349                     svb = 0;
3350                 }
3351                 else if(SvPOK(sv)) {
3352                     svb = SvPVXtrue(sv);
3353                 }
3354                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3355                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3356                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3357                 }
3358                 else {
3359                     flags = 0;
3360                     goto restart; /* call sv_2bool_nomg */
3361                 }
3362                 return cBOOL(svb);
3363             }
3364         }
3365         assert(SvRV(sv));
3366         return TRUE;
3367     }
3368     if (isREGEXP(sv))
3369         return
3370           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3371
3372     if (SvNOK(sv) && !SvPOK(sv))
3373         return SvNVX(sv) != 0.0;
3374
3375     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3376 }
3377
3378 /*
3379 =for apidoc sv_utf8_upgrade
3380
3381 Converts the PV of an SV to its UTF-8-encoded form.
3382 Forces the SV to string form if it is not already.
3383 Will C<mg_get> on C<sv> if appropriate.
3384 Always sets the C<SvUTF8> flag to avoid future validity checks even
3385 if the whole string is the same in UTF-8 as not.
3386 Returns the number of bytes in the converted string
3387
3388 This is not a general purpose byte encoding to Unicode interface:
3389 use the Encode extension for that.
3390
3391 =for apidoc sv_utf8_upgrade_nomg
3392
3393 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3394
3395 =for apidoc sv_utf8_upgrade_flags
3396
3397 Converts the PV of an SV to its UTF-8-encoded form.
3398 Forces the SV to string form if it is not already.
3399 Always sets the SvUTF8 flag to avoid future validity checks even
3400 if all the bytes are invariant in UTF-8.
3401 If C<flags> has C<SV_GMAGIC> bit set,
3402 will C<mg_get> on C<sv> if appropriate, else not.
3403
3404 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3405
3406 Returns the number of bytes in the converted string.
3407
3408 This is not a general purpose byte encoding to Unicode interface:
3409 use the Encode extension for that.
3410
3411 =for apidoc sv_utf8_upgrade_flags_grow
3412
3413 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3414 the number of unused bytes the string of C<sv> is guaranteed to have free after
3415 it upon return.  This allows the caller to reserve extra space that it intends
3416 to fill, to avoid extra grows.
3417
3418 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3419 are implemented in terms of this function.
3420
3421 Returns the number of bytes in the converted string (not including the spares).
3422
3423 =cut
3424
3425 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3426 C<NUL> isn't guaranteed due to having other routines do the work in some input
3427 cases, or if the input is already flagged as being in utf8.
3428
3429 */
3430
3431 STRLEN
3432 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3433 {
3434     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3435
3436     if (sv == &PL_sv_undef)
3437         return 0;
3438     if (!SvPOK_nog(sv)) {
3439         STRLEN len = 0;
3440         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3441             (void) sv_2pv_flags(sv,&len, flags);
3442             if (SvUTF8(sv)) {
3443                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3444                 return len;
3445             }
3446         } else {
3447             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3448         }
3449     }
3450
3451     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3452      * compiled and individual nodes will remain non-utf8 even if the
3453      * stringified version of the pattern gets upgraded. Whether the
3454      * PVX of a REGEXP should be grown or we should just croak, I don't
3455      * know - DAPM */
3456     if (SvUTF8(sv) || isREGEXP(sv)) {
3457         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3458         return SvCUR(sv);
3459     }
3460
3461     if (SvIsCOW(sv)) {
3462         S_sv_uncow(aTHX_ sv, 0);
3463     }
3464
3465     if (SvCUR(sv) == 0) {
3466         if (extra) SvGROW(sv, extra);
3467     } else { /* Assume Latin-1/EBCDIC */
3468         /* This function could be much more efficient if we
3469          * had a FLAG in SVs to signal if there are any variant
3470          * chars in the PV.  Given that there isn't such a flag
3471          * make the loop as fast as possible. */
3472         U8 * s = (U8 *) SvPVX_const(sv);
3473         U8 *t = s;
3474         
3475         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3476
3477             /* utf8 conversion not needed because all are invariants.  Mark
3478              * as UTF-8 even if no variant - saves scanning loop */
3479             SvUTF8_on(sv);
3480             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3481             return SvCUR(sv);
3482         }
3483
3484         /* Here, there is at least one variant (t points to the first one), so
3485          * the string should be converted to utf8.  Everything from 's' to
3486          * 't - 1' will occupy only 1 byte each on output.
3487          *
3488          * Note that the incoming SV may not have a trailing '\0', as certain
3489          * code in pp_formline can send us partially built SVs.
3490          *
3491          * There are two main ways to convert.  One is to create a new string
3492          * and go through the input starting from the beginning, appending each
3493          * converted value onto the new string as we go along.  Going this
3494          * route, it's probably best to initially allocate enough space in the
3495          * string rather than possibly running out of space and having to
3496          * reallocate and then copy what we've done so far.  Since everything
3497          * from 's' to 't - 1' is invariant, the destination can be initialized
3498          * with these using a fast memory copy.  To be sure to allocate enough
3499          * space, one could use the worst case scenario, where every remaining
3500          * byte expands to two under UTF-8, or one could parse it and count
3501          * exactly how many do expand.
3502          *
3503          * The other way is to unconditionally parse the remainder of the
3504          * string to figure out exactly how big the expanded string will be,
3505          * growing if needed.  Then start at the end of the string and place
3506          * the character there at the end of the unfilled space in the expanded
3507          * one, working backwards until reaching 't'.
3508          *
3509          * The problem with assuming the worst case scenario is that for very
3510          * long strings, we could allocate much more memory than actually
3511          * needed, which can create performance problems.  If we have to parse
3512          * anyway, the second method is the winner as it may avoid an extra
3513          * copy.  The code used to use the first method under some
3514          * circumstances, but now that there is faster variant counting on
3515          * ASCII platforms, the second method is used exclusively, eliminating
3516          * some code that no longer has to be maintained. */
3517
3518         {
3519             /* Count the total number of variants there are.  We can start
3520              * just beyond the first one, which is known to be at 't' */
3521             const Size_t invariant_length = t - s;
3522             U8 * e = (U8 *) SvEND(sv);
3523
3524             /* The length of the left overs, plus 1. */
3525             const Size_t remaining_length_p1 = e - t;
3526
3527             /* We expand by 1 for the variant at 't' and one for each remaining
3528              * variant (we start looking at 't+1') */
3529             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3530
3531             /* +1 = trailing NUL */
3532             Size_t need = SvCUR(sv) + expansion + extra + 1;
3533             U8 * d;
3534
3535             /* Grow if needed */
3536             if (SvLEN(sv) < need) {
3537                 t = invariant_length + (U8*) SvGROW(sv, need);
3538                 e = t + remaining_length_p1;
3539             }
3540             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3541
3542             /* Set the NUL at the end */
3543             d = (U8 *) SvEND(sv);
3544             *d-- = '\0';
3545
3546             /* Having decremented d, it points to the position to put the
3547              * very last byte of the expanded string.  Go backwards through
3548              * the string, copying and expanding as we go, stopping when we
3549              * get to the part that is invariant the rest of the way down */
3550
3551             e--;
3552             while (e >= t) {
3553                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3554                     *d-- = *e;
3555                 } else {
3556                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3557                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3558                 }
3559                 e--;
3560             }
3561
3562             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3563                 /* Update pos. We do it at the end rather than during
3564                  * the upgrade, to avoid slowing down the common case
3565                  * (upgrade without pos).
3566                  * pos can be stored as either bytes or characters.  Since
3567                  * this was previously a byte string we can just turn off
3568                  * the bytes flag. */
3569                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3570                 if (mg) {
3571                     mg->mg_flags &= ~MGf_BYTES;
3572                 }
3573                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3574                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3575             }
3576         }
3577     }
3578
3579     SvUTF8_on(sv);
3580     return SvCUR(sv);
3581 }
3582
3583 /*
3584 =for apidoc sv_utf8_downgrade
3585
3586 Attempts to convert the PV of an SV from characters to bytes.
3587 If the PV contains a character that cannot fit
3588 in a byte, this conversion will fail;
3589 in this case, either returns false or, if C<fail_ok> is not
3590 true, croaks.
3591
3592 This is not a general purpose Unicode to byte encoding interface:
3593 use the C<Encode> extension for that.
3594
3595 =cut
3596 */
3597
3598 bool
3599 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3600 {
3601     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3602
3603     if (SvPOKp(sv) && SvUTF8(sv)) {
3604         if (SvCUR(sv)) {
3605             U8 *s;
3606             STRLEN len;
3607             int mg_flags = SV_GMAGIC;
3608
3609             if (SvIsCOW(sv)) {
3610                 S_sv_uncow(aTHX_ sv, 0);
3611             }
3612             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3613                 /* update pos */
3614                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3615                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3616                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3617                                                 SV_GMAGIC|SV_CONST_RETURN);
3618                         mg_flags = 0; /* sv_pos_b2u does get magic */
3619                 }
3620                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3621                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3622
3623             }
3624             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3625
3626             if (!utf8_to_bytes(s, &len)) {
3627                 if (fail_ok)
3628                     return FALSE;
3629                 else {
3630                     if (PL_op)
3631                         Perl_croak(aTHX_ "Wide character in %s",
3632                                    OP_DESC(PL_op));
3633                     else
3634                         Perl_croak(aTHX_ "Wide character");
3635                 }
3636             }
3637             SvCUR_set(sv, len);
3638         }
3639     }
3640     SvUTF8_off(sv);
3641     return TRUE;
3642 }
3643
3644 /*
3645 =for apidoc sv_utf8_encode
3646
3647 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3648 flag off so that it looks like octets again.
3649
3650 =cut
3651 */
3652
3653 void
3654 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3655 {
3656     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3657
3658     if (SvREADONLY(sv)) {
3659         sv_force_normal_flags(sv, 0);
3660     }
3661     (void) sv_utf8_upgrade(sv);
3662     SvUTF8_off(sv);
3663 }
3664
3665 /*
3666 =for apidoc sv_utf8_decode
3667
3668 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3669 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3670 so that it looks like a character.  If the PV contains only single-byte
3671 characters, the C<SvUTF8> flag stays off.
3672 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3673
3674 =cut
3675 */
3676
3677 bool
3678 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3679 {
3680     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3681
3682     if (SvPOKp(sv)) {
3683         const U8 *start, *c, *first_variant;
3684
3685         /* The octets may have got themselves encoded - get them back as
3686          * bytes
3687          */
3688         if (!sv_utf8_downgrade(sv, TRUE))
3689             return FALSE;
3690
3691         /* it is actually just a matter of turning the utf8 flag on, but
3692          * we want to make sure everything inside is valid utf8 first.
3693          */
3694         c = start = (const U8 *) SvPVX_const(sv);
3695         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3696             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3697                 return FALSE;
3698             SvUTF8_on(sv);
3699         }
3700         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3701             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3702                    after this, clearing pos.  Does anything on CPAN
3703                    need this? */
3704             /* adjust pos to the start of a UTF8 char sequence */
3705             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3706             if (mg) {
3707                 I32 pos = mg->mg_len;
3708                 if (pos > 0) {
3709                     for (c = start + pos; c > start; c--) {
3710                         if (UTF8_IS_START(*c))
3711                             break;
3712                     }
3713                     mg->mg_len  = c - start;
3714                 }
3715             }
3716             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3717                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3718         }
3719     }
3720     return TRUE;
3721 }
3722
3723 /*
3724 =for apidoc sv_setsv
3725
3726 Copies the contents of the source SV C<ssv> into the destination SV
3727 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3728 function if the source SV needs to be reused.  Does not handle 'set' magic on
3729 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3730 performs a copy-by-value, obliterating any previous content of the
3731 destination.
3732
3733 You probably want to use one of the assortment of wrappers, such as
3734 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3735 C<SvSetMagicSV_nosteal>.
3736
3737 =for apidoc sv_setsv_flags
3738
3739 Copies the contents of the source SV C<ssv> into the destination SV
3740 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3741 function if the source SV needs to be reused.  Does not handle 'set' magic.
3742 Loosely speaking, it performs a copy-by-value, obliterating any previous
3743 content of the destination.
3744 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3745 C<ssv> if appropriate, else not.  If the C<flags>
3746 parameter has the C<SV_NOSTEAL> bit set then the
3747 buffers of temps will not be stolen.  C<sv_setsv>
3748 and C<sv_setsv_nomg> are implemented in terms of this function.
3749
3750 You probably want to use one of the assortment of wrappers, such as
3751 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3752 C<SvSetMagicSV_nosteal>.
3753
3754 This is the primary function for copying scalars, and most other
3755 copy-ish functions and macros use this underneath.
3756
3757 =cut
3758 */
3759
3760 static void
3761 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3762 {
3763     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3764     HV *old_stash = NULL;
3765
3766     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3767
3768     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3769         const char * const name = GvNAME(sstr);
3770         const STRLEN len = GvNAMELEN(sstr);
3771         {
3772             if (dtype >= SVt_PV) {
3773                 SvPV_free(dstr);
3774                 SvPV_set(dstr, 0);
3775                 SvLEN_set(dstr, 0);
3776                 SvCUR_set(dstr, 0);
3777             }
3778             SvUPGRADE(dstr, SVt_PVGV);
3779             (void)SvOK_off(dstr);
3780             isGV_with_GP_on(dstr);
3781         }
3782         GvSTASH(dstr) = GvSTASH(sstr);
3783         if (GvSTASH(dstr))
3784             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3785         gv_name_set(MUTABLE_GV(dstr), name, len,
3786                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3787         SvFAKE_on(dstr);        /* can coerce to non-glob */
3788     }
3789
3790     if(GvGP(MUTABLE_GV(sstr))) {
3791         /* If source has method cache entry, clear it */
3792         if(GvCVGEN(sstr)) {
3793             SvREFCNT_dec(GvCV(sstr));
3794             GvCV_set(sstr, NULL);
3795             GvCVGEN(sstr) = 0;
3796         }
3797         /* If source has a real method, then a method is
3798            going to change */
3799         else if(
3800          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3801         ) {
3802             mro_changes = 1;
3803         }
3804     }
3805
3806     /* If dest already had a real method, that's a change as well */
3807     if(
3808         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3809      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3810     ) {
3811         mro_changes = 1;
3812     }
3813
3814     /* We don't need to check the name of the destination if it was not a
3815        glob to begin with. */
3816     if(dtype == SVt_PVGV) {
3817         const char * const name = GvNAME((const GV *)dstr);
3818         const STRLEN len = GvNAMELEN(dstr);
3819         if(memEQs(name, len, "ISA")
3820          /* The stash may have been detached from the symbol table, so
3821             check its name. */
3822          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3823         )
3824             mro_changes = 2;
3825         else {
3826             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3827              || (len == 1 && name[0] == ':')) {
3828                 mro_changes = 3;
3829
3830                 /* Set aside the old stash, so we can reset isa caches on
3831                    its subclasses. */
3832                 if((old_stash = GvHV(dstr)))
3833                     /* Make sure we do not lose it early. */
3834                     SvREFCNT_inc_simple_void_NN(
3835                      sv_2mortal((SV *)old_stash)
3836                     );
3837             }
3838         }
3839
3840         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3841     }
3842
3843     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3844      * so temporarily protect it */
3845     ENTER;
3846     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3847     gp_free(MUTABLE_GV(dstr));
3848     GvINTRO_off(dstr);          /* one-shot flag */
3849     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3850     LEAVE;
3851
3852     if (SvTAINTED(sstr))
3853         SvTAINT(dstr);
3854     if (GvIMPORTED(dstr) != GVf_IMPORTED
3855         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3856         {
3857             GvIMPORTED_on(dstr);
3858         }
3859     GvMULTI_on(dstr);
3860     if(mro_changes == 2) {
3861       if (GvAV((const GV *)sstr)) {
3862         MAGIC *mg;
3863         SV * const sref = (SV *)GvAV((const GV *)dstr);
3864         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3865             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3866                 AV * const ary = newAV();
3867                 av_push(ary, mg->mg_obj); /* takes the refcount */
3868                 mg->mg_obj = (SV *)ary;
3869             }
3870             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3871         }
3872         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3873       }
3874       mro_isa_changed_in(GvSTASH(dstr));
3875     }
3876     else if(mro_changes == 3) {
3877         HV * const stash = GvHV(dstr);
3878         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3879             mro_package_moved(
3880                 stash, old_stash,
3881                 (GV *)dstr, 0
3882             );
3883     }
3884     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3885     if (GvIO(dstr) && dtype == SVt_PVGV) {
3886         DEBUG_o(Perl_deb(aTHX_
3887                         "glob_assign_glob clearing PL_stashcache\n"));
3888         /* It's a cache. It will rebuild itself quite happily.
3889            It's a lot of effort to work out exactly which key (or keys)
3890            might be invalidated by the creation of the this file handle.
3891          */
3892         hv_clear(PL_stashcache);
3893     }
3894     return;
3895 }
3896
3897 void
3898 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3899 {
3900     SV * const sref = SvRV(sstr);
3901     SV *dref;
3902     const int intro = GvINTRO(dstr);
3903     SV **location;
3904     U8 import_flag = 0;
3905     const U32 stype = SvTYPE(sref);
3906
3907     PERL_ARGS_ASSERT_GV_SETREF;
3908
3909     if (intro) {
3910         GvINTRO_off(dstr);      /* one-shot flag */
3911         GvLINE(dstr) = CopLINE(PL_curcop);
3912         GvEGV(dstr) = MUTABLE_GV(dstr);
3913     }
3914     GvMULTI_on(dstr);
3915     switch (stype) {
3916     case SVt_PVCV:
3917         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3918         import_flag = GVf_IMPORTED_CV;
3919         goto common;
3920     case SVt_PVHV:
3921         location = (SV **) &GvHV(dstr);
3922         import_flag = GVf_IMPORTED_HV;
3923         goto common;
3924     case SVt_PVAV:
3925         location = (SV **) &GvAV(dstr);
3926         import_flag = GVf_IMPORTED_AV;
3927         goto common;
3928     case SVt_PVIO:
3929         location = (SV **) &GvIOp(dstr);
3930         goto common;
3931     case SVt_PVFM:
3932         location = (SV **) &GvFORM(dstr);
3933         goto common;
3934     default:
3935         location = &GvSV(dstr);
3936         import_flag = GVf_IMPORTED_SV;
3937     common:
3938         if (intro) {
3939             if (stype == SVt_PVCV) {
3940                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3941                 if (GvCVGEN(dstr)) {
3942                     SvREFCNT_dec(GvCV(dstr));
3943                     GvCV_set(dstr, NULL);
3944                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3945                 }
3946             }
3947             /* SAVEt_GVSLOT takes more room on the savestack and has more
3948                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
3949                leave_scope needs access to the GV so it can reset method
3950                caches.  We must use SAVEt_GVSLOT whenever the type is
3951                SVt_PVCV, even if the stash is anonymous, as the stash may
3952                gain a name somehow before leave_scope. */
3953             if (stype == SVt_PVCV) {
3954                 /* There is no save_pushptrptrptr.  Creating it for this
3955                    one call site would be overkill.  So inline the ss add
3956                    routines here. */
3957                 dSS_ADD;
3958                 SS_ADD_PTR(dstr);
3959                 SS_ADD_PTR(location);
3960                 SS_ADD_PTR(SvREFCNT_inc(*location));
3961                 SS_ADD_UV(SAVEt_GVSLOT);
3962                 SS_ADD_END(4);
3963             }
3964             else SAVEGENERICSV(*location);
3965         }
3966         dref = *location;
3967         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3968             CV* const cv = MUTABLE_CV(*location);
3969             if (cv) {
3970                 if (!GvCVGEN((const GV *)dstr) &&
3971                     (CvROOT(cv) || CvXSUB(cv)) &&
3972                     /* redundant check that avoids creating the extra SV
3973                        most of the time: */
3974                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3975                     {
3976                         SV * const new_const_sv =
3977                             CvCONST((const CV *)sref)
3978                                  ? cv_const_sv((const CV *)sref)
3979                                  : NULL;
3980                         HV * const stash = GvSTASH((const GV *)dstr);
3981                         report_redefined_cv(
3982                            sv_2mortal(
3983                              stash
3984                                ? Perl_newSVpvf(aTHX_
3985                                     "%" HEKf "::%" HEKf,
3986                                     HEKfARG(HvNAME_HEK(stash)),
3987                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3988                                : Perl_newSVpvf(aTHX_
3989                                     "%" HEKf,
3990                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
3991                            ),
3992                            cv,
3993                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
3994                         );
3995                     }
3996                 if (!intro)
3997                     cv_ckproto_len_flags(cv, (const GV *)dstr,
3998                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
3999                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4000                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4001             }
4002             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4003             GvASSUMECV_on(dstr);
4004             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4005                 if (intro && GvREFCNT(dstr) > 1) {
4006                     /* temporary remove extra savestack's ref */
4007                     --GvREFCNT(dstr);
4008                     gv_method_changed(dstr);
4009                     ++GvREFCNT(dstr);
4010                 }
4011                 else gv_method_changed(dstr);
4012             }
4013         }
4014         *location = SvREFCNT_inc_simple_NN(sref);
4015         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4016             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4017             GvFLAGS(dstr) |= import_flag;
4018         }
4019
4020         if (stype == SVt_PVHV) {
4021             const char * const name = GvNAME((GV*)dstr);
4022             const STRLEN len = GvNAMELEN(dstr);
4023             if (
4024                 (
4025                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4026                 || (len == 1 && name[0] == ':')
4027                 )
4028              && (!dref || HvENAME_get(dref))
4029             ) {
4030                 mro_package_moved(
4031                     (HV *)sref, (HV *)dref,
4032                     (GV *)dstr, 0
4033                 );
4034             }
4035         }
4036         else if (
4037             stype == SVt_PVAV && sref != dref
4038          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4039          /* The stash may have been detached from the symbol table, so
4040             check its name before doing anything. */
4041          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4042         ) {
4043             MAGIC *mg;
4044             MAGIC * const omg = dref && SvSMAGICAL(dref)
4045                                  ? mg_find(dref, PERL_MAGIC_isa)
4046                                  : NULL;
4047             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4048                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4049                     AV * const ary = newAV();
4050                     av_push(ary, mg->mg_obj); /* takes the refcount */
4051                     mg->mg_obj = (SV *)ary;
4052                 }
4053                 if (omg) {
4054                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4055                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4056                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4057                         while (items--)
4058                             av_push(
4059                              (AV *)mg->mg_obj,
4060                              SvREFCNT_inc_simple_NN(*svp++)
4061                             );
4062                     }
4063                     else
4064                         av_push(
4065                          (AV *)mg->mg_obj,
4066                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4067                         );
4068                 }
4069                 else
4070                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4071             }
4072             else
4073             {
4074                 SSize_t i;
4075                 sv_magic(
4076                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4077                 );
4078                 for (i = 0; i <= AvFILL(sref); ++i) {
4079                     SV **elem = av_fetch ((AV*)sref, i, 0);
4080                     if (elem) {
4081                         sv_magic(
4082                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4083                         );
4084                     }
4085                 }
4086                 mg = mg_find(sref, PERL_MAGIC_isa);
4087             }
4088             /* Since the *ISA assignment could have affected more than
4089                one stash, don't call mro_isa_changed_in directly, but let
4090                magic_clearisa do it for us, as it already has the logic for
4091                dealing with globs vs arrays of globs. */
4092             assert(mg);
4093             Perl_magic_clearisa(aTHX_ NULL, mg);
4094         }
4095         else if (stype == SVt_PVIO) {
4096             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4097             /* It's a cache. It will rebuild itself quite happily.
4098                It's a lot of effort to work out exactly which key (or keys)
4099                might be invalidated by the creation of the this file handle.
4100             */
4101             hv_clear(PL_stashcache);
4102         }
4103         break;
4104     }
4105     if (!intro) SvREFCNT_dec(dref);
4106     if (SvTAINTED(sstr))
4107         SvTAINT(dstr);
4108     return;
4109 }
4110
4111
4112
4113
4114 #ifdef PERL_DEBUG_READONLY_COW
4115 # include <sys/mman.h>
4116
4117 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4118 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4119 # endif
4120
4121 void
4122 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4123 {
4124     struct perl_memory_debug_header * const header =
4125         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4126     const MEM_SIZE len = header->size;
4127     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4128 # ifdef PERL_TRACK_MEMPOOL
4129     if (!header->readonly) header->readonly = 1;
4130 # endif
4131     if (mprotect(header, len, PROT_READ))
4132         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4133                          header, len, errno);
4134 }
4135
4136 static void
4137 S_sv_buf_to_rw(pTHX_ SV *sv)
4138 {
4139     struct perl_memory_debug_header * const header =
4140         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4141     const MEM_SIZE len = header->size;
4142     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4143     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4144         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4145                          header, len, errno);
4146 # ifdef PERL_TRACK_MEMPOOL
4147     header->readonly = 0;
4148 # endif
4149 }
4150
4151 #else
4152 # define sv_buf_to_ro(sv)       NOOP
4153 # define sv_buf_to_rw(sv)       NOOP
4154 #endif
4155
4156 void
4157 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4158 {
4159     U32 sflags;
4160     int dtype;
4161     svtype stype;
4162     unsigned int both_type;
4163
4164     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4165
4166     if (UNLIKELY( sstr == dstr ))
4167         return;
4168
4169     if (UNLIKELY( !sstr ))
4170         sstr = &PL_sv_undef;
4171
4172     stype = SvTYPE(sstr);
4173     dtype = SvTYPE(dstr);
4174     both_type = (stype | dtype);
4175
4176     /* with these values, we can check that both SVs are NULL/IV (and not
4177      * freed) just by testing the or'ed types */
4178     STATIC_ASSERT_STMT(SVt_NULL == 0);
4179     STATIC_ASSERT_STMT(SVt_IV   == 1);
4180     if (both_type <= 1) {
4181         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4182          * special-casing */
4183         U32 sflags;
4184         U32 new_dflags;
4185         SV *old_rv = NULL;
4186
4187         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4188         if (SvREADONLY(dstr))
4189             Perl_croak_no_modify();
4190         if (SvROK(dstr)) {
4191             if (SvWEAKREF(dstr))
4192                 sv_unref_flags(dstr, 0);
4193             else
4194                 old_rv = SvRV(dstr);
4195         }
4196
4197         assert(!SvGMAGICAL(sstr));
4198         assert(!SvGMAGICAL(dstr));
4199
4200         sflags = SvFLAGS(sstr);
4201         if (sflags & (SVf_IOK|SVf_ROK)) {
4202             SET_SVANY_FOR_BODYLESS_IV(dstr);
4203             new_dflags = SVt_IV;
4204
4205             if (sflags & SVf_ROK) {
4206                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4207                 new_dflags |= SVf_ROK;
4208             }
4209             else {
4210                 /* both src and dst are <= SVt_IV, so sv_any points to the
4211                  * head; so access the head directly
4212                  */
4213                 assert(    &(sstr->sv_u.svu_iv)
4214                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4215                 assert(    &(dstr->sv_u.svu_iv)
4216                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4217                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4218                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4219             }
4220         }
4221         else {
4222             new_dflags = dtype; /* turn off everything except the type */
4223         }
4224         SvFLAGS(dstr) = new_dflags;
4225         SvREFCNT_dec(old_rv);
4226
4227         return;
4228     }
4229
4230     if (UNLIKELY(both_type == SVTYPEMASK)) {
4231         if (SvIS_FREED(dstr)) {
4232             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4233                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4234         }
4235         if (SvIS_FREED(sstr)) {
4236             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4237                        (void*)sstr, (void*)dstr);
4238         }
4239     }
4240
4241
4242
4243     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4244     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4245
4246     /* There's a lot of redundancy below but we're going for speed here */
4247
4248     switch (stype) {
4249     case SVt_NULL:
4250       undef_sstr:
4251         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4252             (void)SvOK_off(dstr);
4253             return;
4254         }
4255         break;
4256     case SVt_IV:
4257         if (SvIOK(sstr)) {
4258             switch (dtype) {
4259             case SVt_NULL:
4260                 /* For performance, we inline promoting to type SVt_IV. */
4261                 /* We're starting from SVt_NULL, so provided that define is
4262                  * actual 0, we don't have to unset any SV type flags
4263                  * to promote to SVt_IV. */
4264                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4265                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4266                 SvFLAGS(dstr) |= SVt_IV;
4267                 break;
4268             case SVt_NV:
4269             case SVt_PV:
4270                 sv_upgrade(dstr, SVt_PVIV);
4271                 break;
4272             case SVt_PVGV:
4273             case SVt_PVLV:
4274                 goto end_of_first_switch;
4275             }
4276             (void)SvIOK_only(dstr);
4277             SvIV_set(dstr,  SvIVX(sstr));
4278             if (SvIsUV(sstr))
4279                 SvIsUV_on(dstr);
4280             /* SvTAINTED can only be true if the SV has taint magic, which in
4281                turn means that the SV type is PVMG (or greater). This is the
4282                case statement for SVt_IV, so this cannot be true (whatever gcov
4283                may say).  */
4284             assert(!SvTAINTED(sstr));
4285             return;
4286         }
4287         if (!SvROK(sstr))
4288             goto undef_sstr;
4289         if (dtype < SVt_PV && dtype != SVt_IV)
4290             sv_upgrade(dstr, SVt_IV);
4291         break;
4292
4293     case SVt_NV:
4294         if (LIKELY( SvNOK(sstr) )) {
4295             switch (dtype) {
4296             case SVt_NULL:
4297             case SVt_IV:
4298                 sv_upgrade(dstr, SVt_NV);
4299                 break;
4300             case SVt_PV:
4301             case SVt_PVIV:
4302                 sv_upgrade(dstr, SVt_PVNV);
4303                 break;
4304             case SVt_PVGV:
4305             case SVt_PVLV:
4306                 goto end_of_first_switch;
4307             }
4308             SvNV_set(dstr, SvNVX(sstr));
4309             (void)SvNOK_only(dstr);
4310             /* SvTAINTED can only be true if the SV has taint magic, which in
4311                turn means that the SV type is PVMG (or greater). This is the
4312                case statement for SVt_NV, so this cannot be true (whatever gcov
4313                may say).  */
4314             assert(!SvTAINTED(sstr));
4315             return;
4316         }
4317         goto undef_sstr;
4318
4319     case SVt_PV:
4320         if (dtype < SVt_PV)
4321             sv_upgrade(dstr, SVt_PV);
4322         break;
4323     case SVt_PVIV:
4324         if (dtype < SVt_PVIV)
4325             sv_upgrade(dstr, SVt_PVIV);
4326         break;
4327     case SVt_PVNV:
4328         if (dtype < SVt_PVNV)
4329             sv_upgrade(dstr, SVt_PVNV);
4330         break;
4331     default:
4332         {
4333         const char * const type = sv_reftype(sstr,0);
4334         if (PL_op)
4335             /* diag_listed_as: Bizarre copy of %s */
4336             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4337         else
4338             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4339         }
4340         NOT_REACHED; /* NOTREACHED */
4341
4342     case SVt_REGEXP:
4343       upgregexp:
4344         if (dtype < SVt_REGEXP)
4345             sv_upgrade(dstr, SVt_REGEXP);
4346         break;
4347
4348         case SVt_INVLIST:
4349     case SVt_PVLV:
4350     case SVt_PVGV:
4351     case SVt_PVMG:
4352         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4353             mg_get(sstr);
4354             if (SvTYPE(sstr) != stype)
4355                 stype = SvTYPE(sstr);
4356         }
4357         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4358                     glob_assign_glob(dstr, sstr, dtype);
4359                     return;
4360         }
4361         if (stype == SVt_PVLV)
4362         {
4363             if (isREGEXP(sstr)) goto upgregexp;
4364             SvUPGRADE(dstr, SVt_PVNV);
4365         }
4366         else
4367             SvUPGRADE(dstr, (svtype)stype);
4368     }
4369  end_of_first_switch:
4370
4371     /* dstr may have been upgraded.  */
4372     dtype = SvTYPE(dstr);
4373     sflags = SvFLAGS(sstr);
4374
4375     if (UNLIKELY( dtype == SVt_PVCV )) {
4376         /* Assigning to a subroutine sets the prototype.  */
4377         if (SvOK(sstr)) {
4378             STRLEN len;
4379             const char *const ptr = SvPV_const(sstr, len);
4380
4381             SvGROW(dstr, len + 1);
4382             Copy(ptr, SvPVX(dstr), len + 1, char);
4383             SvCUR_set(dstr, len);
4384             SvPOK_only(dstr);
4385             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4386             CvAUTOLOAD_off(dstr);
4387         } else {
4388             SvOK_off(dstr);
4389         }
4390     }
4391     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4392              || dtype == SVt_PVFM))
4393     {
4394         const char * const type = sv_reftype(dstr,0);
4395         if (PL_op)
4396             /* diag_listed_as: Cannot copy to %s */
4397             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4398         else
4399             Perl_croak(aTHX_ "Cannot copy to %s", type);
4400     } else if (sflags & SVf_ROK) {
4401         if (isGV_with_GP(dstr)
4402             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4403             sstr = SvRV(sstr);
4404             if (sstr == dstr) {
4405                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4406                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4407                 {
4408                     GvIMPORTED_on(dstr);
4409                 }
4410                 GvMULTI_on(dstr);
4411                 return;
4412             }
4413             glob_assign_glob(dstr, sstr, dtype);
4414             return;
4415         }
4416
4417         if (dtype >= SVt_PV) {
4418             if (isGV_with_GP(dstr)) {
4419                 gv_setref(dstr, sstr);
4420                 return;
4421             }
4422             if (SvPVX_const(dstr)) {
4423                 SvPV_free(dstr);
4424                 SvLEN_set(dstr, 0);
4425                 SvCUR_set(dstr, 0);
4426             }
4427         }
4428         (void)SvOK_off(dstr);
4429         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4430         SvFLAGS(dstr) |= sflags & SVf_ROK;
4431         assert(!(sflags & SVp_NOK));
4432         assert(!(sflags & SVp_IOK));
4433         assert(!(sflags & SVf_NOK));
4434         assert(!(sflags & SVf_IOK));
4435     }
4436     else if (isGV_with_GP(dstr)) {
4437         if (!(sflags & SVf_OK)) {
4438             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4439                            "Undefined value assigned to typeglob");
4440         }
4441         else {
4442             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4443             if (dstr != (const SV *)gv) {
4444                 const char * const name = GvNAME((const GV *)dstr);
4445                 const STRLEN len = GvNAMELEN(dstr);
4446                 HV *old_stash = NULL;
4447                 bool reset_isa = FALSE;
4448                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4449                  || (len == 1 && name[0] == ':')) {
4450                     /* Set aside the old stash, so we can reset isa caches
4451                        on its subclasses. */
4452                     if((old_stash = GvHV(dstr))) {
4453                         /* Make sure we do not lose it early. */
4454                         SvREFCNT_inc_simple_void_NN(
4455                          sv_2mortal((SV *)old_stash)
4456                         );
4457                     }
4458                     reset_isa = TRUE;
4459                 }
4460
4461                 if (GvGP(dstr)) {
4462                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4463                     gp_free(MUTABLE_GV(dstr));
4464                 }
4465                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4466
4467                 if (reset_isa) {
4468                     HV * const stash = GvHV(dstr);
4469                     if(
4470                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4471                     )
4472                         mro_package_moved(
4473                          stash, old_stash,
4474                          (GV *)dstr, 0
4475                         );
4476                 }
4477             }
4478         }
4479     }
4480     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4481           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4482         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4483     }
4484     else if (sflags & SVp_POK) {
4485         const STRLEN cur = SvCUR(sstr);
4486         const STRLEN len = SvLEN(sstr);
4487
4488         /*
4489          * We have three basic ways to copy the string:
4490          *
4491          *  1. Swipe
4492          *  2. Copy-on-write
4493          *  3. Actual copy
4494          * 
4495          * Which we choose is based on various factors.  The following
4496          * things are listed in order of speed, fastest to slowest:
4497          *  - Swipe
4498          *  - Copying a short string
4499          *  - Copy-on-write bookkeeping
4500          *  - malloc
4501          *  - Copying a long string
4502          * 
4503          * We swipe the string (steal the string buffer) if the SV on the
4504          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4505          * big win on long strings.  It should be a win on short strings if
4506          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4507          * slow things down, as SvPVX_const(sstr) would have been freed
4508          * soon anyway.
4509          * 
4510          * We also steal the buffer from a PADTMP (operator target) if it
4511          * is â€˜long enough’.  For short strings, a swipe does not help
4512          * here, as it causes more malloc calls the next time the target
4513          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4514          * be allocated it is still not worth swiping PADTMPs for short
4515          * strings, as the savings here are small.
4516          * 
4517          * If swiping is not an option, then we see whether it is
4518          * worth using copy-on-write.  If the lhs already has a buf-
4519          * fer big enough and the string is short, we skip it and fall back
4520          * to method 3, since memcpy is faster for short strings than the
4521          * later bookkeeping overhead that copy-on-write entails.
4522
4523          * If the rhs is not a copy-on-write string yet, then we also
4524          * consider whether the buffer is too large relative to the string
4525          * it holds.  Some operations such as readline allocate a large
4526          * buffer in the expectation of reusing it.  But turning such into
4527          * a COW buffer is counter-productive because it increases memory
4528          * usage by making readline allocate a new large buffer the sec-
4529          * ond time round.  So, if the buffer is too large, again, we use
4530          * method 3 (copy).
4531          * 
4532          * Finally, if there is no buffer on the left, or the buffer is too 
4533          * small, then we use copy-on-write and make both SVs share the
4534          * string buffer.
4535          *
4536          */
4537
4538         /* Whichever path we take through the next code, we want this true,
4539            and doing it now facilitates the COW check.  */
4540         (void)SvPOK_only(dstr);
4541
4542         if (
4543                  (              /* Either ... */
4544                                 /* slated for free anyway (and not COW)? */
4545                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4546                                 /* or a swipable TARG */
4547                  || ((sflags &
4548                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4549                        == SVs_PADTMP
4550                                 /* whose buffer is worth stealing */
4551                      && CHECK_COWBUF_THRESHOLD(cur,len)
4552                     )
4553                  ) &&
4554                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4555                  (!(flags & SV_NOSTEAL)) &&
4556                                         /* and we're allowed to steal temps */
4557                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4558                  len)             /* and really is a string */
4559         {       /* Passes the swipe test.  */
4560             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4561                 SvPV_free(dstr);
4562             SvPV_set(dstr, SvPVX_mutable(sstr));
4563             SvLEN_set(dstr, SvLEN(sstr));
4564             SvCUR_set(dstr, SvCUR(sstr));
4565
4566             SvTEMP_off(dstr);
4567             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4568             SvPV_set(sstr, NULL);
4569             SvLEN_set(sstr, 0);
4570             SvCUR_set(sstr, 0);
4571             SvTEMP_off(sstr);
4572         }
4573         else if (flags & SV_COW_SHARED_HASH_KEYS
4574               &&
4575 #ifdef PERL_COPY_ON_WRITE
4576                  (sflags & SVf_IsCOW
4577                    ? (!len ||
4578                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4579                           /* If this is a regular (non-hek) COW, only so
4580                              many COW "copies" are possible. */
4581                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4582                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4583                      && !(SvFLAGS(dstr) & SVf_BREAK)
4584                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4585                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4586                     ))
4587 #else
4588                  sflags & SVf_IsCOW
4589               && !(SvFLAGS(dstr) & SVf_BREAK)
4590 #endif
4591             ) {
4592             /* Either it's a shared hash key, or it's suitable for
4593                copy-on-write.  */
4594 #ifdef DEBUGGING
4595             if (DEBUG_C_TEST) {
4596                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4597                 sv_dump(sstr);
4598                 sv_dump(dstr);
4599             }
4600 #endif
4601 #ifdef PERL_ANY_COW
4602             if (!(sflags & SVf_IsCOW)) {
4603                     SvIsCOW_on(sstr);
4604                     CowREFCNT(sstr) = 0;
4605             }
4606 #endif
4607             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4608                 SvPV_free(dstr);
4609             }
4610
4611 #ifdef PERL_ANY_COW
4612             if (len) {
4613                     if (sflags & SVf_IsCOW) {
4614                         sv_buf_to_rw(sstr);
4615                     }
4616                     CowREFCNT(sstr)++;
4617                     SvPV_set(dstr, SvPVX_mutable(sstr));
4618                     sv_buf_to_ro(sstr);
4619             } else
4620 #endif
4621             {
4622                     /* SvIsCOW_shared_hash */
4623                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4624                                           "Copy on write: Sharing hash\n"));
4625
4626                     assert (SvTYPE(dstr) >= SVt_PV);
4627                     SvPV_set(dstr,
4628                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4629             }
4630             SvLEN_set(dstr, len);
4631             SvCUR_set(dstr, cur);
4632             SvIsCOW_on(dstr);
4633         } else {
4634             /* Failed the swipe test, and we cannot do copy-on-write either.
4635                Have to copy the string.  */
4636             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4637             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4638             SvCUR_set(dstr, cur);
4639             *SvEND(dstr) = '\0';
4640         }
4641         if (sflags & SVp_NOK) {
4642             SvNV_set(dstr, SvNVX(sstr));
4643         }
4644         if (sflags & SVp_IOK) {
4645             SvIV_set(dstr, SvIVX(sstr));
4646             if (sflags & SVf_IVisUV)
4647                 SvIsUV_on(dstr);
4648         }
4649         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4650         {
4651             const MAGIC * const smg = SvVSTRING_mg(sstr);
4652             if (smg) {
4653                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4654                          smg->mg_ptr, smg->mg_len);
4655                 SvRMAGICAL_on(dstr);
4656             }
4657         }
4658     }
4659     else if (sflags & (SVp_IOK|SVp_NOK)) {
4660         (void)SvOK_off(dstr);
4661         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4662         if (sflags & SVp_IOK) {
4663             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4664             SvIV_set(dstr, SvIVX(sstr));
4665         }
4666         if (sflags & SVp_NOK) {
4667             SvNV_set(dstr, SvNVX(sstr));
4668         }
4669     }
4670     else {
4671         if (isGV_with_GP(sstr)) {
4672             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4673         }
4674         else
4675             (void)SvOK_off(dstr);
4676     }
4677     if (SvTAINTED(sstr))
4678         SvTAINT(dstr);
4679 }
4680
4681
4682 /*
4683 =for apidoc sv_set_undef
4684
4685 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4686 Doesn't handle set magic.
4687
4688 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4689 buffer, unlike C<undef $sv>.
4690
4691 Introduced in perl 5.25.12.
4692
4693 =cut
4694 */
4695
4696 void
4697 Perl_sv_set_undef(pTHX_ SV *sv)
4698 {
4699     U32 type = SvTYPE(sv);
4700
4701     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4702
4703     /* shortcut, NULL, IV, RV */
4704
4705     if (type <= SVt_IV) {
4706         assert(!SvGMAGICAL(sv));
4707         if (SvREADONLY(sv)) {
4708             /* does undeffing PL_sv_undef count as modifying a read-only
4709              * variable? Some XS code does this */
4710             if (sv == &PL_sv_undef)
4711                 return;
4712             Perl_croak_no_modify();
4713         }
4714
4715         if (SvROK(sv)) {
4716             if (SvWEAKREF(sv))
4717                 sv_unref_flags(sv, 0);
4718             else {
4719                 SV *rv = SvRV(sv);
4720                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4721                 SvREFCNT_dec_NN(rv);
4722                 return;
4723             }
4724         }
4725         SvFLAGS(sv) = type; /* quickly turn off all flags */
4726         return;
4727     }
4728
4729     if (SvIS_FREED(sv))
4730         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4731             (void *)sv);
4732
4733     SV_CHECK_THINKFIRST_COW_DROP(sv);
4734
4735     if (isGV_with_GP(sv))
4736         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4737                        "Undefined value assigned to typeglob");
4738     else
4739         SvOK_off(sv);
4740 }
4741
4742
4743
4744 /*
4745 =for apidoc sv_setsv_mg
4746
4747 Like C<sv_setsv>, but also handles 'set' magic.
4748
4749 =cut
4750 */
4751
4752 void
4753 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4754 {
4755     PERL_ARGS_ASSERT_SV_SETSV_MG;
4756
4757     sv_setsv(dstr,sstr);
4758     SvSETMAGIC(dstr);
4759 }
4760
4761 #ifdef PERL_ANY_COW
4762 #  define SVt_COW SVt_PV
4763 SV *
4764 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4765 {
4766     STRLEN cur = SvCUR(sstr);
4767     STRLEN len = SvLEN(sstr);
4768     char *new_pv;
4769 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4770     const bool already = cBOOL(SvIsCOW(sstr));
4771 #endif
4772
4773     PERL_ARGS_ASSERT_SV_SETSV_COW;
4774 #ifdef DEBUGGING
4775     if (DEBUG_C_TEST) {
4776         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4777                       (void*)sstr, (void*)dstr);
4778         sv_dump(sstr);
4779         if (dstr)
4780                     sv_dump(dstr);
4781     }
4782 #endif
4783     if (dstr) {
4784         if (SvTHINKFIRST(dstr))
4785             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4786         else if (SvPVX_const(dstr))
4787             Safefree(SvPVX_mutable(dstr));
4788     }
4789     else
4790         new_SV(dstr);
4791     SvUPGRADE(dstr, SVt_COW);
4792
4793     assert (SvPOK(sstr));
4794     assert (SvPOKp(sstr));
4795
4796     if (SvIsCOW(sstr)) {
4797
4798         if (SvLEN(sstr) == 0) {
4799             /* source is a COW shared hash key.  */
4800             DEBUG_C(PerlIO_printf(Perl_debug_log,
4801                                   "Fast copy on write: Sharing hash\n"));
4802             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4803             goto common_exit;
4804         }
4805         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4806         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4807     } else {
4808         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4809         SvUPGRADE(sstr, SVt_COW);
4810         SvIsCOW_on(sstr);
4811         DEBUG_C(PerlIO_printf(Perl_debug_log,
4812                               "Fast copy on write: Converting sstr to COW\n"));
4813         CowREFCNT(sstr) = 0;    
4814     }
4815 #  ifdef PERL_DEBUG_READONLY_COW
4816     if (already) sv_buf_to_rw(sstr);
4817 #  endif
4818     CowREFCNT(sstr)++;  
4819     new_pv = SvPVX_mutable(sstr);
4820     sv_buf_to_ro(sstr);
4821
4822   common_exit:
4823     SvPV_set(dstr, new_pv);
4824     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4825     if (SvUTF8(sstr))
4826         SvUTF8_on(dstr);
4827     SvLEN_set(dstr, len);
4828     SvCUR_set(dstr, cur);
4829 #ifdef DEBUGGING
4830     if (DEBUG_C_TEST)
4831                 sv_dump(dstr);
4832 #endif
4833     return dstr;
4834 }
4835 #endif
4836
4837 /*
4838 =for apidoc sv_setpv_bufsize
4839
4840 Sets the SV to be a string of cur bytes length, with at least
4841 len bytes available. Ensures that there is a null byte at SvEND.
4842 Returns a char * pointer to the SvPV buffer.
4843
4844 =cut
4845 */
4846
4847 char *
4848 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4849 {
4850     char *pv;
4851
4852     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4853
4854     SV_CHECK_THINKFIRST_COW_DROP(sv);
4855     SvUPGRADE(sv, SVt_PV);
4856     pv = SvGROW(sv, len + 1);
4857     SvCUR_set(sv, cur);
4858     *(SvEND(sv))= '\0';
4859     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4860
4861     SvTAINT(sv);
4862     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4863     return pv;
4864 }
4865
4866 /*
4867 =for apidoc sv_setpvn
4868
4869 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4870 The C<len> parameter indicates the number of
4871 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4872 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4873
4874 =cut
4875 */
4876
4877 void
4878 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4879 {
4880     char *dptr;
4881
4882     PERL_ARGS_ASSERT_SV_SETPVN;
4883
4884     SV_CHECK_THINKFIRST_COW_DROP(sv);
4885     if (isGV_with_GP(sv))
4886         Perl_croak_no_modify();
4887     if (!ptr) {
4888         (void)SvOK_off(sv);
4889         return;
4890     }
4891     else {
4892         /* len is STRLEN which is unsigned, need to copy to signed */
4893         const IV iv = len;
4894         if (iv < 0)
4895             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4896                        IVdf, iv);
4897     }
4898     SvUPGRADE(sv, SVt_PV);
4899
4900     dptr = SvGROW(sv, len + 1);
4901     Move(ptr,dptr,len,char);
4902     dptr[len] = '\0';
4903     SvCUR_set(sv, len);
4904     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4905     SvTAINT(sv);
4906     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4907 }
4908
4909 /*
4910 =for apidoc sv_setpvn_mg
4911
4912 Like C<sv_setpvn>, but also handles 'set' magic.
4913
4914 =cut
4915 */
4916
4917 void
4918 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4919 {
4920     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4921
4922     sv_setpvn(sv,ptr,len);
4923     SvSETMAGIC(sv);
4924 }
4925
4926 /*
4927 =for apidoc sv_setpv
4928
4929 Copies a string into an SV.  The string must be terminated with a C<NUL>
4930 character, and not contain embeded C<NUL>'s.
4931 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4932
4933 =cut
4934 */
4935
4936 void
4937 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4938 {
4939     STRLEN len;
4940
4941     PERL_ARGS_ASSERT_SV_SETPV;
4942
4943     SV_CHECK_THINKFIRST_COW_DROP(sv);
4944     if (!ptr) {
4945         (void)SvOK_off(sv);
4946         return;
4947     }
4948     len = strlen(ptr);
4949     SvUPGRADE(sv, SVt_PV);
4950
4951     SvGROW(sv, len + 1);
4952     Move(ptr,SvPVX(sv),len+1,char);
4953     SvCUR_set(sv, len);
4954     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4955     SvTAINT(sv);
4956     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4957 }
4958
4959 /*
4960 =for apidoc sv_setpv_mg
4961
4962 Like C<sv_setpv>, but also handles 'set' magic.
4963
4964 =cut
4965 */
4966
4967 void
4968 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4969 {
4970     PERL_ARGS_ASSERT_SV_SETPV_MG;
4971
4972     sv_setpv(sv,ptr);
4973     SvSETMAGIC(sv);
4974 }
4975
4976 void
4977 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4978 {
4979     PERL_ARGS_ASSERT_SV_SETHEK;
4980
4981     if (!hek) {
4982         return;
4983     }
4984
4985     if (HEK_LEN(hek) == HEf_SVKEY) {
4986         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4987         return;
4988     } else {
4989         const int flags = HEK_FLAGS(hek);
4990         if (flags & HVhek_WASUTF8) {
4991             STRLEN utf8_len = HEK_LEN(hek);
4992             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4993             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4994             SvUTF8_on(sv);
4995             return;
4996         } else if (flags & HVhek_UNSHARED) {
4997             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4998             if (HEK_UTF8(hek))
4999                 SvUTF8_on(sv);
5000             else SvUTF8_off(sv);
5001             return;
5002         }
5003         {
5004             SV_CHECK_THINKFIRST_COW_DROP(sv);
5005             SvUPGRADE(sv, SVt_PV);
5006             SvPV_free(sv);
5007             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5008             SvCUR_set(sv, HEK_LEN(hek));
5009             SvLEN_set(sv, 0);
5010             SvIsCOW_on(sv);
5011             SvPOK_on(sv);
5012             if (HEK_UTF8(hek))
5013                 SvUTF8_on(sv);
5014             else SvUTF8_off(sv);
5015             return;
5016         }
5017     }
5018 }
5019
5020
5021 /*
5022 =for apidoc sv_usepvn_flags
5023
5024 Tells an SV to use C<ptr> to find its string value.  Normally the
5025 string is stored inside the SV, but sv_usepvn allows the SV to use an
5026 outside string.  C<ptr> should point to memory that was allocated
5027 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5028 the start of a C<Newx>-ed block of memory, and not a pointer to the
5029 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5030 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5031 string length, C<len>, must be supplied.  By default this function
5032 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5033 so that pointer should not be freed or used by the programmer after
5034 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5035 that pointer (e.g. ptr + 1) be used.
5036
5037 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5038 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5039 and the realloc
5040 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5041 C<len>, and already meets the requirements for storing in C<SvPVX>).
5042
5043 =cut
5044 */
5045
5046 void
5047 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5048 {
5049     STRLEN allocate;
5050
5051     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5052
5053     SV_CHECK_THINKFIRST_COW_DROP(sv);
5054     SvUPGRADE(sv, SVt_PV);
5055     if (!ptr) {
5056         (void)SvOK_off(sv);
5057         if (flags & SV_SMAGIC)
5058             SvSETMAGIC(sv);
5059         return;
5060     }
5061     if (SvPVX_const(sv))
5062         SvPV_free(sv);
5063
5064 #ifdef DEBUGGING
5065     if (flags & SV_HAS_TRAILING_NUL)
5066         assert(ptr[len] == '\0');
5067 #endif
5068
5069     allocate = (flags & SV_HAS_TRAILING_NUL)
5070         ? len + 1 :
5071 #ifdef Perl_safesysmalloc_size
5072         len + 1;
5073 #else 
5074         PERL_STRLEN_ROUNDUP(len + 1);
5075 #endif
5076     if (flags & SV_HAS_TRAILING_NUL) {
5077         /* It's long enough - do nothing.
5078            Specifically Perl_newCONSTSUB is relying on this.  */
5079     } else {
5080 #ifdef DEBUGGING
5081         /* Force a move to shake out bugs in callers.  */
5082         char *new_ptr = (char*)safemalloc(allocate);
5083         Copy(ptr, new_ptr, len, char);
5084         PoisonFree(ptr,len,char);
5085         Safefree(ptr);
5086         ptr = new_ptr;
5087 #else
5088         ptr = (char*) saferealloc (ptr, allocate);
5089 #endif
5090     }
5091 #ifdef Perl_safesysmalloc_size
5092     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5093 #else
5094     SvLEN_set(sv, allocate);
5095 #endif
5096     SvCUR_set(sv, len);
5097     SvPV_set(sv, ptr);
5098     if (!(flags & SV_HAS_TRAILING_NUL)) {
5099         ptr[len] = '\0';
5100     }
5101     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5102     SvTAINT(sv);
5103     if (flags & SV_SMAGIC)
5104         SvSETMAGIC(sv);
5105 }
5106
5107
5108 static void
5109 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5110 {
5111     assert(SvIsCOW(sv));
5112     {
5113 #ifdef PERL_ANY_COW
5114         const char * const pvx = SvPVX_const(sv);
5115         const STRLEN len = SvLEN(sv);
5116         const STRLEN cur = SvCUR(sv);
5117
5118 #ifdef DEBUGGING
5119         if (DEBUG_C_TEST) {
5120                 PerlIO_printf(Perl_debug_log,
5121                               "Copy on write: Force normal %ld\n",
5122                               (long) flags);
5123                 sv_dump(sv);
5124         }
5125 #endif
5126         SvIsCOW_off(sv);
5127 # ifdef PERL_COPY_ON_WRITE
5128         if (len) {
5129             /* Must do this first, since the CowREFCNT uses SvPVX and
5130             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5131             the only owner left of the buffer. */
5132             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5133             {
5134                 U8 cowrefcnt = CowREFCNT(sv);
5135                 if(cowrefcnt != 0) {
5136                     cowrefcnt--;
5137                     CowREFCNT(sv) = cowrefcnt;
5138                     sv_buf_to_ro(sv);
5139                     goto copy_over;
5140                 }
5141             }
5142             /* Else we are the only owner of the buffer. */
5143         }
5144         else
5145 # endif
5146         {
5147             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5148             copy_over:
5149             SvPV_set(sv, NULL);
5150             SvCUR_set(sv, 0);
5151             SvLEN_set(sv, 0);
5152             if (flags & SV_COW_DROP_PV) {
5153                 /* OK, so we don't need to copy our buffer.  */
5154                 SvPOK_off(sv);
5155             } else {
5156                 SvGROW(sv, cur + 1);
5157                 Move(pvx,SvPVX(sv),cur,char);
5158                 SvCUR_set(sv, cur);
5159                 *SvEND(sv) = '\0';
5160             }
5161             if (len) {
5162             } else {
5163                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5164             }
5165 #ifdef DEBUGGING
5166             if (DEBUG_C_TEST)
5167                 sv_dump(sv);
5168 #endif
5169         }
5170 #else
5171             const char * const pvx = SvPVX_const(sv);
5172             const STRLEN len = SvCUR(sv);
5173             SvIsCOW_off(sv);
5174             SvPV_set(sv, NULL);
5175             SvLEN_set(sv, 0);
5176             if (flags & SV_COW_DROP_PV) {
5177                 /* OK, so we don't need to copy our buffer.  */
5178                 SvPOK_off(sv);
5179             } else {
5180                 SvGROW(sv, len + 1);
5181                 Move(pvx,SvPVX(sv),len,char);
5182                 *SvEND(sv) = '\0';
5183             }
5184             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5185 #endif
5186     }
5187 }
5188
5189
5190 /*
5191 =for apidoc sv_force_normal_flags
5192
5193 Undo various types of fakery on an SV, where fakery means
5194 "more than" a string: if the PV is a shared string, make
5195 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5196 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5197 we do the copy, and is also used locally; if this is a
5198 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5199 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5200 C<SvPOK_off> rather than making a copy.  (Used where this
5201 scalar is about to be set to some other value.)  In addition,
5202 the C<flags> parameter gets passed to C<sv_unref_flags()>
5203 when unreffing.  C<sv_force_normal> calls this function
5204 with flags set to 0.
5205
5206 This function is expected to be used to signal to perl that this SV is
5207 about to be written to, and any extra book-keeping needs to be taken care
5208 of.  Hence, it croaks on read-only values.
5209
5210 =cut
5211 */
5212
5213 void
5214 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5215 {
5216     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5217
5218     if (SvREADONLY(sv))
5219         Perl_croak_no_modify();
5220     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5221         S_sv_uncow(aTHX_ sv, flags);
5222     if (SvROK(sv))
5223         sv_unref_flags(sv, flags);
5224     else if (SvFAKE(sv) && isGV_with_GP(sv))
5225         sv_unglob(sv, flags);
5226     else if (SvFAKE(sv) && isREGEXP(sv)) {
5227         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5228            to sv_unglob. We only need it here, so inline it.  */
5229         const bool islv = SvTYPE(sv) == SVt_PVLV;
5230         const svtype new_type =
5231           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5232         SV *const temp = newSV_type(new_type);
5233         regexp *old_rx_body;
5234
5235         if (new_type == SVt_PVMG) {
5236             SvMAGIC_set(temp, SvMAGIC(sv));
5237             SvMAGIC_set(sv, NULL);
5238             SvSTASH_set(temp, SvSTASH(sv));
5239             SvSTASH_set(sv, NULL);
5240         }
5241         if (!islv)
5242             SvCUR_set(temp, SvCUR(sv));
5243         /* Remember that SvPVX is in the head, not the body. */
5244         assert(ReANY((REGEXP *)sv)->mother_re);
5245
5246         if (islv) {
5247             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5248              * whose xpvlenu_rx field points to the regex body */
5249             XPV *xpv = (XPV*)(SvANY(sv));
5250             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5251             xpv->xpv_len_u.xpvlenu_rx = NULL;
5252         }
5253         else
5254             old_rx_body = ReANY((REGEXP *)sv);
5255
5256         /* Their buffer is already owned by someone else. */
5257         if (flags & SV_COW_DROP_PV) {
5258             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5259                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5260                a union with xpvlenu_rx) */
5261             assert(!SvLEN(islv ? sv : temp));
5262             sv->sv_u.svu_pv = 0;
5263         }
5264         else {
5265             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5266             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5267             SvPOK_on(sv);
5268         }
5269
5270         /* Now swap the rest of the bodies. */
5271
5272         SvFAKE_off(sv);
5273         if (!islv) {
5274             SvFLAGS(sv) &= ~SVTYPEMASK;
5275             SvFLAGS(sv) |= new_type;
5276             SvANY(sv) = SvANY(temp);
5277         }
5278
5279         SvFLAGS(temp) &= ~(SVTYPEMASK);
5280         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5281         SvANY(temp) = old_rx_body;
5282
5283         SvREFCNT_dec_NN(temp);
5284     }
5285     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5286 }
5287
5288 /*
5289 =for apidoc sv_chop
5290
5291 Efficient removal of characters from the beginning of the string buffer.
5292 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5293 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5294 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5295 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5296
5297 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5298 refer to the same chunk of data.
5299
5300 The unfortunate similarity of this function's name to that of Perl's C<chop>
5301 operator is strictly coincidental.  This function works from the left;
5302 C<chop> works from the right.
5303
5304 =cut
5305 */
5306
5307 void
5308 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5309 {
5310     STRLEN delta;
5311     STRLEN old_delta;
5312     U8 *p;
5313 #ifdef DEBUGGING
5314     const U8 *evacp;
5315     STRLEN evacn;
5316 #endif
5317     STRLEN max_delta;
5318
5319     PERL_ARGS_ASSERT_SV_CHOP;
5320
5321     if (!ptr || !SvPOKp(sv))
5322         return;
5323     delta = ptr - SvPVX_const(sv);
5324     if (!delta) {
5325         /* Nothing to do.  */
5326         return;
5327     }
5328     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5329     if (delta > max_delta)
5330         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5331                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5332     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5333     SV_CHECK_THINKFIRST(sv);
5334     SvPOK_only_UTF8(sv);
5335
5336     if (!SvOOK(sv)) {
5337         if (!SvLEN(sv)) { /* make copy of shared string */
5338             const char *pvx = SvPVX_const(sv);
5339             const STRLEN len = SvCUR(sv);
5340             SvGROW(sv, len + 1);
5341             Move(pvx,SvPVX(sv),len,char);
5342             *SvEND(sv) = '\0';
5343         }
5344         SvOOK_on(sv);
5345         old_delta = 0;
5346     } else {
5347         SvOOK_offset(sv, old_delta);
5348     }
5349     SvLEN_set(sv, SvLEN(sv) - delta);
5350     SvCUR_set(sv, SvCUR(sv) - delta);
5351     SvPV_set(sv, SvPVX(sv) + delta);
5352
5353     p = (U8 *)SvPVX_const(sv);
5354
5355 #ifdef DEBUGGING
5356     /* how many bytes were evacuated?  we will fill them with sentinel
5357        bytes, except for the part holding the new offset of course. */
5358     evacn = delta;
5359     if (old_delta)
5360         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5361     assert(evacn);
5362     assert(evacn <= delta + old_delta);
5363     evacp = p - evacn;
5364 #endif
5365
5366     /* This sets 'delta' to the accumulated value of all deltas so far */
5367     delta += old_delta;
5368     assert(delta);
5369
5370     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5371      * the string; otherwise store a 0 byte there and store 'delta' just prior
5372      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5373      * portion of the chopped part of the string */
5374     if (delta < 0x100) {
5375         *--p = (U8) delta;
5376     } else {
5377         *--p = 0;
5378         p -= sizeof(STRLEN);
5379         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5380     }
5381
5382 #ifdef DEBUGGING
5383     /* Fill the preceding buffer with sentinals to verify that no-one is
5384        using it.  */
5385     while (p > evacp) {
5386         --p;
5387         *p = (U8)PTR2UV(p);
5388     }
5389 #endif
5390 }
5391
5392 /*
5393 =for apidoc sv_catpvn
5394
5395 Concatenates the string onto the end of the string which is in the SV.
5396 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5397 status set, then the bytes appended should be valid UTF-8.
5398 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5399
5400 =for apidoc sv_catpvn_flags
5401
5402 Concatenates the string onto the end of the string which is in the SV.  The
5403 C<len> indicates number of bytes to copy.
5404
5405 By default, the string appended is assumed to be valid UTF-8 if the SV has
5406 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5407 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5408 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5409 string appended will be upgraded to UTF-8 if necessary.
5410
5411 If C<flags> has the C<SV_SMAGIC> bit set, will
5412 C<mg_set> on C<dsv> afterwards if appropriate.
5413 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5414 in terms of this function.
5415
5416 =cut
5417 */
5418
5419 void
5420 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5421 {
5422     STRLEN dlen;
5423     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5424
5425     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5426     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5427
5428     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5429       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5430          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5431          dlen = SvCUR(dsv);
5432       }
5433       else SvGROW(dsv, dlen + slen + 3);
5434       if (sstr == dstr)
5435         sstr = SvPVX_const(dsv);
5436       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5437       SvCUR_set(dsv, SvCUR(dsv) + slen);
5438     }
5439     else {
5440         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5441         const char * const send = sstr + slen;
5442         U8 *d;
5443
5444         /* Something this code does not account for, which I think is
5445            impossible; it would require the same pv to be treated as
5446            bytes *and* utf8, which would indicate a bug elsewhere. */
5447         assert(sstr != dstr);
5448
5449         SvGROW(dsv, dlen + slen * 2 + 3);
5450         d = (U8 *)SvPVX(dsv) + dlen;
5451
5452         while (sstr < send) {
5453             append_utf8_from_native_byte(*sstr, &d);
5454             sstr++;
5455         }
5456         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5457     }
5458     *SvEND(dsv) = '\0';
5459     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5460     SvTAINT(dsv);
5461     if (flags & SV_SMAGIC)
5462         SvSETMAGIC(dsv);
5463 }
5464
5465 /*
5466 =for apidoc sv_catsv
5467
5468 Concatenates the string from SV C<ssv> onto the end of the string in SV
5469 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5470 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5471 and C<L</sv_catsv_nomg>>.
5472
5473 =for apidoc sv_catsv_flags
5474
5475 Concatenates the string from SV C<ssv> onto the end of the string in SV
5476 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5477 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5478 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5479 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5480 and C<sv_catsv_mg> are implemented in terms of this function.
5481
5482 =cut */
5483
5484 void
5485 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5486 {
5487     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5488
5489     if (ssv) {
5490         STRLEN slen;
5491         const char *spv = SvPV_flags_const(ssv, slen, flags);
5492         if (flags & SV_GMAGIC)
5493                 SvGETMAGIC(dsv);
5494         sv_catpvn_flags(dsv, spv, slen,
5495                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5496         if (flags & SV_SMAGIC)
5497                 SvSETMAGIC(dsv);
5498     }
5499 }
5500
5501 /*
5502 =for apidoc sv_catpv
5503
5504 Concatenates the C<NUL>-terminated string onto the end of the string which is
5505 in the SV.
5506 If the SV has the UTF-8 status set, then the bytes appended should be
5507 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5508 C<L</sv_catpv_mg>>.
5509
5510 =cut */
5511
5512 void
5513 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5514 {
5515     STRLEN len;
5516     STRLEN tlen;
5517     char *junk;
5518
5519     PERL_ARGS_ASSERT_SV_CATPV;
5520
5521     if (!ptr)
5522         return;
5523     junk = SvPV_force(sv, tlen);
5524     len = strlen(ptr);
5525     SvGROW(sv, tlen + len + 1);
5526     if (ptr == junk)
5527         ptr = SvPVX_const(sv);
5528     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5529     SvCUR_set(sv, SvCUR(sv) + len);
5530     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5531     SvTAINT(sv);
5532 }
5533
5534 /*
5535 =for apidoc sv_catpv_flags
5536
5537 Concatenates the C<NUL>-terminated string onto the end of the string which is
5538 in the SV.
5539 If the SV has the UTF-8 status set, then the bytes appended should
5540 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5541 on the modified SV if appropriate.
5542
5543 =cut
5544 */
5545
5546 void
5547 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5548 {
5549     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5550     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5551 }
5552
5553 /*
5554 =for apidoc sv_catpv_mg
5555
5556 Like C<sv_catpv>, but also handles 'set' magic.
5557
5558 =cut
5559 */
5560
5561 void
5562 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5563 {
5564     PERL_ARGS_ASSERT_SV_CATPV_MG;
5565
5566     sv_catpv(sv,ptr);
5567     SvSETMAGIC(sv);
5568 }
5569
5570 /*
5571 =for apidoc newSV
5572
5573 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5574 bytes of preallocated string space the SV should have.  An extra byte for a
5575 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5576 space is allocated.)  The reference count for the new SV is set to 1.
5577
5578 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5579 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5580 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5581 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5582 modules supporting older perls.
5583
5584 =cut
5585 */
5586
5587 SV *
5588 Perl_newSV(pTHX_ const STRLEN len)
5589 {
5590     SV *sv;
5591
5592     new_SV(sv);
5593     if (len) {
5594         sv_grow(sv, len + 1);
5595     }
5596     return sv;
5597 }
5598 /*
5599 =for apidoc sv_magicext
5600
5601 Adds magic to an SV, upgrading it if necessary.  Applies the
5602 supplied C<vtable> and returns a pointer to the magic added.
5603
5604 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5605 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5606 one instance of the same C<how>.
5607
5608 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5609 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5610 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5611 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5612
5613 (This is now used as a subroutine by C<sv_magic>.)
5614
5615 =cut
5616 */
5617 MAGIC * 
5618 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5619                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5620 {
5621     MAGIC* mg;
5622
5623     PERL_ARGS_ASSERT_SV_MAGICEXT;
5624
5625     SvUPGRADE(sv, SVt_PVMG);
5626     Newxz(mg, 1, MAGIC);
5627     mg->mg_moremagic = SvMAGIC(sv);
5628     SvMAGIC_set(sv, mg);
5629
5630     /* Sometimes a magic contains a reference loop, where the sv and
5631        object refer to each other.  To prevent a reference loop that
5632        would prevent such objects being freed, we look for such loops
5633        and if we find one we avoid incrementing the object refcount.
5634
5635        Note we cannot do this to avoid self-tie loops as intervening RV must
5636        have its REFCNT incremented to keep it in existence.
5637
5638     */
5639     if (!obj || obj == sv ||
5640         how == PERL_MAGIC_arylen ||
5641         how == PERL_MAGIC_regdata ||
5642         how == PERL_MAGIC_regdatum ||
5643         how == PERL_MAGIC_symtab ||
5644         (SvTYPE(obj) == SVt_PVGV &&
5645             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5646              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5647              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5648     {
5649         mg->mg_obj = obj;
5650     }
5651     else {
5652         mg->mg_obj = SvREFCNT_inc_simple(obj);
5653         mg->mg_flags |= MGf_REFCOUNTED;
5654     }
5655
5656     /* Normal self-ties simply pass a null object, and instead of
5657        using mg_obj directly, use the SvTIED_obj macro to produce a
5658        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5659        with an RV obj pointing to the glob containing the PVIO.  In
5660        this case, to avoid a reference loop, we need to weaken the
5661        reference.
5662     */
5663
5664     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5665         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5666     {
5667       sv_rvweaken(obj);
5668     }
5669
5670     mg->mg_type = how;
5671     mg->mg_len = namlen;
5672     if (name) {
5673         if (namlen > 0)
5674             mg->mg_ptr = savepvn(name, namlen);
5675         else if (namlen == HEf_SVKEY) {
5676             /* Yes, this is casting away const. This is only for the case of
5677                HEf_SVKEY. I think we need to document this aberation of the
5678                constness of the API, rather than making name non-const, as
5679                that change propagating outwards a long way.  */
5680             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5681         } else
5682             mg->mg_ptr = (char *) name;
5683     }
5684     mg->mg_virtual = (MGVTBL *) vtable;
5685
5686     mg_magical(sv);
5687     return mg;
5688 }
5689
5690 MAGIC *
5691 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5692 {
5693     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5694     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5695         /* This sv is only a delegate.  //g magic must be attached to
5696            its target. */
5697         vivify_defelem(sv);
5698         sv = LvTARG(sv);
5699     }
5700     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5701                        &PL_vtbl_mglob, 0, 0);
5702 }
5703
5704 /*
5705 =for apidoc sv_magic
5706
5707 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5708 necessary, then adds a new magic item of type C<how> to the head of the
5709 magic list.
5710
5711 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5712 handling of the C<name> and C<namlen> arguments.
5713
5714 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5715 to add more than one instance of the same C<how>.
5716
5717 =cut
5718 */
5719
5720 void
5721 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5722              const char *const name, const I32 namlen)
5723 {
5724     const MGVTBL *vtable;
5725     MAGIC* mg;
5726     unsigned int flags;
5727     unsigned int vtable_index;
5728
5729     PERL_ARGS_ASSERT_SV_MAGIC;
5730
5731     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5732         || ((flags = PL_magic_data[how]),
5733             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5734             > magic_vtable_max))
5735         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5736
5737     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5738        Useful for attaching extension internal data to perl vars.
5739        Note that multiple extensions may clash if magical scalars
5740        etc holding private data from one are passed to another. */
5741
5742     vtable = (vtable_index == magic_vtable_max)
5743         ? NULL : PL_magic_vtables + vtable_index;
5744
5745     if (SvREADONLY(sv)) {
5746         if (
5747             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5748            )
5749         {
5750             Perl_croak_no_modify();
5751         }
5752     }
5753     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5754         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5755             /* sv_magic() refuses to add a magic of the same 'how' as an
5756                existing one
5757              */
5758             if (how == PERL_MAGIC_taint)
5759                 mg->mg_len |= 1;
5760             return;
5761         }
5762     }
5763
5764     /* Force pos to be stored as characters, not bytes. */
5765     if (SvMAGICAL(sv) && DO_UTF8(sv)
5766       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5767       && mg->mg_len != -1
5768       && mg->mg_flags & MGf_BYTES) {
5769         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5770                                                SV_CONST_RETURN);
5771         mg->mg_flags &= ~MGf_BYTES;
5772     }
5773
5774     /* Rest of work is done else where */
5775     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5776
5777     switch (how) {
5778     case PERL_MAGIC_taint:
5779         mg->mg_len = 1;
5780         break;
5781     case PERL_MAGIC_ext:
5782     case PERL_MAGIC_dbfile:
5783         SvRMAGICAL_on(sv);
5784         break;
5785     }
5786 }
5787
5788 static int
5789 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5790 {
5791     MAGIC* mg;
5792     MAGIC** mgp;
5793
5794     assert(flags <= 1);
5795
5796     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5797         return 0;
5798     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5799     for (mg = *mgp; mg; mg = *mgp) {
5800         const MGVTBL* const virt = mg->mg_virtual;
5801         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5802             *mgp = mg->mg_moremagic;
5803             if (virt && virt->svt_free)
5804                 virt->svt_free(aTHX_ sv, mg);
5805             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5806                 if (mg->mg_len > 0)
5807                     Safefree(mg->mg_ptr);
5808                 else if (mg->mg_len == HEf_SVKEY)
5809                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5810                 else if (mg->mg_type == PERL_MAGIC_utf8)
5811                     Safefree(mg->mg_ptr);
5812             }
5813             if (mg->mg_flags & MGf_REFCOUNTED)
5814                 SvREFCNT_dec(mg->mg_obj);
5815             Safefree(mg);
5816         }
5817         else
5818             mgp = &mg->mg_moremagic;
5819     }
5820     if (SvMAGIC(sv)) {
5821         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5822             mg_magical(sv);     /*    else fix the flags now */
5823     }
5824     else
5825         SvMAGICAL_off(sv);
5826
5827     return 0;
5828 }
5829
5830 /*
5831 =for apidoc sv_unmagic
5832
5833 Removes all magic of type C<type> from an SV.
5834
5835 =cut
5836 */
5837
5838 int
5839 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5840 {
5841     PERL_ARGS_ASSERT_SV_UNMAGIC;
5842     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5843 }
5844
5845 /*
5846 =for apidoc sv_unmagicext
5847
5848 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5849
5850 =cut
5851 */
5852
5853 int
5854 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5855 {
5856     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5857     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5858 }
5859
5860 /*
5861 =for apidoc sv_rvweaken
5862
5863 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5864 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5865 push a back-reference to this RV onto the array of backreferences
5866 associated with that magic.  If the RV is magical, set magic will be
5867 called after the RV is cleared.  Silently ignores C<undef> and warns
5868 on already-weak references.
5869
5870 =cut
5871 */
5872
5873 SV *
5874 Perl_sv_rvweaken(pTHX_ SV *const sv)
5875 {
5876     SV *tsv;
5877
5878     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5879
5880     if (!SvOK(sv))  /* let undefs pass */
5881         return sv;
5882     if (!SvROK(sv))
5883         Perl_croak(aTHX_ "Can't weaken a nonreference");
5884     else if (SvWEAKREF(sv)) {
5885         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5886         return sv;
5887     }
5888     else if (SvREADONLY(sv)) croak_no_modify();
5889     tsv = SvRV(sv);
5890     Perl_sv_add_backref(aTHX_ tsv, sv);
5891     SvWEAKREF_on(sv);
5892     SvREFCNT_dec_NN(tsv);
5893     return sv;
5894 }
5895
5896 /*
5897 =for apidoc sv_rvunweaken
5898
5899 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5900 the backreference to this RV from the array of backreferences
5901 associated with the target SV, increment the refcount of the target.
5902 Silently ignores C<undef> and warns on non-weak references.
5903
5904 =cut
5905 */
5906
5907 SV *
5908 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5909 {
5910     SV *tsv;
5911
5912     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5913
5914     if (!SvOK(sv)) /* let undefs pass */
5915         return sv;
5916     if (!SvROK(sv))
5917         Perl_croak(aTHX_ "Can't unweaken a nonreference");
5918     else if (!SvWEAKREF(sv)) {
5919         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
5920         return sv;
5921     }
5922     else if (SvREADONLY(sv)) croak_no_modify();
5923
5924     tsv = SvRV(sv);
5925     SvWEAKREF_off(sv);
5926     SvROK_on(sv);
5927     SvREFCNT_inc_NN(tsv);
5928     Perl_sv_del_backref(aTHX_ tsv, sv);
5929     return sv;
5930 }
5931
5932 /*
5933 =for apidoc sv_get_backrefs
5934
5935 If C<sv> is the target of a weak reference then it returns the back
5936 references structure associated with the sv; otherwise return C<NULL>.
5937
5938 When returning a non-null result the type of the return is relevant. If it
5939 is an AV then the elements of the AV are the weak reference RVs which
5940 point at this item. If it is any other type then the item itself is the
5941 weak reference.
5942
5943 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5944 C<Perl_sv_kill_backrefs()>
5945
5946 =cut
5947 */
5948
5949 SV *
5950 Perl_sv_get_backrefs(SV *const sv)
5951 {
5952     SV *backrefs= NULL;
5953
5954     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5955
5956     /* find slot to store array or singleton backref */
5957
5958     if (SvTYPE(sv) == SVt_PVHV) {
5959         if (SvOOK(sv)) {
5960             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5961             backrefs = (SV *)iter->xhv_backreferences;
5962         }
5963     } else if (SvMAGICAL(sv)) {
5964         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5965         if (mg)
5966             backrefs = mg->mg_obj;
5967     }
5968     return backrefs;
5969 }
5970
5971 /* Give tsv backref magic if it hasn't already got it, then push a
5972  * back-reference to sv onto the array associated with the backref magic.
5973  *
5974  * As an optimisation, if there's only one backref and it's not an AV,
5975  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5976  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5977  * active.)
5978  */
5979
5980 /* A discussion about the backreferences array and its refcount:
5981  *
5982  * The AV holding the backreferences is pointed to either as the mg_obj of
5983  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5984  * xhv_backreferences field. The array is created with a refcount
5985  * of 2. This means that if during global destruction the array gets
5986  * picked on before its parent to have its refcount decremented by the
5987  * random zapper, it won't actually be freed, meaning it's still there for
5988  * when its parent gets freed.
5989  *
5990  * When the parent SV is freed, the extra ref is killed by
5991  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5992  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5993  *
5994  * When a single backref SV is stored directly, it is not reference
5995  * counted.
5996  */
5997
5998 void
5999 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6000 {
6001     SV **svp;
6002     AV *av = NULL;
6003     MAGIC *mg = NULL;
6004
6005     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6006
6007     /* find slot to store array or singleton backref */
6008
6009     if (SvTYPE(tsv) == SVt_PVHV) {
6010         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6011     } else {
6012         if (SvMAGICAL(tsv))
6013             mg = mg_find(tsv, PERL_MAGIC_backref);
6014         if (!mg)
6015             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6016         svp = &(mg->mg_obj);
6017     }
6018
6019     /* create or retrieve the array */
6020
6021     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6022         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6023     ) {
6024         /* create array */
6025         if (mg)
6026             mg->mg_flags |= MGf_REFCOUNTED;
6027         av = newAV();
6028         AvREAL_off(av);
6029         SvREFCNT_inc_simple_void_NN(av);
6030         /* av now has a refcnt of 2; see discussion above */
6031         av_extend(av, *svp ? 2 : 1);
6032         if (*svp) {
6033             /* move single existing backref to the array */
6034             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6035         }
6036         *svp = (SV*)av;
6037     }
6038     else {
6039         av = MUTABLE_AV(*svp);
6040         if (!av) {
6041             /* optimisation: store single backref directly in HvAUX or mg_obj */
6042             *svp = sv;
6043             return;
6044         }
6045         assert(SvTYPE(av) == SVt_PVAV);
6046         if (AvFILLp(av) >= AvMAX(av)) {
6047             av_extend(av, AvFILLp(av)+1);
6048         }
6049     }
6050     /* push new backref */
6051     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6052 }
6053
6054 /* delete a back-reference to ourselves from the backref magic associated
6055  * with the SV we point to.
6056  */
6057
6058 void
6059 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6060 {
6061     SV **svp = NULL;
6062
6063     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6064
6065     if (SvTYPE(tsv) == SVt_PVHV) {
6066         if (SvOOK(tsv))
6067             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6068     }
6069     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6070         /* It's possible for the the last (strong) reference to tsv to have
6071            become freed *before* the last thing holding a weak reference.
6072            If both survive longer than the backreferences array, then when
6073            the referent's reference count drops to 0 and it is freed, it's
6074            not able to chase the backreferences, so they aren't NULLed.
6075
6076            For example, a CV holds a weak reference to its stash. If both the
6077            CV and the stash survive longer than the backreferences array,
6078            and the CV gets picked for the SvBREAK() treatment first,
6079            *and* it turns out that the stash is only being kept alive because
6080            of an our variable in the pad of the CV, then midway during CV
6081            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6082            It ends up pointing to the freed HV. Hence it's chased in here, and
6083            if this block wasn't here, it would hit the !svp panic just below.
6084
6085            I don't believe that "better" destruction ordering is going to help
6086            here - during global destruction there's always going to be the
6087            chance that something goes out of order. We've tried to make it
6088            foolproof before, and it only resulted in evolutionary pressure on
6089            fools. Which made us look foolish for our hubris. :-(
6090         */
6091         return;
6092     }
6093     else {
6094         MAGIC *const mg
6095             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6096         svp =  mg ? &(mg->mg_obj) : NULL;
6097     }
6098
6099     if (!svp)
6100         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6101     if (!*svp) {
6102         /* It's possible that sv is being freed recursively part way through the
6103            freeing of tsv. If this happens, the backreferences array of tsv has
6104            already been freed, and so svp will be NULL. If this is the case,
6105            we should not panic. Instead, nothing needs doing, so return.  */
6106         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6107             return;
6108         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6109                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6110     }
6111
6112     if (SvTYPE(*svp) == SVt_PVAV) {
6113 #ifdef DEBUGGING
6114         int count = 1;
6115 #endif
6116         AV * const av = (AV*)*svp;
6117         SSize_t fill;
6118         assert(!SvIS_FREED(av));
6119         fill = AvFILLp(av);
6120         assert(fill > -1);
6121         svp = AvARRAY(av);
6122         /* for an SV with N weak references to it, if all those
6123          * weak refs are deleted, then sv_del_backref will be called
6124          * N times and O(N^2) compares will be done within the backref
6125          * array. To ameliorate this potential slowness, we:
6126          * 1) make sure this code is as tight as possible;
6127          * 2) when looking for SV, look for it at both the head and tail of the
6128          *    array first before searching the rest, since some create/destroy
6129          *    patterns will cause the backrefs to be freed in order.
6130          */
6131         if (*svp == sv) {
6132             AvARRAY(av)++;
6133             AvMAX(av)--;
6134         }
6135         else {
6136             SV **p = &svp[fill];
6137             SV *const topsv = *p;
6138             if (topsv != sv) {
6139 #ifdef DEBUGGING
6140                 count = 0;
6141 #endif
6142                 while (--p > svp) {
6143                     if (*p == sv) {
6144                         /* We weren't the last entry.
6145                            An unordered list has this property that you
6146                            can take the last element off the end to fill
6147                            the hole, and it's still an unordered list :-)
6148                         */
6149                         *p = topsv;
6150 #ifdef DEBUGGING
6151                         count++;
6152 #else
6153                         break; /* should only be one */
6154 #endif
6155                     }
6156                 }
6157             }
6158         }
6159         assert(count ==1);
6160         AvFILLp(av) = fill-1;
6161     }
6162     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6163         /* freed AV; skip */
6164     }
6165     else {
6166         /* optimisation: only a single backref, stored directly */
6167         if (*svp != sv)
6168             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6169                        (void*)*svp, (void*)sv);
6170         *svp = NULL;
6171     }
6172
6173 }
6174
6175 void
6176 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6177 {
6178     SV **svp;
6179     SV **last;
6180     bool is_array;
6181
6182     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6183
6184     if (!av)
6185         return;
6186
6187     /* after multiple passes through Perl_sv_clean_all() for a thingy
6188      * that has badly leaked, the backref array may have gotten freed,
6189      * since we only protect it against 1 round of cleanup */
6190     if (SvIS_FREED(av)) {
6191         if (PL_in_clean_all) /* All is fair */
6192             return;
6193         Perl_croak(aTHX_
6194                    "panic: magic_killbackrefs (freed backref AV/SV)");
6195     }
6196
6197
6198     is_array = (SvTYPE(av) == SVt_PVAV);
6199     if (is_array) {
6200         assert(!SvIS_FREED(av));
6201         svp = AvARRAY(av);
6202         if (svp)
6203             last = svp + AvFILLp(av);
6204     }
6205     else {
6206         /* optimisation: only a single backref, stored directly */
6207         svp = (SV**)&av;
6208         last = svp;
6209     }
6210
6211     if (svp) {
6212         while (svp <= last) {
6213             if (*svp) {
6214                 SV *const referrer = *svp;
6215                 if (SvWEAKREF(referrer)) {
6216                     /* XXX Should we check that it hasn't changed? */
6217                     assert(SvROK(referrer));
6218                     SvRV_set(referrer, 0);
6219                     SvOK_off(referrer);
6220                     SvWEAKREF_off(referrer);
6221                     SvSETMAGIC(referrer);
6222                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6223                            SvTYPE(referrer) == SVt_PVLV) {
6224                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6225                     /* You lookin' at me?  */
6226                     assert(GvSTASH(referrer));
6227                     assert(GvSTASH(referrer) == (const HV *)sv);
6228                     GvSTASH(referrer) = 0;
6229                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6230                            SvTYPE(referrer) == SVt_PVFM) {
6231                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6232                         /* You lookin' at me?  */
6233                         assert(CvSTASH(referrer));
6234                         assert(CvSTASH(referrer) == (const HV *)sv);
6235                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6236                     }
6237                     else {
6238                         assert(SvTYPE(sv) == SVt_PVGV);
6239                         /* You lookin' at me?  */
6240                         assert(CvGV(referrer));
6241                         assert(CvGV(referrer) == (const GV *)sv);
6242                         anonymise_cv_maybe(MUTABLE_GV(sv),
6243                                                 MUTABLE_CV(referrer));
6244                     }
6245
6246                 } else {
6247                     Perl_croak(aTHX_
6248                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6249                                (UV)SvFLAGS(referrer));
6250                 }
6251
6252                 if (is_array)
6253                     *svp = NULL;
6254             }
6255             svp++;
6256         }
6257     }
6258     if (is_array) {
6259         AvFILLp(av) = -1;
6260         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6261     }
6262     return;
6263 }
6264
6265 /*
6266 =for apidoc sv_insert
6267
6268 Inserts a string at the specified offset/length within the SV.  Similar to
6269 the Perl C<substr()> function.  Handles get magic.
6270
6271 =for apidoc sv_insert_flags
6272
6273 Same as C<sv_insert>, but the extra C<flags> are passed to the
6274 C<SvPV_force_flags> that applies to C<bigstr>.
6275
6276 =cut
6277 */
6278
6279 void
6280 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6281 {
6282     char *big;
6283     char *mid;
6284     char *midend;
6285     char *bigend;
6286     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6287     STRLEN curlen;
6288
6289     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6290
6291     SvPV_force_flags(bigstr, curlen, flags);
6292     (void)SvPOK_only_UTF8(bigstr);
6293
6294     if (little >= SvPVX(bigstr) &&
6295         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6296         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6297            or little...little+littlelen might overlap offset...offset+len we make a copy
6298         */
6299         little = savepvn(little, littlelen);
6300         SAVEFREEPV(little);
6301     }
6302
6303     if (offset + len > curlen) {
6304         SvGROW(bigstr, offset+len+1);
6305         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6306         SvCUR_set(bigstr, offset+len);
6307     }
6308
6309     SvTAINT(bigstr);
6310     i = littlelen - len;
6311     if (i > 0) {                        /* string might grow */
6312         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6313         mid = big + offset + len;
6314         midend = bigend = big + SvCUR(bigstr);
6315         bigend += i;
6316         *bigend = '\0';
6317         while (midend > mid)            /* shove everything down */
6318             *--bigend = *--midend;
6319         Move(little,big+offset,littlelen,char);
6320         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6321         SvSETMAGIC(bigstr);
6322         return;
6323     }
6324     else if (i == 0) {
6325         Move(little,SvPVX(bigstr)+offset,len,char);
6326         SvSETMAGIC(bigstr);
6327         return;
6328     }
6329
6330     big = SvPVX(bigstr);
6331     mid = big + offset;
6332     midend = mid + len;
6333     bigend = big + SvCUR(bigstr);
6334
6335     if (midend > bigend)
6336         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6337                    midend, bigend);
6338
6339     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6340         if (littlelen) {
6341             Move(little, mid, littlelen,char);
6342             mid += littlelen;
6343         }
6344         i = bigend - midend;
6345         if (i > 0) {
6346             Move(midend, mid, i,char);
6347             mid += i;
6348         }
6349         *mid = '\0';
6350         SvCUR_set(bigstr, mid - big);
6351     }
6352     else if ((i = mid - big)) { /* faster from front */
6353         midend -= littlelen;
6354         mid = midend;
6355         Move(big, midend - i, i, char);
6356         sv_chop(bigstr,midend-i);
6357         if (littlelen)
6358             Move(little, mid, littlelen,char);
6359     }
6360     else if (littlelen) {
6361         midend -= littlelen;
6362         sv_chop(bigstr,midend);
6363         Move(little,midend,littlelen,char);
6364     }
6365     else {
6366         sv_chop(bigstr,midend);
6367     }
6368     SvSETMAGIC(bigstr);
6369 }
6370
6371 /*
6372 =for apidoc sv_replace
6373
6374 Make the first argument a copy of the second, then delete the original.
6375 The target SV physically takes over ownership of the body of the source SV
6376 and inherits its flags; however, the target keeps any magic it owns,
6377 and any magic in the source is discarded.
6378 Note that this is a rather specialist SV copying operation; most of the
6379 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6380
6381 =cut
6382 */
6383
6384 void
6385 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6386 {
6387     const U32 refcnt = SvREFCNT(sv);
6388
6389     PERL_ARGS_ASSERT_SV_REPLACE;
6390
6391     SV_CHECK_THINKFIRST_COW_DROP(sv);
6392     if (SvREFCNT(nsv) != 1) {
6393         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6394                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6395     }
6396     if (SvMAGICAL(sv)) {
6397         if (SvMAGICAL(nsv))
6398             mg_free(nsv);
6399         else
6400             sv_upgrade(nsv, SVt_PVMG);
6401         SvMAGIC_set(nsv, SvMAGIC(sv));
6402         SvFLAGS(nsv) |= SvMAGICAL(sv);
6403         SvMAGICAL_off(sv);
6404         SvMAGIC_set(sv, NULL);
6405     }
6406     SvREFCNT(sv) = 0;
6407     sv_clear(sv);
6408     assert(!SvREFCNT(sv));
6409 #ifdef DEBUG_LEAKING_SCALARS
6410     sv->sv_flags  = nsv->sv_flags;
6411     sv->sv_any    = nsv->sv_any;
6412     sv->sv_refcnt = nsv->sv_refcnt;
6413     sv->sv_u      = nsv->sv_u;
6414 #else
6415     StructCopy(nsv,sv,SV);
6416 #endif
6417     if(SvTYPE(sv) == SVt_IV) {
6418         SET_SVANY_FOR_BODYLESS_IV(sv);
6419     }
6420         
6421
6422     SvREFCNT(sv) = refcnt;
6423     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6424     SvREFCNT(nsv) = 0;
6425     del_SV(nsv);
6426 }
6427
6428 /* We're about to free a GV which has a CV that refers back to us.
6429  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6430  * field) */
6431
6432 STATIC void
6433 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6434 {
6435     SV *gvname;
6436     GV *anongv;
6437
6438     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6439
6440     /* be assertive! */
6441     assert(SvREFCNT(gv) == 0);
6442     assert(isGV(gv) && isGV_with_GP(gv));
6443     assert(GvGP(gv));
6444     assert(!CvANON(cv));
6445     assert(CvGV(cv) == gv);
6446     assert(!CvNAMED(cv));
6447
6448     /* will the CV shortly be freed by gp_free() ? */
6449     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6450         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6451         return;
6452     }
6453
6454     /* if not, anonymise: */
6455     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6456                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6457                     : newSVpvn_flags( "__ANON__", 8, 0 );
6458     sv_catpvs(gvname, "::__ANON__");
6459     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6460     SvREFCNT_dec_NN(gvname);
6461
6462     CvANON_on(cv);
6463     CvCVGV_RC_on(cv);
6464     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6465 }
6466
6467
6468 /*
6469 =for apidoc sv_clear
6470
6471 Clear an SV: call any destructors, free up any memory used by the body,
6472 and free the body itself.  The SV's head is I<not> freed, although
6473 its type is set to all 1's so that it won't inadvertently be assumed
6474 to be live during global destruction etc.
6475 This function should only be called when C<REFCNT> is zero.  Most of the time
6476 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6477 instead.
6478
6479 =cut
6480 */
6481
6482 void
6483 Perl_sv_clear(pTHX_ SV *const orig_sv)
6484 {
6485     dVAR;
6486     HV *stash;
6487     U32 type;
6488     const struct body_details *sv_type_details;
6489     SV* iter_sv = NULL;
6490     SV* next_sv = NULL;
6491     SV *sv = orig_sv;
6492     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6493                               Not strictly necessary */
6494
6495     PERL_ARGS_ASSERT_SV_CLEAR;
6496
6497     /* within this loop, sv is the SV currently being freed, and
6498      * iter_sv is the most recent AV or whatever that's being iterated
6499      * over to provide more SVs */
6500
6501     while (sv) {
6502
6503         type = SvTYPE(sv);
6504
6505         assert(SvREFCNT(sv) == 0);
6506         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6507
6508         if (type <= SVt_IV) {
6509             /* See the comment in sv.h about the collusion between this
6510              * early return and the overloading of the NULL slots in the
6511              * size table.  */
6512             if (SvROK(sv))
6513                 goto free_rv;
6514             SvFLAGS(sv) &= SVf_BREAK;
6515             SvFLAGS(sv) |= SVTYPEMASK;
6516             goto free_head;
6517         }
6518
6519         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6520            for another purpose  */
6521         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6522
6523         if (type >= SVt_PVMG) {
6524             if (SvOBJECT(sv)) {
6525                 if (!curse(sv, 1)) goto get_next_sv;
6526                 type = SvTYPE(sv); /* destructor may have changed it */
6527             }
6528             /* Free back-references before magic, in case the magic calls
6529              * Perl code that has weak references to sv. */
6530             if (type == SVt_PVHV) {
6531                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6532                 if (SvMAGIC(sv))
6533                     mg_free(sv);
6534             }
6535             else if (SvMAGIC(sv)) {
6536                 /* Free back-references before other types of magic. */
6537                 sv_unmagic(sv, PERL_MAGIC_backref);
6538                 mg_free(sv);
6539             }
6540             SvMAGICAL_off(sv);
6541         }
6542         switch (type) {
6543             /* case SVt_INVLIST: */
6544         case SVt_PVIO:
6545             if (IoIFP(sv) &&
6546                 IoIFP(sv) != PerlIO_stdin() &&
6547                 IoIFP(sv) != PerlIO_stdout() &&
6548                 IoIFP(sv) != PerlIO_stderr() &&
6549                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6550             {
6551                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6552                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6553                           IoTYPE(sv) == IoTYPE_RDWR   ||
6554                           IoTYPE(sv) == IoTYPE_APPEND));
6555             }
6556             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6557                 PerlDir_close(IoDIRP(sv));
6558             IoDIRP(sv) = (DIR*)NULL;
6559             Safefree(IoTOP_NAME(sv));
6560             Safefree(IoFMT_NAME(sv));
6561             Safefree(IoBOTTOM_NAME(sv));
6562             if ((const GV *)sv == PL_statgv)
6563                 PL_statgv = NULL;
6564             goto freescalar;
6565         case SVt_REGEXP:
6566             /* FIXME for plugins */
6567             pregfree2((REGEXP*) sv);
6568             goto freescalar;
6569         case SVt_PVCV:
6570         case SVt_PVFM:
6571             cv_undef(MUTABLE_CV(sv));
6572             /* If we're in a stash, we don't own a reference to it.
6573              * However it does have a back reference to us, which needs to
6574              * be cleared.  */
6575             if ((stash = CvSTASH(sv)))
6576                 sv_del_backref(MUTABLE_SV(stash), sv);
6577             goto freescalar;
6578         case SVt_PVHV:
6579             if (PL_last_swash_hv == (const HV *)sv) {
6580                 PL_last_swash_hv = NULL;
6581             }
6582             if (HvTOTALKEYS((HV*)sv) > 0) {
6583                 const HEK *hek;
6584                 /* this statement should match the one at the beginning of
6585                  * hv_undef_flags() */
6586                 if (   PL_phase != PERL_PHASE_DESTRUCT
6587                     && (hek = HvNAME_HEK((HV*)sv)))
6588                 {
6589                     if (PL_stashcache) {
6590                         DEBUG_o(Perl_deb(aTHX_
6591                             "sv_clear clearing PL_stashcache for '%" HEKf
6592                             "'\n",
6593                              HEKfARG(hek)));
6594                         (void)hv_deletehek(PL_stashcache,
6595                                            hek, G_DISCARD);
6596                     }
6597                     hv_name_set((HV*)sv, NULL, 0, 0);
6598                 }
6599
6600                 /* save old iter_sv in unused SvSTASH field */
6601                 assert(!SvOBJECT(sv));
6602                 SvSTASH(sv) = (HV*)iter_sv;
6603                 iter_sv = sv;
6604
6605                 /* save old hash_index in unused SvMAGIC field */
6606                 assert(!SvMAGICAL(sv));
6607                 assert(!SvMAGIC(sv));
6608                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6609                 hash_index = 0;
6610
6611                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6612                 goto get_next_sv; /* process this new sv */
6613             }
6614             /* free empty hash */
6615             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6616             assert(!HvARRAY((HV*)sv));
6617             break;
6618         case SVt_PVAV:
6619             {
6620                 AV* av = MUTABLE_AV(sv);
6621                 if (PL_comppad == av) {
6622                     PL_comppad = NULL;
6623                     PL_curpad = NULL;
6624                 }
6625                 if (AvREAL(av) && AvFILLp(av) > -1) {
6626                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6627                     /* save old iter_sv in top-most slot of AV,
6628                      * and pray that it doesn't get wiped in the meantime */
6629                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6630                     iter_sv = sv;
6631                     goto get_next_sv; /* process this new sv */
6632                 }
6633                 Safefree(AvALLOC(av));
6634             }
6635
6636             break;
6637         case SVt_PVLV:
6638             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6639                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6640                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6641                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6642             }
6643             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6644                 SvREFCNT_dec(LvTARG(sv));
6645             if (isREGEXP(sv)) {
6646                 /* SvLEN points to a regex body. Free the body, then
6647                  * set SvLEN to whatever value was in the now-freed
6648                  * regex body. The PVX buffer is shared by multiple re's
6649                  * and only freed once, by the re whose len in non-null */
6650                 STRLEN len = ReANY(sv)->xpv_len;
6651                 pregfree2((REGEXP*) sv);
6652                 SvLEN_set((sv), len);
6653                 goto freescalar;
6654             }
6655             /* FALLTHROUGH */
6656         case SVt_PVGV:
6657             if (isGV_with_GP(sv)) {
6658                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6659                    && HvENAME_get(stash))
6660                     mro_method_changed_in(stash);
6661                 gp_free(MUTABLE_GV(sv));
6662                 if (GvNAME_HEK(sv))
6663                     unshare_hek(GvNAME_HEK(sv));
6664                 /* If we're in a stash, we don't own a reference to it.
6665                  * However it does have a back reference to us, which
6666                  * needs to be cleared.  */
6667                 if ((stash = GvSTASH(sv)))
6668                         sv_del_backref(MUTABLE_SV(stash), sv);
6669             }
6670             /* FIXME. There are probably more unreferenced pointers to SVs
6671              * in the interpreter struct that we should check and tidy in
6672              * a similar fashion to this:  */
6673             /* See also S_sv_unglob, which does the same thing. */
6674             if ((const GV *)sv == PL_last_in_gv)
6675                 PL_last_in_gv = NULL;
6676             else if ((const GV *)sv == PL_statgv)
6677                 PL_statgv = NULL;
6678             else if ((const GV *)sv == PL_stderrgv)
6679                 PL_stderrgv = NULL;
6680             /* FALLTHROUGH */
6681         case SVt_PVMG:
6682         case SVt_PVNV:
6683         case SVt_PVIV:
6684         case SVt_INVLIST:
6685         case SVt_PV:
6686           freescalar:
6687             /* Don't bother with SvOOK_off(sv); as we're only going to
6688              * free it.  */
6689             if (SvOOK(sv)) {
6690                 STRLEN offset;
6691                 SvOOK_offset(sv, offset);
6692                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6693                 /* Don't even bother with turning off the OOK flag.  */
6694             }
6695             if (SvROK(sv)) {
6696             free_rv:
6697                 {
6698                     SV * const target = SvRV(sv);
6699                     if (SvWEAKREF(sv))
6700                         sv_del_backref(target, sv);
6701                     else
6702                         next_sv = target;
6703                 }
6704             }
6705 #ifdef PERL_ANY_COW
6706             else if (SvPVX_const(sv)
6707                      && !(SvTYPE(sv) == SVt_PVIO
6708                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6709             {
6710                 if (SvIsCOW(sv)) {
6711 #ifdef DEBUGGING
6712                     if (DEBUG_C_TEST) {
6713                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6714                         sv_dump(sv);
6715                     }
6716 #endif
6717                     if (SvLEN(sv)) {
6718                         if (CowREFCNT(sv)) {
6719                             sv_buf_to_rw(sv);
6720                             CowREFCNT(sv)--;
6721                             sv_buf_to_ro(sv);
6722                             SvLEN_set(sv, 0);
6723                         }
6724                     } else {
6725                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6726                     }
6727
6728                 }
6729                 if (SvLEN(sv)) {
6730                     Safefree(SvPVX_mutable(sv));
6731                 }
6732             }
6733 #else
6734             else if (SvPVX_const(sv) && SvLEN(sv)
6735                      && !(SvTYPE(sv) == SVt_PVIO
6736                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6737                 Safefree(SvPVX_mutable(sv));
6738             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6739                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6740             }
6741 #endif
6742             break;
6743         case SVt_NV:
6744             break;
6745         }
6746
6747       free_body:
6748
6749         SvFLAGS(sv) &= SVf_BREAK;
6750         SvFLAGS(sv) |= SVTYPEMASK;
6751
6752         sv_type_details = bodies_by_type + type;
6753         if (sv_type_details->arena) {
6754             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6755                      &PL_body_roots[type]);
6756         }
6757         else if (sv_type_details->body_size) {
6758             safefree(SvANY(sv));
6759         }
6760
6761       free_head:
6762         /* caller is responsible for freeing the head of the original sv */
6763         if (sv != orig_sv && !SvREFCNT(sv))
6764             del_SV(sv);
6765
6766         /* grab and free next sv, if any */
6767       get_next_sv:
6768         while (1) {
6769             sv = NULL;
6770             if (next_sv) {
6771                 sv = next_sv;
6772                 next_sv = NULL;
6773             }
6774             else if (!iter_sv) {
6775                 break;
6776             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6777                 AV *const av = (AV*)iter_sv;
6778                 if (AvFILLp(av) > -1) {
6779                     sv = AvARRAY(av)[AvFILLp(av)--];
6780                 }
6781                 else { /* no more elements of current AV to free */
6782                     sv = iter_sv;
6783                     type = SvTYPE(sv);
6784                     /* restore previous value, squirrelled away */
6785                     iter_sv = AvARRAY(av)[AvMAX(av)];
6786                     Safefree(AvALLOC(av));
6787                     goto free_body;
6788                 }
6789             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6790                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6791                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6792                     /* no more elements of current HV to free */
6793                     sv = iter_sv;
6794                     type = SvTYPE(sv);
6795                     /* Restore previous values of iter_sv and hash_index,
6796                      * squirrelled away */
6797                     assert(!SvOBJECT(sv));
6798                     iter_sv = (SV*)SvSTASH(sv);
6799                     assert(!SvMAGICAL(sv));
6800                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6801 #ifdef DEBUGGING
6802                     /* perl -DA does not like rubbish in SvMAGIC. */
6803                     SvMAGIC_set(sv, 0);
6804 #endif
6805
6806                     /* free any remaining detritus from the hash struct */
6807                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6808                     assert(!HvARRAY((HV*)sv));
6809                     goto free_body;
6810                 }
6811             }
6812
6813             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6814
6815             if (!sv)
6816                 continue;
6817             if (!SvREFCNT(sv)) {
6818                 sv_free(sv);
6819                 continue;
6820             }
6821             if (--(SvREFCNT(sv)))
6822                 continue;
6823 #ifdef DEBUGGING
6824             if (SvTEMP(sv)) {
6825                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6826                          "Attempt to free temp prematurely: SV 0x%" UVxf
6827                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6828                 continue;
6829             }
6830 #endif
6831             if (SvIMMORTAL(sv)) {
6832                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6833                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6834                 continue;
6835             }
6836             break;
6837         } /* while 1 */
6838
6839     } /* while sv */
6840 }
6841
6842 /* This routine curses the sv itself, not the object referenced by sv. So
6843    sv does not have to be ROK. */
6844
6845 static bool
6846 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6847     PERL_ARGS_ASSERT_CURSE;
6848     assert(SvOBJECT(sv));
6849
6850     if (PL_defstash &&  /* Still have a symbol table? */
6851         SvDESTROYABLE(sv))
6852     {
6853         dSP;
6854         HV* stash;
6855         do {
6856           stash = SvSTASH(sv);
6857           assert(SvTYPE(stash) == SVt_PVHV);
6858           if (HvNAME(stash)) {
6859             CV* destructor = NULL;
6860             struct mro_meta *meta;
6861
6862             assert (SvOOK(stash));
6863
6864             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6865                          HvNAME(stash)) );
6866
6867             /* don't make this an initialization above the assert, since it needs
6868                an AUX structure */
6869             meta = HvMROMETA(stash);
6870             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6871                 destructor = meta->destroy;
6872                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6873                              (void *)destructor, HvNAME(stash)) );
6874             }
6875             else {
6876                 bool autoload = FALSE;
6877                 GV *gv =
6878                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6879                 if (gv)
6880                     destructor = GvCV(gv);
6881                 if (!destructor) {
6882                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6883                                          GV_AUTOLOAD_ISMETHOD);
6884                     if (gv)
6885                         destructor = GvCV(gv);
6886                     if (destructor)
6887                         autoload = TRUE;
6888                 }
6889                 /* we don't cache AUTOLOAD for DESTROY, since this code
6890                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6891                    equivalent for XS AUTOLOADs */
6892                 if (!autoload) {
6893                     meta->destroy_gen = PL_sub_generation;
6894                     meta->destroy = destructor;
6895
6896                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6897                                       (void *)destructor, HvNAME(stash)) );
6898                 }
6899                 else {
6900                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6901                                       HvNAME(stash)) );
6902                 }
6903             }
6904             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6905             if (destructor
6906                 /* A constant subroutine can have no side effects, so
6907                    don't bother calling it.  */
6908                 && !CvCONST(destructor)
6909                 /* Don't bother calling an empty destructor or one that
6910                    returns immediately. */
6911                 && (CvISXSUB(destructor)
6912                 || (CvSTART(destructor)
6913                     && (CvSTART(destructor)->op_next->op_type
6914                                         != OP_LEAVESUB)
6915                     && (CvSTART(destructor)->op_next->op_type
6916                                         != OP_PUSHMARK
6917                         || CvSTART(destructor)->op_next->op_next->op_type
6918                                         != OP_RETURN
6919                        )
6920                    ))
6921                )
6922             {
6923                 SV* const tmpref = newRV(sv);
6924                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6925                 ENTER;
6926                 PUSHSTACKi(PERLSI_DESTROY);
6927                 EXTEND(SP, 2);
6928                 PUSHMARK(SP);
6929                 PUSHs(tmpref);
6930                 PUTBACK;
6931                 call_sv(MUTABLE_SV(destructor),
6932                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6933                 POPSTACK;
6934                 SPAGAIN;
6935                 LEAVE;
6936                 if(SvREFCNT(tmpref) < 2) {
6937                     /* tmpref is not kept alive! */
6938                     SvREFCNT(sv)--;
6939                     SvRV_set(tmpref, NULL);
6940                     SvROK_off(tmpref);
6941                 }
6942                 SvREFCNT_dec_NN(tmpref);
6943             }
6944           }
6945         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6946
6947
6948         if (check_refcnt && SvREFCNT(sv)) {
6949             if (PL_in_clean_objs)
6950                 Perl_croak(aTHX_
6951                   "DESTROY created new reference to dead object '%" HEKf "'",
6952                    HEKfARG(HvNAME_HEK(stash)));
6953             /* DESTROY gave object new lease on life */
6954             return FALSE;
6955         }
6956     }
6957
6958     if (SvOBJECT(sv)) {
6959         HV * const stash = SvSTASH(sv);
6960         /* Curse before freeing the stash, as freeing the stash could cause
6961            a recursive call into S_curse. */
6962         SvOBJECT_off(sv);       /* Curse the object. */
6963         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6964         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6965     }
6966     return TRUE;
6967 }
6968
6969 /*
6970 =for apidoc sv_newref
6971
6972 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6973 instead.
6974
6975 =cut
6976 */
6977
6978 SV *
6979 Perl_sv_newref(pTHX_ SV *const sv)
6980 {
6981     PERL_UNUSED_CONTEXT;
6982     if (sv)
6983         (SvREFCNT(sv))++;
6984     return sv;
6985 }
6986
6987 /*
6988 =for apidoc sv_free
6989
6990 Decrement an SV's reference count, and if it drops to zero, call
6991 C<sv_clear> to invoke destructors and free up any memory used by
6992 the body; finally, deallocating the SV's head itself.
6993 Normally called via a wrapper macro C<SvREFCNT_dec>.
6994
6995 =cut
6996 */
6997
6998 void
6999 Perl_sv_free(pTHX_ SV *const sv)
7000 {
7001     SvREFCNT_dec(sv);
7002 }
7003
7004
7005 /* Private helper function for SvREFCNT_dec().
7006  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7007
7008 void
7009 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7010 {
7011     dVAR;
7012
7013     PERL_ARGS_ASSERT_SV_FREE2;
7014
7015     if (LIKELY( rc == 1 )) {
7016         /* normal case */
7017         SvREFCNT(sv) = 0;
7018
7019 #ifdef DEBUGGING
7020         if (SvTEMP(sv)) {
7021             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7022                              "Attempt to free temp prematurely: SV 0x%" UVxf
7023                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7024             return;
7025         }
7026 #endif
7027         if (SvIMMORTAL(sv)) {
7028             /* make sure SvREFCNT(sv)==0 happens very seldom */
7029             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7030             return;
7031         }
7032         sv_clear(sv);
7033         if (! SvREFCNT(sv)) /* may have have been resurrected */
7034             del_SV(sv);
7035         return;
7036     }
7037
7038     /* handle exceptional cases */
7039
7040     assert(rc == 0);
7041
7042     if (SvFLAGS(sv) & SVf_BREAK)
7043         /* this SV's refcnt has been artificially decremented to
7044          * trigger cleanup */
7045         return;
7046     if (PL_in_clean_all) /* All is fair */
7047         return;
7048     if (SvIMMORTAL(sv)) {
7049         /* make sure SvREFCNT(sv)==0 happens very seldom */
7050         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7051         return;
7052     }
7053     if (ckWARN_d(WARN_INTERNAL)) {
7054 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7055         Perl_dump_sv_child(aTHX_ sv);
7056 #else
7057     #ifdef DEBUG_LEAKING_SCALARS
7058         sv_dump(sv);
7059     #endif
7060 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7061         if (PL_warnhook == PERL_WARNHOOK_FATAL
7062             || ckDEAD(packWARN(WARN_INTERNAL))) {
7063             /* Don't let Perl_warner cause us to escape our fate:  */
7064             abort();
7065         }
7066 #endif
7067         /* This may not return:  */
7068         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7069                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7070                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7071 #endif
7072     }
7073 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7074     abort();
7075 #endif
7076
7077 }
7078
7079
7080 /*
7081 =for apidoc sv_len
7082
7083 Returns the length of the string in the SV.  Handles magic and type
7084 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7085 gives raw access to the C<xpv_cur> slot.
7086
7087 =cut
7088 */
7089
7090 STRLEN
7091 Perl_sv_len(pTHX_ SV *const sv)
7092 {
7093     STRLEN len;
7094
7095     if (!sv)
7096         return 0;
7097
7098     (void)SvPV_const(sv, len);
7099     return len;
7100 }
7101
7102 /*
7103 =for apidoc sv_len_utf8
7104
7105 Returns the number of characters in the string in an SV, counting wide
7106 UTF-8 bytes as a single character.  Handles magic and type coercion.
7107
7108 =cut
7109 */
7110
7111 /*
7112  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7113  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7114  * (Note that the mg_len is not the length of the mg_ptr field.
7115  * This allows the cache to store the character length of the string without
7116  * needing to malloc() extra storage to attach to the mg_ptr.)
7117  *
7118  */
7119
7120 STRLEN
7121 Perl_sv_len_utf8(pTHX_ SV *const sv)
7122 {
7123     if (!sv)
7124         return 0;
7125
7126     SvGETMAGIC(sv);
7127     return sv_len_utf8_nomg(sv);
7128 }
7129
7130 STRLEN
7131 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7132 {
7133     STRLEN len;
7134     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7135
7136     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7137
7138     if (PL_utf8cache && SvUTF8(sv)) {
7139             STRLEN ulen;
7140             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7141
7142             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7143                 if (mg->mg_len != -1)
7144                     ulen = mg->mg_len;
7145                 else {
7146                     /* We can use the offset cache for a headstart.
7147                        The longer value is stored in the first pair.  */
7148                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7149
7150                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7151                                                        s + len);
7152                 }
7153                 
7154                 if (PL_utf8cache < 0) {
7155                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7156                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7157                 }
7158             }
7159             else {
7160                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7161                 utf8_mg_len_cache_update(sv, &mg, ulen);
7162             }
7163             return ulen;
7164     }
7165     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7166 }
7167
7168 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7169    offset.  */
7170 static STRLEN
7171 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7172                       STRLEN *const uoffset_p, bool *const at_end)
7173 {
7174     const U8 *s = start;
7175     STRLEN uoffset = *uoffset_p;
7176
7177     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7178
7179     while (s < send && uoffset) {
7180         --uoffset;
7181         s += UTF8SKIP(s);
7182     }
7183     if (s == send) {
7184         *at_end = TRUE;
7185     }
7186     else if (s > send) {
7187         *at_end = TRUE;
7188         /* This is the existing behaviour. Possibly it should be a croak, as
7189            it's actually a bounds error  */
7190         s = send;
7191     }
7192     *uoffset_p -= uoffset;
7193     return s - start;
7194 }
7195
7196 /* Given the length of the string in both bytes and UTF-8 characters, decide
7197    whether to walk forwards or backwards to find the byte corresponding to
7198    the passed in UTF-8 offset.  */
7199 static STRLEN
7200 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7201                     STRLEN uoffset, const STRLEN uend)
7202 {
7203     STRLEN backw = uend - uoffset;
7204
7205     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7206
7207     if (uoffset < 2 * backw) {
7208         /* The assumption is that going forwards is twice the speed of going
7209            forward (that's where the 2 * backw comes from).
7210            (The real figure of course depends on the UTF-8 data.)  */
7211         const U8 *s = start;
7212
7213         while (s < send && uoffset--)
7214             s += UTF8SKIP(s);
7215         assert (s <= send);
7216         if (s > send)
7217             s = send;
7218         return s - start;
7219     }
7220
7221     while (backw--) {
7222         send--;
7223         while (UTF8_IS_CONTINUATION(*send))
7224             send--;
7225     }
7226     return send - start;
7227 }
7228
7229 /* For the string representation of the given scalar, find the byte
7230    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7231    give another position in the string, *before* the sought offset, which
7232    (which is always true, as 0, 0 is a valid pair of positions), which should
7233    help reduce the amount of linear searching.
7234    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7235    will be used to reduce the amount of linear searching. The cache will be
7236    created if necessary, and the found value offered to it for update.  */
7237 static STRLEN
7238 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7239                     const U8 *const send, STRLEN uoffset,
7240                     STRLEN uoffset0, STRLEN boffset0)
7241 {
7242     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7243     bool found = FALSE;
7244     bool at_end = FALSE;
7245
7246     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7247
7248     assert (uoffset >= uoffset0);
7249
7250     if (!uoffset)
7251         return 0;
7252
7253     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7254         && PL_utf8cache
7255         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7256                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7257         if ((*mgp)->mg_ptr) {
7258             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7259             if (cache[0] == uoffset) {
7260                 /* An exact match. */
7261                 return cache[1];
7262             }
7263             if (cache[2] == uoffset) {
7264                 /* An exact match. */
7265                 return cache[3];
7266             }
7267
7268             if (cache[0] < uoffset) {
7269                 /* The cache already knows part of the way.   */
7270                 if (cache[0] > uoffset0) {
7271                     /* The cache knows more than the passed in pair  */
7272                     uoffset0 = cache[0];
7273                     boffset0 = cache[1];
7274                 }
7275                 if ((*mgp)->mg_len != -1) {
7276                     /* And we know the end too.  */
7277                     boffset = boffset0
7278                         + sv_pos_u2b_midway(start + boffset0, send,
7279                                               uoffset - uoffset0,
7280                                               (*mgp)->mg_len - uoffset0);
7281                 } else {
7282                     uoffset -= uoffset0;
7283                     boffset = boffset0
7284                         + sv_pos_u2b_forwards(start + boffset0,
7285                                               send, &uoffset, &at_end);
7286                     uoffset += uoffset0;
7287                 }
7288             }
7289             else if (cache[2] < uoffset) {
7290                 /* We're between the two cache entries.  */
7291                 if (cache[2] > uoffset0) {
7292                     /* and the cache knows more than the passed in pair  */
7293                     uoffset0 = cache[2];
7294                     boffset0 = cache[3];
7295                 }
7296
7297                 boffset = boffset0
7298                     + sv_pos_u2b_midway(start + boffset0,
7299                                           start + cache[1],
7300                                           uoffset - uoffset0,
7301                                           cache[0] - uoffset0);
7302             } else {
7303                 boffset = boffset0
7304                     + sv_pos_u2b_midway(start + boffset0,
7305                                           start + cache[3],
7306                                           uoffset - uoffset0,
7307                                           cache[2] - uoffset0);
7308             }
7309             found = TRUE;
7310         }
7311         else if ((*mgp)->mg_len != -1) {
7312             /* If we can take advantage of a passed in offset, do so.  */
7313             /* In fact, offset0 is either 0, or less than offset, so don't
7314                need to worry about the other possibility.  */
7315             boffset = boffset0
7316                 + sv_pos_u2b_midway(start + boffset0, send,
7317                                       uoffset - uoffset0,
7318                                       (*mgp)->mg_len - uoffset0);
7319             found = TRUE;
7320         }
7321     }
7322
7323     if (!found || PL_utf8cache < 0) {
7324         STRLEN real_boffset;
7325         uoffset -= uoffset0;
7326         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7327                                                       send, &uoffset, &at_end);
7328         uoffset += uoffset0;
7329
7330         if (found && PL_utf8cache < 0)
7331             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7332                                        real_boffset, sv);
7333         boffset = real_boffset;
7334     }
7335
7336     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7337         if (at_end)
7338             utf8_mg_len_cache_update(sv, mgp, uoffset);
7339         else
7340             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7341     }
7342     return boffset;
7343 }
7344
7345
7346 /*
7347 =for apidoc sv_pos_u2b_flags
7348
7349 Converts the offset from a count of UTF-8 chars from
7350 the start of the string, to a count of the equivalent number of bytes; if
7351 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7352 C<offset>, rather than from the start
7353 of the string.  Handles type coercion.
7354 C<flags> is passed to C<SvPV_flags>, and usually should be
7355 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7356
7357 =cut
7358 */
7359
7360 /*
7361  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7362  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7363  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7364  *
7365  */
7366
7367 STRLEN
7368 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7369                       U32 flags)
7370 {
7371     const U8 *start;
7372     STRLEN len;
7373     STRLEN boffset;
7374
7375     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7376
7377     start = (U8*)SvPV_flags(sv, len, flags);
7378     if (len) {
7379         const U8 * const send = start + len;
7380         MAGIC *mg = NULL;
7381         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7382
7383         if (lenp
7384             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7385                         is 0, and *lenp is already set to that.  */) {
7386             /* Convert the relative offset to absolute.  */
7387             const STRLEN uoffset2 = uoffset + *lenp;
7388             const STRLEN boffset2
7389                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7390                                       uoffset, boffset) - boffset;
7391
7392             *lenp = boffset2;
7393         }
7394     } else {
7395         if (lenp)
7396             *lenp = 0;
7397         boffset = 0;
7398     }
7399
7400     return boffset;
7401 }
7402
7403 /*
7404 =for apidoc sv_pos_u2b
7405
7406 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7407 the start of the string, to a count of the equivalent number of bytes; if
7408 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7409 the offset, rather than from the start of the string.  Handles magic and
7410 type coercion.
7411
7412 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7413 than 2Gb.
7414
7415 =cut
7416 */
7417
7418 /*
7419  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7420  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7421  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7422  *
7423  */
7424
7425 /* This function is subject to size and sign problems */
7426
7427 void
7428 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7429 {
7430     PERL_ARGS_ASSERT_SV_POS_U2B;
7431
7432     if (lenp) {
7433         STRLEN ulen = (STRLEN)*lenp;
7434         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7435                                          SV_GMAGIC|SV_CONST_RETURN);
7436         *lenp = (I32)ulen;
7437     } else {
7438         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7439                                          SV_GMAGIC|SV_CONST_RETURN);
7440     }
7441 }
7442
7443 static void
7444 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7445                            const STRLEN ulen)
7446 {
7447     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7448     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7449         return;
7450
7451     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7452                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7453         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7454     }
7455     assert(*mgp);
7456
7457     (*mgp)->mg_len = ulen;
7458 }
7459
7460 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7461    byte length pairing. The (byte) length of the total SV is passed in too,
7462    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7463    may not have updated SvCUR, so we can't rely on reading it directly.
7464
7465    The proffered utf8/byte length pairing isn't used if the cache already has
7466    two pairs, and swapping either for the proffered pair would increase the
7467    RMS of the intervals between known byte offsets.
7468
7469    The cache itself consists of 4 STRLEN values
7470    0: larger UTF-8 offset
7471    1: corresponding byte offset
7472    2: smaller UTF-8 offset
7473    3: corresponding byte offset
7474
7475    Unused cache pairs have the value 0, 0.
7476    Keeping the cache "backwards" means that the invariant of
7477    cache[0] >= cache[2] is maintained even with empty slots, which means that
7478    the code that uses it doesn't need to worry if only 1 entry has actually
7479    been set to non-zero.  It also makes the "position beyond the end of the
7480    cache" logic much simpler, as the first slot is always the one to start
7481    from.   
7482 */
7483 static void
7484 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7485                            const STRLEN utf8, const STRLEN blen)
7486 {
7487     STRLEN *cache;
7488
7489     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7490
7491     if (SvREADONLY(sv))
7492         return;
7493
7494     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7495                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7496         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7497                            0);
7498         (*mgp)->mg_len = -1;
7499     }
7500     assert(*mgp);
7501
7502     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7503         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7504         (*mgp)->mg_ptr = (char *) cache;
7505     }
7506     assert(cache);
7507
7508     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7509         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7510            a pointer.  Note that we no longer cache utf8 offsets on refer-
7511            ences, but this check is still a good idea, for robustness.  */
7512         const U8 *start = (const U8 *) SvPVX_const(sv);
7513         const STRLEN realutf8 = utf8_length(start, start + byte);
7514
7515         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7516                                    sv);
7517     }
7518
7519     /* Cache is held with the later position first, to simplify the code
7520        that deals with unbounded ends.  */
7521        
7522     ASSERT_UTF8_CACHE(cache);
7523     if (cache[1] == 0) {
7524         /* Cache is totally empty  */
7525         cache[0] = utf8;
7526         cache[1] = byte;
7527     } else if (cache[3] == 0) {
7528         if (byte > cache[1]) {
7529             /* New one is larger, so goes first.  */
7530             cache[2] = cache[0];
7531             cache[3] = cache[1];
7532             cache[0] = utf8;
7533             cache[1] = byte;
7534         } else {
7535             cache[2] = utf8;
7536             cache[3] = byte;
7537         }
7538     } else {
7539 /* float casts necessary? XXX */
7540 #define THREEWAY_SQUARE(a,b,c,d) \
7541             ((float)((d) - (c))) * ((float)((d) - (c))) \
7542             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7543                + ((float)((b) - (a))) * ((float)((b) - (a)))
7544
7545         /* Cache has 2 slots in use, and we know three potential pairs.
7546            Keep the two that give the lowest RMS distance. Do the
7547            calculation in bytes simply because we always know the byte
7548            length.  squareroot has the same ordering as the positive value,
7549            so don't bother with the actual square root.  */
7550         if (byte > cache[1]) {
7551             /* New position is after the existing pair of pairs.  */
7552             const float keep_earlier
7553                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7554             const float keep_later
7555                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7556
7557             if (keep_later < keep_earlier) {
7558                 cache[2] = cache[0];
7559                 cache[3] = cache[1];
7560             }
7561             cache[0] = utf8;
7562             cache[1] = byte;
7563         }
7564         else {
7565             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7566             float b, c, keep_earlier;
7567             if (byte > cache[3]) {
7568                 /* New position is between the existing pair of pairs.  */
7569                 b = (float)cache[3];
7570                 c = (float)byte;
7571             } else {
7572                 /* New position is before the existing pair of pairs.  */
7573                 b = (float)byte;
7574                 c = (float)cache[3];
7575             }
7576             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7577             if (byte > cache[3]) {
7578                 if (keep_later < keep_earlier) {
7579                     cache[2] = utf8;
7580                     cache[3] = byte;
7581                 }
7582                 else {
7583                     cache[0] = utf8;
7584                     cache[1] = byte;
7585                 }
7586             }
7587             else {
7588                 if (! (keep_later < keep_earlier)) {
7589                     cache[0] = cache[2];
7590                     cache[1] = cache[3];
7591                 }
7592                 cache[2] = utf8;
7593                 cache[3] = byte;
7594             }
7595         }
7596     }
7597     ASSERT_UTF8_CACHE(cache);
7598 }
7599
7600 /* We already know all of the way, now we may be able to walk back.  The same
7601    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7602    backward is half the speed of walking forward. */
7603 static STRLEN
7604 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7605                     const U8 *end, STRLEN endu)
7606 {
7607     const STRLEN forw = target - s;
7608     STRLEN backw = end - target;
7609
7610     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7611
7612     if (forw < 2 * backw) {
7613         return utf8_length(s, target);
7614     }
7615
7616     while (end > target) {
7617         end--;
7618         while (UTF8_IS_CONTINUATION(*end)) {
7619             end--;
7620         }
7621         endu--;
7622     }
7623     return endu;
7624 }
7625
7626 /*
7627 =for apidoc sv_pos_b2u_flags
7628
7629 Converts C<offset> from a count of bytes from the start of the string, to
7630 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7631 C<flags> is passed to C<SvPV_flags>, and usually should be
7632 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7633
7634 =cut
7635 */
7636
7637 /*
7638  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7639  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7640  * and byte offsets.
7641  *
7642  */
7643 STRLEN
7644 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7645 {
7646     const U8* s;
7647     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7648     STRLEN blen;
7649     MAGIC* mg = NULL;
7650     const U8* send;
7651     bool found = FALSE;
7652
7653     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7654
7655     s = (const U8*)SvPV_flags(sv, blen, flags);
7656
7657     if (blen < offset)
7658         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7659                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7660
7661     send = s + offset;
7662
7663     if (!SvREADONLY(sv)
7664         && PL_utf8cache
7665         && SvTYPE(sv) >= SVt_PVMG
7666         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7667     {
7668         if (mg->mg_ptr) {
7669             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7670             if (cache[1] == offset) {
7671                 /* An exact match. */
7672                 return cache[0];
7673             }
7674             if (cache[3] == offset) {
7675                 /* An exact match. */
7676                 return cache[2];
7677             }
7678
7679             if (cache[1] < offset) {
7680                 /* We already know part of the way. */
7681                 if (mg->mg_len != -1) {
7682                     /* Actually, we know the end too.  */
7683                     len = cache[0]
7684                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7685                                               s + blen, mg->mg_len - cache[0]);
7686                 } else {
7687                     len = cache[0] + utf8_length(s + cache[1], send);
7688                 }
7689             }
7690             else if (cache[3] < offset) {
7691                 /* We're between the two cached pairs, so we do the calculation
7692                    offset by the byte/utf-8 positions for the earlier pair,
7693                    then add the utf-8 characters from the string start to
7694                    there.  */
7695                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7696                                           s + cache[1], cache[0] - cache[2])
7697                     + cache[2];
7698
7699             }
7700             else { /* cache[3] > offset */
7701                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7702                                           cache[2]);
7703
7704             }
7705             ASSERT_UTF8_CACHE(cache);
7706             found = TRUE;
7707         } else if (mg->mg_len != -1) {
7708             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7709             found = TRUE;
7710         }
7711     }
7712     if (!found || PL_utf8cache < 0) {
7713         const STRLEN real_len = utf8_length(s, send);
7714
7715         if (found && PL_utf8cache < 0)
7716             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7717         len = real_len;
7718     }
7719
7720     if (PL_utf8cache) {
7721         if (blen == offset)
7722             utf8_mg_len_cache_update(sv, &mg, len);
7723         else
7724             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7725     }
7726
7727     return len;
7728 }
7729
7730 /*
7731 =for apidoc sv_pos_b2u
7732
7733 Converts the value pointed to by C<offsetp> from a count of bytes from the
7734 start of the string, to a count of the equivalent number of UTF-8 chars.
7735 Handles magic and type coercion.
7736
7737 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7738 longer than 2Gb.
7739
7740 =cut
7741 */
7742
7743 /*
7744  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7745  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7746  * byte offsets.
7747  *
7748  */
7749 void
7750 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7751 {
7752     PERL_ARGS_ASSERT_SV_POS_B2U;
7753
7754     if (!sv)
7755         return;
7756
7757     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7758                                      SV_GMAGIC|SV_CONST_RETURN);
7759 }
7760
7761 static void
7762 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7763                              STRLEN real, SV *const sv)
7764 {
7765     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7766
7767     /* As this is debugging only code, save space by keeping this test here,
7768        rather than inlining it in all the callers.  */
7769     if (from_cache == real)
7770         return;
7771
7772     /* Need to turn the assertions off otherwise we may recurse infinitely
7773        while printing error messages.  */
7774     SAVEI8(PL_utf8cache);
7775     PL_utf8cache = 0;
7776     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7777                func, (UV) from_cache, (UV) real, SVfARG(sv));
7778 }
7779
7780 /*
7781 =for apidoc sv_eq
7782
7783 Returns a boolean indicating whether the strings in the two SVs are
7784 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7785 coerce its args to strings if necessary.
7786
7787 =for apidoc sv_eq_flags
7788
7789 Returns a boolean indicating whether the strings in the two SVs are
7790 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7791 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7792
7793 =cut
7794 */
7795
7796 I32
7797 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7798 {
7799     const char *pv1;
7800     STRLEN cur1;
7801     const char *pv2;
7802     STRLEN cur2;
7803     I32  eq     = 0;
7804     SV* svrecode = NULL;
7805
7806     if (!sv1) {
7807         pv1 = "";
7808         cur1 = 0;
7809     }
7810     else {
7811         /* if pv1 and pv2 are the same, second SvPV_const call may
7812          * invalidate pv1 (if we are handling magic), so we may need to
7813          * make a copy */
7814         if (sv1 == sv2 && flags & SV_GMAGIC
7815          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7816             pv1 = SvPV_const(sv1, cur1);
7817             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7818         }
7819         pv1 = SvPV_flags_const(sv1, cur1, flags);
7820     }
7821
7822     if (!sv2){
7823         pv2 = "";
7824         cur2 = 0;
7825     }
7826     else
7827         pv2 = SvPV_flags_const(sv2, cur2, flags);
7828
7829     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7830         /* Differing utf8ness.  */
7831         if (SvUTF8(sv1)) {
7832                   /* sv1 is the UTF-8 one  */
7833                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7834                                         (const U8*)pv1, cur1) == 0;
7835         }
7836         else {
7837                   /* sv2 is the UTF-8 one  */
7838                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7839                                         (const U8*)pv2, cur2) == 0;
7840         }
7841     }
7842
7843     if (cur1 == cur2)
7844         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7845         
7846     SvREFCNT_dec(svrecode);
7847
7848     return eq;
7849 }
7850
7851 /*
7852 =for apidoc sv_cmp
7853
7854 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7855 string in C<sv1> is less than, equal to, or greater than the string in
7856 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7857 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7858
7859 =for apidoc sv_cmp_flags
7860
7861 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7862 string in C<sv1> is less than, equal to, or greater than the string in
7863 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7864 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7865 also C<L</sv_cmp_locale_flags>>.
7866
7867 =cut
7868 */
7869
7870 I32
7871 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7872 {
7873     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7874 }
7875
7876 I32
7877 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7878                   const U32 flags)
7879 {
7880     STRLEN cur1, cur2;
7881     const char *pv1, *pv2;
7882     I32  cmp;
7883     SV *svrecode = NULL;
7884
7885     if (!sv1) {
7886         pv1 = "";
7887         cur1 = 0;
7888     }
7889     else
7890         pv1 = SvPV_flags_const(sv1, cur1, flags);
7891
7892     if (!sv2) {
7893         pv2 = "";
7894         cur2 = 0;
7895     }
7896     else
7897         pv2 = SvPV_flags_const(sv2, cur2, flags);
7898
7899     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7900         /* Differing utf8ness.  */
7901         if (SvUTF8(sv1)) {
7902                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7903                                                    (const U8*)pv1, cur1);
7904                 return retval ? retval < 0 ? -1 : +1 : 0;
7905         }
7906         else {
7907                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7908                                                   (const U8*)pv2, cur2);
7909                 return retval ? retval < 0 ? -1 : +1 : 0;
7910         }
7911     }
7912
7913     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7914
7915     if (!cur1) {
7916         cmp = cur2 ? -1 : 0;
7917     } else if (!cur2) {
7918         cmp = 1;
7919     } else {
7920         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7921
7922 #ifdef EBCDIC
7923         if (! DO_UTF8(sv1)) {
7924 #endif
7925             const I32 retval = memcmp((const void*)pv1,
7926                                       (const void*)pv2,
7927                                       shortest_len);
7928             if (retval) {
7929                 cmp = retval < 0 ? -1 : 1;
7930             } else if (cur1 == cur2) {
7931                 cmp = 0;
7932             } else {
7933                 cmp = cur1 < cur2 ? -1 : 1;
7934             }
7935 #ifdef EBCDIC
7936         }
7937         else {  /* Both are to be treated as UTF-EBCDIC */
7938
7939             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7940              * which remaps code points 0-255.  We therefore generally have to
7941              * unmap back to the original values to get an accurate comparison.
7942              * But we don't have to do that for UTF-8 invariants, as by
7943              * definition, they aren't remapped, nor do we have to do it for
7944              * above-latin1 code points, as they also aren't remapped.  (This
7945              * code also works on ASCII platforms, but the memcmp() above is
7946              * much faster). */
7947
7948             const char *e = pv1 + shortest_len;
7949
7950             /* Find the first bytes that differ between the two strings */
7951             while (pv1 < e && *pv1 == *pv2) {
7952                 pv1++;
7953                 pv2++;
7954             }
7955
7956
7957             if (pv1 == e) { /* Are the same all the way to the end */
7958                 if (cur1 == cur2) {
7959                     cmp = 0;
7960                 } else {
7961                     cmp = cur1 < cur2 ? -1 : 1;
7962                 }
7963             }
7964             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7965                     * in the strings were.  The current bytes may or may not be
7966                     * at the beginning of a character.  But neither or both are
7967                     * (or else earlier bytes would have been different).  And
7968                     * if we are in the middle of a character, the two
7969                     * characters are comprised of the same number of bytes
7970                     * (because in this case the start bytes are the same, and
7971                     * the start bytes encode the character's length). */
7972                  if (UTF8_IS_INVARIANT(*pv1))
7973             {
7974                 /* If both are invariants; can just compare directly */
7975                 if (UTF8_IS_INVARIANT(*pv2)) {
7976                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7977                 }
7978                 else   /* Since *pv1 is invariant, it is the whole character,
7979                           which means it is at the beginning of a character.
7980                           That means pv2 is also at the beginning of a
7981                           character (see earlier comment).  Since it isn't
7982                           invariant, it must be a start byte.  If it starts a
7983                           character whose code point is above 255, that
7984                           character is greater than any single-byte char, which
7985                           *pv1 is */
7986                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7987                 {
7988                     cmp = -1;
7989                 }
7990                 else {
7991                     /* Here, pv2 points to a character composed of 2 bytes
7992                      * whose code point is < 256.  Get its code point and
7993                      * compare with *pv1 */
7994                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7995                            ?  -1
7996                            : 1;
7997                 }
7998             }
7999             else   /* The code point starting at pv1 isn't a single byte */
8000                  if (UTF8_IS_INVARIANT(*pv2))
8001             {
8002                 /* But here, the code point starting at *pv2 is a single byte,
8003                  * and so *pv1 must begin a character, hence is a start byte.
8004                  * If that character is above 255, it is larger than any
8005                  * single-byte char, which *pv2 is */
8006                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8007                     cmp = 1;
8008                 }
8009                 else {
8010                     /* Here, pv1 points to a character composed of 2 bytes
8011                      * whose code point is < 256.  Get its code point and
8012                      * compare with the single byte character *pv2 */
8013                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8014                           ?  -1
8015                           : 1;
8016                 }
8017             }
8018             else   /* Here, we've ruled out either *pv1 and *pv2 being
8019                       invariant.  That means both are part of variants, but not
8020                       necessarily at the start of a character */
8021                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8022                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8023             {
8024                 /* Here, at least one is the start of a character, which means
8025                  * the other is also a start byte.  And the code point of at
8026                  * least one of the characters is above 255.  It is a
8027                  * characteristic of UTF-EBCDIC that all start bytes for
8028                  * above-latin1 code points are well behaved as far as code
8029                  * point comparisons go, and all are larger than all other
8030                  * start bytes, so the comparison with those is also well
8031                  * behaved */
8032                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8033             }
8034             else {
8035                 /* Here both *pv1 and *pv2 are part of variant characters.
8036                  * They could be both continuations, or both start characters.
8037                  * (One or both could even be an illegal start character (for
8038                  * an overlong) which for the purposes of sorting we treat as
8039                  * legal. */
8040                 if (UTF8_IS_CONTINUATION(*pv1)) {
8041
8042                     /* If they are continuations for code points above 255,
8043                      * then comparing the current byte is sufficient, as there
8044                      * is no remapping of these and so the comparison is
8045                      * well-behaved.   We determine if they are such
8046                      * continuations by looking at the preceding byte.  It
8047                      * could be a start byte, from which we can tell if it is
8048                      * for an above 255 code point.  Or it could be a
8049                      * continuation, which means the character occupies at
8050                      * least 3 bytes, so must be above 255.  */
8051                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8052                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8053                     {
8054                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8055                         goto cmp_done;
8056                     }
8057
8058                     /* Here, the continuations are for code points below 256;
8059                      * back up one to get to the start byte */
8060                     pv1--;
8061                     pv2--;
8062                 }
8063
8064                 /* We need to get the actual native code point of each of these
8065                  * variants in order to compare them */
8066                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8067                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8068                         ? -1
8069                         : 1;
8070             }
8071         }
8072       cmp_done: ;
8073 #endif
8074     }
8075
8076     SvREFCNT_dec(svrecode);
8077
8078     return cmp;
8079 }
8080
8081 /*
8082 =for apidoc sv_cmp_locale
8083
8084 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8085 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8086 if necessary.  See also C<L</sv_cmp>>.
8087
8088 =for apidoc sv_cmp_locale_flags
8089
8090 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8091 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8092 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8093 C<L</sv_cmp_flags>>.
8094
8095 =cut
8096 */
8097
8098 I32
8099 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8100 {
8101     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8102 }
8103
8104 I32
8105 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8106                          const U32 flags)
8107 {
8108 #ifdef USE_LOCALE_COLLATE
8109
8110     char *pv1, *pv2;
8111     STRLEN len1, len2;
8112     I32 retval;
8113
8114     if (PL_collation_standard)
8115         goto raw_compare;
8116
8117     len1 = len2 = 0;
8118
8119     /* Revert to using raw compare if both operands exist, but either one
8120      * doesn't transform properly for collation */
8121     if (sv1 && sv2) {
8122         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8123         if (! pv1) {
8124             goto raw_compare;
8125         }
8126         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8127         if (! pv2) {
8128             goto raw_compare;
8129         }
8130     }
8131     else {
8132         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8133         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8134     }
8135
8136     if (!pv1 || !len1) {
8137         if (pv2 && len2)
8138             return -1;
8139         else
8140             goto raw_compare;
8141     }
8142     else {
8143         if (!pv2 || !len2)
8144             return 1;
8145     }
8146
8147     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8148
8149     if (retval)
8150         return retval < 0 ? -1 : 1;
8151
8152     /*
8153      * When the result of collation is equality, that doesn't mean
8154      * that there are no differences -- some locales exclude some
8155      * characters from consideration.  So to avoid false equalities,
8156      * we use the raw string as a tiebreaker.
8157      */
8158
8159   raw_compare:
8160     /* FALLTHROUGH */
8161
8162 #else
8163     PERL_UNUSED_ARG(flags);
8164 #endif /* USE_LOCALE_COLLATE */
8165
8166     return sv_cmp(sv1, sv2);
8167 }
8168
8169
8170 #ifdef USE_LOCALE_COLLATE
8171
8172 /*
8173 =for apidoc sv_collxfrm
8174
8175 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8176 C<L</sv_collxfrm_flags>>.
8177
8178 =for apidoc sv_collxfrm_flags
8179
8180 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8181 flags contain C<SV_GMAGIC>, it handles get-magic.
8182
8183 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8184 scalar data of the variable, but transformed to such a format that a normal
8185 memory comparison can be used to compare the data according to the locale
8186 settings.
8187
8188 =cut
8189 */
8190
8191 char *
8192 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8193 {
8194     MAGIC *mg;
8195
8196     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8197
8198     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8199
8200     /* If we don't have collation magic on 'sv', or the locale has changed
8201      * since the last time we calculated it, get it and save it now */
8202     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8203         const char *s;
8204         char *xf;
8205         STRLEN len, xlen;
8206
8207         /* Free the old space */
8208         if (mg)
8209             Safefree(mg->mg_ptr);
8210
8211         s = SvPV_flags_const(sv, len, flags);
8212         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8213             if (! mg) {
8214                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8215                                  0, 0);
8216                 assert(mg);
8217             }
8218             mg->mg_ptr = xf;
8219             mg->mg_len = xlen;
8220         }
8221         else {
8222             if (mg) {
8223                 mg->mg_ptr = NULL;
8224                 mg->mg_len = -1;
8225             }
8226         }
8227     }
8228
8229     if (mg && mg->mg_ptr) {
8230         *nxp = mg->mg_len;
8231         return mg->mg_ptr + sizeof(PL_collation_ix);
8232     }
8233     else {
8234         *nxp = 0;
8235         return NULL;
8236     }
8237 }
8238
8239 #endif /* USE_LOCALE_COLLATE */
8240
8241 static char *
8242 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8243 {
8244     SV * const tsv = newSV(0);
8245     ENTER;
8246     SAVEFREESV(tsv);
8247     sv_gets(tsv, fp, 0);
8248     sv_utf8_upgrade_nomg(tsv);
8249     SvCUR_set(sv,append);
8250     sv_catsv(sv,tsv);
8251     LEAVE;
8252     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8253 }
8254
8255 static char *
8256 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8257 {
8258     SSize_t bytesread;
8259     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8260       /* Grab the size of the record we're getting */
8261     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8262     
8263     /* Go yank in */
8264 #ifdef __VMS
8265     int fd;
8266     Stat_t st;
8267
8268     /* With a true, record-oriented file on VMS, we need to use read directly
8269      * to ensure that we respect RMS record boundaries.  The user is responsible
8270      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8271      * record size) field.  N.B. This is likely to produce invalid results on
8272      * varying-width character data when a record ends mid-character.
8273      */
8274     fd = PerlIO_fileno(fp);
8275     if (fd != -1
8276         && PerlLIO_fstat(fd, &st) == 0
8277         && (st.st_fab_rfm == FAB$C_VAR
8278             || st.st_fab_rfm == FAB$C_VFC
8279             || st.st_fab_rfm == FAB$C_FIX)) {
8280
8281         bytesread = PerlLIO_read(fd, buffer, recsize);
8282     }
8283     else /* in-memory file from PerlIO::Scalar
8284           * or not a record-oriented file
8285           */
8286 #endif
8287     {
8288         bytesread = PerlIO_read(fp, buffer, recsize);
8289
8290         /* At this point, the logic in sv_get() means that sv will
8291            be treated as utf-8 if the handle is utf8.
8292         */
8293         if (PerlIO_isutf8(fp) && bytesread > 0) {
8294             char *bend = buffer + bytesread;
8295             char *bufp = buffer;
8296             size_t charcount = 0;
8297             bool charstart = TRUE;
8298             STRLEN skip = 0;
8299
8300             while (charcount < recsize) {
8301                 /* count accumulated characters */
8302                 while (bufp < bend) {
8303                     if (charstart) {
8304                         skip = UTF8SKIP(bufp);
8305                     }
8306                     if (bufp + skip > bend) {
8307                         /* partial at the end */
8308                         charstart = FALSE;
8309                         break;
8310                     }
8311                     else {
8312                         ++charcount;
8313                         bufp += skip;
8314                         charstart = TRUE;
8315                     }
8316                 }
8317
8318                 if (charcount < recsize) {
8319                     STRLEN readsize;
8320                     STRLEN bufp_offset = bufp - buffer;
8321                     SSize_t morebytesread;
8322
8323                     /* originally I read enough to fill any incomplete
8324                        character and the first byte of the next
8325                        character if needed, but if there's many
8326                        multi-byte encoded characters we're going to be
8327                        making a read call for every character beyond
8328                        the original read size.
8329
8330                        So instead, read the rest of the character if
8331                        any, and enough bytes to match at least the
8332                        start bytes for each character we're going to
8333                        read.
8334                     */
8335                     if (charstart)
8336                         readsize = recsize - charcount;
8337                     else 
8338                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8339                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8340                     bend = buffer + bytesread;
8341                     morebytesread = PerlIO_read(fp, bend, readsize);
8342                     if (morebytesread <= 0) {
8343                         /* we're done, if we still have incomplete
8344                            characters the check code in sv_gets() will
8345                            warn about them.
8346
8347                            I'd originally considered doing
8348                            PerlIO_ungetc() on all but the lead
8349                            character of the incomplete character, but
8350                            read() doesn't do that, so I don't.
8351                         */
8352                         break;
8353                     }
8354
8355                     /* prepare to scan some more */
8356                     bytesread += morebytesread;
8357                     bend = buffer + bytesread;
8358                     bufp = buffer + bufp_offset;
8359                 }
8360             }
8361         }
8362     }
8363
8364     if (bytesread < 0)
8365         bytesread = 0;
8366     SvCUR_set(sv, bytesread + append);
8367     buffer[bytesread] = '\0';
8368     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8369 }
8370
8371 /*
8372 =for apidoc sv_gets
8373
8374 Get a line from the filehandle and store it into the SV, optionally
8375 appending to the currently-stored string.  If C<append> is not 0, the
8376 line is appended to the SV instead of overwriting it.  C<append> should
8377 be set to the byte offset that the appended string should start at
8378 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8379
8380 =cut
8381 */
8382
8383 char *
8384 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8385 {
8386     const char *rsptr;
8387     STRLEN rslen;
8388     STDCHAR rslast;
8389     STDCHAR *bp;
8390     SSize_t cnt;
8391     int i = 0;
8392     int rspara = 0;
8393
8394     PERL_ARGS_ASSERT_SV_GETS;
8395
8396     if (SvTHINKFIRST(sv))
8397         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8398     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8399        from <>.
8400        However, perlbench says it's slower, because the existing swipe code
8401        is faster than copy on write.
8402        Swings and roundabouts.  */
8403     SvUPGRADE(sv, SVt_PV);
8404
8405     if (append) {
8406         /* line is going to be appended to the existing buffer in the sv */
8407         if (PerlIO_isutf8(fp)) {
8408             if (!SvUTF8(sv)) {
8409                 sv_utf8_upgrade_nomg(sv);
8410                 sv_pos_u2b(sv,&append,0);
8411             }
8412         } else if (SvUTF8(sv)) {
8413             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8414         }
8415     }
8416
8417     SvPOK_only(sv);
8418     if (!append) {
8419         /* not appending - "clear" the string by setting SvCUR to 0,
8420          * the pv is still avaiable. */
8421         SvCUR_set(sv,0);
8422     }
8423     if (PerlIO_isutf8(fp))
8424         SvUTF8_on(sv);
8425
8426     if (IN_PERL_COMPILETIME) {
8427         /* we always read code in line mode */
8428         rsptr = "\n";
8429         rslen = 1;
8430     }
8431     else if (RsSNARF(PL_rs)) {
8432         /* If it is a regular disk file use size from stat() as estimate
8433            of amount we are going to read -- may result in mallocing
8434            more memory than we really need if the layers below reduce
8435            the size we read (e.g. CRLF or a gzip layer).
8436          */
8437         Stat_t st;
8438         int fd = PerlIO_fileno(fp);
8439         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8440             const Off_t offset = PerlIO_tell(fp);
8441             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8442 #ifdef PERL_COPY_ON_WRITE
8443                 /* Add an extra byte for the sake of copy-on-write's
8444                  * buffer reference count. */
8445                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8446 #else
8447                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8448 #endif
8449             }
8450         }
8451         rsptr = NULL;
8452         rslen = 0;
8453     }
8454     else if (RsRECORD(PL_rs)) {
8455         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8456     }
8457     else if (RsPARA(PL_rs)) {
8458         rsptr = "\n\n";
8459         rslen = 2;
8460         rspara = 1;
8461     }
8462     else {
8463         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8464         if (PerlIO_isutf8(fp)) {
8465             rsptr = SvPVutf8(PL_rs, rslen);
8466         }
8467         else {
8468             if (SvUTF8(PL_rs)) {
8469                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8470                     Perl_croak(aTHX_ "Wide character in $/");
8471                 }
8472             }
8473             /* extract the raw pointer to the record separator */
8474             rsptr = SvPV_const(PL_rs, rslen);
8475         }
8476     }
8477
8478     /* rslast is the last character in the record separator
8479      * note we don't use rslast except when rslen is true, so the
8480      * null assign is a placeholder. */
8481     rslast = rslen ? rsptr[rslen - 1] : '\0';
8482
8483     if (rspara) {               /* have to do this both before and after */
8484         do {                    /* to make sure file boundaries work right */
8485             if (PerlIO_eof(fp))
8486                 return 0;
8487             i = PerlIO_getc(fp);
8488             if (i != '\n') {
8489                 if (i == -1)
8490                     return 0;
8491                 PerlIO_ungetc(fp,i);
8492                 break;
8493             }
8494         } while (i != EOF);
8495     }
8496
8497     /* See if we know enough about I/O mechanism to cheat it ! */
8498
8499     /* This used to be #ifdef test - it is made run-time test for ease
8500        of abstracting out stdio interface. One call should be cheap
8501        enough here - and may even be a macro allowing compile
8502        time optimization.
8503      */
8504
8505     if (PerlIO_fast_gets(fp)) {
8506     /*
8507      * We can do buffer based IO operations on this filehandle.
8508      *
8509      * This means we can bypass a lot of subcalls and process
8510      * the buffer directly, it also means we know the upper bound
8511      * on the amount of data we might read of the current buffer
8512      * into our sv. Knowing this allows us to preallocate the pv
8513      * to be able to hold that maximum, which allows us to simplify
8514      * a lot of logic. */
8515
8516     /*
8517      * We're going to steal some values from the stdio struct
8518      * and put EVERYTHING in the innermost loop into registers.
8519      */
8520     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8521     STRLEN bpx;         /* length of the data in the target sv
8522                            used to fix pointers after a SvGROW */
8523     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8524                            of data left in the read-ahead buffer.
8525                            If 0 then the pv buffer can hold the full
8526                            amount left, otherwise this is the amount it
8527                            can hold. */
8528
8529     /* Here is some breathtakingly efficient cheating */
8530
8531     /* When you read the following logic resist the urge to think
8532      * of record separators that are 1 byte long. They are an
8533      * uninteresting special (simple) case.
8534      *
8535      * Instead think of record separators which are at least 2 bytes
8536      * long, and keep in mind that we need to deal with such
8537      * separators when they cross a read-ahead buffer boundary.
8538      *
8539      * Also consider that we need to gracefully deal with separators
8540      * that may be longer than a single read ahead buffer.
8541      *
8542      * Lastly do not forget we want to copy the delimiter as well. We
8543      * are copying all data in the file _up_to_and_including_ the separator
8544      * itself.
8545      *
8546      * Now that you have all that in mind here is what is happening below:
8547      *
8548      * 1. When we first enter the loop we do some memory book keeping to see
8549      * how much free space there is in the target SV. (This sub assumes that
8550      * it is operating on the same SV most of the time via $_ and that it is
8551      * going to be able to reuse the same pv buffer each call.) If there is
8552      * "enough" room then we set "shortbuffered" to how much space there is
8553      * and start reading forward.
8554      *
8555      * 2. When we scan forward we copy from the read-ahead buffer to the target
8556      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8557      * and the end of the of pv, as well as for the "rslast", which is the last
8558      * char of the separator.
8559      *
8560      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8561      * (which has a "complete" record up to the point we saw rslast) and check
8562      * it to see if it matches the separator. If it does we are done. If it doesn't
8563      * we continue on with the scan/copy.
8564      *
8565      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8566      * the IO system to read the next buffer. We do this by doing a getc(), which
8567      * returns a single char read (or EOF), and prefills the buffer, and also
8568      * allows us to find out how full the buffer is.  We use this information to
8569      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8570      * the returned single char into the target sv, and then go back into scan
8571      * forward mode.
8572      *
8573      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8574      * remaining space in the read-buffer.
8575      *
8576      * Note that this code despite its twisty-turny nature is pretty darn slick.
8577      * It manages single byte separators, multi-byte cross boundary separators,
8578      * and cross-read-buffer separators cleanly and efficiently at the cost
8579      * of potentially greatly overallocating the target SV.
8580      *
8581      * Yves
8582      */
8583
8584
8585     /* get the number of bytes remaining in the read-ahead buffer
8586      * on first call on a given fp this will return 0.*/
8587     cnt = PerlIO_get_cnt(fp);
8588
8589     /* make sure we have the room */
8590     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8591         /* Not room for all of it
8592            if we are looking for a separator and room for some
8593          */
8594         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8595             /* just process what we have room for */
8596             shortbuffered = cnt - SvLEN(sv) + append + 1;
8597             cnt -= shortbuffered;
8598         }
8599         else {
8600             /* ensure that the target sv has enough room to hold
8601              * the rest of the read-ahead buffer */
8602             shortbuffered = 0;
8603             /* remember that cnt can be negative */
8604             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8605         }
8606     }
8607     else {
8608         /* we have enough room to hold the full buffer, lets scream */
8609         shortbuffered = 0;
8610     }
8611
8612     /* extract the pointer to sv's string buffer, offset by append as necessary */
8613     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8614     /* extract the point to the read-ahead buffer */
8615     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8616
8617     /* some trace debug output */
8618     DEBUG_P(PerlIO_printf(Perl_debug_log,
8619         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8620     DEBUG_P(PerlIO_printf(Perl_debug_log,
8621         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8622          UVuf "\n",
8623                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8624                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8625
8626     for (;;) {
8627       screamer:
8628         /* if there is stuff left in the read-ahead buffer */
8629         if (cnt > 0) {
8630             /* if there is a separator */
8631             if (rslen) {
8632                 /* find next rslast */
8633                 STDCHAR *p;
8634
8635                 /* shortcut common case of blank line */
8636                 cnt--;
8637                 if ((*bp++ = *ptr++) == rslast)
8638                     goto thats_all_folks;
8639
8640                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8641                 if (p) {
8642                     SSize_t got = p - ptr + 1;
8643                     Copy(ptr, bp, got, STDCHAR);
8644                     ptr += got;
8645                     bp  += got;
8646                     cnt -= got;
8647                     goto thats_all_folks;
8648                 }
8649                 Copy(ptr, bp, cnt, STDCHAR);
8650                 ptr += cnt;
8651                 bp  += cnt;
8652                 cnt = 0;
8653             }
8654             else {
8655                 /* no separator, slurp the full buffer */
8656                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8657                 bp += cnt;                           /* screams  |  dust */
8658                 ptr += cnt;                          /* louder   |  sed :-) */
8659                 cnt = 0;
8660                 assert (!shortbuffered);
8661                 goto cannot_be_shortbuffered;
8662             }
8663         }
8664         
8665         if (shortbuffered) {            /* oh well, must extend */
8666             /* we didnt have enough room to fit the line into the target buffer
8667              * so we must extend the target buffer and keep going */
8668             cnt = shortbuffered;
8669             shortbuffered = 0;
8670             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8671             SvCUR_set(sv, bpx);
8672             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8673             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8674             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8675             continue;
8676         }
8677
8678     cannot_be_shortbuffered:
8679         /* we need to refill the read-ahead buffer if possible */
8680
8681         DEBUG_P(PerlIO_printf(Perl_debug_log,
8682                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8683                               PTR2UV(ptr),(IV)cnt));
8684         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8685
8686         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8687            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8688             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8689             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8690
8691         /*
8692             call PerlIO_getc() to let it prefill the lookahead buffer
8693
8694             This used to call 'filbuf' in stdio form, but as that behaves like
8695             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8696             another abstraction.
8697
8698             Note we have to deal with the char in 'i' if we are not at EOF
8699         */
8700         i   = PerlIO_getc(fp);          /* get more characters */
8701
8702         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8703            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8704             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8705             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8706
8707         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8708         cnt = PerlIO_get_cnt(fp);
8709         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8710         DEBUG_P(PerlIO_printf(Perl_debug_log,
8711             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8712             PTR2UV(ptr),(IV)cnt));
8713
8714         if (i == EOF)                   /* all done for ever? */
8715             goto thats_really_all_folks;
8716
8717         /* make sure we have enough space in the target sv */
8718         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8719         SvCUR_set(sv, bpx);
8720         SvGROW(sv, bpx + cnt + 2);
8721         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8722
8723         /* copy of the char we got from getc() */
8724         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8725
8726         /* make sure we deal with the i being the last character of a separator */
8727         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8728             goto thats_all_folks;
8729     }
8730
8731   thats_all_folks:
8732     /* check if we have actually found the separator - only really applies
8733      * when rslen > 1 */
8734     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8735           memNE((char*)bp - rslen, rsptr, rslen))
8736         goto screamer;                          /* go back to the fray */
8737   thats_really_all_folks:
8738     if (shortbuffered)
8739         cnt += shortbuffered;
8740         DEBUG_P(PerlIO_printf(Perl_debug_log,
8741              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8742     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8743     DEBUG_P(PerlIO_printf(Perl_debug_log,
8744         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8745         "\n",
8746         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8747         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8748     *bp = '\0';
8749     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8750     DEBUG_P(PerlIO_printf(Perl_debug_log,
8751         "Screamer: done, len=%ld, string=|%.*s|\n",
8752         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8753     }
8754    else
8755     {
8756        /*The big, slow, and stupid way. */
8757 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8758         STDCHAR *buf = NULL;
8759         Newx(buf, 8192, STDCHAR);
8760         assert(buf);
8761 #else
8762         STDCHAR buf[8192];
8763 #endif
8764
8765       screamer2:
8766         if (rslen) {
8767             const STDCHAR * const bpe = buf + sizeof(buf);
8768             bp = buf;
8769             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8770                 ; /* keep reading */
8771             cnt = bp - buf;
8772         }
8773         else {
8774             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8775             /* Accommodate broken VAXC compiler, which applies U8 cast to
8776              * both args of ?: operator, causing EOF to change into 255
8777              */
8778             if (cnt > 0)
8779                  i = (U8)buf[cnt - 1];
8780             else
8781                  i = EOF;
8782         }
8783
8784         if (cnt < 0)
8785             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8786         if (append)
8787             sv_catpvn_nomg(sv, (char *) buf, cnt);
8788         else
8789             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8790
8791         if (i != EOF &&                 /* joy */
8792             (!rslen ||
8793              SvCUR(sv) < rslen ||
8794              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8795         {
8796             append = -1;
8797             /*
8798              * If we're reading from a TTY and we get a short read,
8799              * indicating that the user hit his EOF character, we need
8800              * to notice it now, because if we try to read from the TTY
8801              * again, the EOF condition will disappear.
8802              *
8803              * The comparison of cnt to sizeof(buf) is an optimization
8804              * that prevents unnecessary calls to feof().
8805              *
8806              * - jik 9/25/96
8807              */
8808             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8809                 goto screamer2;
8810         }
8811
8812 #ifdef USE_HEAP_INSTEAD_OF_STACK
8813         Safefree(buf);
8814 #endif
8815     }
8816
8817     if (rspara) {               /* have to do this both before and after */
8818         while (i != EOF) {      /* to make sure file boundaries work right */
8819             i = PerlIO_getc(fp);
8820             if (i != '\n') {
8821                 PerlIO_ungetc(fp,i);
8822                 break;
8823             }
8824         }
8825     }
8826
8827     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8828 }
8829
8830 /*
8831 =for apidoc sv_inc
8832
8833 Auto-increment of the value in the SV, doing string to numeric conversion
8834 if necessary.  Handles 'get' magic and operator overloading.
8835
8836 =cut
8837 */
8838
8839 void
8840 Perl_sv_inc(pTHX_ SV *const sv)
8841 {
8842     if (!sv)
8843         return;
8844     SvGETMAGIC(sv);
8845     sv_inc_nomg(sv);
8846 }
8847
8848 /*
8849 =for apidoc sv_inc_nomg
8850
8851 Auto-increment of the value in the SV, doing string to numeric conversion
8852 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8853
8854 =cut
8855 */
8856
8857 void
8858 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8859 {
8860     char *d;
8861     int flags;
8862
8863     if (!sv)
8864         return;
8865     if (SvTHINKFIRST(sv)) {
8866         if (SvREADONLY(sv)) {
8867                 Perl_croak_no_modify();
8868         }
8869         if (SvROK(sv)) {
8870             IV i;
8871             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8872                 return;
8873             i = PTR2IV(SvRV(sv));
8874             sv_unref(sv);
8875             sv_setiv(sv, i);
8876         }
8877         else sv_force_normal_flags(sv, 0);
8878     }
8879     flags = SvFLAGS(sv);
8880     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8881         /* It's (privately or publicly) a float, but not tested as an
8882            integer, so test it to see. */
8883         (void) SvIV(sv);
8884         flags = SvFLAGS(sv);
8885     }
8886     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8887         /* It's publicly an integer, or privately an integer-not-float */
8888 #ifdef PERL_PRESERVE_IVUV
8889       oops_its_int:
8890 #endif
8891         if (SvIsUV(sv)) {
8892             if (SvUVX(sv) == UV_MAX)
8893                 sv_setnv(sv, UV_MAX_P1);
8894             else
8895                 (void)SvIOK_only_UV(sv);
8896                 SvUV_set(sv, SvUVX(sv) + 1);
8897         } else {
8898             if (SvIVX(sv) == IV_MAX)
8899                 sv_setuv(sv, (UV)IV_MAX + 1);
8900             else {
8901                 (void)SvIOK_only(sv);
8902                 SvIV_set(sv, SvIVX(sv) + 1);
8903             }   
8904         }
8905         return;
8906     }
8907     if (flags & SVp_NOK) {
8908         const NV was = SvNVX(sv);
8909         if (LIKELY(!Perl_isinfnan(was)) &&
8910             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8911             was >= NV_OVERFLOWS_INTEGERS_AT) {
8912             /* diag_listed_as: Lost precision when %s %f by 1 */
8913             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8914                            "Lost precision when incrementing %" NVff " by 1",
8915                            was);
8916         }
8917         (void)SvNOK_only(sv);
8918         SvNV_set(sv, was + 1.0);
8919         return;
8920     }
8921
8922     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8923     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8924         Perl_croak_no_modify();
8925
8926     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8927         if ((flags & SVTYPEMASK) < SVt_PVIV)
8928             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8929         (void)SvIOK_only(sv);
8930         SvIV_set(sv, 1);
8931         return;
8932     }
8933     d = SvPVX(sv);
8934     while (isALPHA(*d)) d++;
8935     while (isDIGIT(*d)) d++;
8936     if (d < SvEND(sv)) {
8937         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8938 #ifdef PERL_PRESERVE_IVUV
8939         /* Got to punt this as an integer if needs be, but we don't issue
8940            warnings. Probably ought to make the sv_iv_please() that does
8941            the conversion if possible, and silently.  */
8942         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8943             /* Need to try really hard to see if it's an integer.
8944                9.22337203685478e+18 is an integer.
8945                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8946                so $a="9.22337203685478e+18"; $a+0; $a++
8947                needs to be the same as $a="9.22337203685478e+18"; $a++
8948                or we go insane. */
8949         
8950             (void) sv_2iv(sv);
8951             if (SvIOK(sv))
8952                 goto oops_its_int;
8953
8954             /* sv_2iv *should* have made this an NV */
8955             if (flags & SVp_NOK) {
8956                 (void)SvNOK_only(sv);
8957                 SvNV_set(sv, SvNVX(sv) + 1.0);
8958                 return;
8959             }
8960             /* I don't think we can get here. Maybe I should assert this
8961                And if we do get here I suspect that sv_setnv will croak. NWC
8962                Fall through. */
8963             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
8964                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8965         }
8966 #endif /* PERL_PRESERVE_IVUV */
8967         if (!numtype && ckWARN(WARN_NUMERIC))
8968             not_incrementable(sv);
8969         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8970         return;
8971     }
8972     d--;
8973     while (d >= SvPVX_const(sv)) {
8974         if (isDIGIT(*d)) {
8975             if (++*d <= '9')
8976                 return;
8977             *(d--) = '0';
8978         }
8979         else {
8980 #ifdef EBCDIC
8981             /* MKS: The original code here died if letters weren't consecutive.
8982              * at least it didn't have to worry about non-C locales.  The
8983              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8984              * arranged in order (although not consecutively) and that only
8985              * [A-Za-z] are accepted by isALPHA in the C locale.
8986              */
8987             if (isALPHA_FOLD_NE(*d, 'z')) {
8988                 do { ++*d; } while (!isALPHA(*d));
8989                 return;
8990             }
8991             *(d--) -= 'z' - 'a';
8992 #else
8993             ++*d;
8994             if (isALPHA(*d))
8995                 return;
8996             *(d--) -= 'z' - 'a' + 1;
8997 #endif
8998         }
8999     }
9000     /* oh,oh, the number grew */
9001     SvGROW(sv, SvCUR(sv) + 2);
9002     SvCUR_set(sv, SvCUR(sv) + 1);
9003     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9004         *d = d[-1];
9005     if (isDIGIT(d[1]))
9006         *d = '1';
9007     else
9008         *d = d[1];
9009 }
9010
9011 /*
9012 =for apidoc sv_dec
9013
9014 Auto-decrement of the value in the SV, doing string to numeric conversion
9015 if necessary.  Handles 'get' magic and operator overloading.
9016
9017 =cut
9018 */
9019
9020 void
9021 Perl_sv_dec(pTHX_ SV *const sv)
9022 {
9023     if (!sv)
9024         return;
9025     SvGETMAGIC(sv);
9026     sv_dec_nomg(sv);
9027 }
9028
9029 /*
9030 =for apidoc sv_dec_nomg
9031
9032 Auto-decrement of the value in the SV, doing string to numeric conversion
9033 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9034
9035 =cut
9036 */
9037
9038 void
9039 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9040 {
9041     int flags;
9042
9043     if (!sv)
9044         return;
9045     if (SvTHINKFIRST(sv)) {
9046         if (SvREADONLY(sv)) {
9047                 Perl_croak_no_modify();
9048         }
9049         if (SvROK(sv)) {
9050             IV i;
9051             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9052                 return;
9053             i = PTR2IV(SvRV(sv));
9054             sv_unref(sv);
9055             sv_setiv(sv, i);
9056         }
9057         else sv_force_normal_flags(sv, 0);
9058     }
9059     /* Unlike sv_inc we don't have to worry about string-never-numbers
9060        and keeping them magic. But we mustn't warn on punting */
9061     flags = SvFLAGS(sv);
9062     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9063         /* It's publicly an integer, or privately an integer-not-float */
9064 #ifdef PERL_PRESERVE_IVUV
9065       oops_its_int:
9066 #endif
9067         if (SvIsUV(sv)) {
9068             if (SvUVX(sv) == 0) {
9069                 (void)SvIOK_only(sv);
9070                 SvIV_set(sv, -1);
9071             }
9072             else {
9073                 (void)SvIOK_only_UV(sv);
9074                 SvUV_set(sv, SvUVX(sv) - 1);
9075             }   
9076         } else {
9077             if (SvIVX(sv) == IV_MIN) {
9078                 sv_setnv(sv, (NV)IV_MIN);
9079                 goto oops_its_num;
9080             }
9081             else {
9082                 (void)SvIOK_only(sv);
9083                 SvIV_set(sv, SvIVX(sv) - 1);
9084             }   
9085         }
9086         return;
9087     }
9088     if (flags & SVp_NOK) {
9089     oops_its_num:
9090         {
9091             const NV was = SvNVX(sv);
9092             if (LIKELY(!Perl_isinfnan(was)) &&
9093                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9094                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9095                 /* diag_listed_as: Lost precision when %s %f by 1 */
9096                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9097                                "Lost precision when decrementing %" NVff " by 1",
9098                                was);
9099             }
9100             (void)SvNOK_only(sv);
9101             SvNV_set(sv, was - 1.0);
9102             return;
9103         }
9104     }
9105
9106     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9107     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9108         Perl_croak_no_modify();
9109
9110     if (!(flags & SVp_POK)) {
9111         if ((flags & SVTYPEMASK) < SVt_PVIV)
9112             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9113         SvIV_set(sv, -1);
9114         (void)SvIOK_only(sv);
9115         return;
9116     }
9117 #ifdef PERL_PRESERVE_IVUV
9118     {
9119         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9120         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9121             /* Need to try really hard to see if it's an integer.
9122                9.22337203685478e+18 is an integer.
9123                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9124                so $a="9.22337203685478e+18"; $a+0; $a--
9125                needs to be the same as $a="9.22337203685478e+18"; $a--
9126                or we go insane. */
9127         
9128             (void) sv_2iv(sv);
9129             if (SvIOK(sv))
9130                 goto oops_its_int;
9131
9132             /* sv_2iv *should* have made this an NV */
9133             if (flags & SVp_NOK) {
9134                 (void)SvNOK_only(sv);
9135                 SvNV_set(sv, SvNVX(sv) - 1.0);
9136                 return;
9137             }
9138             /* I don't think we can get here. Maybe I should assert this
9139                And if we do get here I suspect that sv_setnv will croak. NWC
9140                Fall through. */
9141             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9142                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9143         }
9144     }
9145 #endif /* PERL_PRESERVE_IVUV */
9146     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9147 }
9148
9149 /* this define is used to eliminate a chunk of duplicated but shared logic
9150  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9151  * used anywhere but here - yves
9152  */
9153 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9154     STMT_START {      \
9155         SSize_t ix = ++PL_tmps_ix;              \
9156         if (UNLIKELY(ix >= PL_tmps_max))        \
9157             ix = tmps_grow_p(ix);                       \
9158         PL_tmps_stack[ix] = (AnSv); \
9159     } STMT_END
9160
9161 /*
9162 =for apidoc sv_mortalcopy
9163
9164 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9165 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9166 explicit call to C<FREETMPS>, or by an implicit call at places such as
9167 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9168
9169 =cut
9170 */
9171
9172 /* Make a string that will exist for the duration of the expression
9173  * evaluation.  Actually, it may have to last longer than that, but
9174  * hopefully we won't free it until it has been assigned to a
9175  * permanent location. */
9176
9177 SV *
9178 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9179 {
9180     SV *sv;
9181
9182     if (flags & SV_GMAGIC)
9183         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9184     new_SV(sv);
9185     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9186     PUSH_EXTEND_MORTAL__SV_C(sv);
9187     SvTEMP_on(sv);
9188     return sv;
9189 }
9190
9191 /*
9192 =for apidoc sv_newmortal
9193
9194 Creates a new null SV which is mortal.  The reference count of the SV is
9195 set to 1.  It will be destroyed "soon", either by an explicit call to
9196 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9197 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9198
9199 =cut
9200 */
9201
9202 SV *
9203 Perl_sv_newmortal(pTHX)
9204 {
9205     SV *sv;
9206
9207     new_SV(sv);
9208     SvFLAGS(sv) = SVs_TEMP;
9209     PUSH_EXTEND_MORTAL__SV_C(sv);
9210     return sv;
9211 }
9212
9213
9214 /*
9215 =for apidoc newSVpvn_flags
9216
9217 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9218 characters) into it.  The reference count for the
9219 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9220 string.  You are responsible for ensuring that the source string is at least
9221 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9222 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9223 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9224 returning.  If C<SVf_UTF8> is set, C<s>
9225 is considered to be in UTF-8 and the
9226 C<SVf_UTF8> flag will be set on the new SV.
9227 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9228
9229     #define newSVpvn_utf8(s, len, u)                    \
9230         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9231
9232 =cut
9233 */
9234
9235 SV *
9236 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9237 {
9238     SV *sv;
9239
9240     /* All the flags we don't support must be zero.
9241        And we're new code so I'm going to assert this from the start.  */
9242     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9243     new_SV(sv);
9244     sv_setpvn(sv,s,len);
9245
9246     /* This code used to do a sv_2mortal(), however we now unroll the call to
9247      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9248      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9249      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9250      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9251      * means that we eliminate quite a few steps than it looks - Yves
9252      * (explaining patch by gfx) */
9253
9254     SvFLAGS(sv) |= flags;
9255
9256     if(flags & SVs_TEMP){
9257         PUSH_EXTEND_MORTAL__SV_C(sv);
9258     }
9259
9260     return sv;
9261 }
9262
9263 /*
9264 =for apidoc sv_2mortal
9265
9266 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9267 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9268 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9269 string buffer can be "stolen" if this SV is copied.  See also
9270 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9271
9272 =cut
9273 */
9274
9275 SV *
9276 Perl_sv_2mortal(pTHX_ SV *const sv)
9277 {
9278     dVAR;
9279     if (!sv)
9280         return sv;
9281     if (SvIMMORTAL(sv))
9282         return sv;
9283     PUSH_EXTEND_MORTAL__SV_C(sv);
9284     SvTEMP_on(sv);
9285     return sv;
9286 }
9287
9288 /*
9289 =for apidoc newSVpv
9290
9291 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9292 characters) into it.  The reference count for the
9293 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9294 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9295 C<NUL> characters and has to have a terminating C<NUL> byte).
9296
9297 This function can cause reliability issues if you are likely to pass in
9298 empty strings that are not null terminated, because it will run
9299 strlen on the string and potentially run past valid memory.
9300
9301 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9302 For string literals use L</newSVpvs> instead.  This function will work fine for
9303 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9304 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9305
9306 =cut
9307 */
9308
9309 SV *
9310 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9311 {
9312     SV *sv;
9313
9314     new_SV(sv);
9315     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9316     return sv;
9317 }
9318
9319 /*
9320 =for apidoc newSVpvn
9321
9322 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9323 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9324 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9325 are responsible for ensuring that the source buffer is at least
9326 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9327 undefined.
9328
9329 =cut
9330 */
9331
9332 SV *
9333 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9334 {
9335     SV *sv;
9336     new_SV(sv);
9337     sv_setpvn(sv,buffer,len);
9338     return sv;
9339 }
9340
9341 /*
9342 =for apidoc newSVhek
9343
9344 Creates a new SV from the hash key structure.  It will generate scalars that
9345 point to the shared string table where possible.  Returns a new (undefined)
9346 SV if C<hek> is NULL.
9347
9348 =cut
9349 */
9350
9351 SV *
9352 Perl_newSVhek(pTHX_ const HEK *const hek)
9353 {
9354     if (!hek) {
9355         SV *sv;
9356
9357         new_SV(sv);
9358         return sv;
9359     }
9360
9361     if (HEK_LEN(hek) == HEf_SVKEY) {
9362         return newSVsv(*(SV**)HEK_KEY(hek));
9363     } else {
9364         const int flags = HEK_FLAGS(hek);
9365         if (flags & HVhek_WASUTF8) {
9366             /* Trouble :-)
9367                Andreas would like keys he put in as utf8 to come back as utf8
9368             */
9369             STRLEN utf8_len = HEK_LEN(hek);
9370             SV * const sv = newSV_type(SVt_PV);
9371             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9372             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9373             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9374             SvUTF8_on (sv);
9375             return sv;
9376         } else if (flags & HVhek_UNSHARED) {
9377             /* A hash that isn't using shared hash keys has to have
9378                the flag in every key so that we know not to try to call
9379                share_hek_hek on it.  */
9380
9381             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9382             if (HEK_UTF8(hek))
9383                 SvUTF8_on (sv);
9384             return sv;
9385         }
9386         /* This will be overwhelminly the most common case.  */
9387         {
9388             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9389                more efficient than sharepvn().  */
9390             SV *sv;
9391
9392             new_SV(sv);
9393             sv_upgrade(sv, SVt_PV);
9394             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9395             SvCUR_set(sv, HEK_LEN(hek));
9396             SvLEN_set(sv, 0);
9397             SvIsCOW_on(sv);
9398             SvPOK_on(sv);
9399             if (HEK_UTF8(hek))
9400                 SvUTF8_on(sv);
9401             return sv;
9402         }
9403     }
9404 }
9405
9406 /*
9407 =for apidoc newSVpvn_share
9408
9409 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9410 table.  If the string does not already exist in the table, it is
9411 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9412 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9413 is non-zero, that value is used; otherwise the hash is computed.
9414 The string's hash can later be retrieved from the SV
9415 with the C<SvSHARED_HASH()> macro.  The idea here is
9416 that as the string table is used for shared hash keys these strings will have
9417 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9418
9419 =cut
9420 */
9421
9422 SV *
9423 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9424 {
9425     dVAR;
9426     SV *sv;
9427     bool is_utf8 = FALSE;
9428     const char *const orig_src = src;
9429
9430     if (len < 0) {
9431         STRLEN tmplen = -len;
9432         is_utf8 = TRUE;
9433         /* See the note in hv.c:hv_fetch() --jhi */
9434         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9435         len = tmplen;
9436     }
9437     if (!hash)
9438         PERL_HASH(hash, src, len);
9439     new_SV(sv);
9440     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9441        changes here, update it there too.  */
9442     sv_upgrade(sv, SVt_PV);
9443     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9444     SvCUR_set(sv, len);
9445     SvLEN_set(sv, 0);
9446     SvIsCOW_on(sv);
9447     SvPOK_on(sv);
9448     if (is_utf8)
9449         SvUTF8_on(sv);
9450     if (src != orig_src)
9451         Safefree(src);
9452     return sv;
9453 }
9454
9455 /*
9456 =for apidoc newSVpv_share
9457
9458 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9459 string/length pair.
9460
9461 =cut
9462 */
9463
9464 SV *
9465 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9466 {
9467     return newSVpvn_share(src, strlen(src), hash);
9468 }
9469
9470 #if defined(PERL_IMPLICIT_CONTEXT)
9471
9472 /* pTHX_ magic can't cope with varargs, so this is a no-context
9473  * version of the main function, (which may itself be aliased to us).
9474  * Don't access this version directly.
9475  */
9476
9477 SV *
9478 Perl_newSVpvf_nocontext(const char *const pat, ...)
9479 {
9480     dTHX;
9481     SV *sv;
9482     va_list args;
9483
9484     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9485
9486     va_start(args, pat);
9487     sv = vnewSVpvf(pat, &args);
9488     va_end(args);
9489     return sv;
9490 }
9491 #endif
9492
9493 /*
9494 =for apidoc newSVpvf
9495
9496 Creates a new SV and initializes it with the string formatted like
9497 C<sv_catpvf>.
9498
9499 =cut
9500 */
9501
9502 SV *
9503 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9504 {
9505     SV *sv;
9506     va_list args;
9507
9508     PERL_ARGS_ASSERT_NEWSVPVF;
9509
9510     va_start(args, pat);
9511     sv = vnewSVpvf(pat, &args);
9512     va_end(args);
9513     return sv;
9514 }
9515
9516 /* backend for newSVpvf() and newSVpvf_nocontext() */
9517
9518 SV *
9519 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9520 {
9521     SV *sv;
9522
9523     PERL_ARGS_ASSERT_VNEWSVPVF;
9524
9525     new_SV(sv);
9526     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9527     return sv;
9528 }
9529
9530 /*
9531 =for apidoc newSVnv
9532
9533 Creates a new SV and copies a floating point value into it.
9534 The reference count for the SV is set to 1.
9535
9536 =cut
9537 */
9538
9539 SV *
9540 Perl_newSVnv(pTHX_ const NV n)
9541 {
9542     SV *sv;
9543
9544     new_SV(sv);
9545     sv_setnv(sv,n);
9546     return sv;
9547 }
9548
9549 /*
9550 =for apidoc newSViv
9551
9552 Creates a new SV and copies an integer into it.  The reference count for the
9553 SV is set to 1.
9554
9555 =cut
9556 */
9557
9558 SV *
9559 Perl_newSViv(pTHX_ const IV i)
9560 {
9561     SV *sv;
9562
9563     new_SV(sv);
9564
9565     /* Inlining ONLY the small relevant subset of sv_setiv here
9566      * for performance. Makes a significant difference. */
9567
9568     /* We're starting from SVt_FIRST, so provided that's
9569      * actual 0, we don't have to unset any SV type flags
9570      * to promote to SVt_IV. */
9571     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9572
9573     SET_SVANY_FOR_BODYLESS_IV(sv);
9574     SvFLAGS(sv) |= SVt_IV;
9575     (void)SvIOK_on(sv);
9576
9577     SvIV_set(sv, i);
9578     SvTAINT(sv);
9579
9580     return sv;
9581 }
9582
9583 /*
9584 =for apidoc newSVuv
9585
9586 Creates a new SV and copies an unsigned integer into it.
9587 The reference count for the SV is set to 1.
9588
9589 =cut
9590 */
9591
9592 SV *
9593 Perl_newSVuv(pTHX_ const UV u)
9594 {
9595     SV *sv;
9596
9597     /* Inlining ONLY the small relevant subset of sv_setuv here
9598      * for performance. Makes a significant difference. */
9599
9600     /* Using ivs is more efficient than using uvs - see sv_setuv */
9601     if (u <= (UV)IV_MAX) {
9602         return newSViv((IV)u);
9603     }
9604
9605     new_SV(sv);
9606
9607     /* We're starting from SVt_FIRST, so provided that's
9608      * actual 0, we don't have to unset any SV type flags
9609      * to promote to SVt_IV. */
9610     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9611
9612     SET_SVANY_FOR_BODYLESS_IV(sv);
9613     SvFLAGS(sv) |= SVt_IV;
9614     (void)SvIOK_on(sv);
9615     (void)SvIsUV_on(sv);
9616
9617     SvUV_set(sv, u);
9618     SvTAINT(sv);
9619
9620     return sv;
9621 }
9622
9623 /*
9624 =for apidoc newSV_type
9625
9626 Creates a new SV, of the type specified.  The reference count for the new SV
9627 is set to 1.
9628
9629 =cut
9630 */
9631
9632 SV *
9633 Perl_newSV_type(pTHX_ const svtype type)
9634 {
9635     SV *sv;
9636
9637     new_SV(sv);
9638     ASSUME(SvTYPE(sv) == SVt_FIRST);
9639     if(type != SVt_FIRST)
9640         sv_upgrade(sv, type);
9641     return sv;
9642 }
9643
9644 /*
9645 =for apidoc newRV_noinc
9646
9647 Creates an RV wrapper for an SV.  The reference count for the original
9648 SV is B<not> incremented.
9649
9650 =cut
9651 */
9652
9653 SV *
9654 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9655 {
9656     SV *sv;
9657
9658     PERL_ARGS_ASSERT_NEWRV_NOINC;
9659
9660     new_SV(sv);
9661
9662     /* We're starting from SVt_FIRST, so provided that's
9663      * actual 0, we don't have to unset any SV type flags
9664      * to promote to SVt_IV. */
9665     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9666
9667     SET_SVANY_FOR_BODYLESS_IV(sv);
9668     SvFLAGS(sv) |= SVt_IV;
9669     SvROK_on(sv);
9670     SvIV_set(sv, 0);
9671
9672     SvTEMP_off(tmpRef);
9673     SvRV_set(sv, tmpRef);
9674
9675     return sv;
9676 }
9677
9678 /* newRV_inc is the official function name to use now.
9679  * newRV_inc is in fact #defined to newRV in sv.h
9680  */
9681
9682 SV *
9683 Perl_newRV(pTHX_ SV *const sv)
9684 {
9685     PERL_ARGS_ASSERT_NEWRV;
9686
9687     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9688 }
9689
9690 /*
9691 =for apidoc newSVsv
9692
9693 Creates a new SV which is an exact duplicate of the original SV.
9694 (Uses C<sv_setsv>.)
9695
9696 =cut
9697 */
9698
9699 SV *
9700 Perl_newSVsv(pTHX_ SV *const old)
9701 {
9702     SV *sv;
9703
9704     if (!old)
9705         return NULL;
9706     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9707         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9708         return NULL;
9709     }
9710     /* Do this here, otherwise we leak the new SV if this croaks. */
9711     SvGETMAGIC(old);
9712     new_SV(sv);
9713     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9714        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9715     sv_setsv_flags(sv, old, SV_NOSTEAL);
9716     return sv;
9717 }
9718
9719 /*
9720 =for apidoc sv_reset
9721
9722 Underlying implementation for the C<reset> Perl function.
9723 Note that the perl-level function is vaguely deprecated.
9724
9725 =cut
9726 */
9727
9728 void
9729 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9730 {
9731     PERL_ARGS_ASSERT_SV_RESET;
9732
9733     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9734 }
9735
9736 void
9737 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9738 {
9739     char todo[PERL_UCHAR_MAX+1];
9740     const char *send;
9741
9742     if (!stash || SvTYPE(stash) != SVt_PVHV)
9743         return;
9744
9745     if (!s) {           /* reset ?? searches */
9746         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9747         if (mg) {
9748             const U32 count = mg->mg_len / sizeof(PMOP**);
9749             PMOP **pmp = (PMOP**) mg->mg_ptr;
9750             PMOP *const *const end = pmp + count;
9751
9752             while (pmp < end) {
9753 #ifdef USE_ITHREADS
9754                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9755 #else
9756                 (*pmp)->op_pmflags &= ~PMf_USED;
9757 #endif
9758                 ++pmp;
9759             }
9760         }
9761         return;
9762     }
9763
9764     /* reset variables */
9765
9766     if (!HvARRAY(stash))
9767         return;
9768
9769     Zero(todo, 256, char);
9770     send = s + len;
9771     while (s < send) {
9772         I32 max;
9773         I32 i = (unsigned char)*s;
9774         if (s[1] == '-') {
9775             s += 2;
9776         }
9777         max = (unsigned char)*s++;
9778         for ( ; i <= max; i++) {
9779             todo[i] = 1;
9780         }
9781         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9782             HE *entry;
9783             for (entry = HvARRAY(stash)[i];
9784                  entry;
9785                  entry = HeNEXT(entry))
9786             {
9787                 GV *gv;
9788                 SV *sv;
9789
9790                 if (!todo[(U8)*HeKEY(entry)])
9791                     continue;
9792                 gv = MUTABLE_GV(HeVAL(entry));
9793                 if (!isGV(gv))
9794                     continue;
9795                 sv = GvSV(gv);
9796                 if (sv && !SvREADONLY(sv)) {
9797                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9798                     if (!isGV(sv)) SvOK_off(sv);
9799                 }
9800                 if (GvAV(gv)) {
9801                     av_clear(GvAV(gv));
9802                 }
9803                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9804                     hv_clear(GvHV(gv));
9805                 }
9806             }
9807         }
9808     }
9809 }
9810
9811 /*
9812 =for apidoc sv_2io
9813
9814 Using various gambits, try to get an IO from an SV: the IO slot if its a
9815 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9816 named after the PV if we're a string.
9817
9818 'Get' magic is ignored on the C<sv> passed in, but will be called on
9819 C<SvRV(sv)> if C<sv> is an RV.
9820
9821 =cut
9822 */
9823
9824 IO*
9825 Perl_sv_2io(pTHX_ SV *const sv)
9826 {
9827     IO* io;
9828     GV* gv;
9829
9830     PERL_ARGS_ASSERT_SV_2IO;
9831
9832     switch (SvTYPE(sv)) {
9833     case SVt_PVIO:
9834         io = MUTABLE_IO(sv);
9835         break;
9836     case SVt_PVGV:
9837     case SVt_PVLV:
9838         if (isGV_with_GP(sv)) {
9839             gv = MUTABLE_GV(sv);
9840             io = GvIO(gv);
9841             if (!io)
9842                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9843                                     HEKfARG(GvNAME_HEK(gv)));
9844             break;
9845         }
9846         /* FALLTHROUGH */
9847     default:
9848         if (!SvOK(sv))
9849             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9850         if (SvROK(sv)) {
9851             SvGETMAGIC(SvRV(sv));
9852             return sv_2io(SvRV(sv));
9853         }
9854         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9855         if (gv)
9856             io = GvIO(gv);
9857         else
9858             io = 0;
9859         if (!io) {
9860             SV *newsv = sv;
9861             if (SvGMAGICAL(sv)) {
9862                 newsv = sv_newmortal();
9863                 sv_setsv_nomg(newsv, sv);
9864             }
9865             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9866         }
9867         break;
9868     }
9869     return io;
9870 }
9871
9872 /*
9873 =for apidoc sv_2cv
9874
9875 Using various gambits, try to get a CV from an SV; in addition, try if
9876 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9877 The flags in C<lref> are passed to C<gv_fetchsv>.
9878
9879 =cut
9880 */
9881
9882 CV *
9883 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9884 {
9885     GV *gv = NULL;
9886     CV *cv = NULL;
9887
9888     PERL_ARGS_ASSERT_SV_2CV;
9889
9890     if (!sv) {
9891         *st = NULL;
9892         *gvp = NULL;
9893         return NULL;
9894     }
9895     switch (SvTYPE(sv)) {
9896     case SVt_PVCV:
9897         *st = CvSTASH(sv);
9898         *gvp = NULL;
9899         return MUTABLE_CV(sv);
9900     case SVt_PVHV:
9901     case SVt_PVAV:
9902         *st = NULL;
9903         *gvp = NULL;
9904         return NULL;
9905     default:
9906         SvGETMAGIC(sv);
9907         if (SvROK(sv)) {
9908             if (SvAMAGIC(sv))
9909                 sv = amagic_deref_call(sv, to_cv_amg);
9910
9911             sv = SvRV(sv);
9912             if (SvTYPE(sv) == SVt_PVCV) {
9913                 cv = MUTABLE_CV(sv);
9914                 *gvp = NULL;
9915                 *st = CvSTASH(cv);
9916                 return cv;
9917             }
9918             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9919                 gv = MUTABLE_GV(sv);
9920             else
9921                 Perl_croak(aTHX_ "Not a subroutine reference");
9922         }
9923         else if (isGV_with_GP(sv)) {
9924             gv = MUTABLE_GV(sv);
9925         }
9926         else {
9927             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9928         }
9929         *gvp = gv;
9930         if (!gv) {
9931             *st = NULL;
9932             return NULL;
9933         }
9934         /* Some flags to gv_fetchsv mean don't really create the GV  */
9935         if (!isGV_with_GP(gv)) {
9936             *st = NULL;
9937             return NULL;
9938         }
9939         *st = GvESTASH(gv);
9940         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9941             /* XXX this is probably not what they think they're getting.
9942              * It has the same effect as "sub name;", i.e. just a forward
9943              * declaration! */
9944             newSTUB(gv,0);
9945         }
9946         return GvCVu(gv);
9947     }
9948 }
9949
9950 /*
9951 =for apidoc sv_true
9952
9953 Returns true if the SV has a true value by Perl's rules.
9954 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9955 instead use an in-line version.
9956
9957 =cut
9958 */
9959
9960 I32
9961 Perl_sv_true(pTHX_ SV *const sv)
9962 {
9963     if (!sv)
9964         return 0;
9965     if (SvPOK(sv)) {
9966         const XPV* const tXpv = (XPV*)SvANY(sv);
9967         if (tXpv &&
9968                 (tXpv->xpv_cur > 1 ||
9969                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9970             return 1;
9971         else
9972             return 0;
9973     }
9974     else {
9975         if (SvIOK(sv))
9976             return SvIVX(sv) != 0;
9977         else {
9978             if (SvNOK(sv))
9979                 return SvNVX(sv) != 0.0;
9980             else
9981                 return sv_2bool(sv);
9982         }
9983     }
9984 }
9985
9986 /*
9987 =for apidoc sv_pvn_force
9988
9989 Get a sensible string out of the SV somehow.
9990 A private implementation of the C<SvPV_force> macro for compilers which
9991 can't cope with complex macro expressions.  Always use the macro instead.
9992
9993 =for apidoc sv_pvn_force_flags
9994
9995 Get a sensible string out of the SV somehow.
9996 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9997 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9998 implemented in terms of this function.
9999 You normally want to use the various wrapper macros instead: see
10000 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10001
10002 =cut
10003 */
10004
10005 char *
10006 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10007 {
10008     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10009
10010     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10011     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10012         sv_force_normal_flags(sv, 0);
10013
10014     if (SvPOK(sv)) {
10015         if (lp)
10016             *lp = SvCUR(sv);
10017     }
10018     else {
10019         char *s;
10020         STRLEN len;
10021  
10022         if (SvTYPE(sv) > SVt_PVLV
10023             || isGV_with_GP(sv))
10024             /* diag_listed_as: Can't coerce %s to %s in %s */
10025             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10026                 OP_DESC(PL_op));
10027         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10028         if (!s) {
10029           s = (char *)"";
10030         }
10031         if (lp)
10032             *lp = len;
10033
10034         if (SvTYPE(sv) < SVt_PV ||
10035             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10036             if (SvROK(sv))
10037                 sv_unref(sv);
10038             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10039             SvGROW(sv, len + 1);
10040             Move(s,SvPVX(sv),len,char);
10041             SvCUR_set(sv, len);
10042             SvPVX(sv)[len] = '\0';
10043         }
10044         if (!SvPOK(sv)) {
10045             SvPOK_on(sv);               /* validate pointer */
10046             SvTAINT(sv);
10047             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10048                                   PTR2UV(sv),SvPVX_const(sv)));
10049         }
10050     }
10051     (void)SvPOK_only_UTF8(sv);
10052     return SvPVX_mutable(sv);
10053 }
10054
10055 /*
10056 =for apidoc sv_pvbyten_force
10057
10058 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10059 instead.
10060
10061 =cut
10062 */
10063
10064 char *
10065 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10066 {
10067     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10068
10069     sv_pvn_force(sv,lp);
10070     sv_utf8_downgrade(sv,0);
10071     *lp = SvCUR(sv);
10072     return SvPVX(sv);
10073 }
10074
10075 /*
10076 =for apidoc sv_pvutf8n_force
10077
10078 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10079 instead.
10080
10081 =cut
10082 */
10083
10084 char *
10085 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10086 {
10087     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10088
10089     sv_pvn_force(sv,0);
10090     sv_utf8_upgrade_nomg(sv);
10091     *lp = SvCUR(sv);
10092     return SvPVX(sv);
10093 }
10094
10095 /*
10096 =for apidoc sv_reftype
10097
10098 Returns a string describing what the SV is a reference to.
10099
10100 If ob is true and the SV is blessed, the string is the class name,
10101 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10102
10103 =cut
10104 */
10105
10106 const char *
10107 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10108 {
10109     PERL_ARGS_ASSERT_SV_REFTYPE;
10110     if (ob && SvOBJECT(sv)) {
10111         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10112     }
10113     else {
10114         /* WARNING - There is code, for instance in mg.c, that assumes that
10115          * the only reason that sv_reftype(sv,0) would return a string starting
10116          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10117          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10118          * this routine inside other subs, and it saves time.
10119          * Do not change this assumption without searching for "dodgy type check" in
10120          * the code.
10121          * - Yves */
10122         switch (SvTYPE(sv)) {
10123         case SVt_NULL:
10124         case SVt_IV:
10125         case SVt_NV:
10126         case SVt_PV:
10127         case SVt_PVIV:
10128         case SVt_PVNV:
10129         case SVt_PVMG:
10130                                 if (SvVOK(sv))
10131                                     return "VSTRING";
10132                                 if (SvROK(sv))
10133                                     return "REF";
10134                                 else
10135                                     return "SCALAR";
10136
10137         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10138                                 /* tied lvalues should appear to be
10139                                  * scalars for backwards compatibility */
10140                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10141                                     ? "SCALAR" : "LVALUE");
10142         case SVt_PVAV:          return "ARRAY";
10143         case SVt_PVHV:          return "HASH";
10144         case SVt_PVCV:          return "CODE";
10145         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10146                                     ? "GLOB" : "SCALAR");
10147         case SVt_PVFM:          return "FORMAT";
10148         case SVt_PVIO:          return "IO";
10149         case SVt_INVLIST:       return "INVLIST";
10150         case SVt_REGEXP:        return "REGEXP";
10151         default:                return "UNKNOWN";
10152         }
10153     }
10154 }
10155
10156 /*
10157 =for apidoc sv_ref
10158
10159 Returns a SV describing what the SV passed in is a reference to.
10160
10161 dst can be a SV to be set to the description or NULL, in which case a
10162 mortal SV is returned.
10163
10164 If ob is true and the SV is blessed, the description is the class
10165 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10166
10167 =cut
10168 */
10169
10170 SV *
10171 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10172 {
10173     PERL_ARGS_ASSERT_SV_REF;
10174
10175     if (!dst)
10176         dst = sv_newmortal();
10177
10178     if (ob && SvOBJECT(sv)) {
10179         HvNAME_get(SvSTASH(sv))
10180                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10181                     : sv_setpvs(dst, "__ANON__");
10182     }
10183     else {
10184         const char * reftype = sv_reftype(sv, 0);
10185         sv_setpv(dst, reftype);
10186     }
10187     return dst;
10188 }
10189
10190 /*
10191 =for apidoc sv_isobject
10192
10193 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10194 object.  If the SV is not an RV, or if the object is not blessed, then this
10195 will return false.
10196
10197 =cut
10198 */
10199
10200 int
10201 Perl_sv_isobject(pTHX_ SV *sv)
10202 {
10203     if (!sv)
10204         return 0;
10205     SvGETMAGIC(sv);
10206     if (!SvROK(sv))
10207         return 0;
10208     sv = SvRV(sv);
10209     if (!SvOBJECT(sv))
10210         return 0;
10211     return 1;
10212 }
10213
10214 /*
10215 =for apidoc sv_isa
10216
10217 Returns a boolean indicating whether the SV is blessed into the specified
10218 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10219 an inheritance relationship.
10220
10221 =cut
10222 */
10223
10224 int
10225 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10226 {
10227     const char *hvname;
10228
10229     PERL_ARGS_ASSERT_SV_ISA;
10230
10231     if (!sv)
10232         return 0;
10233     SvGETMAGIC(sv);
10234     if (!SvROK(sv))
10235         return 0;
10236     sv = SvRV(sv);
10237     if (!SvOBJECT(sv))
10238         return 0;
10239     hvname = HvNAME_get(SvSTASH(sv));
10240     if (!hvname)
10241         return 0;
10242
10243     return strEQ(hvname, name);
10244 }
10245
10246 /*
10247 =for apidoc newSVrv
10248
10249 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10250 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10251 SV will be blessed in the specified package.  The new SV is returned and its
10252 reference count is 1.  The reference count 1 is owned by C<rv>.
10253
10254 =cut
10255 */
10256
10257 SV*
10258 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10259 {
10260     SV *sv;
10261
10262     PERL_ARGS_ASSERT_NEWSVRV;
10263
10264     new_SV(sv);
10265
10266     SV_CHECK_THINKFIRST_COW_DROP(rv);
10267
10268     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10269         const U32 refcnt = SvREFCNT(rv);
10270         SvREFCNT(rv) = 0;
10271         sv_clear(rv);
10272         SvFLAGS(rv) = 0;
10273         SvREFCNT(rv) = refcnt;
10274
10275         sv_upgrade(rv, SVt_IV);
10276     } else if (SvROK(rv)) {
10277         SvREFCNT_dec(SvRV(rv));
10278     } else {
10279         prepare_SV_for_RV(rv);
10280     }
10281
10282     SvOK_off(rv);
10283     SvRV_set(rv, sv);
10284     SvROK_on(rv);
10285
10286     if (classname) {
10287         HV* const stash = gv_stashpv(classname, GV_ADD);
10288         (void)sv_bless(rv, stash);
10289     }
10290     return sv;
10291 }
10292
10293 SV *
10294 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10295 {
10296     SV * const lv = newSV_type(SVt_PVLV);
10297     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10298     LvTYPE(lv) = 'y';
10299     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10300     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10301     LvSTARGOFF(lv) = ix;
10302     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10303     return lv;
10304 }
10305
10306 /*
10307 =for apidoc sv_setref_pv
10308
10309 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10310 argument will be upgraded to an RV.  That RV will be modified to point to
10311 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10312 into the SV.  The C<classname> argument indicates the package for the
10313 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10314 will have a reference count of 1, and the RV will be returned.
10315
10316 Do not use with other Perl types such as HV, AV, SV, CV, because those
10317 objects will become corrupted by the pointer copy process.
10318
10319 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10320
10321 =cut
10322 */
10323
10324 SV*
10325 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10326 {
10327     PERL_ARGS_ASSERT_SV_SETREF_PV;
10328
10329     if (!pv) {
10330         sv_set_undef(rv);
10331         SvSETMAGIC(rv);
10332     }
10333     else
10334         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10335     return rv;
10336 }
10337
10338 /*
10339 =for apidoc sv_setref_iv
10340
10341 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10342 argument will be upgraded to an RV.  That RV will be modified to point to
10343 the new SV.  The C<classname> argument indicates the package for the
10344 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10345 will have a reference count of 1, and the RV will be returned.
10346
10347 =cut
10348 */
10349
10350 SV*
10351 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10352 {
10353     PERL_ARGS_ASSERT_SV_SETREF_IV;
10354
10355     sv_setiv(newSVrv(rv,classname), iv);
10356     return rv;
10357 }
10358
10359 /*
10360 =for apidoc sv_setref_uv
10361
10362 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10363 argument will be upgraded to an RV.  That RV will be modified to point to
10364 the new SV.  The C<classname> argument indicates the package for the
10365 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10366 will have a reference count of 1, and the RV will be returned.
10367
10368 =cut
10369 */
10370
10371 SV*
10372 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10373 {
10374     PERL_ARGS_ASSERT_SV_SETREF_UV;
10375
10376     sv_setuv(newSVrv(rv,classname), uv);
10377     return rv;
10378 }
10379
10380 /*
10381 =for apidoc sv_setref_nv
10382
10383 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10384 argument will be upgraded to an RV.  That RV will be modified to point to
10385 the new SV.  The C<classname> argument indicates the package for the
10386 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10387 will have a reference count of 1, and the RV will be returned.
10388
10389 =cut
10390 */
10391
10392 SV*
10393 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10394 {
10395     PERL_ARGS_ASSERT_SV_SETREF_NV;
10396
10397     sv_setnv(newSVrv(rv,classname), nv);
10398     return rv;
10399 }
10400
10401 /*
10402 =for apidoc sv_setref_pvn
10403
10404 Copies a string into a new SV, optionally blessing the SV.  The length of the
10405 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10406 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10407 argument indicates the package for the blessing.  Set C<classname> to
10408 C<NULL> to avoid the blessing.  The new SV will have a reference count
10409 of 1, and the RV will be returned.
10410
10411 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10412
10413 =cut
10414 */
10415
10416 SV*
10417 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10418                    const char *const pv, const STRLEN n)
10419 {
10420     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10421
10422     sv_setpvn(newSVrv(rv,classname), pv, n);
10423     return rv;
10424 }
10425
10426 /*
10427 =for apidoc sv_bless
10428
10429 Blesses an SV into a specified package.  The SV must be an RV.  The package
10430 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10431 of the SV is unaffected.
10432
10433 =cut
10434 */
10435
10436 SV*
10437 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10438 {
10439     SV *tmpRef;
10440     HV *oldstash = NULL;
10441
10442     PERL_ARGS_ASSERT_SV_BLESS;
10443
10444     SvGETMAGIC(sv);
10445     if (!SvROK(sv))
10446         Perl_croak(aTHX_ "Can't bless non-reference value");
10447     tmpRef = SvRV(sv);
10448     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10449         if (SvREADONLY(tmpRef))
10450             Perl_croak_no_modify();
10451         if (SvOBJECT(tmpRef)) {
10452             oldstash = SvSTASH(tmpRef);
10453         }
10454     }
10455     SvOBJECT_on(tmpRef);
10456     SvUPGRADE(tmpRef, SVt_PVMG);
10457     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10458     SvREFCNT_dec(oldstash);
10459
10460     if(SvSMAGICAL(tmpRef))
10461         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10462             mg_set(tmpRef);
10463
10464
10465
10466     return sv;
10467 }
10468
10469 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10470  * as it is after unglobbing it.
10471  */
10472
10473 PERL_STATIC_INLINE void
10474 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10475 {
10476     void *xpvmg;
10477     HV *stash;
10478     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10479
10480     PERL_ARGS_ASSERT_SV_UNGLOB;
10481
10482     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10483     SvFAKE_off(sv);
10484     if (!(flags & SV_COW_DROP_PV))
10485         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10486
10487     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10488     if (GvGP(sv)) {
10489         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10490            && HvNAME_get(stash))
10491             mro_method_changed_in(stash);
10492         gp_free(MUTABLE_GV(sv));
10493     }
10494     if (GvSTASH(sv)) {
10495         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10496         GvSTASH(sv) = NULL;
10497     }
10498     GvMULTI_off(sv);
10499     if (GvNAME_HEK(sv)) {
10500         unshare_hek(GvNAME_HEK(sv));
10501     }
10502     isGV_with_GP_off(sv);
10503
10504     if(SvTYPE(sv) == SVt_PVGV) {
10505         /* need to keep SvANY(sv) in the right arena */
10506         xpvmg = new_XPVMG();
10507         StructCopy(SvANY(sv), xpvmg, XPVMG);
10508         del_XPVGV(SvANY(sv));
10509         SvANY(sv) = xpvmg;
10510
10511         SvFLAGS(sv) &= ~SVTYPEMASK;
10512         SvFLAGS(sv) |= SVt_PVMG;
10513     }
10514
10515     /* Intentionally not calling any local SET magic, as this isn't so much a
10516        set operation as merely an internal storage change.  */
10517     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10518     else sv_setsv_flags(sv, temp, 0);
10519
10520     if ((const GV *)sv == PL_last_in_gv)
10521         PL_last_in_gv = NULL;
10522     else if ((const GV *)sv == PL_statgv)
10523         PL_statgv = NULL;
10524 }
10525
10526 /*
10527 =for apidoc sv_unref_flags
10528
10529 Unsets the RV status of the SV, and decrements the reference count of
10530 whatever was being referenced by the RV.  This can almost be thought of
10531 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10532 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10533 (otherwise the decrementing is conditional on the reference count being
10534 different from one or the reference being a readonly SV).
10535 See C<L</SvROK_off>>.
10536
10537 =cut
10538 */
10539
10540 void
10541 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10542 {
10543     SV* const target = SvRV(ref);
10544
10545     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10546
10547     if (SvWEAKREF(ref)) {
10548         sv_del_backref(target, ref);
10549         SvWEAKREF_off(ref);
10550         SvRV_set(ref, NULL);
10551         return;
10552     }
10553     SvRV_set(ref, NULL);
10554     SvROK_off(ref);
10555     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10556        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10557     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10558         SvREFCNT_dec_NN(target);
10559     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10560         sv_2mortal(target);     /* Schedule for freeing later */
10561 }
10562
10563 /*
10564 =for apidoc sv_untaint
10565
10566 Untaint an SV.  Use C<SvTAINTED_off> instead.
10567
10568 =cut
10569 */
10570
10571 void
10572 Perl_sv_untaint(pTHX_ SV *const sv)
10573 {
10574     PERL_ARGS_ASSERT_SV_UNTAINT;
10575     PERL_UNUSED_CONTEXT;
10576
10577     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10578         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10579         if (mg)
10580             mg->mg_len &= ~1;
10581     }
10582 }
10583
10584 /*
10585 =for apidoc sv_tainted
10586
10587 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10588
10589 =cut
10590 */
10591
10592 bool
10593 Perl_sv_tainted(pTHX_ SV *const sv)
10594 {
10595     PERL_ARGS_ASSERT_SV_TAINTED;
10596     PERL_UNUSED_CONTEXT;
10597
10598     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10599         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10600         if (mg && (mg->mg_len & 1) )
10601             return TRUE;
10602     }
10603     return FALSE;
10604 }
10605
10606 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10607                        private to this file */
10608
10609 /*
10610 =for apidoc sv_setpviv
10611
10612 Copies an integer into the given SV, also updating its string value.
10613 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10614
10615 =cut
10616 */
10617
10618 void
10619 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10620 {
10621     char buf[TYPE_CHARS(UV)];
10622     char *ebuf;
10623     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10624
10625     PERL_ARGS_ASSERT_SV_SETPVIV;
10626
10627     sv_setpvn(sv, ptr, ebuf - ptr);
10628 }
10629
10630 /*
10631 =for apidoc sv_setpviv_mg
10632
10633 Like C<sv_setpviv>, but also handles 'set' magic.
10634
10635 =cut
10636 */
10637
10638 void
10639 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10640 {
10641     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10642
10643     sv_setpviv(sv, iv);
10644     SvSETMAGIC(sv);
10645 }
10646
10647 #endif  /* NO_MATHOMS */
10648
10649 #if defined(PERL_IMPLICIT_CONTEXT)
10650
10651 /* pTHX_ magic can't cope with varargs, so this is a no-context
10652  * version of the main function, (which may itself be aliased to us).
10653  * Don't access this version directly.
10654  */
10655
10656 void
10657 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10658 {
10659     dTHX;
10660     va_list args;
10661
10662     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10663
10664     va_start(args, pat);
10665     sv_vsetpvf(sv, pat, &args);
10666     va_end(args);
10667 }
10668
10669 /* pTHX_ magic can't cope with varargs, so this is a no-context
10670  * version of the main function, (which may itself be aliased to us).
10671  * Don't access this version directly.
10672  */
10673
10674 void
10675 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10676 {
10677     dTHX;
10678     va_list args;
10679
10680     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10681
10682     va_start(args, pat);
10683     sv_vsetpvf_mg(sv, pat, &args);
10684     va_end(args);
10685 }
10686 #endif
10687
10688 /*
10689 =for apidoc sv_setpvf
10690
10691 Works like C<sv_catpvf> but copies the text into the SV instead of
10692 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10693
10694 =cut
10695 */
10696
10697 void
10698 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10699 {
10700     va_list args;
10701
10702     PERL_ARGS_ASSERT_SV_SETPVF;
10703
10704     va_start(args, pat);
10705     sv_vsetpvf(sv, pat, &args);
10706     va_end(args);
10707 }
10708
10709 /*
10710 =for apidoc sv_vsetpvf
10711
10712 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10713 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10714
10715 Usually used via its frontend C<sv_setpvf>.
10716
10717 =cut
10718 */
10719
10720 void
10721 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10722 {
10723     PERL_ARGS_ASSERT_SV_VSETPVF;
10724
10725     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10726 }
10727
10728 /*
10729 =for apidoc sv_setpvf_mg
10730
10731 Like C<sv_setpvf>, but also handles 'set' magic.
10732
10733 =cut
10734 */
10735
10736 void
10737 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10738 {
10739     va_list args;
10740
10741     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10742
10743     va_start(args, pat);
10744     sv_vsetpvf_mg(sv, pat, &args);
10745     va_end(args);
10746 }
10747
10748 /*
10749 =for apidoc sv_vsetpvf_mg
10750
10751 Like C<sv_vsetpvf>, but also handles 'set' magic.
10752
10753 Usually used via its frontend C<sv_setpvf_mg>.
10754
10755 =cut
10756 */
10757
10758 void
10759 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10760 {
10761     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10762
10763     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10764     SvSETMAGIC(sv);
10765 }
10766
10767 #if defined(PERL_IMPLICIT_CONTEXT)
10768
10769 /* pTHX_ magic can't cope with varargs, so this is a no-context
10770  * version of the main function, (which may itself be aliased to us).
10771  * Don't access this version directly.
10772  */
10773
10774 void
10775 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10776 {
10777     dTHX;
10778     va_list args;
10779
10780     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10781
10782     va_start(args, pat);
10783     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10784     va_end(args);
10785 }
10786
10787 /* pTHX_ magic can't cope with varargs, so this is a no-context
10788  * version of the main function, (which may itself be aliased to us).
10789  * Don't access this version directly.
10790  */
10791
10792 void
10793 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10794 {
10795     dTHX;
10796     va_list args;
10797
10798     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10799
10800     va_start(args, pat);
10801     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10802     SvSETMAGIC(sv);
10803     va_end(args);
10804 }
10805 #endif
10806
10807 /*
10808 =for apidoc sv_catpvf
10809
10810 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10811 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10812 variable argument list, argument reordering is not supported.
10813 If the appended data contains "wide" characters
10814 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10815 and characters >255 formatted with C<%c>), the original SV might get
10816 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10817 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10818 valid UTF-8; if the original SV was bytes, the pattern should be too.
10819
10820 =cut */
10821
10822 void
10823 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10824 {
10825     va_list args;
10826
10827     PERL_ARGS_ASSERT_SV_CATPVF;
10828
10829     va_start(args, pat);
10830     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10831     va_end(args);
10832 }
10833
10834 /*
10835 =for apidoc sv_vcatpvf
10836
10837 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10838 variable argument list, and appends the formatted output
10839 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10840
10841 Usually used via its frontend C<sv_catpvf>.
10842
10843 =cut
10844 */
10845
10846 void
10847 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10848 {
10849     PERL_ARGS_ASSERT_SV_VCATPVF;
10850
10851     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10852 }
10853
10854 /*
10855 =for apidoc sv_catpvf_mg
10856
10857 Like C<sv_catpvf>, but also handles 'set' magic.
10858
10859 =cut
10860 */
10861
10862 void
10863 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10864 {
10865     va_list args;
10866
10867     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10868
10869     va_start(args, pat);
10870     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10871     SvSETMAGIC(sv);
10872     va_end(args);
10873 }
10874
10875 /*
10876 =for apidoc sv_vcatpvf_mg
10877
10878 Like C<sv_vcatpvf>, but also handles 'set' magic.
10879
10880 Usually used via its frontend C<sv_catpvf_mg>.
10881
10882 =cut
10883 */
10884
10885 void
10886 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10887 {
10888     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10889
10890     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10891     SvSETMAGIC(sv);
10892 }
10893
10894 /*
10895 =for apidoc sv_vsetpvfn
10896
10897 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10898 appending it.
10899
10900 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10901
10902 =cut
10903 */
10904
10905 void
10906 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10907                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
10908 {
10909     PERL_ARGS_ASSERT_SV_VSETPVFN;
10910
10911     SvPVCLEAR(sv);
10912     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
10913 }
10914
10915
10916 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
10917
10918 PERL_STATIC_INLINE void
10919 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
10920 {
10921     STRLEN const need = len + SvCUR(sv) + 1;
10922     char *end;
10923
10924     /* can't wrap as both len and SvCUR() are allocated in
10925      * memory and together can't consume all the address space
10926      */
10927     assert(need > len);
10928
10929     assert(SvPOK(sv));
10930     SvGROW(sv, need);
10931     end = SvEND(sv);
10932     Copy(buf, end, len, char);
10933     end += len;
10934     *end = '\0';
10935     SvCUR_set(sv, need - 1);
10936 }
10937
10938
10939 /*
10940  * Warn of missing argument to sprintf. The value used in place of such
10941  * arguments should be &PL_sv_no; an undefined value would yield
10942  * inappropriate "use of uninit" warnings [perl #71000].
10943  */
10944 STATIC void
10945 S_warn_vcatpvfn_missing_argument(pTHX) {
10946     if (ckWARN(WARN_MISSING)) {
10947         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10948                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10949     }
10950 }
10951
10952
10953 static void
10954 S_croak_overflow()
10955 {
10956     dTHX;
10957     Perl_croak(aTHX_ "Integer overflow in format string for %s",
10958                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10959 }
10960
10961
10962 /* Given an int i from the next arg (if args is true) or an sv from an arg
10963  * (if args is false), try to extract a STRLEN-ranged value from the arg,
10964  * with overflow checking.
10965  * Sets *neg to true if the value was negative (untouched otherwise.
10966  * Returns the absolute value.
10967  * As an extra margin of safety, it croaks if the returned value would
10968  * exceed the maximum value of a STRLEN / 4.
10969  */
10970
10971 static STRLEN
10972 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
10973 {
10974     IV iv;
10975
10976     if (args) {
10977         iv = i;
10978         goto do_iv;
10979     }
10980
10981     if (!sv)
10982         return 0;
10983
10984     SvGETMAGIC(sv);
10985
10986     if (UNLIKELY(SvIsUV(sv))) {
10987         UV uv = SvUV_nomg(sv);
10988         if (uv > IV_MAX)
10989             S_croak_overflow();
10990         iv = uv;
10991     }
10992     else {
10993         iv = SvIV_nomg(sv);
10994       do_iv:
10995         if (iv < 0) {
10996             if (iv < -IV_MAX)
10997                 S_croak_overflow();
10998             iv = -iv;
10999             *neg = TRUE;
11000         }
11001     }
11002
11003     if (iv > (IV)(((STRLEN)~0) / 4))
11004         S_croak_overflow();
11005
11006     return (STRLEN)iv;
11007 }
11008
11009
11010 /* Returns true if c is in the range '1'..'9'
11011  * Written with the cast so it only needs one conditional test
11012  */
11013 #define IS_1_TO_9(c) ((U8)(c - '1') <= 8)
11014
11015 /* Read in and return a number. Updates *pattern to point to the char
11016  * following the number. Expects the first char to 1..9.
11017  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11018  * This is a belt-and-braces safety measure to complement any
11019  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11020  * It means that e.g. on a 32-bit system the width/precision can't be more
11021  * than 1G, which seems reasonable.
11022  */
11023
11024 STATIC STRLEN
11025 S_expect_number(pTHX_ const char **const pattern)
11026 {
11027     STRLEN var;
11028
11029     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11030
11031     assert(IS_1_TO_9(**pattern));
11032
11033     var = *(*pattern)++ - '0';
11034     while (isDIGIT(**pattern)) {
11035         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11036         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11037             S_croak_overflow();
11038         var = var * 10 + (*(*pattern)++ - '0');
11039     }
11040     return var;
11041 }
11042
11043 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11044  * ensures it's big enough), back fill it with the rounded integer part of
11045  * nv. Returns ptr to start of string, and sets *len to its length.
11046  * Returns NULL if not convertible.
11047  */
11048
11049 STATIC char *
11050 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11051 {
11052     const int neg = nv < 0;
11053     UV uv;
11054
11055     PERL_ARGS_ASSERT_F0CONVERT;
11056
11057     assert(!Perl_isinfnan(nv));
11058     if (neg)
11059         nv = -nv;
11060     if (nv < UV_MAX) {
11061         char *p = endbuf;
11062         nv += 0.5;
11063         uv = (UV)nv;
11064         if (uv & 1 && uv == nv)
11065             uv--;                       /* Round to even */
11066         do {
11067             const unsigned dig = uv % 10;
11068             *--p = '0' + dig;
11069         } while (uv /= 10);
11070         if (neg)
11071             *--p = '-';
11072         *len = endbuf - p;
11073         return p;
11074     }
11075     return NULL;
11076 }
11077
11078
11079 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11080
11081 void
11082 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11083                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11084 {
11085     PERL_ARGS_ASSERT_SV_VCATPVFN;
11086
11087     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11088 }
11089
11090
11091 /* For the vcatpvfn code, we need a long double target in case
11092  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11093  * with long double formats, even without NV being long double.  But we
11094  * call the target 'fv' instead of 'nv', since most of the time it is not
11095  * (most compilers these days recognize "long double", even if only as a
11096  * synonym for "double").
11097 */
11098 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11099         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11100 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11101 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11102        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11103 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11104             STMT_START {                                \
11105                 double _dv = nv;                        \
11106                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11107             } STMT_END
11108 #  else
11109 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11110 #  endif
11111    typedef long double vcatpvfn_long_double_t;
11112 #else
11113 #  define VCATPVFN_FV_GF NVgf
11114 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11115    typedef NV vcatpvfn_long_double_t;
11116 #endif
11117
11118 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11119 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11120  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11121  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11122  * after the first 1023 zero bits.
11123  *
11124  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11125  * of dynamically growing buffer might be better, start at just 16 bytes
11126  * (for example) and grow only when necessary.  Or maybe just by looking
11127  * at the exponents of the two doubles? */
11128 #  define DOUBLEDOUBLE_MAXBITS 2098
11129 #endif
11130
11131 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11132  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11133  * per xdigit.  For the double-double case, this can be rather many.
11134  * The non-double-double-long-double overshoots since all bits of NV
11135  * are not mantissa bits, there are also exponent bits. */
11136 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11137 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11138 #else
11139 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11140 #endif
11141
11142 /* If we do not have a known long double format, (including not using
11143  * long doubles, or long doubles being equal to doubles) then we will
11144  * fall back to the ldexp/frexp route, with which we can retrieve at
11145  * most as many bits as our widest unsigned integer type is.  We try
11146  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11147  *
11148  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11149  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11150  */
11151 #if defined(HAS_QUAD) && defined(Uquad_t)
11152 #  define MANTISSATYPE Uquad_t
11153 #  define MANTISSASIZE 8
11154 #else
11155 #  define MANTISSATYPE UV
11156 #  define MANTISSASIZE UVSIZE
11157 #endif
11158
11159 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11160 #  define HEXTRACT_LITTLE_ENDIAN
11161 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11162 #  define HEXTRACT_BIG_ENDIAN
11163 #else
11164 #  define HEXTRACT_MIX_ENDIAN
11165 #endif
11166
11167 /* S_hextract() is a helper for S_format_hexfp, for extracting
11168  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11169  * are being extracted from (either directly from the long double in-memory
11170  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11171  * is used to update the exponent.  The subnormal is set to true
11172  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11173  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11174  *
11175  * The tricky part is that S_hextract() needs to be called twice:
11176  * the first time with vend as NULL, and the second time with vend as
11177  * the pointer returned by the first call.  What happens is that on
11178  * the first round the output size is computed, and the intended
11179  * extraction sanity checked.  On the second round the actual output
11180  * (the extraction of the hexadecimal values) takes place.
11181  * Sanity failures cause fatal failures during both rounds. */
11182 STATIC U8*
11183 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11184            U8* vhex, U8* vend)
11185 {
11186     U8* v = vhex;
11187     int ix;
11188     int ixmin = 0, ixmax = 0;
11189
11190     /* XXX Inf/NaN are not handled here, since it is
11191      * assumed they are to be output as "Inf" and "NaN". */
11192
11193     /* These macros are just to reduce typos, they have multiple
11194      * repetitions below, but usually only one (or sometimes two)
11195      * of them is really being used. */
11196     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11197 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11198 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11199 #define HEXTRACT_OUTPUT(ix) \
11200     STMT_START { \
11201       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11202    } STMT_END
11203 #define HEXTRACT_COUNT(ix, c) \
11204     STMT_START { \
11205       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11206    } STMT_END
11207 #define HEXTRACT_BYTE(ix) \
11208     STMT_START { \
11209       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11210    } STMT_END
11211 #define HEXTRACT_LO_NYBBLE(ix) \
11212     STMT_START { \
11213       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11214    } STMT_END
11215     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11216      * to make it look less odd when the top bits of a NV
11217      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11218      * order bits can be in the "low nybble" of a byte. */
11219 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11220 #define HEXTRACT_BYTES_LE(a, b) \
11221     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11222 #define HEXTRACT_BYTES_BE(a, b) \
11223     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11224 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11225 #define HEXTRACT_IMPLICIT_BIT(nv) \
11226     STMT_START { \
11227         if (!*subnormal) { \
11228             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11229         } \
11230    } STMT_END
11231
11232 /* Most formats do.  Those which don't should undef this.
11233  *
11234  * But also note that IEEE 754 subnormals do not have it, or,
11235  * expressed alternatively, their implicit bit is zero. */
11236 #define HEXTRACT_HAS_IMPLICIT_BIT
11237
11238 /* Many formats do.  Those which don't should undef this. */
11239 #define HEXTRACT_HAS_TOP_NYBBLE
11240
11241     /* HEXTRACTSIZE is the maximum number of xdigits. */
11242 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11243 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11244 #else
11245 #  define HEXTRACTSIZE 2 * NVSIZE
11246 #endif
11247
11248     const U8* vmaxend = vhex + HEXTRACTSIZE;
11249
11250     assert(HEXTRACTSIZE <= VHEX_SIZE);
11251
11252     PERL_UNUSED_VAR(ix); /* might happen */
11253     (void)Perl_frexp(PERL_ABS(nv), exponent);
11254     *subnormal = FALSE;
11255     if (vend && (vend <= vhex || vend > vmaxend)) {
11256         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11257         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11258     }
11259     {
11260         /* First check if using long doubles. */
11261 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11262 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11263         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11264          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11265         /* The bytes 13..0 are the mantissa/fraction,
11266          * the 15,14 are the sign+exponent. */
11267         const U8* nvp = (const U8*)(&nv);
11268         HEXTRACT_GET_SUBNORMAL(nv);
11269         HEXTRACT_IMPLICIT_BIT(nv);
11270 #    undef HEXTRACT_HAS_TOP_NYBBLE
11271         HEXTRACT_BYTES_LE(13, 0);
11272 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11273         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11274          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11275         /* The bytes 2..15 are the mantissa/fraction,
11276          * the 0,1 are the sign+exponent. */
11277         const U8* nvp = (const U8*)(&nv);
11278         HEXTRACT_GET_SUBNORMAL(nv);
11279         HEXTRACT_IMPLICIT_BIT(nv);
11280 #    undef HEXTRACT_HAS_TOP_NYBBLE
11281         HEXTRACT_BYTES_BE(2, 15);
11282 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11283         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11284          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11285          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11286          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11287         /* The bytes 0..1 are the sign+exponent,
11288          * the bytes 2..9 are the mantissa/fraction. */
11289         const U8* nvp = (const U8*)(&nv);
11290 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11291 #    undef HEXTRACT_HAS_TOP_NYBBLE
11292         HEXTRACT_GET_SUBNORMAL(nv);
11293         HEXTRACT_BYTES_LE(7, 0);
11294 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11295         /* Does this format ever happen? (Wikipedia says the Motorola
11296          * 6888x math coprocessors used format _like_ this but padded
11297          * to 96 bits with 16 unused bits between the exponent and the
11298          * mantissa.) */
11299         const U8* nvp = (const U8*)(&nv);
11300 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11301 #    undef HEXTRACT_HAS_TOP_NYBBLE
11302         HEXTRACT_GET_SUBNORMAL(nv);
11303         HEXTRACT_BYTES_BE(0, 7);
11304 #  else
11305 #    define HEXTRACT_FALLBACK
11306         /* Double-double format: two doubles next to each other.
11307          * The first double is the high-order one, exactly like
11308          * it would be for a "lone" double.  The second double
11309          * is shifted down using the exponent so that that there
11310          * are no common bits.  The tricky part is that the value
11311          * of the double-double is the SUM of the two doubles and
11312          * the second one can be also NEGATIVE.
11313          *
11314          * Because of this tricky construction the bytewise extraction we
11315          * use for the other long double formats doesn't work, we must
11316          * extract the values bit by bit.
11317          *
11318          * The little-endian double-double is used .. somewhere?
11319          *
11320          * The big endian double-double is used in e.g. PPC/Power (AIX)
11321          * and MIPS (SGI).
11322          *
11323          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11324          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11325          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11326          */
11327 #  endif
11328 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11329         /* Using normal doubles, not long doubles.
11330          *
11331          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11332          * bytes, since we might need to handle printf precision, and
11333          * also need to insert the radix. */
11334 #  if NVSIZE == 8
11335 #    ifdef HEXTRACT_LITTLE_ENDIAN
11336         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11337         const U8* nvp = (const U8*)(&nv);
11338         HEXTRACT_GET_SUBNORMAL(nv);
11339         HEXTRACT_IMPLICIT_BIT(nv);
11340         HEXTRACT_TOP_NYBBLE(6);
11341         HEXTRACT_BYTES_LE(5, 0);
11342 #    elif defined(HEXTRACT_BIG_ENDIAN)
11343         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11344         const U8* nvp = (const U8*)(&nv);
11345         HEXTRACT_GET_SUBNORMAL(nv);
11346         HEXTRACT_IMPLICIT_BIT(nv);
11347         HEXTRACT_TOP_NYBBLE(1);
11348         HEXTRACT_BYTES_BE(2, 7);
11349 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11350         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11351         const U8* nvp = (const U8*)(&nv);
11352         HEXTRACT_GET_SUBNORMAL(nv);
11353         HEXTRACT_IMPLICIT_BIT(nv);
11354         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11355         HEXTRACT_BYTE(1); /* 5 */
11356         HEXTRACT_BYTE(0); /* 4 */
11357         HEXTRACT_BYTE(7); /* 3 */
11358         HEXTRACT_BYTE(6); /* 2 */
11359         HEXTRACT_BYTE(5); /* 1 */
11360         HEXTRACT_BYTE(4); /* 0 */
11361 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11362         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11363         const U8* nvp = (const U8*)(&nv);
11364         HEXTRACT_GET_SUBNORMAL(nv);
11365         HEXTRACT_IMPLICIT_BIT(nv);
11366         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11367         HEXTRACT_BYTE(6); /* 5 */
11368         HEXTRACT_BYTE(7); /* 4 */
11369         HEXTRACT_BYTE(0); /* 3 */
11370         HEXTRACT_BYTE(1); /* 2 */
11371         HEXTRACT_BYTE(2); /* 1 */
11372         HEXTRACT_BYTE(3); /* 0 */
11373 #    else
11374 #      define HEXTRACT_FALLBACK
11375 #    endif
11376 #  else
11377 #    define HEXTRACT_FALLBACK
11378 #  endif
11379 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11380
11381 #ifdef HEXTRACT_FALLBACK
11382         HEXTRACT_GET_SUBNORMAL(nv);
11383 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11384         /* The fallback is used for the double-double format, and
11385          * for unknown long double formats, and for unknown double
11386          * formats, or in general unknown NV formats. */
11387         if (nv == (NV)0.0) {
11388             if (vend)
11389                 *v++ = 0;
11390             else
11391                 v++;
11392             *exponent = 0;
11393         }
11394         else {
11395             NV d = nv < 0 ? -nv : nv;
11396             NV e = (NV)1.0;
11397             U8 ha = 0x0; /* hexvalue accumulator */
11398             U8 hd = 0x8; /* hexvalue digit */
11399
11400             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11401              * this is essentially manual frexp(). Multiplying by 0.5 and
11402              * doubling should be lossless in binary floating point. */
11403
11404             *exponent = 1;
11405
11406             while (e > d) {
11407                 e *= (NV)0.5;
11408                 (*exponent)--;
11409             }
11410             /* Now d >= e */
11411
11412             while (d >= e + e) {
11413                 e += e;
11414                 (*exponent)++;
11415             }
11416             /* Now e <= d < 2*e */
11417
11418             /* First extract the leading hexdigit (the implicit bit). */
11419             if (d >= e) {
11420                 d -= e;
11421                 if (vend)
11422                     *v++ = 1;
11423                 else
11424                     v++;
11425             }
11426             else {
11427                 if (vend)
11428                     *v++ = 0;
11429                 else
11430                     v++;
11431             }
11432             e *= (NV)0.5;
11433
11434             /* Then extract the remaining hexdigits. */
11435             while (d > (NV)0.0) {
11436                 if (d >= e) {
11437                     ha |= hd;
11438                     d -= e;
11439                 }
11440                 if (hd == 1) {
11441                     /* Output or count in groups of four bits,
11442                      * that is, when the hexdigit is down to one. */
11443                     if (vend)
11444                         *v++ = ha;
11445                     else
11446                         v++;
11447                     /* Reset the hexvalue. */
11448                     ha = 0x0;
11449                     hd = 0x8;
11450                 }
11451                 else
11452                     hd >>= 1;
11453                 e *= (NV)0.5;
11454             }
11455
11456             /* Flush possible pending hexvalue. */
11457             if (ha) {
11458                 if (vend)
11459                     *v++ = ha;
11460                 else
11461                     v++;
11462             }
11463         }
11464 #endif
11465     }
11466     /* Croak for various reasons: if the output pointer escaped the
11467      * output buffer, if the extraction index escaped the extraction
11468      * buffer, or if the ending output pointer didn't match the
11469      * previously computed value. */
11470     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11471         /* For double-double the ixmin and ixmax stay at zero,
11472          * which is convenient since the HEXTRACTSIZE is tricky
11473          * for double-double. */
11474         ixmin < 0 || ixmax >= NVSIZE ||
11475         (vend && v != vend)) {
11476         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11477         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11478     }
11479     return v;
11480 }
11481
11482
11483 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11484  *
11485  * Processes the %a/%A hexadecimal floating-point format, since the
11486  * built-in snprintf()s which are used for most of the f/p formats, don't
11487  * universally handle %a/%A.
11488  * Populates buf of length bufsize, and returns the length of the created
11489  * string.
11490  * The rest of the args have the same meaning as the local vars of the
11491  * same name within Perl_sv_vcatpvfn_flags().
11492  *
11493  * It assumes the caller has already done STORE_LC_NUMERIC_SET_TO_NEEDED();
11494  *
11495  * It requires the caller to make buf large enough.
11496  */
11497
11498 static STRLEN
11499 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11500                     const NV nv, const vcatpvfn_long_double_t fv,
11501                     bool has_precis, STRLEN precis, STRLEN width,
11502                     bool alt, char plus, bool left, bool fill)
11503 {
11504     /* Hexadecimal floating point. */
11505     char* p = buf;
11506     U8 vhex[VHEX_SIZE];
11507     U8* v = vhex; /* working pointer to vhex */
11508     U8* vend; /* pointer to one beyond last digit of vhex */
11509     U8* vfnz = NULL; /* first non-zero */
11510     U8* vlnz = NULL; /* last non-zero */
11511     U8* v0 = NULL; /* first output */
11512     const bool lower = (c == 'a');
11513     /* At output the values of vhex (up to vend) will
11514      * be mapped through the xdig to get the actual
11515      * human-readable xdigits. */
11516     const char* xdig = PL_hexdigit;
11517     STRLEN zerotail = 0; /* how many extra zeros to append */
11518     int exponent = 0; /* exponent of the floating point input */
11519     bool hexradix = FALSE; /* should we output the radix */
11520     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11521     bool negative = FALSE;
11522     STRLEN elen;
11523
11524     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11525      *
11526      * For example with denormals, (assuming the vanilla
11527      * 64-bit double): the exponent is zero. 1xp-1074 is
11528      * the smallest denormal and the smallest double, it
11529      * could be output also as 0x0.0000000000001p-1022 to
11530      * match its internal structure. */
11531
11532     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11533     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11534
11535 #if NVSIZE > DOUBLESIZE
11536 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11537     /* In this case there is an implicit bit,
11538      * and therefore the exponent is shifted by one. */
11539     exponent--;
11540 #  elif defined(NV_X86_80_BIT)
11541     if (subnormal) {
11542         /* The subnormals of the x86-80 have a base exponent of -16382,
11543          * (while the physical exponent bits are zero) but the frexp()
11544          * returned the scientific-style floating exponent.  We want
11545          * to map the last one as:
11546          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11547          * -16835..-16388 -> -16384
11548          * since we want to keep the first hexdigit
11549          * as one of the [8421]. */
11550         exponent = -4 * ( (exponent + 1) / -4) - 2;
11551     } else {
11552         exponent -= 4;
11553     }
11554     /* TBD: other non-implicit-bit platforms than the x86-80. */
11555 #  endif
11556 #endif
11557
11558     negative = fv < 0 || Perl_signbit(nv);
11559     if (negative)
11560         *p++ = '-';
11561     else if (plus)
11562         *p++ = plus;
11563     *p++ = '0';
11564     if (lower) {
11565         *p++ = 'x';
11566     }
11567     else {
11568         *p++ = 'X';
11569         xdig += 16; /* Use uppercase hex. */
11570     }
11571
11572     /* Find the first non-zero xdigit. */
11573     for (v = vhex; v < vend; v++) {
11574         if (*v) {
11575             vfnz = v;
11576             break;
11577         }
11578     }
11579
11580     if (vfnz) {
11581         /* Find the last non-zero xdigit. */
11582         for (v = vend - 1; v >= vhex; v--) {
11583             if (*v) {
11584                 vlnz = v;
11585                 break;
11586             }
11587         }
11588
11589 #if NVSIZE == DOUBLESIZE
11590         if (fv != 0.0)
11591             exponent--;
11592 #endif
11593
11594         if (subnormal) {
11595 #ifndef NV_X86_80_BIT
11596           if (vfnz[0] > 1) {
11597             /* IEEE 754 subnormals (but not the x86 80-bit):
11598              * we want "normalize" the subnormal,
11599              * so we need to right shift the hex nybbles
11600              * so that the output of the subnormal starts
11601              * from the first true bit.  (Another, equally
11602              * valid, policy would be to dump the subnormal
11603              * nybbles as-is, to display the "physical" layout.) */
11604             int i, n;
11605             U8 *vshr;
11606             /* Find the ceil(log2(v[0])) of
11607              * the top non-zero nybble. */
11608             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11609             assert(n < 4);
11610             assert(vlnz);
11611             vlnz[1] = 0;
11612             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11613               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11614               vshr[0] >>= n;
11615             }
11616             if (vlnz[1]) {
11617               vlnz++;
11618             }
11619           }
11620 #endif
11621           v0 = vfnz;
11622         } else {
11623           v0 = vhex;
11624         }
11625
11626         if (has_precis) {
11627             U8* ve = (subnormal ? vlnz + 1 : vend);
11628             SSize_t vn = ve - v0;
11629             assert(vn >= 1);
11630             if (precis < (Size_t)(vn - 1)) {
11631                 bool overflow = FALSE;
11632                 if (v0[precis + 1] < 0x8) {
11633                     /* Round down, nothing to do. */
11634                 } else if (v0[precis + 1] > 0x8) {
11635                     /* Round up. */
11636                     v0[precis]++;
11637                     overflow = v0[precis] > 0xF;
11638                     v0[precis] &= 0xF;
11639                 } else { /* v0[precis] == 0x8 */
11640                     /* Half-point: round towards the one
11641                      * with the even least-significant digit:
11642                      * 08 -> 0  88 -> 8
11643                      * 18 -> 2  98 -> a
11644                      * 28 -> 2  a8 -> a
11645                      * 38 -> 4  b8 -> c
11646                      * 48 -> 4  c8 -> c
11647                      * 58 -> 6  d8 -> e
11648                      * 68 -> 6  e8 -> e
11649                      * 78 -> 8  f8 -> 10 */
11650                     if ((v0[precis] & 0x1)) {
11651                         v0[precis]++;
11652                     }
11653                     overflow = v0[precis] > 0xF;
11654                     v0[precis] &= 0xF;
11655                 }
11656
11657                 if (overflow) {
11658                     for (v = v0 + precis - 1; v >= v0; v--) {
11659                         (*v)++;
11660                         overflow = *v > 0xF;
11661                         (*v) &= 0xF;
11662                         if (!overflow) {
11663                             break;
11664                         }
11665                     }
11666                     if (v == v0 - 1 && overflow) {
11667                         /* If the overflow goes all the
11668                          * way to the front, we need to
11669                          * insert 0x1 in front, and adjust
11670                          * the exponent. */
11671                         Move(v0, v0 + 1, vn - 1, char);
11672                         *v0 = 0x1;
11673                         exponent += 4;
11674                     }
11675                 }
11676
11677                 /* The new effective "last non zero". */
11678                 vlnz = v0 + precis;
11679             }
11680             else {
11681                 zerotail =
11682                   subnormal ? precis - vn + 1 :
11683                   precis - (vlnz - vhex);
11684             }
11685         }
11686
11687         v = v0;
11688         *p++ = xdig[*v++];
11689
11690         /* If there are non-zero xdigits, the radix
11691          * is output after the first one. */
11692         if (vfnz < vlnz) {
11693           hexradix = TRUE;
11694         }
11695     }
11696     else {
11697         *p++ = '0';
11698         exponent = 0;
11699         zerotail = precis;
11700     }
11701
11702     /* The radix is always output if precis, or if alt. */
11703     if (precis > 0 || alt) {
11704       hexradix = TRUE;
11705     }
11706
11707     if (hexradix) {
11708 #ifndef USE_LOCALE_NUMERIC
11709             *p++ = '.';
11710 #else
11711             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
11712                 STRLEN n;
11713                 const char* r = SvPV(PL_numeric_radix_sv, n);
11714                 Copy(r, p, n, char);
11715                 p += n;
11716             }
11717             else {
11718                 *p++ = '.';
11719             }
11720 #endif
11721     }
11722
11723     if (vlnz) {
11724         while (v <= vlnz)
11725             *p++ = xdig[*v++];
11726     }
11727
11728     if (zerotail > 0) {
11729       while (zerotail--) {
11730         *p++ = '0';
11731       }
11732     }
11733
11734     elen = p - buf;
11735
11736     /* sanity checks */
11737     if (elen >= bufsize || width >= bufsize)
11738         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11739         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11740
11741     elen += my_snprintf(p, bufsize - elen,
11742                         "%c%+d", lower ? 'p' : 'P',
11743                         exponent);
11744
11745     if (elen < width) {
11746         STRLEN gap = (STRLEN)(width - elen);
11747         if (left) {
11748             /* Pad the back with spaces. */
11749             memset(buf + elen, ' ', gap);
11750         }
11751         else if (fill) {
11752             /* Insert the zeros after the "0x" and the
11753              * the potential sign, but before the digits,
11754              * otherwise we end up with "0000xH.HHH...",
11755              * when we want "0x000H.HHH..."  */
11756             STRLEN nzero = gap;
11757             char* zerox = buf + 2;
11758             STRLEN nmove = elen - 2;
11759             if (negative || plus) {
11760                 zerox++;
11761                 nmove--;
11762             }
11763             Move(zerox, zerox + nzero, nmove, char);
11764             memset(zerox, fill ? '0' : ' ', nzero);
11765         }
11766         else {
11767             /* Move it to the right. */
11768             Move(buf, buf + gap,
11769                  elen, char);
11770             /* Pad the front with spaces. */
11771             memset(buf, ' ', gap);
11772         }
11773         elen = width;
11774     }
11775     return elen;
11776 }
11777
11778
11779 /*
11780 =for apidoc sv_vcatpvfn
11781
11782 =for apidoc sv_vcatpvfn_flags
11783
11784 Processes its arguments like C<vsprintf> and appends the formatted output
11785 to an SV.  Uses an array of SVs if the C-style variable argument list is
11786 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11787 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11788 C<va_list> argument list with a format string that uses argument reordering
11789 will yield an exception.
11790
11791 When running with taint checks enabled, indicates via
11792 C<maybe_tainted> if results are untrustworthy (often due to the use of
11793 locales).
11794
11795 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11796
11797 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11798 responsibility to ensure that this is so.
11799
11800 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11801
11802 =cut
11803 */
11804
11805
11806 void
11807 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11808                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11809                        const U32 flags)
11810 {
11811     const char *fmtstart; /* character following the current '%' */
11812     const char *q;        /* current position within format */
11813     const char *patend;
11814     STRLEN origlen;
11815     Size_t svix = 0;
11816     static const char nullstr[] = "(null)";
11817     SV *argsv = NULL;
11818     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11819     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11820     /* Times 4: a decimal digit takes more than 3 binary digits.
11821      * NV_DIG: mantissa takes that many decimal digits.
11822      * Plus 32: Playing safe. */
11823     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11824     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11825 #ifdef USE_LOCALE_NUMERIC
11826     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11827     bool lc_numeric_set = FALSE; /* called STORE_LC_NUMERIC_SET_TO_NEEDED? */
11828 #endif
11829
11830     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11831     PERL_UNUSED_ARG(maybe_tainted);
11832
11833     if (flags & SV_GMAGIC)
11834         SvGETMAGIC(sv);
11835
11836     /* no matter what, this is a string now */
11837     (void)SvPV_force_nomg(sv, origlen);
11838
11839     /* the code that scans for flags etc following a % relies on
11840      * a '\0' being present to avoid falling off the end. Ideally that
11841      * should be fixed */
11842     assert(pat[patlen] == '\0');
11843
11844
11845     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11846      * In each case, if there isn't the correct number of args, instead
11847      * fall through to the main code to handle the issuing of any
11848      * warnings etc.
11849      */
11850
11851     if (patlen == 0 && (args || sv_count == 0))
11852         return;
11853
11854     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11855
11856         /* "%s" */
11857         if (patlen == 2 && pat[1] == 's') {
11858             if (args) {
11859                 const char * const s = va_arg(*args, char*);
11860                 sv_catpv_nomg(sv, s ? s : nullstr);
11861             }
11862             else {
11863                 /* we want get magic on the source but not the target.
11864                  * sv_catsv can't do that, though */
11865                 SvGETMAGIC(*svargs);
11866                 sv_catsv_nomg(sv, *svargs);
11867             }
11868             return;
11869         }
11870
11871         /* "%-p" */
11872         if (args) {
11873             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11874                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11875                 sv_catsv_nomg(sv, asv);
11876                 return;
11877             }
11878         }
11879 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11880         /* special-case "%.0f" */
11881         else if (   patlen == 4
11882                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11883         {
11884             const NV nv = SvNV(*svargs);
11885             if (LIKELY(!Perl_isinfnan(nv))) {
11886                 STRLEN l;
11887                 char *p;
11888
11889                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11890                     sv_catpvn_nomg(sv, p, l);
11891                     return;
11892                 }
11893             }
11894         }
11895 #endif /* !USE_LONG_DOUBLE */
11896     }
11897
11898
11899     patend = (char*)pat + patlen;
11900     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
11901         char intsize     = 0;         /* size qualifier in "%hi..." etc */
11902         bool alt         = FALSE;     /* has      "%#..."    */
11903         bool left        = FALSE;     /* has      "%-..."    */
11904         bool fill        = FALSE;     /* has      "%0..."    */
11905         char plus        = 0;         /* has      "%+..."    */
11906         STRLEN width     = 0;         /* value of "%NNN..."  */
11907         bool has_precis  = FALSE;     /* has      "%.NNN..." */
11908         STRLEN precis    = 0;         /* value of "%.NNN..." */
11909         int base         = 0;         /* base to print in, e.g. 8 for %o */
11910         UV uv            = 0;         /* the value to print of int-ish args */
11911
11912         bool vectorize   = FALSE;     /* has      "%v..."    */
11913         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
11914         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
11915         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
11916         const char *dotstr = NULL;    /* separator string for %v */
11917         STRLEN dotstrlen;             /* length of separator string for %v */
11918
11919         Size_t efix      = 0;         /* explicit format parameter index */
11920         const Size_t osvix  = svix;   /* original index in case of bad fmt */
11921
11922         bool is_utf8     = FALSE;     /* is this item utf8?   */
11923         bool arg_missing = FALSE;     /* give "Missing argument" warning */
11924         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
11925         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
11926         STRLEN zeros     = 0;         /* how many '0' to prepend */
11927
11928         const char *eptr = NULL;      /* the address of the element string */
11929         STRLEN elen      = 0;         /* the length  of the element string */
11930
11931         char c;                       /* the actual format ('d', s' etc) */
11932
11933
11934         /* echo everything up to the next format specification */
11935         for (q = fmtstart; q < patend && *q != '%'; ++q)
11936             {};
11937
11938         if (q > fmtstart) {
11939             if (has_utf8 && !pat_utf8) {
11940                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
11941                  * the fly */
11942                 const char *p;
11943                 char *dst;
11944                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
11945
11946                 for (p = fmtstart; p < q; p++)
11947                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
11948                         need++;
11949                 SvGROW(sv, need);
11950
11951                 dst = SvEND(sv);
11952                 for (p = fmtstart; p < q; p++)
11953                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
11954                 *dst = '\0';
11955                 SvCUR_set(sv, need - 1);
11956             }
11957             else
11958                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
11959         }
11960         if (q++ >= patend)
11961             break;
11962
11963         fmtstart = q; /* fmtstart is char following the '%' */
11964
11965 /*
11966     We allow format specification elements in this order:
11967         \d+\$              explicit format parameter index
11968         [-+ 0#]+           flags
11969         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11970         0                  flag (as above): repeated to allow "v02"     
11971         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11972         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11973         [hlqLV]            size
11974     [%bcdefginopsuxDFOUX] format (mandatory)
11975 */
11976
11977         if (IS_1_TO_9(*q)) {
11978             width = expect_number(&q);
11979             if (*q == '$') {
11980                 if (args)
11981                     Perl_croak_nocontext(
11982                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11983                 ++q;
11984                 efix = (Size_t)width;
11985                 width = 0;
11986                 no_redundant_warning = TRUE;
11987             } else {
11988                 goto gotwidth;
11989             }
11990         }
11991
11992         /* FLAGS */
11993
11994         while (*q) {
11995             switch (*q) {
11996             case ' ':
11997             case '+':
11998                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11999                     q++;
12000                 else
12001                     plus = *q++;
12002                 continue;
12003
12004             case '-':
12005                 left = TRUE;
12006                 q++;
12007                 continue;
12008
12009             case '0':
12010                 fill = TRUE;
12011                 q++;
12012                 continue;
12013
12014             case '#':
12015                 alt = TRUE;
12016                 q++;
12017                 continue;
12018
12019             default:
12020                 break;
12021             }
12022             break;
12023         }
12024
12025       /* at this point we can expect one of:
12026        *
12027        *  123  an explicit width
12028        *  *    width taken from next arg
12029        *  *12$ width taken from 12th arg
12030        *       or no width
12031        *
12032        * But any width specification may be preceded by a v, in one of its
12033        * forms:
12034        *        v
12035        *        *v
12036        *        *12$v
12037        * So an asterisk may be either a width specifier or a vector
12038        * separator arg specifier, and we don't know which initially
12039        */
12040
12041       tryasterisk:
12042         if (*q == '*') {
12043             STRLEN ix; /* explicit width/vector separator index */
12044             q++;
12045             if (IS_1_TO_9(*q)) {
12046                 ix = expect_number(&q);
12047                 if (*q++ == '$') {
12048                     if (args)
12049                         Perl_croak_nocontext(
12050                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
12051                     no_redundant_warning = TRUE;
12052                 } else
12053                     goto unknown;
12054             }
12055             else
12056                 ix = 0;
12057
12058             if (*q == 'v') {
12059                 SV *vecsv;
12060                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12061                  * with the default "." */
12062                 q++;
12063                 if (vectorize)
12064                     goto unknown;
12065                 if (args)
12066                     vecsv = va_arg(*args, SV*);
12067                 else {
12068                     ix = ix ? ix - 1 : svix++;
12069                     vecsv = ix < sv_count ? svargs[ix]
12070                                        : (arg_missing = TRUE, &PL_sv_no);
12071                 }
12072                 dotstr = SvPV_const(vecsv, dotstrlen);
12073                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12074                    bad with tied or overloaded values that return UTF8.  */
12075                 if (DO_UTF8(vecsv))
12076                     is_utf8 = TRUE;
12077                 else if (has_utf8) {
12078                     vecsv = sv_mortalcopy(vecsv);
12079                     sv_utf8_upgrade(vecsv);
12080                     dotstr = SvPV_const(vecsv, dotstrlen);
12081                     is_utf8 = TRUE;
12082                 }
12083                 vectorize = TRUE;
12084                 goto tryasterisk;
12085             }
12086
12087             /* the asterisk specified a width */
12088             {
12089                 int i = 0;
12090                 SV *sv = NULL;
12091                 if (args)
12092                     i = va_arg(*args, int);
12093                 else {
12094                     ix = ix ? ix - 1 : svix++;
12095                     sv = (ix < sv_count) ? svargs[ix]
12096                                       : (arg_missing = TRUE, (SV*)NULL);
12097                 }
12098                 width = S_sprintf_arg_num_val(aTHX_ args, i, sv, &left);
12099             }
12100         }
12101         else if (*q == 'v') {
12102             q++;
12103             if (vectorize)
12104                 goto unknown;
12105             vectorize = TRUE;
12106             dotstr = ".";
12107             dotstrlen = 1;
12108             goto tryasterisk;
12109
12110         }
12111         else {
12112         /* explicit width? */
12113             if(*q == '0') {
12114                 fill = TRUE;
12115                 q++;
12116             }
12117             if (IS_1_TO_9(*q))
12118                 width = expect_number(&q);
12119         }
12120
12121       gotwidth:
12122
12123         /* PRECISION */
12124
12125         if (*q == '.') {
12126             q++;
12127             if (*q == '*') {
12128                 STRLEN ix; /* explicit precision index */
12129                 q++;
12130                 if (IS_1_TO_9(*q)) {
12131                     ix = expect_number(&q);
12132                     if (*q++ == '$') {
12133                         if (args)
12134                             Perl_croak_nocontext(
12135                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
12136                         no_redundant_warning = TRUE;
12137                     } else
12138                         goto unknown;
12139                 }
12140                 else
12141                     ix = 0;
12142
12143                 {
12144                     int i = 0;
12145                     SV *sv = NULL;
12146                     bool neg = FALSE;
12147
12148                     if (args)
12149                         i = va_arg(*args, int);
12150                     else {
12151                         ix = ix ? ix - 1 : svix++;
12152                         sv = (ix < sv_count) ? svargs[ix]
12153                                           : (arg_missing = TRUE, (SV*)NULL);
12154                     }
12155                     precis = S_sprintf_arg_num_val(aTHX_ args, i, sv, &neg);
12156                     has_precis = !neg;
12157                 }
12158             }
12159             else {
12160                 /* although it doesn't seem documented, this code has long
12161                  * behaved so that:
12162                  *   no digits following the '.' is treated like '.0'
12163                  *   the number may be preceded by any number of zeroes,
12164                  *      e.g. "%.0001f", which is the same as "%.1f"
12165                  * so I've kept that behaviour. DAPM May 2017
12166                  */
12167                 while (*q == '0')
12168                     q++;
12169                 precis = IS_1_TO_9(*q) ? expect_number(&q) : 0;
12170                 has_precis = TRUE;
12171             }
12172         }
12173
12174         /* SIZE */
12175
12176         switch (*q) {
12177 #ifdef WIN32
12178         case 'I':                       /* Ix, I32x, and I64x */
12179 #  ifdef USE_64_BIT_INT
12180             if (q[1] == '6' && q[2] == '4') {
12181                 q += 3;
12182                 intsize = 'q';
12183                 break;
12184             }
12185 #  endif
12186             if (q[1] == '3' && q[2] == '2') {
12187                 q += 3;
12188                 break;
12189             }
12190 #  ifdef USE_64_BIT_INT
12191             intsize = 'q';
12192 #  endif
12193             q++;
12194             break;
12195 #endif
12196 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12197     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12198         case 'L':                       /* Ld */
12199             /* FALLTHROUGH */
12200 #  ifdef USE_QUADMATH
12201         case 'Q':
12202             /* FALLTHROUGH */
12203 #  endif
12204 #  if IVSIZE >= 8
12205         case 'q':                       /* qd */
12206 #  endif
12207             intsize = 'q';
12208             q++;
12209             break;
12210 #endif
12211         case 'l':
12212             ++q;
12213 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12214     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12215             if (*q == 'l') {    /* lld, llf */
12216                 intsize = 'q';
12217                 ++q;
12218             }
12219             else
12220 #endif
12221                 intsize = 'l';
12222             break;
12223         case 'h':
12224             if (*++q == 'h') {  /* hhd, hhu */
12225                 intsize = 'c';
12226                 ++q;
12227             }
12228             else
12229                 intsize = 'h';
12230             break;
12231         case 'V':
12232         case 'z':
12233         case 't':
12234         case 'j':
12235             intsize = *q++;
12236             break;
12237         }
12238
12239         /* CONVERSION */
12240
12241         c = *q++; /* c now holds the conversion type */
12242
12243         /* '%' doesn't have an arg, so skip arg processing */
12244         if (c == '%') {
12245             eptr = q - 1;
12246             elen = 1;
12247             if (vectorize)
12248                 goto unknown;
12249             goto string;
12250         }
12251
12252         if (vectorize && !strchr("BbDdiOouUXx", c))
12253             goto unknown;
12254
12255         /* get next arg (individual branches do their own va_arg()
12256          * handling for the args case) */
12257
12258         if (!args) {
12259             efix = efix ? efix - 1 : svix++;
12260             argsv = efix < sv_count ? svargs[efix]
12261                                  : (arg_missing = TRUE, &PL_sv_no);
12262         }
12263
12264
12265         switch (c) {
12266
12267             /* STRINGS */
12268
12269         case 's':
12270             if (args) {
12271                 eptr = va_arg(*args, char*);
12272                 if (eptr)
12273                     if (has_precis)
12274                         elen = my_strnlen(eptr, precis);
12275                     else
12276                         elen = strlen(eptr);
12277                 else {
12278                     eptr = (char *)nullstr;
12279                     elen = sizeof nullstr - 1;
12280                 }
12281             }
12282             else {
12283                 eptr = SvPV_const(argsv, elen);
12284                 if (DO_UTF8(argsv)) {
12285                     STRLEN old_precis = precis;
12286                     if (has_precis && precis < elen) {
12287                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12288                         STRLEN p = precis > ulen ? ulen : precis;
12289                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12290                                                         /* sticks at end */
12291                     }
12292                     if (width) { /* fudge width (can't fudge elen) */
12293                         if (has_precis && precis < elen)
12294                             width += precis - old_precis;
12295                         else
12296                             width +=
12297                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12298                     }
12299                     is_utf8 = TRUE;
12300                 }
12301             }
12302
12303         string:
12304             if (has_precis && precis < elen)
12305                 elen = precis;
12306             break;
12307
12308             /* INTEGERS */
12309
12310         case 'p':
12311             if (alt)
12312                 goto unknown;
12313
12314             /* %p extensions:
12315              *
12316              * "%...p" is normally treated like "%...x", except that the
12317              * number to print is the SV's address (or a pointer address
12318              * for C-ish sprintf).
12319              *
12320              * However, the C-ish sprintf variant allows a few special
12321              * extensions. These are currently:
12322              *
12323              * %-p       (SVf)  Like %s, but gets the string from an SV*
12324              *                  arg rather than a char* arg.
12325              *                  (This was previously %_).
12326              *
12327              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12328              *
12329              * %2p       (HEKf) Like %s, but using the key string in a HEK
12330              *
12331              * %3p       (HEKf256) Ditto but like %.256s
12332              *
12333              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12334              *                       (cBOOL(utf8), len, string_buf).
12335              *                   It's handled by the "case 'd'" branch
12336              *                   rather than here.
12337              *
12338              * %<num>p   where num is 1 or > 4: reserved for future
12339              *           extensions. Warns, but then is treated as a
12340              *           general %p (print hex address) format.
12341              */
12342
12343             if (   args
12344                 && !intsize
12345                 && !fill
12346                 && !plus
12347                 && !has_precis
12348                     /* not %*p or %*1$p - any width was explicit */
12349                 && q[-2] != '*'
12350                 && q[-2] != '$'
12351             ) {
12352                 if (left) {                     /* %-p (SVf), %-NNNp */
12353                     if (width) {
12354                         precis = width;
12355                         has_precis = TRUE;
12356                     }
12357                     argsv = MUTABLE_SV(va_arg(*args, void*));
12358                     eptr = SvPV_const(argsv, elen);
12359                     if (DO_UTF8(argsv))
12360                         is_utf8 = TRUE;
12361                     width = 0;
12362                     goto string;
12363                 }
12364                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12365                     HEK * const hek = va_arg(*args, HEK *);
12366                     eptr = HEK_KEY(hek);
12367                     elen = HEK_LEN(hek);
12368                     if (HEK_UTF8(hek))
12369                         is_utf8 = TRUE;
12370                     if (width == 3) {
12371                         precis = 256;
12372                         has_precis = TRUE;
12373                     }
12374                     width = 0;
12375                     goto string;
12376                 }
12377                 else if (width) {
12378                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12379                          "internal %%<num>p might conflict with future printf extensions");
12380                 }
12381             }
12382
12383             /* treat as normal %...p */
12384
12385             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12386             base = 16;
12387             goto do_integer;
12388
12389         case 'c':
12390             /* Ignore any size specifiers, since they're not documented as
12391              * being allowed for %c (ideally we should warn on e.g. '%hc').
12392              * Setting a default intsize, along with a positive
12393              * (which signals unsigned) base, causes, for C-ish use, the
12394              * va_arg to be interpreted as as unsigned int, when it's
12395              * actually signed, which will convert -ve values to high +ve
12396              * values. Note that unlike the libc %c, values > 255 will
12397              * convert to high unicode points rather than being truncated
12398              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12399              * will again convert -ve args to high -ve values.
12400              */
12401             intsize = 0;
12402             base = 1; /* special value that indicates we're doing a 'c' */
12403             goto get_int_arg_val;
12404
12405         case 'D':
12406 #ifdef IV_IS_QUAD
12407             intsize = 'q';
12408 #else
12409             intsize = 'l';
12410 #endif
12411             base = -10;
12412             goto get_int_arg_val;
12413
12414         case 'd':
12415             /* probably just a plain %d, but it might be the start of the
12416              * special UTF8f format, which usually looks something like
12417              * "%d%lu%4p" (the lu may vary by platform)
12418              */
12419             assert((UTF8f)[0] == 'd');
12420             assert((UTF8f)[1] == '%');
12421
12422              if (   args              /* UTF8f only valid for C-ish sprintf */
12423                  && q == fmtstart + 1 /* plain %d, not %....d */
12424                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12425                  && *q == '%'
12426                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12427             {
12428                 /* The argument has already gone through cBOOL, so the cast
12429                    is safe. */
12430                 is_utf8 = (bool)va_arg(*args, int);
12431                 elen = va_arg(*args, UV);
12432                 /* if utf8 length is larger than 0x7ffff..., then it might
12433                  * have been a signed value that wrapped */
12434                 if (elen  > ((~(STRLEN)0) >> 1)) {
12435                     assert(0); /* in DEBUGGING build we want to crash */
12436                     elen = 0; /* otherwise we want to treat this as an empty string */
12437                 }
12438                 eptr = va_arg(*args, char *);
12439                 q += sizeof(UTF8f) - 2;
12440                 goto string;
12441             }
12442
12443             /* FALLTHROUGH */
12444         case 'i':
12445             base = -10;
12446             goto get_int_arg_val;
12447
12448         case 'U':
12449 #ifdef IV_IS_QUAD
12450             intsize = 'q';
12451 #else
12452             intsize = 'l';
12453 #endif
12454             /* FALLTHROUGH */
12455         case 'u':
12456             base = 10;
12457             goto get_int_arg_val;
12458
12459         case 'B':
12460         case 'b':
12461             base = 2;
12462             goto get_int_arg_val;
12463
12464         case 'O':
12465 #ifdef IV_IS_QUAD
12466             intsize = 'q';
12467 #else
12468             intsize = 'l';
12469 #endif
12470             /* FALLTHROUGH */
12471         case 'o':
12472             base = 8;
12473             goto get_int_arg_val;
12474
12475         case 'X':
12476         case 'x':
12477             base = 16;
12478
12479           get_int_arg_val:
12480
12481             if (vectorize) {
12482                 STRLEN ulen;
12483                 SV *vecsv;
12484
12485                 if (base < 0) {
12486                     base = -base;
12487                     if (plus)
12488                          esignbuf[esignlen++] = plus;
12489                 }
12490
12491                 /* initialise the vector string to iterate over */
12492
12493                 vecsv = args ? va_arg(*args, SV*) : argsv;
12494
12495                 /* if this is a version object, we need to convert
12496                  * back into v-string notation and then let the
12497                  * vectorize happen normally
12498                  */
12499                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12500                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12501                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12502                         "vector argument not supported with alpha versions");
12503                         vecsv = &PL_sv_no;
12504                     }
12505                     else {
12506                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12507                         vecsv = sv_newmortal();
12508                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12509                                      vecsv);
12510                     }
12511                 }
12512                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12513                 vec_utf8 = DO_UTF8(vecsv);
12514
12515               /* This is the re-entry point for when we're iterating
12516                * over the individual characters of a vector arg */
12517               vector:
12518                 if (!veclen)
12519                     goto done_valid_conversion;
12520                 if (vec_utf8)
12521                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12522                                         UTF8_ALLOW_ANYUV);
12523                 else {
12524                     uv = *vecstr;
12525                     ulen = 1;
12526                 }
12527                 vecstr += ulen;
12528                 veclen -= ulen;
12529             }
12530             else {
12531                 /* test arg for inf/nan. This can trigger an unwanted
12532                  * 'str' overload, so manually force 'num' overload first
12533                  * if necessary */
12534                 if (argsv) {
12535                     SvGETMAGIC(argsv);
12536                     if (UNLIKELY(SvAMAGIC(argsv)))
12537                         argsv = sv_2num(argsv);
12538                     if (UNLIKELY(isinfnansv(argsv)))
12539                         goto handle_infnan_argsv;
12540                 }
12541
12542                 if (base < 0) {
12543                     /* signed int type */
12544                     IV iv;
12545                     base = -base;
12546                     if (args) {
12547                         switch (intsize) {
12548                         case 'c':  iv = (char)va_arg(*args, int);  break;
12549                         case 'h':  iv = (short)va_arg(*args, int); break;
12550                         case 'l':  iv = va_arg(*args, long);       break;
12551                         case 'V':  iv = va_arg(*args, IV);         break;
12552                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12553 #ifdef HAS_PTRDIFF_T
12554                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12555 #endif
12556                         default:   iv = va_arg(*args, int);        break;
12557                         case 'j':  iv = va_arg(*args, PERL_INTMAX_T); break;
12558                         case 'q':
12559 #if IVSIZE >= 8
12560                                    iv = va_arg(*args, Quad_t);     break;
12561 #else
12562                                    goto unknown;
12563 #endif
12564                         }
12565                     }
12566                     else {
12567                         /* assign to tiv then cast to iv to work around
12568                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12569                         IV tiv = SvIV_nomg(argsv);
12570                         switch (intsize) {
12571                         case 'c':  iv = (char)tiv;   break;
12572                         case 'h':  iv = (short)tiv;  break;
12573                         case 'l':  iv = (long)tiv;   break;
12574                         case 'V':
12575                         default:   iv = tiv;         break;
12576                         case 'q':
12577 #if IVSIZE >= 8
12578                                    iv = (Quad_t)tiv; break;
12579 #else
12580                                    goto unknown;
12581 #endif
12582                         }
12583                     }
12584
12585                     /* now convert iv to uv */
12586                     if (iv >= 0) {
12587                         uv = iv;
12588                         if (plus)
12589                             esignbuf[esignlen++] = plus;
12590                     }
12591                     else {
12592                         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12593                         esignbuf[esignlen++] = '-';
12594                     }
12595                 }
12596                 else {
12597                     /* unsigned int type */
12598                     if (args) {
12599                         switch (intsize) {
12600                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12601                                   break;
12602                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12603                                   break;
12604                         case 'l': uv = va_arg(*args, unsigned long); break;
12605                         case 'V': uv = va_arg(*args, UV);            break;
12606                         case 'z': uv = va_arg(*args, Size_t);        break;
12607 #ifdef HAS_PTRDIFF_T
12608                                   /* will sign extend, but there is no
12609                                    * uptrdiff_t, so oh well */
12610                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12611 #endif
12612                         case 'j': uv = va_arg(*args, PERL_UINTMAX_T); break;
12613                         default:  uv = va_arg(*args, unsigned);      break;
12614                         case 'q':
12615 #if IVSIZE >= 8
12616                                   uv = va_arg(*args, Uquad_t);       break;
12617 #else
12618                                   goto unknown;
12619 #endif
12620                         }
12621                     }
12622                     else {
12623                         /* assign to tiv then cast to iv to work around
12624                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12625                         UV tuv = SvUV_nomg(argsv);
12626                         switch (intsize) {
12627                         case 'c': uv = (unsigned char)tuv;  break;
12628                         case 'h': uv = (unsigned short)tuv; break;
12629                         case 'l': uv = (unsigned long)tuv;  break;
12630                         case 'V':
12631                         default:  uv = tuv;                 break;
12632                         case 'q':
12633 #if IVSIZE >= 8
12634                                   uv = (Uquad_t)tuv;        break;
12635 #else
12636                                   goto unknown;
12637 #endif
12638                         }
12639                     }
12640                 }
12641             }
12642
12643         do_integer:
12644             {
12645                 char *ptr = ebuf + sizeof ebuf;
12646                 unsigned dig;
12647                 zeros = 0;
12648
12649                 switch (base) {
12650                 case 16:
12651                     {
12652                     const char * const p =
12653                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12654
12655                         do {
12656                             dig = uv & 15;
12657                             *--ptr = p[dig];
12658                         } while (uv >>= 4);
12659                         if (alt && *ptr != '0') {
12660                             esignbuf[esignlen++] = '0';
12661                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12662                         }
12663                         break;
12664                     }
12665                 case 8:
12666                     do {
12667                         dig = uv & 7;
12668                         *--ptr = '0' + dig;
12669                     } while (uv >>= 3);
12670                     if (alt && *ptr != '0')
12671                         *--ptr = '0';
12672                     break;
12673                 case 2:
12674                     do {
12675                         dig = uv & 1;
12676                         *--ptr = '0' + dig;
12677                     } while (uv >>= 1);
12678                     if (alt && *ptr != '0') {
12679                         esignbuf[esignlen++] = '0';
12680                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12681                     }
12682                     break;
12683
12684                 case 1:
12685                     /* special-case: base 1 indicates a 'c' format:
12686                      * we use the common code for extracting a uv,
12687                      * but handle that value differently here than
12688                      * all the other int types */
12689                     if ((uv > 255 ||
12690                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12691                         && !IN_BYTES)
12692                     {
12693                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12694                         eptr = ebuf;
12695                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12696                         is_utf8 = TRUE;
12697                     }
12698                     else {
12699                         eptr = ebuf;
12700                         ebuf[0] = (char)uv;
12701                         elen = 1;
12702                     }
12703                     goto string;
12704
12705                 default:                /* it had better be ten or less */
12706                     do {
12707                         dig = uv % base;
12708                         *--ptr = '0' + dig;
12709                     } while (uv /= base);
12710                     break;
12711                 }
12712                 elen = (ebuf + sizeof ebuf) - ptr;
12713                 eptr = ptr;
12714                 if (has_precis) {
12715                     if (precis > elen)
12716                         zeros = precis - elen;
12717                     else if (precis == 0 && elen == 1 && *eptr == '0'
12718                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12719                         elen = 0;
12720
12721                     /* a precision nullifies the 0 flag. */
12722                     fill = FALSE;
12723                 }
12724             }
12725             break;
12726
12727             /* FLOATING POINT */
12728
12729         case 'F':
12730             c = 'f';            /* maybe %F isn't supported here */
12731             /* FALLTHROUGH */
12732         case 'e': case 'E':
12733         case 'f':
12734         case 'g': case 'G':
12735         case 'a': case 'A':
12736
12737         {
12738             STRLEN float_need; /* what PL_efloatsize needs to become */
12739             bool hexfp;        /* hexadecimal floating point? */
12740
12741             vcatpvfn_long_double_t fv;
12742             NV                     nv;
12743
12744             /* This is evil, but floating point is even more evil */
12745
12746             /* for SV-style calling, we can only get NV
12747                for C-style calling, we assume %f is double;
12748                for simplicity we allow any of %Lf, %llf, %qf for long double
12749             */
12750             switch (intsize) {
12751             case 'V':
12752 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12753                 intsize = 'q';
12754 #endif
12755                 break;
12756 /* [perl #20339] - we should accept and ignore %lf rather than die */
12757             case 'l':
12758                 /* FALLTHROUGH */
12759             default:
12760 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12761                 intsize = args ? 0 : 'q';
12762 #endif
12763                 break;
12764             case 'q':
12765 #if defined(HAS_LONG_DOUBLE)
12766                 break;
12767 #else
12768                 /* FALLTHROUGH */
12769 #endif
12770             case 'c':
12771             case 'h':
12772             case 'z':
12773             case 't':
12774             case 'j':
12775                 goto unknown;
12776             }
12777
12778             /* Now we need (long double) if intsize == 'q', else (double). */
12779             if (args) {
12780                 /* Note: do not pull NVs off the va_list with va_arg()
12781                  * (pull doubles instead) because if you have a build
12782                  * with long doubles, you would always be pulling long
12783                  * doubles, which would badly break anyone using only
12784                  * doubles (i.e. the majority of builds). In other
12785                  * words, you cannot mix doubles and long doubles.
12786                  * The only case where you can pull off long doubles
12787                  * is when the format specifier explicitly asks so with
12788                  * e.g. "%Lg". */
12789 #ifdef USE_QUADMATH
12790                 fv = intsize == 'q' ?
12791                     va_arg(*args, NV) : va_arg(*args, double);
12792                 nv = fv;
12793 #elif LONG_DOUBLESIZE > DOUBLESIZE
12794                 if (intsize == 'q') {
12795                     fv = va_arg(*args, long double);
12796                     nv = fv;
12797                 } else {
12798                     nv = va_arg(*args, double);
12799                     VCATPVFN_NV_TO_FV(nv, fv);
12800                 }
12801 #else
12802                 nv = va_arg(*args, double);
12803                 fv = nv;
12804 #endif
12805             }
12806             else
12807             {
12808                 SvGETMAGIC(argsv);
12809                 /* we jump here if an int-ish format encountered an
12810                  * infinite/Nan argsv. After setting nv/fv, it falls
12811                  * into the isinfnan block which follows */
12812               handle_infnan_argsv:
12813                 nv = SvNV_nomg(argsv);
12814                 VCATPVFN_NV_TO_FV(nv, fv);
12815             }
12816
12817             if (Perl_isinfnan(nv)) {
12818                 if (c == 'c')
12819                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12820                            SvNV_nomg(argsv), (int)c);
12821
12822                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12823                 assert(elen);
12824                 eptr = ebuf;
12825                 zeros     = 0;
12826                 esignlen  = 0;
12827                 dotstrlen = 0;
12828                 break;
12829             }
12830
12831             /* special-case "%.0f" */
12832             if (   c == 'f'
12833                 && !precis
12834                 && has_precis
12835                 && !(width || left || plus || alt)
12836                 && !fill
12837                 && intsize != 'q'
12838                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12839             )
12840                 goto float_concat;
12841
12842             /* Determine the buffer size needed for the various
12843              * floating-point formats.
12844              *
12845              * The basic possibilities are:
12846              *
12847              *               <---P--->
12848              *    %f 1111111.123456789
12849              *    %e       1.111111123e+06
12850              *    %a     0x1.0f4471f9bp+20
12851              *    %g        1111111.12
12852              *    %g        1.11111112e+15
12853              *
12854              * where P is the value of the precision in the format, or 6
12855              * if not specified. Note the two possible output formats of
12856              * %g; in both cases the number of significant digits is <=
12857              * precision.
12858              *
12859              * For most of the format types the maximum buffer size needed
12860              * is precision, plus: any leading 1 or 0x1, the radix
12861              * point, and an exponent.  The difficult one is %f: for a
12862              * large positive exponent it can have many leading digits,
12863              * which needs to be calculated specially. Also %a is slightly
12864              * different in that in the absence of a specified precision,
12865              * it uses as many digits as necessary to distinguish
12866              * different values.
12867              *
12868              * First, here are the constant bits. For ease of calculation
12869              * we over-estimate the needed buffer size, for example by
12870              * assuming all formats have an exponent and a leading 0x1.
12871              *
12872              * Also for production use, add a little extra overhead for
12873              * safety's sake. Under debugging don't, as it means we're
12874              * more likely to quickly spot issues during development.
12875              */
12876
12877             float_need =     1  /* possible unary minus */
12878                           +  4  /* "0x1" plus very unlikely carry */
12879                           +  1  /* default radix point '.' */
12880                           +  2  /* "e-", "p+" etc */
12881                           +  6  /* exponent: up to 16383 (quad fp) */
12882 #ifndef DEBUGGING
12883                           + 20  /* safety net */
12884 #endif
12885                           +  1; /* \0 */
12886
12887
12888             /* determine the radix point len, e.g. length(".") in "1.2" */
12889 #ifdef USE_LOCALE_NUMERIC
12890             /* note that we may either explicitly use PL_numeric_radix_sv
12891              * below, or implicitly, via an snprintf() variant.
12892              * Note also things like ps_AF.utf8 which has
12893              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
12894             if (!lc_numeric_set) {
12895                 /* only set once and reuse in-locale value on subsequent
12896                  * iterations.
12897                  * XXX what happens if we die in an eval?
12898                  */
12899                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12900                 lc_numeric_set = TRUE;
12901             }
12902
12903             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12904                 /* this can't wrap unless PL_numeric_radix_sv is a string
12905                  * consuming virtually all the 32-bit or 64-bit address
12906                  * space
12907                  */
12908                 float_need += (SvCUR(PL_numeric_radix_sv) - 1);
12909
12910                 /* floating-point formats only get utf8 if the radix point
12911                  * is utf8. All other characters in the string are < 128
12912                  * and so can be safely appended to both a non-utf8 and utf8
12913                  * string as-is.
12914                  * Note that this will convert the output to utf8 even if
12915                  * the radix point didn't get output.
12916                  */
12917                 if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
12918                     sv_utf8_upgrade(sv);
12919                     has_utf8 = TRUE;
12920                 }
12921             }
12922 #endif
12923
12924             hexfp = FALSE;
12925
12926             if (isALPHA_FOLD_EQ(c, 'f')) {
12927                 /* Determine how many digits before the radix point
12928                  * might be emitted.  frexp() (or frexpl) has some
12929                  * unspecified behaviour for nan/inf/-inf, so lucky we've
12930                  * already handled them above */
12931                 STRLEN digits;
12932                 int i = PERL_INT_MIN;
12933                 (void)Perl_frexp((NV)fv, &i);
12934                 if (i == PERL_INT_MIN)
12935                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
12936
12937                 if (i > 0) {
12938                     digits = BIT_DIGITS(i);
12939                     /* this can't overflow. 'digits' will only be a few
12940                      * thousand even for the largest floating-point types.
12941                      * And up until now float_need is just some small
12942                      * constants plus radix len, which can't be in
12943                      * overflow territory unless the radix SV is consuming
12944                      * over 1/2 the address space */
12945                     assert(float_need < ((STRLEN)~0) - digits);
12946                     float_need += digits;
12947                 }
12948             }
12949             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
12950                 hexfp = TRUE;
12951                 if (!has_precis) {
12952                     /* %a in the absence of precision may print as many
12953                      * digits as needed to represent the entire mantissa
12954                      * bit pattern.
12955                      * This estimate seriously overshoots in most cases,
12956                      * but better the undershooting.  Firstly, all bytes
12957                      * of the NV are not mantissa, some of them are
12958                      * exponent.  Secondly, for the reasonably common
12959                      * long doubles case, the "80-bit extended", two
12960                      * or six bytes of the NV are unused. Also, we'll
12961                      * still pick up an extra +6 from the default
12962                      * precision calculation below. */
12963                     STRLEN digits =
12964 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12965                         /* For the "double double", we need more.
12966                          * Since each double has their own exponent, the
12967                          * doubles may float (haha) rather far from each
12968                          * other, and the number of required bits is much
12969                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12970                          * See the definition of DOUBLEDOUBLE_MAXBITS.
12971                          *
12972                          * Need 2 hexdigits for each byte. */
12973                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12974 #else
12975                         NVSIZE * 2; /* 2 hexdigits for each byte */
12976 #endif
12977                     /* see "this can't overflow" comment above */
12978                     assert(float_need < ((STRLEN)~0) - digits);
12979                     float_need += digits;
12980                 }
12981             }
12982             /* special-case "%.<number>g" if it will fit in ebuf */
12983             else if (c == 'g'
12984                 && precis   /* See earlier comment about buggy Gconvert
12985                                when digits, aka precis, is 0  */
12986                 && has_precis
12987                 /* check, in manner not involving wrapping, that it will
12988                  * fit in ebuf  */
12989                 && float_need < sizeof(ebuf)
12990                 && sizeof(ebuf) - float_need > precis
12991                 && !(width || left || plus || alt)
12992                 && !fill
12993                 && intsize != 'q'
12994             ) {
12995                 SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
12996                 elen = strlen(ebuf);
12997                 eptr = ebuf;
12998                 goto float_concat;
12999             }
13000
13001
13002             {
13003                 STRLEN pr = has_precis ? precis : 6; /* known default */
13004                 /* this probably can't wrap, since precis is limited
13005                  * to 1/4 address space size, but better safe than sorry
13006                  */
13007                 if (float_need >= ((STRLEN)~0) - pr)
13008                     croak_memory_wrap();
13009                 float_need += pr;
13010             }
13011
13012             if (float_need < width)
13013                 float_need = width;
13014
13015             if (PL_efloatsize <= float_need) {
13016                 /* PL_efloatbuf should be at least 1 greater than
13017                  * float_need to allow a trailing \0 to be returned by
13018                  * snprintf().  If we need to grow, overgrow for the
13019                  * benefit of future generations */
13020                 const STRLEN extra = 0x20;
13021                 if (float_need >= ((STRLEN)~0) - extra)
13022                     croak_memory_wrap();
13023                 float_need += extra;
13024                 Safefree(PL_efloatbuf);
13025                 PL_efloatsize = float_need;
13026                 Newx(PL_efloatbuf, PL_efloatsize, char);
13027                 PL_efloatbuf[0] = '\0';
13028             }
13029
13030             if (UNLIKELY(hexfp)) {
13031                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13032                                 nv, fv, has_precis, precis, width,
13033                                 alt, plus, left, fill);
13034             }
13035             else {
13036                 char *ptr = ebuf + sizeof ebuf;
13037                 *--ptr = '\0';
13038                 *--ptr = c;
13039 #if defined(USE_QUADMATH)
13040                 if (intsize == 'q') {
13041                     /* "g" -> "Qg" */
13042                     *--ptr = 'Q';
13043                 }
13044                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13045 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13046                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13047                  * not USE_LONG_DOUBLE and NVff.  In other words,
13048                  * this needs to work without USE_LONG_DOUBLE. */
13049                 if (intsize == 'q') {
13050                     /* Copy the one or more characters in a long double
13051                      * format before the 'base' ([efgEFG]) character to
13052                      * the format string. */
13053                     static char const ldblf[] = PERL_PRIfldbl;
13054                     char const *p = ldblf + sizeof(ldblf) - 3;
13055                     while (p >= ldblf) { *--ptr = *p--; }
13056                 }
13057 #endif
13058                 if (has_precis) {
13059                     base = precis;
13060                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13061                     *--ptr = '.';
13062                 }
13063                 if (width) {
13064                     base = width;
13065                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13066                 }
13067                 if (fill)
13068                     *--ptr = '0';
13069                 if (left)
13070                     *--ptr = '-';
13071                 if (plus)
13072                     *--ptr = plus;
13073                 if (alt)
13074                     *--ptr = '#';
13075                 *--ptr = '%';
13076
13077                 /* No taint.  Otherwise we are in the strange situation
13078                  * where printf() taints but print($float) doesn't.
13079                  * --jhi */
13080
13081                 /* hopefully the above makes ptr a very constrained format
13082                  * that is safe to use, even though it's not literal */
13083                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
13084 #ifdef USE_QUADMATH
13085                 {
13086                     const char* qfmt = quadmath_format_single(ptr);
13087                     if (!qfmt)
13088                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13089                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13090                                              qfmt, nv);
13091                     if ((IV)elen == -1) {
13092                         if (qfmt != ptr)
13093                             SAVEFREEPV(qfmt);
13094                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
13095                     }
13096                     if (qfmt != ptr)
13097                         Safefree(qfmt);
13098                 }
13099 #elif defined(HAS_LONG_DOUBLE)
13100                 elen = ((intsize == 'q')
13101                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13102                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
13103 #else
13104                 elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv);
13105 #endif
13106                 GCC_DIAG_RESTORE;
13107             }
13108
13109             eptr = PL_efloatbuf;
13110
13111           float_concat:
13112
13113             /* Since floating-point formats do their own formatting and
13114              * padding, we skip the main block of code at the end of this
13115              * loop which handles appending eptr to sv, and do our own
13116              * stripped-down version */
13117
13118             assert(!zeros);
13119             assert(!esignlen);
13120             assert(elen);
13121             assert(elen >= width);
13122
13123             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13124
13125             goto done_valid_conversion;
13126         }
13127
13128             /* SPECIAL */
13129
13130         case 'n':
13131             {
13132                 STRLEN len;
13133                 /* XXX ideally we should warn if any flags etc have been
13134                  * set, e.g. "%-4.5n" */
13135                 /* XXX if sv was originally non-utf8 with a char in the
13136                  * range 0x80-0xff, then if it got upgraded, we should
13137                  * calculate char len rather than byte len here */
13138                 len = SvCUR(sv) - origlen;
13139                 if (args) {
13140                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13141
13142                     switch (intsize) {
13143                     case 'c':  *(va_arg(*args, char*))      = i; break;
13144                     case 'h':  *(va_arg(*args, short*))     = i; break;
13145                     default:   *(va_arg(*args, int*))       = i; break;
13146                     case 'l':  *(va_arg(*args, long*))      = i; break;
13147                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13148                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13149 #ifdef HAS_PTRDIFF_T
13150                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13151 #endif
13152                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13153                     case 'q':
13154 #if IVSIZE >= 8
13155                                *(va_arg(*args, Quad_t*))    = i; break;
13156 #else
13157                                goto unknown;
13158 #endif
13159                     }
13160                 }
13161                 else {
13162                     if (arg_missing)
13163                         Perl_croak_nocontext(
13164                             "Missing argument for %%n in %s",
13165                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13166                     sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)len);
13167                 }
13168                 goto done_valid_conversion;
13169             }
13170
13171             /* UNKNOWN */
13172
13173         default:
13174       unknown:
13175             if (!args
13176                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13177                 && ckWARN(WARN_PRINTF))
13178             {
13179                 SV * const msg = sv_newmortal();
13180                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13181                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13182                 if (fmtstart < patend) {
13183                     const char * const fmtend = q < patend ? q : patend;
13184                     const char * f;
13185                     sv_catpvs(msg, "\"%");
13186                     for (f = fmtstart; f < fmtend; f++) {
13187                         if (isPRINT(*f)) {
13188                             sv_catpvn_nomg(msg, f, 1);
13189                         } else {
13190                             Perl_sv_catpvf(aTHX_ msg,
13191                                            "\\%03" UVof, (UV)*f & 0xFF);
13192                         }
13193                     }
13194                     sv_catpvs(msg, "\"");
13195                 } else {
13196                     sv_catpvs(msg, "end of string");
13197                 }
13198                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13199             }
13200
13201             /* mangled format: output the '%', then continue from the
13202              * character following that */
13203             sv_catpvn_nomg(sv, fmtstart-1, 1);
13204             q = fmtstart;
13205             svix = osvix;
13206             /* Any "redundant arg" warning from now onwards will probably
13207              * just be misleading, so don't bother. */
13208             no_redundant_warning = TRUE;
13209             continue;   /* not "break" */
13210         }
13211
13212         if (is_utf8 != has_utf8) {
13213             if (is_utf8) {
13214                 if (SvCUR(sv))
13215                     sv_utf8_upgrade(sv);
13216             }
13217             else {
13218                 const STRLEN old_elen = elen;
13219                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13220                 sv_utf8_upgrade(nsv);
13221                 eptr = SvPVX_const(nsv);
13222                 elen = SvCUR(nsv);
13223
13224                 if (width) { /* fudge width (can't fudge elen) */
13225                     width += elen - old_elen;
13226                 }
13227                 is_utf8 = TRUE;
13228             }
13229         }
13230
13231
13232         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13233
13234         {
13235             STRLEN need, have, gap;
13236             STRLEN i;
13237             char *s;
13238
13239             /* signed value that's wrapped? */
13240             assert(elen  <= ((~(STRLEN)0) >> 1));
13241
13242             /* if zeros is non-zero, then it represents filler between
13243              * elen and precis. So adding elen and zeros together will
13244              * always be <= precis, and the addition can never wrap */
13245             assert(!zeros || (precis > elen && precis - elen == zeros));
13246             have = elen + zeros;
13247
13248             if (have >= (((STRLEN)~0) - esignlen))
13249                 croak_memory_wrap();
13250             have += esignlen;
13251
13252             need = (have > width ? have : width);
13253             gap = need - have;
13254
13255             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13256                 croak_memory_wrap();
13257             need += (SvCUR(sv) + 1);
13258
13259             SvGROW(sv, need);
13260
13261             s = SvEND(sv);
13262
13263             if (left) {
13264                 for (i = 0; i < esignlen; i++)
13265                     *s++ = esignbuf[i];
13266                 for (i = zeros; i; i--)
13267                     *s++ = '0';
13268                 Copy(eptr, s, elen, char);
13269                 s += elen;
13270                 for (i = gap; i; i--)
13271                     *s++ = ' ';
13272             }
13273             else {
13274                 if (fill) {
13275                     for (i = 0; i < esignlen; i++)
13276                         *s++ = esignbuf[i];
13277                     assert(!zeros);
13278                     zeros = gap;
13279                 }
13280                 else {
13281                     for (i = gap; i; i--)
13282                         *s++ = ' ';
13283                     for (i = 0; i < esignlen; i++)
13284                         *s++ = esignbuf[i];
13285                 }
13286
13287                 for (i = zeros; i; i--)
13288                     *s++ = '0';
13289                 Copy(eptr, s, elen, char);
13290                 s += elen;
13291             }
13292
13293             *s = '\0';
13294             SvCUR_set(sv, s - SvPVX_const(sv));
13295
13296             if (is_utf8)
13297                 has_utf8 = TRUE;
13298             if (has_utf8)
13299                 SvUTF8_on(sv);
13300         }
13301
13302         if (vectorize && veclen) {
13303             /* we append the vector separator separately since %v isn't
13304              * very common: don't slow down the general case by adding
13305              * dotstrlen to need etc */
13306             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13307             esignlen = 0;
13308             goto vector; /* do next iteration */
13309         }
13310
13311       done_valid_conversion:
13312
13313         if (arg_missing)
13314             S_warn_vcatpvfn_missing_argument(aTHX);
13315     }
13316
13317     /* Now that we've consumed all our printf format arguments (svix)
13318      * do we have things left on the stack that we didn't use?
13319      */
13320     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13321         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13322                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13323     }
13324
13325     SvTAINT(sv);
13326
13327     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
13328                                each iteration. */
13329 }
13330
13331 /* =========================================================================
13332
13333 =head1 Cloning an interpreter
13334
13335 =cut
13336
13337 All the macros and functions in this section are for the private use of
13338 the main function, perl_clone().
13339
13340 The foo_dup() functions make an exact copy of an existing foo thingy.
13341 During the course of a cloning, a hash table is used to map old addresses
13342 to new addresses.  The table is created and manipulated with the
13343 ptr_table_* functions.
13344
13345  * =========================================================================*/
13346
13347
13348 #if defined(USE_ITHREADS)
13349
13350 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13351 #ifndef GpREFCNT_inc
13352 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13353 #endif
13354
13355
13356 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13357    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13358    If this changes, please unmerge ss_dup.
13359    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13360 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13361 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13362 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13363 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13364 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13365 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13366 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13367 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13368 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13369 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13370 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13371 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13372 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13373
13374 /* clone a parser */
13375
13376 yy_parser *
13377 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13378 {
13379     yy_parser *parser;
13380
13381     PERL_ARGS_ASSERT_PARSER_DUP;
13382
13383     if (!proto)
13384         return NULL;
13385
13386     /* look for it in the table first */
13387     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13388     if (parser)
13389         return parser;
13390
13391     /* create anew and remember what it is */
13392     Newxz(parser, 1, yy_parser);
13393     ptr_table_store(PL_ptr_table, proto, parser);
13394
13395     /* XXX eventually, just Copy() most of the parser struct ? */
13396
13397     parser->lex_brackets = proto->lex_brackets;
13398     parser->lex_casemods = proto->lex_casemods;
13399     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13400                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13401     parser->lex_casestack = savepvn(proto->lex_casestack,
13402                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13403     parser->lex_defer   = proto->lex_defer;
13404     parser->lex_dojoin  = proto->lex_dojoin;
13405     parser->lex_formbrack = proto->lex_formbrack;
13406     parser->lex_inpat   = proto->lex_inpat;
13407     parser->lex_inwhat  = proto->lex_inwhat;
13408     parser->lex_op      = proto->lex_op;
13409     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13410     parser->lex_starts  = proto->lex_starts;
13411     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13412     parser->multi_close = proto->multi_close;
13413     parser->multi_open  = proto->multi_open;
13414     parser->multi_start = proto->multi_start;
13415     parser->multi_end   = proto->multi_end;
13416     parser->preambled   = proto->preambled;
13417     parser->lex_super_state = proto->lex_super_state;
13418     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13419     parser->lex_sub_op  = proto->lex_sub_op;
13420     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13421     parser->linestr     = sv_dup_inc(proto->linestr, param);
13422     parser->expect      = proto->expect;
13423     parser->copline     = proto->copline;
13424     parser->last_lop_op = proto->last_lop_op;
13425     parser->lex_state   = proto->lex_state;
13426     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13427     /* rsfp_filters entries have fake IoDIRP() */
13428     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13429     parser->in_my       = proto->in_my;
13430     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13431     parser->error_count = proto->error_count;
13432     parser->sig_elems   = proto->sig_elems;
13433     parser->sig_optelems= proto->sig_optelems;
13434     parser->sig_slurpy  = proto->sig_slurpy;
13435     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13436
13437     {
13438         char * const ols = SvPVX(proto->linestr);
13439         char * const ls  = SvPVX(parser->linestr);
13440
13441         parser->bufptr      = ls + (proto->bufptr >= ols ?
13442                                     proto->bufptr -  ols : 0);
13443         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13444                                     proto->oldbufptr -  ols : 0);
13445         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13446                                     proto->oldoldbufptr -  ols : 0);
13447         parser->linestart   = ls + (proto->linestart >= ols ?
13448                                     proto->linestart -  ols : 0);
13449         parser->last_uni    = ls + (proto->last_uni >= ols ?
13450                                     proto->last_uni -  ols : 0);
13451         parser->last_lop    = ls + (proto->last_lop >= ols ?
13452                                     proto->last_lop -  ols : 0);
13453
13454         parser->bufend      = ls + SvCUR(parser->linestr);
13455     }
13456
13457     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13458
13459
13460     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13461     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13462     parser->nexttoke    = proto->nexttoke;
13463
13464     /* XXX should clone saved_curcop here, but we aren't passed
13465      * proto_perl; so do it in perl_clone_using instead */
13466
13467     return parser;
13468 }
13469
13470
13471 /* duplicate a file handle */
13472
13473 PerlIO *
13474 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13475 {
13476     PerlIO *ret;
13477
13478     PERL_ARGS_ASSERT_FP_DUP;
13479     PERL_UNUSED_ARG(type);
13480
13481     if (!fp)
13482         return (PerlIO*)NULL;
13483
13484     /* look for it in the table first */
13485     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13486     if (ret)
13487         return ret;
13488
13489     /* create anew and remember what it is */
13490 #ifdef __amigaos4__
13491     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13492 #else
13493     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13494 #endif
13495     ptr_table_store(PL_ptr_table, fp, ret);
13496     return ret;
13497 }
13498
13499 /* duplicate a directory handle */
13500
13501 DIR *
13502 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13503 {
13504     DIR *ret;
13505
13506 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13507     DIR *pwd;
13508     const Direntry_t *dirent;
13509     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13510     char *name = NULL;
13511     STRLEN len = 0;
13512     long pos;
13513 #endif
13514
13515     PERL_UNUSED_CONTEXT;
13516     PERL_ARGS_ASSERT_DIRP_DUP;
13517
13518     if (!dp)
13519         return (DIR*)NULL;
13520
13521     /* look for it in the table first */
13522     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13523     if (ret)
13524         return ret;
13525
13526 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13527
13528     PERL_UNUSED_ARG(param);
13529
13530     /* create anew */
13531
13532     /* open the current directory (so we can switch back) */
13533     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13534
13535     /* chdir to our dir handle and open the present working directory */
13536     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13537         PerlDir_close(pwd);
13538         return (DIR *)NULL;
13539     }
13540     /* Now we should have two dir handles pointing to the same dir. */
13541
13542     /* Be nice to the calling code and chdir back to where we were. */
13543     /* XXX If this fails, then what? */
13544     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13545
13546     /* We have no need of the pwd handle any more. */
13547     PerlDir_close(pwd);
13548
13549 #ifdef DIRNAMLEN
13550 # define d_namlen(d) (d)->d_namlen
13551 #else
13552 # define d_namlen(d) strlen((d)->d_name)
13553 #endif
13554     /* Iterate once through dp, to get the file name at the current posi-
13555        tion. Then step back. */
13556     pos = PerlDir_tell(dp);
13557     if ((dirent = PerlDir_read(dp))) {
13558         len = d_namlen(dirent);
13559         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13560             /* If the len is somehow magically longer than the
13561              * maximum length of the directory entry, even though
13562              * we could fit it in a buffer, we could not copy it
13563              * from the dirent.  Bail out. */
13564             PerlDir_close(ret);
13565             return (DIR*)NULL;
13566         }
13567         if (len <= sizeof smallbuf) name = smallbuf;
13568         else Newx(name, len, char);
13569         Move(dirent->d_name, name, len, char);
13570     }
13571     PerlDir_seek(dp, pos);
13572
13573     /* Iterate through the new dir handle, till we find a file with the
13574        right name. */
13575     if (!dirent) /* just before the end */
13576         for(;;) {
13577             pos = PerlDir_tell(ret);
13578             if (PerlDir_read(ret)) continue; /* not there yet */
13579             PerlDir_seek(ret, pos); /* step back */
13580             break;
13581         }
13582     else {
13583         const long pos0 = PerlDir_tell(ret);
13584         for(;;) {
13585             pos = PerlDir_tell(ret);
13586             if ((dirent = PerlDir_read(ret))) {
13587                 if (len == (STRLEN)d_namlen(dirent)
13588                     && memEQ(name, dirent->d_name, len)) {
13589                     /* found it */
13590                     PerlDir_seek(ret, pos); /* step back */
13591                     break;
13592                 }
13593                 /* else we are not there yet; keep iterating */
13594             }
13595             else { /* This is not meant to happen. The best we can do is
13596                       reset the iterator to the beginning. */
13597                 PerlDir_seek(ret, pos0);
13598                 break;
13599             }
13600         }
13601     }
13602 #undef d_namlen
13603
13604     if (name && name != smallbuf)
13605         Safefree(name);
13606 #endif
13607
13608 #ifdef WIN32
13609     ret = win32_dirp_dup(dp, param);
13610 #endif
13611
13612     /* pop it in the pointer table */
13613     if (ret)
13614         ptr_table_store(PL_ptr_table, dp, ret);
13615
13616     return ret;
13617 }
13618
13619 /* duplicate a typeglob */
13620
13621 GP *
13622 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13623 {
13624     GP *ret;
13625
13626     PERL_ARGS_ASSERT_GP_DUP;
13627
13628     if (!gp)
13629         return (GP*)NULL;
13630     /* look for it in the table first */
13631     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13632     if (ret)
13633         return ret;
13634
13635     /* create anew and remember what it is */
13636     Newxz(ret, 1, GP);
13637     ptr_table_store(PL_ptr_table, gp, ret);
13638
13639     /* clone */
13640     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13641        on Newxz() to do this for us.  */
13642     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13643     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13644     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13645     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13646     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13647     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13648     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13649     ret->gp_cvgen       = gp->gp_cvgen;
13650     ret->gp_line        = gp->gp_line;
13651     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13652     return ret;
13653 }
13654
13655 /* duplicate a chain of magic */
13656
13657 MAGIC *
13658 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13659 {
13660     MAGIC *mgret = NULL;
13661     MAGIC **mgprev_p = &mgret;
13662
13663     PERL_ARGS_ASSERT_MG_DUP;
13664
13665     for (; mg; mg = mg->mg_moremagic) {
13666         MAGIC *nmg;
13667
13668         if ((param->flags & CLONEf_JOIN_IN)
13669                 && mg->mg_type == PERL_MAGIC_backref)
13670             /* when joining, we let the individual SVs add themselves to
13671              * backref as needed. */
13672             continue;
13673
13674         Newx(nmg, 1, MAGIC);
13675         *mgprev_p = nmg;
13676         mgprev_p = &(nmg->mg_moremagic);
13677
13678         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13679            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13680            from the original commit adding Perl_mg_dup() - revision 4538.
13681            Similarly there is the annotation "XXX random ptr?" next to the
13682            assignment to nmg->mg_ptr.  */
13683         *nmg = *mg;
13684
13685         /* FIXME for plugins
13686         if (nmg->mg_type == PERL_MAGIC_qr) {
13687             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13688         }
13689         else
13690         */
13691         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13692                           ? nmg->mg_type == PERL_MAGIC_backref
13693                                 /* The backref AV has its reference
13694                                  * count deliberately bumped by 1 */
13695                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13696                                                     nmg->mg_obj, param))
13697                                 : sv_dup_inc(nmg->mg_obj, param)
13698                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13699                              nmg->mg_type == PERL_MAGIC_regdata)
13700                                   ? nmg->mg_obj
13701                                   : sv_dup(nmg->mg_obj, param);
13702
13703         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13704             if (nmg->mg_len > 0) {
13705                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13706                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13707                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13708                 {
13709                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13710                     sv_dup_inc_multiple((SV**)(namtp->table),
13711                                         (SV**)(namtp->table), NofAMmeth, param);
13712                 }
13713             }
13714             else if (nmg->mg_len == HEf_SVKEY)
13715                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13716         }
13717         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13718             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13719         }
13720     }
13721     return mgret;
13722 }
13723
13724 #endif /* USE_ITHREADS */
13725
13726 struct ptr_tbl_arena {
13727     struct ptr_tbl_arena *next;
13728     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13729 };
13730
13731 /* create a new pointer-mapping table */
13732
13733 PTR_TBL_t *
13734 Perl_ptr_table_new(pTHX)
13735 {
13736     PTR_TBL_t *tbl;
13737     PERL_UNUSED_CONTEXT;
13738
13739     Newx(tbl, 1, PTR_TBL_t);
13740     tbl->tbl_max        = 511;
13741     tbl->tbl_items      = 0;
13742     tbl->tbl_arena      = NULL;
13743     tbl->tbl_arena_next = NULL;
13744     tbl->tbl_arena_end  = NULL;
13745     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13746     return tbl;
13747 }
13748
13749 #define PTR_TABLE_HASH(ptr) \
13750   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13751
13752 /* map an existing pointer using a table */
13753
13754 STATIC PTR_TBL_ENT_t *
13755 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13756 {
13757     PTR_TBL_ENT_t *tblent;
13758     const UV hash = PTR_TABLE_HASH(sv);
13759
13760     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13761
13762     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13763     for (; tblent; tblent = tblent->next) {
13764         if (tblent->oldval == sv)
13765             return tblent;
13766     }
13767     return NULL;
13768 }
13769
13770 void *
13771 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13772 {
13773     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13774
13775     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13776     PERL_UNUSED_CONTEXT;
13777
13778     return tblent ? tblent->newval : NULL;
13779 }
13780
13781 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13782  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13783  * the core's typical use of ptr_tables in thread cloning. */
13784
13785 void
13786 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13787 {
13788     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13789
13790     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13791     PERL_UNUSED_CONTEXT;
13792
13793     if (tblent) {
13794         tblent->newval = newsv;
13795     } else {
13796         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13797
13798         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13799             struct ptr_tbl_arena *new_arena;
13800
13801             Newx(new_arena, 1, struct ptr_tbl_arena);
13802             new_arena->next = tbl->tbl_arena;
13803             tbl->tbl_arena = new_arena;
13804             tbl->tbl_arena_next = new_arena->array;
13805             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13806         }
13807
13808         tblent = tbl->tbl_arena_next++;
13809
13810         tblent->oldval = oldsv;
13811         tblent->newval = newsv;
13812         tblent->next = tbl->tbl_ary[entry];
13813         tbl->tbl_ary[entry] = tblent;
13814         tbl->tbl_items++;
13815         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13816             ptr_table_split(tbl);
13817     }
13818 }
13819
13820 /* double the hash bucket size of an existing ptr table */
13821
13822 void
13823 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13824 {
13825     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13826     const UV oldsize = tbl->tbl_max + 1;
13827     UV newsize = oldsize * 2;
13828     UV i;
13829
13830     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13831     PERL_UNUSED_CONTEXT;
13832
13833     Renew(ary, newsize, PTR_TBL_ENT_t*);
13834     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13835     tbl->tbl_max = --newsize;
13836     tbl->tbl_ary = ary;
13837     for (i=0; i < oldsize; i++, ary++) {
13838         PTR_TBL_ENT_t **entp = ary;
13839         PTR_TBL_ENT_t *ent = *ary;
13840         PTR_TBL_ENT_t **curentp;
13841         if (!ent)
13842             continue;
13843         curentp = ary + oldsize;
13844         do {
13845             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13846                 *entp = ent->next;
13847                 ent->next = *curentp;
13848                 *curentp = ent;
13849             }
13850             else
13851                 entp = &ent->next;
13852             ent = *entp;
13853         } while (ent);
13854     }
13855 }
13856
13857 /* remove all the entries from a ptr table */
13858 /* Deprecated - will be removed post 5.14 */
13859
13860 void
13861 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13862 {
13863     PERL_UNUSED_CONTEXT;
13864     if (tbl && tbl->tbl_items) {
13865         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13866
13867         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13868
13869         while (arena) {
13870             struct ptr_tbl_arena *next = arena->next;
13871
13872             Safefree(arena);
13873             arena = next;
13874         };
13875
13876         tbl->tbl_items = 0;
13877         tbl->tbl_arena = NULL;
13878         tbl->tbl_arena_next = NULL;
13879         tbl->tbl_arena_end = NULL;
13880     }
13881 }
13882
13883 /* clear and free a ptr table */
13884
13885 void
13886 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13887 {
13888     struct ptr_tbl_arena *arena;
13889
13890     PERL_UNUSED_CONTEXT;
13891
13892     if (!tbl) {
13893         return;
13894     }
13895
13896     arena = tbl->tbl_arena;
13897
13898     while (arena) {
13899         struct ptr_tbl_arena *next = arena->next;
13900
13901         Safefree(arena);
13902         arena = next;
13903     }
13904
13905     Safefree(tbl->tbl_ary);
13906     Safefree(tbl);
13907 }
13908
13909 #if defined(USE_ITHREADS)
13910
13911 void
13912 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13913 {
13914     PERL_ARGS_ASSERT_RVPV_DUP;
13915
13916     assert(!isREGEXP(sstr));
13917     if (SvROK(sstr)) {
13918         if (SvWEAKREF(sstr)) {
13919             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13920             if (param->flags & CLONEf_JOIN_IN) {
13921                 /* if joining, we add any back references individually rather
13922                  * than copying the whole backref array */
13923                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13924             }
13925         }
13926         else
13927             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13928     }
13929     else if (SvPVX_const(sstr)) {
13930         /* Has something there */
13931         if (SvLEN(sstr)) {
13932             /* Normal PV - clone whole allocated space */
13933             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13934             /* sstr may not be that normal, but actually copy on write.
13935                But we are a true, independent SV, so:  */
13936             SvIsCOW_off(dstr);
13937         }
13938         else {
13939             /* Special case - not normally malloced for some reason */
13940             if (isGV_with_GP(sstr)) {
13941                 /* Don't need to do anything here.  */
13942             }
13943             else if ((SvIsCOW(sstr))) {
13944                 /* A "shared" PV - clone it as "shared" PV */
13945                 SvPV_set(dstr,
13946                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13947                                          param)));
13948             }
13949             else {
13950                 /* Some other special case - random pointer */
13951                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13952             }
13953         }
13954     }
13955     else {
13956         /* Copy the NULL */
13957         SvPV_set(dstr, NULL);
13958     }
13959 }
13960
13961 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13962 static SV **
13963 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13964                       SSize_t items, CLONE_PARAMS *const param)
13965 {
13966     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13967
13968     while (items-- > 0) {
13969         *dest++ = sv_dup_inc(*source++, param);
13970     }
13971
13972     return dest;
13973 }
13974
13975 /* duplicate an SV of any type (including AV, HV etc) */
13976
13977 static SV *
13978 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13979 {
13980     dVAR;
13981     SV *dstr;
13982
13983     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13984
13985     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13986 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13987         abort();
13988 #endif
13989         return NULL;
13990     }
13991     /* look for it in the table first */
13992     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13993     if (dstr)
13994         return dstr;
13995
13996     if(param->flags & CLONEf_JOIN_IN) {
13997         /** We are joining here so we don't want do clone
13998             something that is bad **/
13999         if (SvTYPE(sstr) == SVt_PVHV) {
14000             const HEK * const hvname = HvNAME_HEK(sstr);
14001             if (hvname) {
14002                 /** don't clone stashes if they already exist **/
14003                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14004                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14005                 ptr_table_store(PL_ptr_table, sstr, dstr);
14006                 return dstr;
14007             }
14008         }
14009         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14010             HV *stash = GvSTASH(sstr);
14011             const HEK * hvname;
14012             if (stash && (hvname = HvNAME_HEK(stash))) {
14013                 /** don't clone GVs if they already exist **/
14014                 SV **svp;
14015                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14016                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14017                 svp = hv_fetch(
14018                         stash, GvNAME(sstr),
14019                         GvNAMEUTF8(sstr)
14020                             ? -GvNAMELEN(sstr)
14021                             :  GvNAMELEN(sstr),
14022                         0
14023                       );
14024                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14025                     ptr_table_store(PL_ptr_table, sstr, *svp);
14026                     return *svp;
14027                 }
14028             }
14029         }
14030     }
14031
14032     /* create anew and remember what it is */
14033     new_SV(dstr);
14034
14035 #ifdef DEBUG_LEAKING_SCALARS
14036     dstr->sv_debug_optype = sstr->sv_debug_optype;
14037     dstr->sv_debug_line = sstr->sv_debug_line;
14038     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14039     dstr->sv_debug_parent = (SV*)sstr;
14040     FREE_SV_DEBUG_FILE(dstr);
14041     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14042 #endif
14043
14044     ptr_table_store(PL_ptr_table, sstr, dstr);
14045
14046     /* clone */
14047     SvFLAGS(dstr)       = SvFLAGS(sstr);
14048     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14049     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14050
14051 #ifdef DEBUGGING
14052     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14053         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14054                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14055 #endif
14056
14057     /* don't clone objects whose class has asked us not to */
14058     if (SvOBJECT(sstr)
14059      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14060     {
14061         SvFLAGS(dstr) = 0;
14062         return dstr;
14063     }
14064
14065     switch (SvTYPE(sstr)) {
14066     case SVt_NULL:
14067         SvANY(dstr)     = NULL;
14068         break;
14069     case SVt_IV:
14070         SET_SVANY_FOR_BODYLESS_IV(dstr);
14071         if(SvROK(sstr)) {
14072             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14073         } else {
14074             SvIV_set(dstr, SvIVX(sstr));
14075         }
14076         break;
14077     case SVt_NV:
14078 #if NVSIZE <= IVSIZE
14079         SET_SVANY_FOR_BODYLESS_NV(dstr);
14080 #else
14081         SvANY(dstr)     = new_XNV();
14082 #endif
14083         SvNV_set(dstr, SvNVX(sstr));
14084         break;
14085     default:
14086         {
14087             /* These are all the types that need complex bodies allocating.  */
14088             void *new_body;
14089             const svtype sv_type = SvTYPE(sstr);
14090             const struct body_details *const sv_type_details
14091                 = bodies_by_type + sv_type;
14092
14093             switch (sv_type) {
14094             default:
14095                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14096                 NOT_REACHED; /* NOTREACHED */
14097                 break;
14098
14099             case SVt_PVGV:
14100             case SVt_PVIO:
14101             case SVt_PVFM:
14102             case SVt_PVHV:
14103             case SVt_PVAV:
14104             case SVt_PVCV:
14105             case SVt_PVLV:
14106             case SVt_REGEXP:
14107             case SVt_PVMG:
14108             case SVt_PVNV:
14109             case SVt_PVIV:
14110             case SVt_INVLIST:
14111             case SVt_PV:
14112                 assert(sv_type_details->body_size);
14113                 if (sv_type_details->arena) {
14114                     new_body_inline(new_body, sv_type);
14115                     new_body
14116                         = (void*)((char*)new_body - sv_type_details->offset);
14117                 } else {
14118                     new_body = new_NOARENA(sv_type_details);
14119                 }
14120             }
14121             assert(new_body);
14122             SvANY(dstr) = new_body;
14123
14124 #ifndef PURIFY
14125             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14126                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14127                  sv_type_details->copy, char);
14128 #else
14129             Copy(((char*)SvANY(sstr)),
14130                  ((char*)SvANY(dstr)),
14131                  sv_type_details->body_size + sv_type_details->offset, char);
14132 #endif
14133
14134             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14135                 && !isGV_with_GP(dstr)
14136                 && !isREGEXP(dstr)
14137                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14138                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14139
14140             /* The Copy above means that all the source (unduplicated) pointers
14141                are now in the destination.  We can check the flags and the
14142                pointers in either, but it's possible that there's less cache
14143                missing by always going for the destination.
14144                FIXME - instrument and check that assumption  */
14145             if (sv_type >= SVt_PVMG) {
14146                 if (SvMAGIC(dstr))
14147                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14148                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14149                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14150                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14151             }
14152
14153             /* The cast silences a GCC warning about unhandled types.  */
14154             switch ((int)sv_type) {
14155             case SVt_PV:
14156                 break;
14157             case SVt_PVIV:
14158                 break;
14159             case SVt_PVNV:
14160                 break;
14161             case SVt_PVMG:
14162                 break;
14163             case SVt_REGEXP:
14164               duprex:
14165                 /* FIXME for plugins */
14166                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14167                 break;
14168             case SVt_PVLV:
14169                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14170                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14171                     LvTARG(dstr) = dstr;
14172                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14173                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14174                 else
14175                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14176                 if (isREGEXP(sstr)) goto duprex;
14177                 /* FALLTHROUGH */
14178             case SVt_PVGV:
14179                 /* non-GP case already handled above */
14180                 if(isGV_with_GP(sstr)) {
14181                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14182                     /* Don't call sv_add_backref here as it's going to be
14183                        created as part of the magic cloning of the symbol
14184                        table--unless this is during a join and the stash
14185                        is not actually being cloned.  */
14186                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14187                        at the point of this comment.  */
14188                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14189                     if (param->flags & CLONEf_JOIN_IN)
14190                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14191                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14192                     (void)GpREFCNT_inc(GvGP(dstr));
14193                 }
14194                 break;
14195             case SVt_PVIO:
14196                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14197                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14198                     /* I have no idea why fake dirp (rsfps)
14199                        should be treated differently but otherwise
14200                        we end up with leaks -- sky*/
14201                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14202                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14203                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14204                 } else {
14205                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14206                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14207                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14208                     if (IoDIRP(dstr)) {
14209                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14210                     } else {
14211                         NOOP;
14212                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14213                     }
14214                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14215                 }
14216                 if (IoOFP(dstr) == IoIFP(sstr))
14217                     IoOFP(dstr) = IoIFP(dstr);
14218                 else
14219                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14220                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14221                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14222                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14223                 break;
14224             case SVt_PVAV:
14225                 /* avoid cloning an empty array */
14226                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14227                     SV **dst_ary, **src_ary;
14228                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14229
14230                     src_ary = AvARRAY((const AV *)sstr);
14231                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14232                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14233                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14234                     AvALLOC((const AV *)dstr) = dst_ary;
14235                     if (AvREAL((const AV *)sstr)) {
14236                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14237                                                       param);
14238                     }
14239                     else {
14240                         while (items-- > 0)
14241                             *dst_ary++ = sv_dup(*src_ary++, param);
14242                     }
14243                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14244                     while (items-- > 0) {
14245                         *dst_ary++ = NULL;
14246                     }
14247                 }
14248                 else {
14249                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14250                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14251                     AvMAX(  (const AV *)dstr)   = -1;
14252                     AvFILLp((const AV *)dstr)   = -1;
14253                 }
14254                 break;
14255             case SVt_PVHV:
14256                 if (HvARRAY((const HV *)sstr)) {
14257                     STRLEN i = 0;
14258                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14259                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14260                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14261                     char *darray;
14262                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14263                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14264                         char);
14265                     HvARRAY(dstr) = (HE**)darray;
14266                     while (i <= sxhv->xhv_max) {
14267                         const HE * const source = HvARRAY(sstr)[i];
14268                         HvARRAY(dstr)[i] = source
14269                             ? he_dup(source, sharekeys, param) : 0;
14270                         ++i;
14271                     }
14272                     if (SvOOK(sstr)) {
14273                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14274                         struct xpvhv_aux * const daux = HvAUX(dstr);
14275                         /* This flag isn't copied.  */
14276                         SvOOK_on(dstr);
14277
14278                         if (saux->xhv_name_count) {
14279                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14280                             const I32 count
14281                              = saux->xhv_name_count < 0
14282                                 ? -saux->xhv_name_count
14283                                 :  saux->xhv_name_count;
14284                             HEK **shekp = sname + count;
14285                             HEK **dhekp;
14286                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14287                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14288                             while (shekp-- > sname) {
14289                                 dhekp--;
14290                                 *dhekp = hek_dup(*shekp, param);
14291                             }
14292                         }
14293                         else {
14294                             daux->xhv_name_u.xhvnameu_name
14295                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14296                                           param);
14297                         }
14298                         daux->xhv_name_count = saux->xhv_name_count;
14299
14300                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14301 #ifdef PERL_HASH_RANDOMIZE_KEYS
14302                         daux->xhv_rand = saux->xhv_rand;
14303                         daux->xhv_last_rand = saux->xhv_last_rand;
14304 #endif
14305                         daux->xhv_riter = saux->xhv_riter;
14306                         daux->xhv_eiter = saux->xhv_eiter
14307                             ? he_dup(saux->xhv_eiter,
14308                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14309                         /* backref array needs refcnt=2; see sv_add_backref */
14310                         daux->xhv_backreferences =
14311                             (param->flags & CLONEf_JOIN_IN)
14312                                 /* when joining, we let the individual GVs and
14313                                  * CVs add themselves to backref as
14314                                  * needed. This avoids pulling in stuff
14315                                  * that isn't required, and simplifies the
14316                                  * case where stashes aren't cloned back
14317                                  * if they already exist in the parent
14318                                  * thread */
14319                             ? NULL
14320                             : saux->xhv_backreferences
14321                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14322                                     ? MUTABLE_AV(SvREFCNT_inc(
14323                                           sv_dup_inc((const SV *)
14324                                             saux->xhv_backreferences, param)))
14325                                     : MUTABLE_AV(sv_dup((const SV *)
14326                                             saux->xhv_backreferences, param))
14327                                 : 0;
14328
14329                         daux->xhv_mro_meta = saux->xhv_mro_meta
14330                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14331                             : 0;
14332
14333                         /* Record stashes for possible cloning in Perl_clone(). */
14334                         if (HvNAME(sstr))
14335                             av_push(param->stashes, dstr);
14336                     }
14337                 }
14338                 else
14339                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14340                 break;
14341             case SVt_PVCV:
14342                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14343                     CvDEPTH(dstr) = 0;
14344                 }
14345                 /* FALLTHROUGH */
14346             case SVt_PVFM:
14347                 /* NOTE: not refcounted */
14348                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14349                     hv_dup(CvSTASH(dstr), param);
14350                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14351                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14352                 if (!CvISXSUB(dstr)) {
14353                     OP_REFCNT_LOCK;
14354                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14355                     OP_REFCNT_UNLOCK;
14356                     CvSLABBED_off(dstr);
14357                 } else if (CvCONST(dstr)) {
14358                     CvXSUBANY(dstr).any_ptr =
14359                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14360                 }
14361                 assert(!CvSLABBED(dstr));
14362                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14363                 if (CvNAMED(dstr))
14364                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14365                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14366                 /* don't dup if copying back - CvGV isn't refcounted, so the
14367                  * duped GV may never be freed. A bit of a hack! DAPM */
14368                 else
14369                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14370                     CvCVGV_RC(dstr)
14371                     ? gv_dup_inc(CvGV(sstr), param)
14372                     : (param->flags & CLONEf_JOIN_IN)
14373                         ? NULL
14374                         : gv_dup(CvGV(sstr), param);
14375
14376                 if (!CvISXSUB(sstr)) {
14377                     PADLIST * padlist = CvPADLIST(sstr);
14378                     if(padlist)
14379                         padlist = padlist_dup(padlist, param);
14380                     CvPADLIST_set(dstr, padlist);
14381                 } else
14382 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14383                     PoisonPADLIST(dstr);
14384
14385                 CvOUTSIDE(dstr) =
14386                     CvWEAKOUTSIDE(sstr)
14387                     ? cv_dup(    CvOUTSIDE(dstr), param)
14388                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14389                 break;
14390             }
14391         }
14392     }
14393
14394     return dstr;
14395  }
14396
14397 SV *
14398 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14399 {
14400     PERL_ARGS_ASSERT_SV_DUP_INC;
14401     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14402 }
14403
14404 SV *
14405 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14406 {
14407     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14408     PERL_ARGS_ASSERT_SV_DUP;
14409
14410     /* Track every SV that (at least initially) had a reference count of 0.
14411        We need to do this by holding an actual reference to it in this array.
14412        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14413        (akin to the stashes hash, and the perl stack), we come unstuck if
14414        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14415        thread) is manipulated in a CLONE method, because CLONE runs before the
14416        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14417        (and fix things up by giving each a reference via the temps stack).
14418        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14419        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14420        before the walk of unreferenced happens and a reference to that is SV
14421        added to the temps stack. At which point we have the same SV considered
14422        to be in use, and free to be re-used. Not good.
14423     */
14424     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14425         assert(param->unreferenced);
14426         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14427     }
14428
14429     return dstr;
14430 }
14431
14432 /* duplicate a context */
14433
14434 PERL_CONTEXT *
14435 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14436 {
14437     PERL_CONTEXT *ncxs;
14438
14439     PERL_ARGS_ASSERT_CX_DUP;
14440
14441     if (!cxs)
14442         return (PERL_CONTEXT*)NULL;
14443
14444     /* look for it in the table first */
14445     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14446     if (ncxs)
14447         return ncxs;
14448
14449     /* create anew and remember what it is */
14450     Newx(ncxs, max + 1, PERL_CONTEXT);
14451     ptr_table_store(PL_ptr_table, cxs, ncxs);
14452     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14453
14454     while (ix >= 0) {
14455         PERL_CONTEXT * const ncx = &ncxs[ix];
14456         if (CxTYPE(ncx) == CXt_SUBST) {
14457             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14458         }
14459         else {
14460             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14461             switch (CxTYPE(ncx)) {
14462             case CXt_SUB:
14463                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14464                 if(CxHASARGS(ncx)){
14465                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14466                 } else {
14467                     ncx->blk_sub.savearray = NULL;
14468                 }
14469                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14470                                            ncx->blk_sub.prevcomppad);
14471                 break;
14472             case CXt_EVAL:
14473                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14474                                                       param);
14475                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14476                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14477                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14478                 /* XXX what do do with cur_top_env ???? */
14479                 break;
14480             case CXt_LOOP_LAZYSV:
14481                 ncx->blk_loop.state_u.lazysv.end
14482                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14483                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14484                    duplication code instead.
14485                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14486                    actually being the same function, and (2) order
14487                    equivalence of the two unions.
14488                    We can assert the later [but only at run time :-(]  */
14489                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14490                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14491                 /* FALLTHROUGH */
14492             case CXt_LOOP_ARY:
14493                 ncx->blk_loop.state_u.ary.ary
14494                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14495                 /* FALLTHROUGH */
14496             case CXt_LOOP_LIST:
14497             case CXt_LOOP_LAZYIV:
14498                 /* code common to all 'for' CXt_LOOP_* types */
14499                 ncx->blk_loop.itersave =
14500                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14501                 if (CxPADLOOP(ncx)) {
14502                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14503                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14504                     ncx->blk_loop.oldcomppad =
14505                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14506                                                 ncx->blk_loop.oldcomppad);
14507                     ncx->blk_loop.itervar_u.svp =
14508                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14509                 }
14510                 else {
14511                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14512                      * alias (for \$x (...)) - relies on gv_dup being the
14513                      * same as sv_dup */
14514                     ncx->blk_loop.itervar_u.gv
14515                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14516                                     param);
14517                 }
14518                 break;
14519             case CXt_LOOP_PLAIN:
14520                 break;
14521             case CXt_FORMAT:
14522                 ncx->blk_format.prevcomppad =
14523                         (PAD*)ptr_table_fetch(PL_ptr_table,
14524                                            ncx->blk_format.prevcomppad);
14525                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14526                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14527                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14528                                                      param);
14529                 break;
14530             case CXt_GIVEN:
14531                 ncx->blk_givwhen.defsv_save =
14532                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14533                 break;
14534             case CXt_BLOCK:
14535             case CXt_NULL:
14536             case CXt_WHEN:
14537                 break;
14538             }
14539         }
14540         --ix;
14541     }
14542     return ncxs;
14543 }
14544
14545 /* duplicate a stack info structure */
14546
14547 PERL_SI *
14548 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14549 {
14550     PERL_SI *nsi;
14551
14552     PERL_ARGS_ASSERT_SI_DUP;
14553
14554     if (!si)
14555         return (PERL_SI*)NULL;
14556
14557     /* look for it in the table first */
14558     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14559     if (nsi)
14560         return nsi;
14561
14562     /* create anew and remember what it is */
14563     Newx(nsi, 1, PERL_SI);
14564     ptr_table_store(PL_ptr_table, si, nsi);
14565
14566     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14567     nsi->si_cxix        = si->si_cxix;
14568     nsi->si_cxmax       = si->si_cxmax;
14569     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14570     nsi->si_type        = si->si_type;
14571     nsi->si_prev        = si_dup(si->si_prev, param);
14572     nsi->si_next        = si_dup(si->si_next, param);
14573     nsi->si_markoff     = si->si_markoff;
14574 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14575     nsi->si_stack_hwm   = 0;
14576 #endif
14577
14578     return nsi;
14579 }
14580
14581 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14582 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14583 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14584 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14585 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14586 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14587 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14588 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14589 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14590 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14591 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14592 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14593 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14594 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14595 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14596 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14597
14598 /* XXXXX todo */
14599 #define pv_dup_inc(p)   SAVEPV(p)
14600 #define pv_dup(p)       SAVEPV(p)
14601 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14602
14603 /* map any object to the new equivent - either something in the
14604  * ptr table, or something in the interpreter structure
14605  */
14606
14607 void *
14608 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14609 {
14610     void *ret;
14611
14612     PERL_ARGS_ASSERT_ANY_DUP;
14613
14614     if (!v)
14615         return (void*)NULL;
14616
14617     /* look for it in the table first */
14618     ret = ptr_table_fetch(PL_ptr_table, v);
14619     if (ret)
14620         return ret;
14621
14622     /* see if it is part of the interpreter structure */
14623     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14624         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14625     else {
14626         ret = v;
14627     }
14628
14629     return ret;
14630 }
14631
14632 /* duplicate the save stack */
14633
14634 ANY *
14635 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14636 {
14637     dVAR;
14638     ANY * const ss      = proto_perl->Isavestack;
14639     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14640     I32 ix              = proto_perl->Isavestack_ix;
14641     ANY *nss;
14642     const SV *sv;
14643     const GV *gv;
14644     const AV *av;
14645     const HV *hv;
14646     void* ptr;
14647     int intval;
14648     long longval;
14649     GP *gp;
14650     IV iv;
14651     I32 i;
14652     char *c = NULL;
14653     void (*dptr) (void*);
14654     void (*dxptr) (pTHX_ void*);
14655
14656     PERL_ARGS_ASSERT_SS_DUP;
14657
14658     Newx(nss, max, ANY);
14659
14660     while (ix > 0) {
14661         const UV uv = POPUV(ss,ix);
14662         const U8 type = (U8)uv & SAVE_MASK;
14663
14664         TOPUV(nss,ix) = uv;
14665         switch (type) {
14666         case SAVEt_CLEARSV:
14667         case SAVEt_CLEARPADRANGE:
14668             break;
14669         case SAVEt_HELEM:               /* hash element */
14670         case SAVEt_SV:                  /* scalar reference */
14671             sv = (const SV *)POPPTR(ss,ix);
14672             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14673             /* FALLTHROUGH */
14674         case SAVEt_ITEM:                        /* normal string */
14675         case SAVEt_GVSV:                        /* scalar slot in GV */
14676             sv = (const SV *)POPPTR(ss,ix);
14677             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14678             if (type == SAVEt_SV)
14679                 break;
14680             /* FALLTHROUGH */
14681         case SAVEt_FREESV:
14682         case SAVEt_MORTALIZESV:
14683         case SAVEt_READONLY_OFF:
14684             sv = (const SV *)POPPTR(ss,ix);
14685             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14686             break;
14687         case SAVEt_FREEPADNAME:
14688             ptr = POPPTR(ss,ix);
14689             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14690             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14691             break;
14692         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14693             c = (char*)POPPTR(ss,ix);
14694             TOPPTR(nss,ix) = savesharedpv(c);
14695             ptr = POPPTR(ss,ix);
14696             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14697             break;
14698         case SAVEt_GENERIC_SVREF:               /* generic sv */
14699         case SAVEt_SVREF:                       /* scalar reference */
14700             sv = (const SV *)POPPTR(ss,ix);
14701             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14702             if (type == SAVEt_SVREF)
14703                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14704             ptr = POPPTR(ss,ix);
14705             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14706             break;
14707         case SAVEt_GVSLOT:              /* any slot in GV */
14708             sv = (const SV *)POPPTR(ss,ix);
14709             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14710             ptr = POPPTR(ss,ix);
14711             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14712             sv = (const SV *)POPPTR(ss,ix);
14713             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14714             break;
14715         case SAVEt_HV:                          /* hash reference */
14716         case SAVEt_AV:                          /* array reference */
14717             sv = (const SV *) POPPTR(ss,ix);
14718             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14719             /* FALLTHROUGH */
14720         case SAVEt_COMPPAD:
14721         case SAVEt_NSTAB:
14722             sv = (const SV *) POPPTR(ss,ix);
14723             TOPPTR(nss,ix) = sv_dup(sv, param);
14724             break;
14725         case SAVEt_INT:                         /* int reference */
14726             ptr = POPPTR(ss,ix);
14727             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14728             intval = (int)POPINT(ss,ix);
14729             TOPINT(nss,ix) = intval;
14730             break;
14731         case SAVEt_LONG:                        /* long reference */
14732             ptr = POPPTR(ss,ix);
14733             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14734             longval = (long)POPLONG(ss,ix);
14735             TOPLONG(nss,ix) = longval;
14736             break;
14737         case SAVEt_I32:                         /* I32 reference */
14738             ptr = POPPTR(ss,ix);
14739             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14740             i = POPINT(ss,ix);
14741             TOPINT(nss,ix) = i;
14742             break;
14743         case SAVEt_IV:                          /* IV reference */
14744         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14745             ptr = POPPTR(ss,ix);
14746             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14747             iv = POPIV(ss,ix);
14748             TOPIV(nss,ix) = iv;
14749             break;
14750         case SAVEt_TMPSFLOOR:
14751             iv = POPIV(ss,ix);
14752             TOPIV(nss,ix) = iv;
14753             break;
14754         case SAVEt_HPTR:                        /* HV* reference */
14755         case SAVEt_APTR:                        /* AV* reference */
14756         case SAVEt_SPTR:                        /* SV* reference */
14757             ptr = POPPTR(ss,ix);
14758             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14759             sv = (const SV *)POPPTR(ss,ix);
14760             TOPPTR(nss,ix) = sv_dup(sv, param);
14761             break;
14762         case SAVEt_VPTR:                        /* random* reference */
14763             ptr = POPPTR(ss,ix);
14764             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14765             /* FALLTHROUGH */
14766         case SAVEt_INT_SMALL:
14767         case SAVEt_I32_SMALL:
14768         case SAVEt_I16:                         /* I16 reference */
14769         case SAVEt_I8:                          /* I8 reference */
14770         case SAVEt_BOOL:
14771             ptr = POPPTR(ss,ix);
14772             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14773             break;
14774         case SAVEt_GENERIC_PVREF:               /* generic char* */
14775         case SAVEt_PPTR:                        /* char* reference */
14776             ptr = POPPTR(ss,ix);
14777             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14778             c = (char*)POPPTR(ss,ix);
14779             TOPPTR(nss,ix) = pv_dup(c);
14780             break;
14781         case SAVEt_GP:                          /* scalar reference */
14782             gp = (GP*)POPPTR(ss,ix);
14783             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14784             (void)GpREFCNT_inc(gp);
14785             gv = (const GV *)POPPTR(ss,ix);
14786             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14787             break;
14788         case SAVEt_FREEOP:
14789             ptr = POPPTR(ss,ix);
14790             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14791                 /* these are assumed to be refcounted properly */
14792                 OP *o;
14793                 switch (((OP*)ptr)->op_type) {
14794                 case OP_LEAVESUB:
14795                 case OP_LEAVESUBLV:
14796                 case OP_LEAVEEVAL:
14797                 case OP_LEAVE:
14798                 case OP_SCOPE:
14799                 case OP_LEAVEWRITE:
14800                     TOPPTR(nss,ix) = ptr;
14801                     o = (OP*)ptr;
14802                     OP_REFCNT_LOCK;
14803                     (void) OpREFCNT_inc(o);
14804                     OP_REFCNT_UNLOCK;
14805                     break;
14806                 default:
14807                     TOPPTR(nss,ix) = NULL;
14808                     break;
14809                 }
14810             }
14811             else
14812                 TOPPTR(nss,ix) = NULL;
14813             break;
14814         case SAVEt_FREECOPHH:
14815             ptr = POPPTR(ss,ix);
14816             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14817             break;
14818         case SAVEt_ADELETE:
14819             av = (const AV *)POPPTR(ss,ix);
14820             TOPPTR(nss,ix) = av_dup_inc(av, param);
14821             i = POPINT(ss,ix);
14822             TOPINT(nss,ix) = i;
14823             break;
14824         case SAVEt_DELETE:
14825             hv = (const HV *)POPPTR(ss,ix);
14826             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14827             i = POPINT(ss,ix);
14828             TOPINT(nss,ix) = i;
14829             /* FALLTHROUGH */
14830         case SAVEt_FREEPV:
14831             c = (char*)POPPTR(ss,ix);
14832             TOPPTR(nss,ix) = pv_dup_inc(c);
14833             break;
14834         case SAVEt_STACK_POS:           /* Position on Perl stack */
14835             i = POPINT(ss,ix);
14836             TOPINT(nss,ix) = i;
14837             break;
14838         case SAVEt_DESTRUCTOR:
14839             ptr = POPPTR(ss,ix);
14840             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14841             dptr = POPDPTR(ss,ix);
14842             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14843                                         any_dup(FPTR2DPTR(void *, dptr),
14844                                                 proto_perl));
14845             break;
14846         case SAVEt_DESTRUCTOR_X:
14847             ptr = POPPTR(ss,ix);
14848             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14849             dxptr = POPDXPTR(ss,ix);
14850             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14851                                          any_dup(FPTR2DPTR(void *, dxptr),
14852                                                  proto_perl));
14853             break;
14854         case SAVEt_REGCONTEXT:
14855         case SAVEt_ALLOC:
14856             ix -= uv >> SAVE_TIGHT_SHIFT;
14857             break;
14858         case SAVEt_AELEM:               /* array element */
14859             sv = (const SV *)POPPTR(ss,ix);
14860             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14861             iv = POPIV(ss,ix);
14862             TOPIV(nss,ix) = iv;
14863             av = (const AV *)POPPTR(ss,ix);
14864             TOPPTR(nss,ix) = av_dup_inc(av, param);
14865             break;
14866         case SAVEt_OP:
14867             ptr = POPPTR(ss,ix);
14868             TOPPTR(nss,ix) = ptr;
14869             break;
14870         case SAVEt_HINTS:
14871             ptr = POPPTR(ss,ix);
14872             ptr = cophh_copy((COPHH*)ptr);
14873             TOPPTR(nss,ix) = ptr;
14874             i = POPINT(ss,ix);
14875             TOPINT(nss,ix) = i;
14876             if (i & HINT_LOCALIZE_HH) {
14877                 hv = (const HV *)POPPTR(ss,ix);
14878                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14879             }
14880             break;
14881         case SAVEt_PADSV_AND_MORTALIZE:
14882             longval = (long)POPLONG(ss,ix);
14883             TOPLONG(nss,ix) = longval;
14884             ptr = POPPTR(ss,ix);
14885             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14886             sv = (const SV *)POPPTR(ss,ix);
14887             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14888             break;
14889         case SAVEt_SET_SVFLAGS:
14890             i = POPINT(ss,ix);
14891             TOPINT(nss,ix) = i;
14892             i = POPINT(ss,ix);
14893             TOPINT(nss,ix) = i;
14894             sv = (const SV *)POPPTR(ss,ix);
14895             TOPPTR(nss,ix) = sv_dup(sv, param);
14896             break;
14897         case SAVEt_COMPILE_WARNINGS:
14898             ptr = POPPTR(ss,ix);
14899             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14900             break;
14901         case SAVEt_PARSER:
14902             ptr = POPPTR(ss,ix);
14903             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14904             break;
14905         default:
14906             Perl_croak(aTHX_
14907                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14908         }
14909     }
14910
14911     return nss;
14912 }
14913
14914
14915 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14916  * flag to the result. This is done for each stash before cloning starts,
14917  * so we know which stashes want their objects cloned */
14918
14919 static void
14920 do_mark_cloneable_stash(pTHX_ SV *const sv)
14921 {
14922     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14923     if (hvname) {
14924         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14925         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14926         if (cloner && GvCV(cloner)) {
14927             dSP;
14928             UV status;
14929
14930             ENTER;
14931             SAVETMPS;
14932             PUSHMARK(SP);
14933             mXPUSHs(newSVhek(hvname));
14934             PUTBACK;
14935             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14936             SPAGAIN;
14937             status = POPu;
14938             PUTBACK;
14939             FREETMPS;
14940             LEAVE;
14941             if (status)
14942                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14943         }
14944     }
14945 }
14946
14947
14948
14949 /*
14950 =for apidoc perl_clone
14951
14952 Create and return a new interpreter by cloning the current one.
14953
14954 C<perl_clone> takes these flags as parameters:
14955
14956 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14957 without it we only clone the data and zero the stacks,
14958 with it we copy the stacks and the new perl interpreter is
14959 ready to run at the exact same point as the previous one.
14960 The pseudo-fork code uses C<COPY_STACKS> while the
14961 threads->create doesn't.
14962
14963 C<CLONEf_KEEP_PTR_TABLE> -
14964 C<perl_clone> keeps a ptr_table with the pointer of the old
14965 variable as a key and the new variable as a value,
14966 this allows it to check if something has been cloned and not
14967 clone it again but rather just use the value and increase the
14968 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14969 the ptr_table using the function
14970 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14971 reason to keep it around is if you want to dup some of your own
14972 variable who are outside the graph perl scans, an example of this
14973 code is in F<threads.xs> create.
14974
14975 C<CLONEf_CLONE_HOST> -
14976 This is a win32 thing, it is ignored on unix, it tells perls
14977 win32host code (which is c++) to clone itself, this is needed on
14978 win32 if you want to run two threads at the same time,
14979 if you just want to do some stuff in a separate perl interpreter
14980 and then throw it away and return to the original one,
14981 you don't need to do anything.
14982
14983 =cut
14984 */
14985
14986 /* XXX the above needs expanding by someone who actually understands it ! */
14987 EXTERN_C PerlInterpreter *
14988 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14989
14990 PerlInterpreter *
14991 perl_clone(PerlInterpreter *proto_perl, UV flags)
14992 {
14993    dVAR;
14994 #ifdef PERL_IMPLICIT_SYS
14995
14996     PERL_ARGS_ASSERT_PERL_CLONE;
14997
14998    /* perlhost.h so we need to call into it
14999    to clone the host, CPerlHost should have a c interface, sky */
15000
15001 #ifndef __amigaos4__
15002    if (flags & CLONEf_CLONE_HOST) {
15003        return perl_clone_host(proto_perl,flags);
15004    }
15005 #endif
15006    return perl_clone_using(proto_perl, flags,
15007                             proto_perl->IMem,
15008                             proto_perl->IMemShared,
15009                             proto_perl->IMemParse,
15010                             proto_perl->IEnv,
15011                             proto_perl->IStdIO,
15012                             proto_perl->ILIO,
15013                             proto_perl->IDir,
15014                             proto_perl->ISock,
15015                             proto_perl->IProc);
15016 }
15017
15018 PerlInterpreter *
15019 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15020                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15021                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15022                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15023                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15024                  struct IPerlProc* ipP)
15025 {
15026     /* XXX many of the string copies here can be optimized if they're
15027      * constants; they need to be allocated as common memory and just
15028      * their pointers copied. */
15029
15030     IV i;
15031     CLONE_PARAMS clone_params;
15032     CLONE_PARAMS* const param = &clone_params;
15033
15034     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15035
15036     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15037 #else           /* !PERL_IMPLICIT_SYS */
15038     IV i;
15039     CLONE_PARAMS clone_params;
15040     CLONE_PARAMS* param = &clone_params;
15041     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15042
15043     PERL_ARGS_ASSERT_PERL_CLONE;
15044 #endif          /* PERL_IMPLICIT_SYS */
15045
15046     /* for each stash, determine whether its objects should be cloned */
15047     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15048     PERL_SET_THX(my_perl);
15049
15050 #ifdef DEBUGGING
15051     PoisonNew(my_perl, 1, PerlInterpreter);
15052     PL_op = NULL;
15053     PL_curcop = NULL;
15054     PL_defstash = NULL; /* may be used by perl malloc() */
15055     PL_markstack = 0;
15056     PL_scopestack = 0;
15057     PL_scopestack_name = 0;
15058     PL_savestack = 0;
15059     PL_savestack_ix = 0;
15060     PL_savestack_max = -1;
15061     PL_sig_pending = 0;
15062     PL_parser = NULL;
15063     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15064     Zero(&PL_padname_undef, 1, PADNAME);
15065     Zero(&PL_padname_const, 1, PADNAME);
15066 #  ifdef DEBUG_LEAKING_SCALARS
15067     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15068 #  endif
15069 #  ifdef PERL_TRACE_OPS
15070     Zero(PL_op_exec_cnt, OP_max+2, UV);
15071 #  endif
15072 #else   /* !DEBUGGING */
15073     Zero(my_perl, 1, PerlInterpreter);
15074 #endif  /* DEBUGGING */
15075
15076 #ifdef PERL_IMPLICIT_SYS
15077     /* host pointers */
15078     PL_Mem              = ipM;
15079     PL_MemShared        = ipMS;
15080     PL_MemParse         = ipMP;
15081     PL_Env              = ipE;
15082     PL_StdIO            = ipStd;
15083     PL_LIO              = ipLIO;
15084     PL_Dir              = ipD;
15085     PL_Sock             = ipS;
15086     PL_Proc             = ipP;
15087 #endif          /* PERL_IMPLICIT_SYS */
15088
15089
15090     param->flags = flags;
15091     /* Nothing in the core code uses this, but we make it available to
15092        extensions (using mg_dup).  */
15093     param->proto_perl = proto_perl;
15094     /* Likely nothing will use this, but it is initialised to be consistent
15095        with Perl_clone_params_new().  */
15096     param->new_perl = my_perl;
15097     param->unreferenced = NULL;
15098
15099
15100     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15101
15102     PL_body_arenas = NULL;
15103     Zero(&PL_body_roots, 1, PL_body_roots);
15104     
15105     PL_sv_count         = 0;
15106     PL_sv_root          = NULL;
15107     PL_sv_arenaroot     = NULL;
15108
15109     PL_debug            = proto_perl->Idebug;
15110
15111     /* dbargs array probably holds garbage */
15112     PL_dbargs           = NULL;
15113
15114     PL_compiling = proto_perl->Icompiling;
15115
15116     /* pseudo environmental stuff */
15117     PL_origargc         = proto_perl->Iorigargc;
15118     PL_origargv         = proto_perl->Iorigargv;
15119
15120 #ifndef NO_TAINT_SUPPORT
15121     /* Set tainting stuff before PerlIO_debug can possibly get called */
15122     PL_tainting         = proto_perl->Itainting;
15123     PL_taint_warn       = proto_perl->Itaint_warn;
15124 #else
15125     PL_tainting         = FALSE;
15126     PL_taint_warn       = FALSE;
15127 #endif
15128
15129     PL_minus_c          = proto_perl->Iminus_c;
15130
15131     PL_localpatches     = proto_perl->Ilocalpatches;
15132     PL_splitstr         = proto_perl->Isplitstr;
15133     PL_minus_n          = proto_perl->Iminus_n;
15134     PL_minus_p          = proto_perl->Iminus_p;
15135     PL_minus_l          = proto_perl->Iminus_l;
15136     PL_minus_a          = proto_perl->Iminus_a;
15137     PL_minus_E          = proto_perl->Iminus_E;
15138     PL_minus_F          = proto_perl->Iminus_F;
15139     PL_doswitches       = proto_perl->Idoswitches;
15140     PL_dowarn           = proto_perl->Idowarn;
15141 #ifdef PERL_SAWAMPERSAND
15142     PL_sawampersand     = proto_perl->Isawampersand;
15143 #endif
15144     PL_unsafe           = proto_perl->Iunsafe;
15145     PL_perldb           = proto_perl->Iperldb;
15146     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15147     PL_exit_flags       = proto_perl->Iexit_flags;
15148
15149     /* XXX time(&PL_basetime) when asked for? */
15150     PL_basetime         = proto_perl->Ibasetime;
15151
15152     PL_maxsysfd         = proto_perl->Imaxsysfd;
15153     PL_statusvalue      = proto_perl->Istatusvalue;
15154 #ifdef __VMS
15155     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15156 #else
15157     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15158 #endif
15159
15160     /* RE engine related */
15161     PL_regmatch_slab    = NULL;
15162     PL_reg_curpm        = NULL;
15163
15164     PL_sub_generation   = proto_perl->Isub_generation;
15165
15166     /* funky return mechanisms */
15167     PL_forkprocess      = proto_perl->Iforkprocess;
15168
15169     /* internal state */
15170     PL_main_start       = proto_perl->Imain_start;
15171     PL_eval_root        = proto_perl->Ieval_root;
15172     PL_eval_start       = proto_perl->Ieval_start;
15173
15174     PL_filemode         = proto_perl->Ifilemode;
15175     PL_lastfd           = proto_perl->Ilastfd;
15176     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15177     PL_Argv             = NULL;
15178     PL_Cmd              = NULL;
15179     PL_gensym           = proto_perl->Igensym;
15180
15181     PL_laststatval      = proto_perl->Ilaststatval;
15182     PL_laststype        = proto_perl->Ilaststype;
15183     PL_mess_sv          = NULL;
15184
15185     PL_profiledata      = NULL;
15186
15187     PL_generation       = proto_perl->Igeneration;
15188
15189     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15190     PL_in_clean_all     = proto_perl->Iin_clean_all;
15191
15192     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15193     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15194     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15195     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15196     PL_nomemok          = proto_perl->Inomemok;
15197     PL_an               = proto_perl->Ian;
15198     PL_evalseq          = proto_perl->Ievalseq;
15199     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15200     PL_origalen         = proto_perl->Iorigalen;
15201
15202     PL_sighandlerp      = proto_perl->Isighandlerp;
15203
15204     PL_runops           = proto_perl->Irunops;
15205
15206     PL_subline          = proto_perl->Isubline;
15207
15208     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15209
15210 #ifdef FCRYPT
15211     PL_cryptseen        = proto_perl->Icryptseen;
15212 #endif
15213
15214 #ifdef USE_LOCALE_COLLATE
15215     PL_collation_ix     = proto_perl->Icollation_ix;
15216     PL_collation_standard       = proto_perl->Icollation_standard;
15217     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15218     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15219     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15220 #endif /* USE_LOCALE_COLLATE */
15221
15222 #ifdef USE_LOCALE_NUMERIC
15223     PL_numeric_standard = proto_perl->Inumeric_standard;
15224     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15225 #endif /* !USE_LOCALE_NUMERIC */
15226
15227     /* Did the locale setup indicate UTF-8? */
15228     PL_utf8locale       = proto_perl->Iutf8locale;
15229     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15230     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15231     /* Unicode features (see perlrun/-C) */
15232     PL_unicode          = proto_perl->Iunicode;
15233
15234     /* Pre-5.8 signals control */
15235     PL_signals          = proto_perl->Isignals;
15236
15237     /* times() ticks per second */
15238     PL_clocktick        = proto_perl->Iclocktick;
15239
15240     /* Recursion stopper for PerlIO_find_layer */
15241     PL_in_load_module   = proto_perl->Iin_load_module;
15242
15243     /* sort() routine */
15244     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15245
15246     /* Not really needed/useful since the reenrant_retint is "volatile",
15247      * but do it for consistency's sake. */
15248     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15249
15250     /* Hooks to shared SVs and locks. */
15251     PL_sharehook        = proto_perl->Isharehook;
15252     PL_lockhook         = proto_perl->Ilockhook;
15253     PL_unlockhook       = proto_perl->Iunlockhook;
15254     PL_threadhook       = proto_perl->Ithreadhook;
15255     PL_destroyhook      = proto_perl->Idestroyhook;
15256     PL_signalhook       = proto_perl->Isignalhook;
15257
15258     PL_globhook         = proto_perl->Iglobhook;
15259
15260     /* swatch cache */
15261     PL_last_swash_hv    = NULL; /* reinits on demand */
15262     PL_last_swash_klen  = 0;
15263     PL_last_swash_key[0]= '\0';
15264     PL_last_swash_tmps  = (U8*)NULL;
15265     PL_last_swash_slen  = 0;
15266
15267     PL_srand_called     = proto_perl->Isrand_called;
15268     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15269
15270     if (flags & CLONEf_COPY_STACKS) {
15271         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15272         PL_tmps_ix              = proto_perl->Itmps_ix;
15273         PL_tmps_max             = proto_perl->Itmps_max;
15274         PL_tmps_floor           = proto_perl->Itmps_floor;
15275
15276         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15277          * NOTE: unlike the others! */
15278         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15279         PL_scopestack_max       = proto_perl->Iscopestack_max;
15280
15281         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15282          * NOTE: unlike the others! */
15283         PL_savestack_ix         = proto_perl->Isavestack_ix;
15284         PL_savestack_max        = proto_perl->Isavestack_max;
15285     }
15286
15287     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15288     PL_top_env          = &PL_start_env;
15289
15290     PL_op               = proto_perl->Iop;
15291
15292     PL_Sv               = NULL;
15293     PL_Xpv              = (XPV*)NULL;
15294     my_perl->Ina        = proto_perl->Ina;
15295
15296     PL_statcache        = proto_perl->Istatcache;
15297
15298 #ifndef NO_TAINT_SUPPORT
15299     PL_tainted          = proto_perl->Itainted;
15300 #else
15301     PL_tainted          = FALSE;
15302 #endif
15303     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15304
15305     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15306
15307     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15308     PL_restartop        = proto_perl->Irestartop;
15309     PL_in_eval          = proto_perl->Iin_eval;
15310     PL_delaymagic       = proto_perl->Idelaymagic;
15311     PL_phase            = proto_perl->Iphase;
15312     PL_localizing       = proto_perl->Ilocalizing;
15313
15314     PL_hv_fetch_ent_mh  = NULL;
15315     PL_modcount         = proto_perl->Imodcount;
15316     PL_lastgotoprobe    = NULL;
15317     PL_dumpindent       = proto_perl->Idumpindent;
15318
15319     PL_efloatbuf        = NULL;         /* reinits on demand */
15320     PL_efloatsize       = 0;                    /* reinits on demand */
15321
15322     /* regex stuff */
15323
15324     PL_colorset         = 0;            /* reinits PL_colors[] */
15325     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15326
15327     /* Pluggable optimizer */
15328     PL_peepp            = proto_perl->Ipeepp;
15329     PL_rpeepp           = proto_perl->Irpeepp;
15330     /* op_free() hook */
15331     PL_opfreehook       = proto_perl->Iopfreehook;
15332
15333 #ifdef USE_REENTRANT_API
15334     /* XXX: things like -Dm will segfault here in perlio, but doing
15335      *  PERL_SET_CONTEXT(proto_perl);
15336      * breaks too many other things
15337      */
15338     Perl_reentrant_init(aTHX);
15339 #endif
15340
15341     /* create SV map for pointer relocation */
15342     PL_ptr_table = ptr_table_new();
15343
15344     /* initialize these special pointers as early as possible */
15345     init_constants();
15346     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15347     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15348     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15349     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15350     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15351                     &PL_padname_const);
15352
15353     /* create (a non-shared!) shared string table */
15354     PL_strtab           = newHV();
15355     HvSHAREKEYS_off(PL_strtab);
15356     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15357     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15358
15359     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15360
15361     /* This PV will be free'd special way so must set it same way op.c does */
15362     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15363     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15364
15365     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15366     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15367     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15368     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15369
15370     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15371     /* This makes no difference to the implementation, as it always pushes
15372        and shifts pointers to other SVs without changing their reference
15373        count, with the array becoming empty before it is freed. However, it
15374        makes it conceptually clear what is going on, and will avoid some
15375        work inside av.c, filling slots between AvFILL() and AvMAX() with
15376        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15377     AvREAL_off(param->stashes);
15378
15379     if (!(flags & CLONEf_COPY_STACKS)) {
15380         param->unreferenced = newAV();
15381     }
15382
15383 #ifdef PERLIO_LAYERS
15384     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15385     PerlIO_clone(aTHX_ proto_perl, param);
15386 #endif
15387
15388     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15389     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15390     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15391     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15392     PL_xsubfilename     = proto_perl->Ixsubfilename;
15393     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15394     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15395
15396     /* switches */
15397     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15398     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15399     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15400
15401     /* magical thingies */
15402
15403     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15404     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15405     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15406
15407    
15408     /* Clone the regex array */
15409     /* ORANGE FIXME for plugins, probably in the SV dup code.
15410        newSViv(PTR2IV(CALLREGDUPE(
15411        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15412     */
15413     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15414     PL_regex_pad = AvARRAY(PL_regex_padav);
15415
15416     PL_stashpadmax      = proto_perl->Istashpadmax;
15417     PL_stashpadix       = proto_perl->Istashpadix ;
15418     Newx(PL_stashpad, PL_stashpadmax, HV *);
15419     {
15420         PADOFFSET o = 0;
15421         for (; o < PL_stashpadmax; ++o)
15422             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15423     }
15424
15425     /* shortcuts to various I/O objects */
15426     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15427     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15428     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15429     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15430     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15431     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15432     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15433
15434     /* shortcuts to regexp stuff */
15435     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15436
15437     /* shortcuts to misc objects */
15438     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15439
15440     /* shortcuts to debugging objects */
15441     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15442     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15443     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15444     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15445     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15446     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15447     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15448
15449     /* symbol tables */
15450     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15451     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15452     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15453     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15454     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15455
15456     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15457     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15458     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15459     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15460     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15461     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15462     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15463     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15464     PL_savebegin        = proto_perl->Isavebegin;
15465
15466     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15467
15468     /* subprocess state */
15469     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15470
15471     if (proto_perl->Iop_mask)
15472         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15473     else
15474         PL_op_mask      = NULL;
15475     /* PL_asserting        = proto_perl->Iasserting; */
15476
15477     /* current interpreter roots */
15478     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15479     OP_REFCNT_LOCK;
15480     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15481     OP_REFCNT_UNLOCK;
15482
15483     /* runtime control stuff */
15484     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15485
15486     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15487
15488     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15489
15490     /* interpreter atexit processing */
15491     PL_exitlistlen      = proto_perl->Iexitlistlen;
15492     if (PL_exitlistlen) {
15493         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15494         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15495     }
15496     else
15497         PL_exitlist     = (PerlExitListEntry*)NULL;
15498
15499     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15500     if (PL_my_cxt_size) {
15501         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15502         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15503 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15504         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15505         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15506 #endif
15507     }
15508     else {
15509         PL_my_cxt_list  = (void**)NULL;
15510 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15511         PL_my_cxt_keys  = (const char**)NULL;
15512 #endif
15513     }
15514     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15515     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15516     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15517     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15518
15519     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15520
15521     PAD_CLONE_VARS(proto_perl, param);
15522
15523 #ifdef HAVE_INTERP_INTERN
15524     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15525 #endif
15526
15527     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15528
15529 #ifdef PERL_USES_PL_PIDSTATUS
15530     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15531 #endif
15532     PL_osname           = SAVEPV(proto_perl->Iosname);
15533     PL_parser           = parser_dup(proto_perl->Iparser, param);
15534
15535     /* XXX this only works if the saved cop has already been cloned */
15536     if (proto_perl->Iparser) {
15537         PL_parser->saved_curcop = (COP*)any_dup(
15538                                     proto_perl->Iparser->saved_curcop,
15539                                     proto_perl);
15540     }
15541
15542     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15543
15544 #ifdef USE_LOCALE_CTYPE
15545     /* Should we warn if uses locale? */
15546     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15547 #endif
15548
15549 #ifdef USE_LOCALE_COLLATE
15550     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15551 #endif /* USE_LOCALE_COLLATE */
15552
15553 #ifdef USE_LOCALE_NUMERIC
15554     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15555     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15556 #endif /* !USE_LOCALE_NUMERIC */
15557
15558     PL_langinfo_buf = NULL;
15559     PL_langinfo_bufsize = 0;
15560
15561     /* Unicode inversion lists */
15562     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15563     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15564     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15565     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15566
15567     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15568     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15569
15570     /* utf8 character class swashes */
15571     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15572         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15573     }
15574     for (i = 0; i < POSIX_CC_COUNT; i++) {
15575         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15576     }
15577     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15578     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15579     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15580     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15581     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15582     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15583     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15584     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15585     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15586     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15587     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15588     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15589     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15590     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15591     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15592     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15593     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15594     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15595
15596     if (proto_perl->Ipsig_pend) {
15597         Newxz(PL_psig_pend, SIG_SIZE, int);
15598     }
15599     else {
15600         PL_psig_pend    = (int*)NULL;
15601     }
15602
15603     if (proto_perl->Ipsig_name) {
15604         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15605         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15606                             param);
15607         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15608     }
15609     else {
15610         PL_psig_ptr     = (SV**)NULL;
15611         PL_psig_name    = (SV**)NULL;
15612     }
15613
15614     if (flags & CLONEf_COPY_STACKS) {
15615         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15616         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15617                             PL_tmps_ix+1, param);
15618
15619         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15620         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15621         Newx(PL_markstack, i, I32);
15622         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15623                                                   - proto_perl->Imarkstack);
15624         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15625                                                   - proto_perl->Imarkstack);
15626         Copy(proto_perl->Imarkstack, PL_markstack,
15627              PL_markstack_ptr - PL_markstack + 1, I32);
15628
15629         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15630          * NOTE: unlike the others! */
15631         Newx(PL_scopestack, PL_scopestack_max, I32);
15632         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15633
15634 #ifdef DEBUGGING
15635         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15636         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15637 #endif
15638         /* reset stack AV to correct length before its duped via
15639          * PL_curstackinfo */
15640         AvFILLp(proto_perl->Icurstack) =
15641                             proto_perl->Istack_sp - proto_perl->Istack_base;
15642
15643         /* NOTE: si_dup() looks at PL_markstack */
15644         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15645
15646         /* PL_curstack          = PL_curstackinfo->si_stack; */
15647         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15648         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15649
15650         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15651         PL_stack_base           = AvARRAY(PL_curstack);
15652         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15653                                                    - proto_perl->Istack_base);
15654         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15655
15656         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15657         PL_savestack            = ss_dup(proto_perl, param);
15658     }
15659     else {
15660         init_stacks();
15661         ENTER;                  /* perl_destruct() wants to LEAVE; */
15662     }
15663
15664     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15665     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15666
15667     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15668     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15669     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15670     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15671     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15672     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15673
15674     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15675
15676     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15677     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15678     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15679
15680     PL_stashcache       = newHV();
15681
15682     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15683                                             proto_perl->Iwatchaddr);
15684     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15685     if (PL_debug && PL_watchaddr) {
15686         PerlIO_printf(Perl_debug_log,
15687           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15688           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15689           PTR2UV(PL_watchok));
15690     }
15691
15692     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15693     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15694     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15695
15696     /* Call the ->CLONE method, if it exists, for each of the stashes
15697        identified by sv_dup() above.
15698     */
15699     while(av_tindex(param->stashes) != -1) {
15700         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15701         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15702         if (cloner && GvCV(cloner)) {
15703             dSP;
15704             ENTER;
15705             SAVETMPS;
15706             PUSHMARK(SP);
15707             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15708             PUTBACK;
15709             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15710             FREETMPS;
15711             LEAVE;
15712         }
15713     }
15714
15715     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15716         ptr_table_free(PL_ptr_table);
15717         PL_ptr_table = NULL;
15718     }
15719
15720     if (!(flags & CLONEf_COPY_STACKS)) {
15721         unreferenced_to_tmp_stack(param->unreferenced);
15722     }
15723
15724     SvREFCNT_dec(param->stashes);
15725
15726     /* orphaned? eg threads->new inside BEGIN or use */
15727     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15728         SvREFCNT_inc_simple_void(PL_compcv);
15729         SAVEFREESV(PL_compcv);
15730     }
15731
15732     return my_perl;
15733 }
15734
15735 static void
15736 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15737 {
15738     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15739     
15740     if (AvFILLp(unreferenced) > -1) {
15741         SV **svp = AvARRAY(unreferenced);
15742         SV **const last = svp + AvFILLp(unreferenced);
15743         SSize_t count = 0;
15744
15745         do {
15746             if (SvREFCNT(*svp) == 1)
15747                 ++count;
15748         } while (++svp <= last);
15749
15750         EXTEND_MORTAL(count);
15751         svp = AvARRAY(unreferenced);
15752
15753         do {
15754             if (SvREFCNT(*svp) == 1) {
15755                 /* Our reference is the only one to this SV. This means that
15756                    in this thread, the scalar effectively has a 0 reference.
15757                    That doesn't work (cleanup never happens), so donate our
15758                    reference to it onto the save stack. */
15759                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15760             } else {
15761                 /* As an optimisation, because we are already walking the
15762                    entire array, instead of above doing either
15763                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15764                    release our reference to the scalar, so that at the end of
15765                    the array owns zero references to the scalars it happens to
15766                    point to. We are effectively converting the array from
15767                    AvREAL() on to AvREAL() off. This saves the av_clear()
15768                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15769                    walking the array a second time.  */
15770                 SvREFCNT_dec(*svp);
15771             }
15772
15773         } while (++svp <= last);
15774         AvREAL_off(unreferenced);
15775     }
15776     SvREFCNT_dec_NN(unreferenced);
15777 }
15778
15779 void
15780 Perl_clone_params_del(CLONE_PARAMS *param)
15781 {
15782     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15783        happy: */
15784     PerlInterpreter *const to = param->new_perl;
15785     dTHXa(to);
15786     PerlInterpreter *const was = PERL_GET_THX;
15787
15788     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15789
15790     if (was != to) {
15791         PERL_SET_THX(to);
15792     }
15793
15794     SvREFCNT_dec(param->stashes);
15795     if (param->unreferenced)
15796         unreferenced_to_tmp_stack(param->unreferenced);
15797
15798     Safefree(param);
15799
15800     if (was != to) {
15801         PERL_SET_THX(was);
15802     }
15803 }
15804
15805 CLONE_PARAMS *
15806 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15807 {
15808     dVAR;
15809     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15810        does a dTHX; to get the context from thread local storage.
15811        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15812        a version that passes in my_perl.  */
15813     PerlInterpreter *const was = PERL_GET_THX;
15814     CLONE_PARAMS *param;
15815
15816     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15817
15818     if (was != to) {
15819         PERL_SET_THX(to);
15820     }
15821
15822     /* Given that we've set the context, we can do this unshared.  */
15823     Newx(param, 1, CLONE_PARAMS);
15824
15825     param->flags = 0;
15826     param->proto_perl = from;
15827     param->new_perl = to;
15828     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15829     AvREAL_off(param->stashes);
15830     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15831
15832     if (was != to) {
15833         PERL_SET_THX(was);
15834     }
15835     return param;
15836 }
15837
15838 #endif /* USE_ITHREADS */
15839
15840 void
15841 Perl_init_constants(pTHX)
15842 {
15843     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15844     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15845     SvANY(&PL_sv_undef)         = NULL;
15846
15847     SvANY(&PL_sv_no)            = new_XPVNV();
15848     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15849     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15850                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15851                                   |SVp_POK|SVf_POK;
15852
15853     SvANY(&PL_sv_yes)           = new_XPVNV();
15854     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15855     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15856                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15857                                   |SVp_POK|SVf_POK;
15858
15859     SvANY(&PL_sv_zero)          = new_XPVNV();
15860     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
15861     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15862                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15863                                   |SVp_POK|SVf_POK
15864                                   |SVs_PADTMP;
15865
15866     SvPV_set(&PL_sv_no, (char*)PL_No);
15867     SvCUR_set(&PL_sv_no, 0);
15868     SvLEN_set(&PL_sv_no, 0);
15869     SvIV_set(&PL_sv_no, 0);
15870     SvNV_set(&PL_sv_no, 0);
15871
15872     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15873     SvCUR_set(&PL_sv_yes, 1);
15874     SvLEN_set(&PL_sv_yes, 0);
15875     SvIV_set(&PL_sv_yes, 1);
15876     SvNV_set(&PL_sv_yes, 1);
15877
15878     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
15879     SvCUR_set(&PL_sv_zero, 1);
15880     SvLEN_set(&PL_sv_zero, 0);
15881     SvIV_set(&PL_sv_zero, 0);
15882     SvNV_set(&PL_sv_zero, 0);
15883
15884     PadnamePV(&PL_padname_const) = (char *)PL_No;
15885
15886     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
15887     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
15888     assert(SvIMMORTAL_INTERP(&PL_sv_no));
15889     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
15890
15891     assert(SvIMMORTAL(&PL_sv_yes));
15892     assert(SvIMMORTAL(&PL_sv_undef));
15893     assert(SvIMMORTAL(&PL_sv_no));
15894     assert(SvIMMORTAL(&PL_sv_zero));
15895
15896     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
15897     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
15898     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
15899     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
15900
15901     assert( SvTRUE_nomg_NN(&PL_sv_yes));
15902     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
15903     assert(!SvTRUE_nomg_NN(&PL_sv_no));
15904     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
15905 }
15906
15907 /*
15908 =head1 Unicode Support
15909
15910 =for apidoc sv_recode_to_utf8
15911
15912 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15913 of C<sv> is assumed to be octets in that encoding, and C<sv>
15914 will be converted into Unicode (and UTF-8).
15915
15916 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15917 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15918 an C<Encode::XS> Encoding object, bad things will happen.
15919 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15920
15921 The PV of C<sv> is returned.
15922
15923 =cut */
15924
15925 char *
15926 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15927 {
15928     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15929
15930     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15931         SV *uni;
15932         STRLEN len;
15933         const char *s;
15934         dSP;
15935         SV *nsv = sv;
15936         ENTER;
15937         PUSHSTACK;
15938         SAVETMPS;
15939         if (SvPADTMP(nsv)) {
15940             nsv = sv_newmortal();
15941             SvSetSV_nosteal(nsv, sv);
15942         }
15943         save_re_context();
15944         PUSHMARK(sp);
15945         EXTEND(SP, 3);
15946         PUSHs(encoding);
15947         PUSHs(nsv);
15948 /*
15949   NI-S 2002/07/09
15950   Passing sv_yes is wrong - it needs to be or'ed set of constants
15951   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15952   remove converted chars from source.
15953
15954   Both will default the value - let them.
15955
15956         XPUSHs(&PL_sv_yes);
15957 */
15958         PUTBACK;
15959         call_method("decode", G_SCALAR);
15960         SPAGAIN;
15961         uni = POPs;
15962         PUTBACK;
15963         s = SvPV_const(uni, len);
15964         if (s != SvPVX_const(sv)) {
15965             SvGROW(sv, len + 1);
15966             Move(s, SvPVX(sv), len + 1, char);
15967             SvCUR_set(sv, len);
15968         }
15969         FREETMPS;
15970         POPSTACK;
15971         LEAVE;
15972         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15973             /* clear pos and any utf8 cache */
15974             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15975             if (mg)
15976                 mg->mg_len = -1;
15977             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15978                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15979         }
15980         SvUTF8_on(sv);
15981         return SvPVX(sv);
15982     }
15983     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15984 }
15985
15986 /*
15987 =for apidoc sv_cat_decode
15988
15989 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15990 assumed to be octets in that encoding and decoding the input starts
15991 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15992 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15993 when the string C<tstr> appears in decoding output or the input ends on
15994 the PV of C<ssv>.  The value which C<offset> points will be modified
15995 to the last input position on C<ssv>.
15996
15997 Returns TRUE if the terminator was found, else returns FALSE.
15998
15999 =cut */
16000
16001 bool
16002 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16003                    SV *ssv, int *offset, char *tstr, int tlen)
16004 {
16005     bool ret = FALSE;
16006
16007     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16008
16009     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16010         SV *offsv;
16011         dSP;
16012         ENTER;
16013         SAVETMPS;
16014         save_re_context();
16015         PUSHMARK(sp);
16016         EXTEND(SP, 6);
16017         PUSHs(encoding);
16018         PUSHs(dsv);
16019         PUSHs(ssv);
16020         offsv = newSViv(*offset);
16021         mPUSHs(offsv);
16022         mPUSHp(tstr, tlen);
16023         PUTBACK;
16024         call_method("cat_decode", G_SCALAR);
16025         SPAGAIN;
16026         ret = SvTRUE(TOPs);
16027         *offset = SvIV(offsv);
16028         PUTBACK;
16029         FREETMPS;
16030         LEAVE;
16031     }
16032     else
16033         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16034     return ret;
16035
16036 }
16037
16038 /* ---------------------------------------------------------------------
16039  *
16040  * support functions for report_uninit()
16041  */
16042
16043 /* the maxiumum size of array or hash where we will scan looking
16044  * for the undefined element that triggered the warning */
16045
16046 #define FUV_MAX_SEARCH_SIZE 1000
16047
16048 /* Look for an entry in the hash whose value has the same SV as val;
16049  * If so, return a mortal copy of the key. */
16050
16051 STATIC SV*
16052 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16053 {
16054     dVAR;
16055     HE **array;
16056     I32 i;
16057
16058     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16059
16060     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16061                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16062         return NULL;
16063
16064     array = HvARRAY(hv);
16065
16066     for (i=HvMAX(hv); i>=0; i--) {
16067         HE *entry;
16068         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16069             if (HeVAL(entry) != val)
16070                 continue;
16071             if (    HeVAL(entry) == &PL_sv_undef ||
16072                     HeVAL(entry) == &PL_sv_placeholder)
16073                 continue;
16074             if (!HeKEY(entry))
16075                 return NULL;
16076             if (HeKLEN(entry) == HEf_SVKEY)
16077                 return sv_mortalcopy(HeKEY_sv(entry));
16078             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16079         }
16080     }
16081     return NULL;
16082 }
16083
16084 /* Look for an entry in the array whose value has the same SV as val;
16085  * If so, return the index, otherwise return -1. */
16086
16087 STATIC SSize_t
16088 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16089 {
16090     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16091
16092     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16093                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16094         return -1;
16095
16096     if (val != &PL_sv_undef) {
16097         SV ** const svp = AvARRAY(av);
16098         SSize_t i;
16099
16100         for (i=AvFILLp(av); i>=0; i--)
16101             if (svp[i] == val)
16102                 return i;
16103     }
16104     return -1;
16105 }
16106
16107 /* varname(): return the name of a variable, optionally with a subscript.
16108  * If gv is non-zero, use the name of that global, along with gvtype (one
16109  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16110  * targ.  Depending on the value of the subscript_type flag, return:
16111  */
16112
16113 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16114 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16115 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16116 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16117
16118 SV*
16119 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16120         const SV *const keyname, SSize_t aindex, int subscript_type)
16121 {
16122
16123     SV * const name = sv_newmortal();
16124     if (gv && isGV(gv)) {
16125         char buffer[2];
16126         buffer[0] = gvtype;
16127         buffer[1] = 0;
16128
16129         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16130
16131         gv_fullname4(name, gv, buffer, 0);
16132
16133         if ((unsigned int)SvPVX(name)[1] <= 26) {
16134             buffer[0] = '^';
16135             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16136
16137             /* Swap the 1 unprintable control character for the 2 byte pretty
16138                version - ie substr($name, 1, 1) = $buffer; */
16139             sv_insert(name, 1, 1, buffer, 2);
16140         }
16141     }
16142     else {
16143         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16144         PADNAME *sv;
16145
16146         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16147
16148         if (!cv || !CvPADLIST(cv))
16149             return NULL;
16150         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16151         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16152         SvUTF8_on(name);
16153     }
16154
16155     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16156         SV * const sv = newSV(0);
16157         STRLEN len;
16158         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16159
16160         *SvPVX(name) = '$';
16161         Perl_sv_catpvf(aTHX_ name, "{%s}",
16162             pv_pretty(sv, pv, len, 32, NULL, NULL,
16163                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16164         SvREFCNT_dec_NN(sv);
16165     }
16166     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16167         *SvPVX(name) = '$';
16168         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16169     }
16170     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16171         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16172         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16173     }
16174
16175     return name;
16176 }
16177
16178
16179 /*
16180 =for apidoc find_uninit_var
16181
16182 Find the name of the undefined variable (if any) that caused the operator
16183 to issue a "Use of uninitialized value" warning.
16184 If match is true, only return a name if its value matches C<uninit_sv>.
16185 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16186 warning, then following the direct child of the op may yield an
16187 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16188 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16189 the variable name if we get an exact match.
16190 C<desc_p> points to a string pointer holding the description of the op.
16191 This may be updated if needed.
16192
16193 The name is returned as a mortal SV.
16194
16195 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16196 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16197
16198 =cut
16199 */
16200
16201 STATIC SV *
16202 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16203                   bool match, const char **desc_p)
16204 {
16205     dVAR;
16206     SV *sv;
16207     const GV *gv;
16208     const OP *o, *o2, *kid;
16209
16210     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16211
16212     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16213                             uninit_sv == &PL_sv_placeholder)))
16214         return NULL;
16215
16216     switch (obase->op_type) {
16217
16218     case OP_UNDEF:
16219         /* undef should care if its args are undef - any warnings
16220          * will be from tied/magic vars */
16221         break;
16222
16223     case OP_RV2AV:
16224     case OP_RV2HV:
16225     case OP_PADAV:
16226     case OP_PADHV:
16227       {
16228         const bool pad  = (    obase->op_type == OP_PADAV
16229                             || obase->op_type == OP_PADHV
16230                             || obase->op_type == OP_PADRANGE
16231                           );
16232
16233         const bool hash = (    obase->op_type == OP_PADHV
16234                             || obase->op_type == OP_RV2HV
16235                             || (obase->op_type == OP_PADRANGE
16236                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16237                           );
16238         SSize_t index = 0;
16239         SV *keysv = NULL;
16240         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16241
16242         if (pad) { /* @lex, %lex */
16243             sv = PAD_SVl(obase->op_targ);
16244             gv = NULL;
16245         }
16246         else {
16247             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16248             /* @global, %global */
16249                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16250                 if (!gv)
16251                     break;
16252                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16253             }
16254             else if (obase == PL_op) /* @{expr}, %{expr} */
16255                 return find_uninit_var(cUNOPx(obase)->op_first,
16256                                                 uninit_sv, match, desc_p);
16257             else /* @{expr}, %{expr} as a sub-expression */
16258                 return NULL;
16259         }
16260
16261         /* attempt to find a match within the aggregate */
16262         if (hash) {
16263             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16264             if (keysv)
16265                 subscript_type = FUV_SUBSCRIPT_HASH;
16266         }
16267         else {
16268             index = find_array_subscript((const AV *)sv, uninit_sv);
16269             if (index >= 0)
16270                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16271         }
16272
16273         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16274             break;
16275
16276         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16277                                     keysv, index, subscript_type);
16278       }
16279
16280     case OP_RV2SV:
16281         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16282             /* $global */
16283             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16284             if (!gv || !GvSTASH(gv))
16285                 break;
16286             if (match && (GvSV(gv) != uninit_sv))
16287                 break;
16288             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16289         }
16290         /* ${expr} */
16291         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16292
16293     case OP_PADSV:
16294         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16295             break;
16296         return varname(NULL, '$', obase->op_targ,
16297                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16298
16299     case OP_GVSV:
16300         gv = cGVOPx_gv(obase);
16301         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16302             break;
16303         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16304
16305     case OP_AELEMFAST_LEX:
16306         if (match) {
16307             SV **svp;
16308             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16309             if (!av || SvRMAGICAL(av))
16310                 break;
16311             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16312             if (!svp || *svp != uninit_sv)
16313                 break;
16314         }
16315         return varname(NULL, '$', obase->op_targ,
16316                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16317     case OP_AELEMFAST:
16318         {
16319             gv = cGVOPx_gv(obase);
16320             if (!gv)
16321                 break;
16322             if (match) {
16323                 SV **svp;
16324                 AV *const av = GvAV(gv);
16325                 if (!av || SvRMAGICAL(av))
16326                     break;
16327                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16328                 if (!svp || *svp != uninit_sv)
16329                     break;
16330             }
16331             return varname(gv, '$', 0,
16332                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16333         }
16334         NOT_REACHED; /* NOTREACHED */
16335
16336     case OP_EXISTS:
16337         o = cUNOPx(obase)->op_first;
16338         if (!o || o->op_type != OP_NULL ||
16339                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16340             break;
16341         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16342
16343     case OP_AELEM:
16344     case OP_HELEM:
16345     {
16346         bool negate = FALSE;
16347
16348         if (PL_op == obase)
16349             /* $a[uninit_expr] or $h{uninit_expr} */
16350             return find_uninit_var(cBINOPx(obase)->op_last,
16351                                                 uninit_sv, match, desc_p);
16352
16353         gv = NULL;
16354         o = cBINOPx(obase)->op_first;
16355         kid = cBINOPx(obase)->op_last;
16356
16357         /* get the av or hv, and optionally the gv */
16358         sv = NULL;
16359         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16360             sv = PAD_SV(o->op_targ);
16361         }
16362         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16363                 && cUNOPo->op_first->op_type == OP_GV)
16364         {
16365             gv = cGVOPx_gv(cUNOPo->op_first);
16366             if (!gv)
16367                 break;
16368             sv = o->op_type
16369                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16370         }
16371         if (!sv)
16372             break;
16373
16374         if (kid && kid->op_type == OP_NEGATE) {
16375             negate = TRUE;
16376             kid = cUNOPx(kid)->op_first;
16377         }
16378
16379         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16380             /* index is constant */
16381             SV* kidsv;
16382             if (negate) {
16383                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16384                 sv_catsv(kidsv, cSVOPx_sv(kid));
16385             }
16386             else
16387                 kidsv = cSVOPx_sv(kid);
16388             if (match) {
16389                 if (SvMAGICAL(sv))
16390                     break;
16391                 if (obase->op_type == OP_HELEM) {
16392                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16393                     if (!he || HeVAL(he) != uninit_sv)
16394                         break;
16395                 }
16396                 else {
16397                     SV * const  opsv = cSVOPx_sv(kid);
16398                     const IV  opsviv = SvIV(opsv);
16399                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16400                         negate ? - opsviv : opsviv,
16401                         FALSE);
16402                     if (!svp || *svp != uninit_sv)
16403                         break;
16404                 }
16405             }
16406             if (obase->op_type == OP_HELEM)
16407                 return varname(gv, '%', o->op_targ,
16408                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16409             else
16410                 return varname(gv, '@', o->op_targ, NULL,
16411                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16412                     FUV_SUBSCRIPT_ARRAY);
16413         }
16414         else  {
16415             /* index is an expression;
16416              * attempt to find a match within the aggregate */
16417             if (obase->op_type == OP_HELEM) {
16418                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16419                 if (keysv)
16420                     return varname(gv, '%', o->op_targ,
16421                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16422             }
16423             else {
16424                 const SSize_t index
16425                     = find_array_subscript((const AV *)sv, uninit_sv);
16426                 if (index >= 0)
16427                     return varname(gv, '@', o->op_targ,
16428                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16429             }
16430             if (match)
16431                 break;
16432             return varname(gv,
16433                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16434                 ? '@' : '%'),
16435                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16436         }
16437         NOT_REACHED; /* NOTREACHED */
16438     }
16439
16440     case OP_MULTIDEREF: {
16441         /* If we were executing OP_MULTIDEREF when the undef warning
16442          * triggered, then it must be one of the index values within
16443          * that triggered it. If not, then the only possibility is that
16444          * the value retrieved by the last aggregate index might be the
16445          * culprit. For the former, we set PL_multideref_pc each time before
16446          * using an index, so work though the item list until we reach
16447          * that point. For the latter, just work through the entire item
16448          * list; the last aggregate retrieved will be the candidate.
16449          * There is a third rare possibility: something triggered
16450          * magic while fetching an array/hash element. Just display
16451          * nothing in this case.
16452          */
16453
16454         /* the named aggregate, if any */
16455         PADOFFSET agg_targ = 0;
16456         GV       *agg_gv   = NULL;
16457         /* the last-seen index */
16458         UV        index_type;
16459         PADOFFSET index_targ;
16460         GV       *index_gv;
16461         IV        index_const_iv = 0; /* init for spurious compiler warn */
16462         SV       *index_const_sv;
16463         int       depth = 0;  /* how many array/hash lookups we've done */
16464
16465         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16466         UNOP_AUX_item *last = NULL;
16467         UV actions = items->uv;
16468         bool is_hv;
16469
16470         if (PL_op == obase) {
16471             last = PL_multideref_pc;
16472             assert(last >= items && last <= items + items[-1].uv);
16473         }
16474
16475         assert(actions);
16476
16477         while (1) {
16478             is_hv = FALSE;
16479             switch (actions & MDEREF_ACTION_MASK) {
16480
16481             case MDEREF_reload:
16482                 actions = (++items)->uv;
16483                 continue;
16484
16485             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16486                 is_hv = TRUE;
16487                 /* FALLTHROUGH */
16488             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16489                 agg_targ = (++items)->pad_offset;
16490                 agg_gv = NULL;
16491                 break;
16492
16493             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16494                 is_hv = TRUE;
16495                 /* FALLTHROUGH */
16496             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16497                 agg_targ = 0;
16498                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16499                 assert(isGV_with_GP(agg_gv));
16500                 break;
16501
16502             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16503             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16504                 ++items;
16505                 /* FALLTHROUGH */
16506             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16507             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16508                 agg_targ = 0;
16509                 agg_gv   = NULL;
16510                 is_hv    = TRUE;
16511                 break;
16512
16513             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16514             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16515                 ++items;
16516                 /* FALLTHROUGH */
16517             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16518             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16519                 agg_targ = 0;
16520                 agg_gv   = NULL;
16521             } /* switch */
16522
16523             index_targ     = 0;
16524             index_gv       = NULL;
16525             index_const_sv = NULL;
16526
16527             index_type = (actions & MDEREF_INDEX_MASK);
16528             switch (index_type) {
16529             case MDEREF_INDEX_none:
16530                 break;
16531             case MDEREF_INDEX_const:
16532                 if (is_hv)
16533                     index_const_sv = UNOP_AUX_item_sv(++items)
16534                 else
16535                     index_const_iv = (++items)->iv;
16536                 break;
16537             case MDEREF_INDEX_padsv:
16538                 index_targ = (++items)->pad_offset;
16539                 break;
16540             case MDEREF_INDEX_gvsv:
16541                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16542                 assert(isGV_with_GP(index_gv));
16543                 break;
16544             }
16545
16546             if (index_type != MDEREF_INDEX_none)
16547                 depth++;
16548
16549             if (   index_type == MDEREF_INDEX_none
16550                 || (actions & MDEREF_FLAG_last)
16551                 || (last && items >= last)
16552             )
16553                 break;
16554
16555             actions >>= MDEREF_SHIFT;
16556         } /* while */
16557
16558         if (PL_op == obase) {
16559             /* most likely index was undef */
16560
16561             *desc_p = (    (actions & MDEREF_FLAG_last)
16562                         && (obase->op_private
16563                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16564                         ?
16565                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16566                                 ? "exists"
16567                                 : "delete"
16568                         : is_hv ? "hash element" : "array element";
16569             assert(index_type != MDEREF_INDEX_none);
16570             if (index_gv) {
16571                 if (GvSV(index_gv) == uninit_sv)
16572                     return varname(index_gv, '$', 0, NULL, 0,
16573                                                     FUV_SUBSCRIPT_NONE);
16574                 else
16575                     return NULL;
16576             }
16577             if (index_targ) {
16578                 if (PL_curpad[index_targ] == uninit_sv)
16579                     return varname(NULL, '$', index_targ,
16580                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16581                 else
16582                     return NULL;
16583             }
16584             /* If we got to this point it was undef on a const subscript,
16585              * so magic probably involved, e.g. $ISA[0]. Give up. */
16586             return NULL;
16587         }
16588
16589         /* the SV returned by pp_multideref() was undef, if anything was */
16590
16591         if (depth != 1)
16592             break;
16593
16594         if (agg_targ)
16595             sv = PAD_SV(agg_targ);
16596         else if (agg_gv)
16597             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16598         else
16599             break;
16600
16601         if (index_type == MDEREF_INDEX_const) {
16602             if (match) {
16603                 if (SvMAGICAL(sv))
16604                     break;
16605                 if (is_hv) {
16606                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16607                     if (!he || HeVAL(he) != uninit_sv)
16608                         break;
16609                 }
16610                 else {
16611                     SV * const * const svp =
16612                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16613                     if (!svp || *svp != uninit_sv)
16614                         break;
16615                 }
16616             }
16617             return is_hv
16618                 ? varname(agg_gv, '%', agg_targ,
16619                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16620                 : varname(agg_gv, '@', agg_targ,
16621                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16622         }
16623         else  {
16624             /* index is an var */
16625             if (is_hv) {
16626                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16627                 if (keysv)
16628                     return varname(agg_gv, '%', agg_targ,
16629                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16630             }
16631             else {
16632                 const SSize_t index
16633                     = find_array_subscript((const AV *)sv, uninit_sv);
16634                 if (index >= 0)
16635                     return varname(agg_gv, '@', agg_targ,
16636                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16637             }
16638             if (match)
16639                 break;
16640             return varname(agg_gv,
16641                 is_hv ? '%' : '@',
16642                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16643         }
16644         NOT_REACHED; /* NOTREACHED */
16645     }
16646
16647     case OP_AASSIGN:
16648         /* only examine RHS */
16649         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16650                                                                 match, desc_p);
16651
16652     case OP_OPEN:
16653         o = cUNOPx(obase)->op_first;
16654         if (   o->op_type == OP_PUSHMARK
16655            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16656         )
16657             o = OpSIBLING(o);
16658
16659         if (!OpHAS_SIBLING(o)) {
16660             /* one-arg version of open is highly magical */
16661
16662             if (o->op_type == OP_GV) { /* open FOO; */
16663                 gv = cGVOPx_gv(o);
16664                 if (match && GvSV(gv) != uninit_sv)
16665                     break;
16666                 return varname(gv, '$', 0,
16667                             NULL, 0, FUV_SUBSCRIPT_NONE);
16668             }
16669             /* other possibilities not handled are:
16670              * open $x; or open my $x;  should return '${*$x}'
16671              * open expr;               should return '$'.expr ideally
16672              */
16673              break;
16674         }
16675         match = 1;
16676         goto do_op;
16677
16678     /* ops where $_ may be an implicit arg */
16679     case OP_TRANS:
16680     case OP_TRANSR:
16681     case OP_SUBST:
16682     case OP_MATCH:
16683         if ( !(obase->op_flags & OPf_STACKED)) {
16684             if (uninit_sv == DEFSV)
16685                 return newSVpvs_flags("$_", SVs_TEMP);
16686             else if (obase->op_targ
16687                   && uninit_sv == PAD_SVl(obase->op_targ))
16688                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16689                                FUV_SUBSCRIPT_NONE);
16690         }
16691         goto do_op;
16692
16693     case OP_PRTF:
16694     case OP_PRINT:
16695     case OP_SAY:
16696         match = 1; /* print etc can return undef on defined args */
16697         /* skip filehandle as it can't produce 'undef' warning  */
16698         o = cUNOPx(obase)->op_first;
16699         if ((obase->op_flags & OPf_STACKED)
16700             &&
16701                (   o->op_type == OP_PUSHMARK
16702                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16703             o = OpSIBLING(OpSIBLING(o));
16704         goto do_op2;
16705
16706
16707     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16708     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16709
16710         /* the following ops are capable of returning PL_sv_undef even for
16711          * defined arg(s) */
16712
16713     case OP_BACKTICK:
16714     case OP_PIPE_OP:
16715     case OP_FILENO:
16716     case OP_BINMODE:
16717     case OP_TIED:
16718     case OP_GETC:
16719     case OP_SYSREAD:
16720     case OP_SEND:
16721     case OP_IOCTL:
16722     case OP_SOCKET:
16723     case OP_SOCKPAIR:
16724     case OP_BIND:
16725     case OP_CONNECT:
16726     case OP_LISTEN:
16727     case OP_ACCEPT:
16728     case OP_SHUTDOWN:
16729     case OP_SSOCKOPT:
16730     case OP_GETPEERNAME:
16731     case OP_FTRREAD:
16732     case OP_FTRWRITE:
16733     case OP_FTREXEC:
16734     case OP_FTROWNED:
16735     case OP_FTEREAD:
16736     case OP_FTEWRITE:
16737     case OP_FTEEXEC:
16738     case OP_FTEOWNED:
16739     case OP_FTIS:
16740     case OP_FTZERO:
16741     case OP_FTSIZE:
16742     case OP_FTFILE:
16743     case OP_FTDIR:
16744     case OP_FTLINK:
16745     case OP_FTPIPE:
16746     case OP_FTSOCK:
16747     case OP_FTBLK:
16748     case OP_FTCHR:
16749     case OP_FTTTY:
16750     case OP_FTSUID:
16751     case OP_FTSGID:
16752     case OP_FTSVTX:
16753     case OP_FTTEXT:
16754     case OP_FTBINARY:
16755     case OP_FTMTIME:
16756     case OP_FTATIME:
16757     case OP_FTCTIME:
16758     case OP_READLINK:
16759     case OP_OPEN_DIR:
16760     case OP_READDIR:
16761     case OP_TELLDIR:
16762     case OP_SEEKDIR:
16763     case OP_REWINDDIR:
16764     case OP_CLOSEDIR:
16765     case OP_GMTIME:
16766     case OP_ALARM:
16767     case OP_SEMGET:
16768     case OP_GETLOGIN:
16769     case OP_SUBSTR:
16770     case OP_AEACH:
16771     case OP_EACH:
16772     case OP_SORT:
16773     case OP_CALLER:
16774     case OP_DOFILE:
16775     case OP_PROTOTYPE:
16776     case OP_NCMP:
16777     case OP_SMARTMATCH:
16778     case OP_UNPACK:
16779     case OP_SYSOPEN:
16780     case OP_SYSSEEK:
16781         match = 1;
16782         goto do_op;
16783
16784     case OP_ENTERSUB:
16785     case OP_GOTO:
16786         /* XXX tmp hack: these two may call an XS sub, and currently
16787           XS subs don't have a SUB entry on the context stack, so CV and
16788           pad determination goes wrong, and BAD things happen. So, just
16789           don't try to determine the value under those circumstances.
16790           Need a better fix at dome point. DAPM 11/2007 */
16791         break;
16792
16793     case OP_FLIP:
16794     case OP_FLOP:
16795     {
16796         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16797         if (gv && GvSV(gv) == uninit_sv)
16798             return newSVpvs_flags("$.", SVs_TEMP);
16799         goto do_op;
16800     }
16801
16802     case OP_POS:
16803         /* def-ness of rval pos() is independent of the def-ness of its arg */
16804         if ( !(obase->op_flags & OPf_MOD))
16805             break;
16806         /* FALLTHROUGH */
16807
16808     case OP_SCHOMP:
16809     case OP_CHOMP:
16810         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16811             return newSVpvs_flags("${$/}", SVs_TEMP);
16812         /* FALLTHROUGH */
16813
16814     default:
16815     do_op:
16816         if (!(obase->op_flags & OPf_KIDS))
16817             break;
16818         o = cUNOPx(obase)->op_first;
16819         
16820     do_op2:
16821         if (!o)
16822             break;
16823
16824         /* This loop checks all the kid ops, skipping any that cannot pos-
16825          * sibly be responsible for the uninitialized value; i.e., defined
16826          * constants and ops that return nothing.  If there is only one op
16827          * left that is not skipped, then we *know* it is responsible for
16828          * the uninitialized value.  If there is more than one op left, we
16829          * have to look for an exact match in the while() loop below.
16830          * Note that we skip padrange, because the individual pad ops that
16831          * it replaced are still in the tree, so we work on them instead.
16832          */
16833         o2 = NULL;
16834         for (kid=o; kid; kid = OpSIBLING(kid)) {
16835             const OPCODE type = kid->op_type;
16836             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16837               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16838               || (type == OP_PUSHMARK)
16839               || (type == OP_PADRANGE)
16840             )
16841             continue;
16842
16843             if (o2) { /* more than one found */
16844                 o2 = NULL;
16845                 break;
16846             }
16847             o2 = kid;
16848         }
16849         if (o2)
16850             return find_uninit_var(o2, uninit_sv, match, desc_p);
16851
16852         /* scan all args */
16853         while (o) {
16854             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16855             if (sv)
16856                 return sv;
16857             o = OpSIBLING(o);
16858         }
16859         break;
16860     }
16861     return NULL;
16862 }
16863
16864
16865 /*
16866 =for apidoc report_uninit
16867
16868 Print appropriate "Use of uninitialized variable" warning.
16869
16870 =cut
16871 */
16872
16873 void
16874 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16875 {
16876     const char *desc = NULL;
16877     SV* varname = NULL;
16878
16879     if (PL_op) {
16880         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16881                 ? "join or string"
16882                 : PL_op->op_type == OP_MULTICONCAT
16883                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
16884                 ? "sprintf"
16885                 : OP_DESC(PL_op);
16886         if (uninit_sv && PL_curpad) {
16887             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16888             if (varname)
16889                 sv_insert(varname, 0, 0, " ", 1);
16890         }
16891     }
16892     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16893         /* we've reached the end of a sort block or sub,
16894          * and the uninit value is probably what that code returned */
16895         desc = "sort";
16896
16897     /* PL_warn_uninit_sv is constant */
16898     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16899     if (desc)
16900         /* diag_listed_as: Use of uninitialized value%s */
16901         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16902                 SVfARG(varname ? varname : &PL_sv_no),
16903                 " in ", desc);
16904     else
16905         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16906                 "", "", "");
16907     GCC_DIAG_RESTORE;
16908 }
16909
16910 /*
16911  * ex: set ts=8 sts=4 sw=4 et:
16912  */