This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use a compile and run test for lchown() to satisfy clang++.
[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
135 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
136 sv, av, hv...) contains type and reference count information, and for
137 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
138 contains fields specific to each type.  Some types store all they need
139 in the head, so don't have a body.
140
141 In all but the most memory-paranoid configurations (ex: PURIFY), heads
142 and bodies are allocated out of arenas, which by default are
143 approximately 4K chunks of memory parcelled up into N heads or bodies.
144 Sv-bodies are allocated by their sv-type, guaranteeing size
145 consistency needed to allocate safely from arrays.
146
147 For SV-heads, the first slot in each arena is reserved, and holds a
148 link to the next arena, some flags, and a note of the number of slots.
149 Snaked through each arena chain is a linked list of free items; when
150 this becomes empty, an extra arena is allocated and divided up into N
151 items which are threaded into the free list.
152
153 SV-bodies are similar, but they use arena-sets by default, which
154 separate the link and info from the arena itself, and reclaim the 1st
155 slot in the arena.  SV-bodies are further described later.
156
157 The following global variables are associated with arenas:
158
159  PL_sv_arenaroot     pointer to list of SV arenas
160  PL_sv_root          pointer to list of free SV structures
161
162  PL_body_arenas      head of linked-list of body arenas
163  PL_body_roots[]     array of pointers to list of free bodies of svtype
164                      arrays are indexed by the svtype needed
165
166 A few special SV heads are not allocated from an arena, but are
167 instead directly created in the interpreter structure, eg PL_sv_undef.
168 The size of arenas can be changed from the default by setting
169 PERL_ARENA_SIZE appropriately at compile time.
170
171 The SV arena serves the secondary purpose of allowing still-live SVs
172 to be located and destroyed during final cleanup.
173
174 At the lowest level, the macros new_SV() and del_SV() grab and free
175 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
176 to return the SV to the free list with error checking.) new_SV() calls
177 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
178 SVs in the free list have their SvTYPE field set to all ones.
179
180 At the time of very final cleanup, sv_free_arenas() is called from
181 perl_destruct() to physically free all the arenas allocated since the
182 start of the interpreter.
183
184 The function visit() scans the SV arenas list, and calls a specified
185 function for each SV it finds which is still live - ie which has an SvTYPE
186 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
187 following functions (specified as [function that calls visit()] / [function
188 called by visit() for each SV]):
189
190     sv_report_used() / do_report_used()
191                         dump all remaining SVs (debugging aid)
192
193     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
194                       do_clean_named_io_objs(),do_curse()
195                         Attempt to free all objects pointed to by RVs,
196                         try to do the same for all objects indir-
197                         ectly referenced by typeglobs too, and
198                         then do a final sweep, cursing any
199                         objects that remain.  Called once from
200                         perl_destruct(), prior to calling sv_clean_all()
201                         below.
202
203     sv_clean_all() / do_clean_all()
204                         SvREFCNT_dec(sv) each remaining SV, possibly
205                         triggering an sv_free(). It also sets the
206                         SVf_BREAK flag on the SV to indicate that the
207                         refcnt has been artificially lowered, and thus
208                         stopping sv_free() from giving spurious warnings
209                         about SVs which unexpectedly have a refcnt
210                         of zero.  called repeatedly from perl_destruct()
211                         until there are no SVs left.
212
213 =head2 Arena allocator API Summary
214
215 Private API to rest of sv.c
216
217     new_SV(),  del_SV(),
218
219     new_XPVNV(), del_XPVGV(),
220     etc
221
222 Public API:
223
224     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
225
226 =cut
227
228  * ========================================================================= */
229
230 /*
231  * "A time to plant, and a time to uproot what was planted..."
232  */
233
234 #ifdef PERL_MEM_LOG
235 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
236             Perl_mem_log_new_sv(sv, file, line, func)
237 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
238             Perl_mem_log_del_sv(sv, file, line, func)
239 #else
240 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
241 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
242 #endif
243
244 #ifdef DEBUG_LEAKING_SCALARS
245 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
246         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
247     } STMT_END
248 #  define DEBUG_SV_SERIAL(sv)                                               \
249     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
250             PTR2UV(sv), (long)(sv)->sv_debug_serial))
251 #else
252 #  define FREE_SV_DEBUG_FILE(sv)
253 #  define DEBUG_SV_SERIAL(sv)   NOOP
254 #endif
255
256 #ifdef PERL_POISON
257 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
258 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
259 /* Whilst I'd love to do this, it seems that things like to check on
260    unreferenced scalars
261 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
262 */
263 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
264                                 PoisonNew(&SvREFCNT(sv), 1, U32)
265 #else
266 #  define SvARENA_CHAIN(sv)     SvANY(sv)
267 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
268 #  define POISON_SV_HEAD(sv)
269 #endif
270
271 /* Mark an SV head as unused, and add to free list.
272  *
273  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
274  * its refcount artificially decremented during global destruction, so
275  * there may be dangling pointers to it. The last thing we want in that
276  * case is for it to be reused. */
277
278 #define plant_SV(p) \
279     STMT_START {                                        \
280         const U32 old_flags = SvFLAGS(p);                       \
281         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
282         DEBUG_SV_SERIAL(p);                             \
283         FREE_SV_DEBUG_FILE(p);                          \
284         POISON_SV_HEAD(p);                              \
285         SvFLAGS(p) = SVTYPEMASK;                        \
286         if (!(old_flags & SVf_BREAK)) {         \
287             SvARENA_CHAIN_SET(p, PL_sv_root);   \
288             PL_sv_root = (p);                           \
289         }                                               \
290         --PL_sv_count;                                  \
291     } STMT_END
292
293 #define uproot_SV(p) \
294     STMT_START {                                        \
295         (p) = PL_sv_root;                               \
296         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
297         ++PL_sv_count;                                  \
298     } STMT_END
299
300
301 /* make some more SVs by adding another arena */
302
303 STATIC SV*
304 S_more_sv(pTHX)
305 {
306     SV* sv;
307     char *chunk;                /* must use New here to match call to */
308     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
309     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
310     uproot_SV(sv);
311     return sv;
312 }
313
314 /* new_SV(): return a new, empty SV head */
315
316 #ifdef DEBUG_LEAKING_SCALARS
317 /* provide a real function for a debugger to play with */
318 STATIC SV*
319 S_new_SV(pTHX_ const char *file, int line, const char *func)
320 {
321     SV* sv;
322
323     if (PL_sv_root)
324         uproot_SV(sv);
325     else
326         sv = S_more_sv(aTHX);
327     SvANY(sv) = 0;
328     SvREFCNT(sv) = 1;
329     SvFLAGS(sv) = 0;
330     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
331     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
332                 ? PL_parser->copline
333                 :  PL_curcop
334                     ? CopLINE(PL_curcop)
335                     : 0
336             );
337     sv->sv_debug_inpad = 0;
338     sv->sv_debug_parent = NULL;
339     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
340
341     sv->sv_debug_serial = PL_sv_serial++;
342
343     MEM_LOG_NEW_SV(sv, file, line, func);
344     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
345             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
346
347     return sv;
348 }
349 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
350
351 #else
352 #  define new_SV(p) \
353     STMT_START {                                        \
354         if (PL_sv_root)                                 \
355             uproot_SV(p);                               \
356         else                                            \
357             (p) = S_more_sv(aTHX);                      \
358         SvANY(p) = 0;                                   \
359         SvREFCNT(p) = 1;                                \
360         SvFLAGS(p) = 0;                                 \
361         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
362     } STMT_END
363 #endif
364
365
366 /* del_SV(): return an empty SV head to the free list */
367
368 #ifdef DEBUGGING
369
370 #define del_SV(p) \
371     STMT_START {                                        \
372         if (DEBUG_D_TEST)                               \
373             del_sv(p);                                  \
374         else                                            \
375             plant_SV(p);                                \
376     } STMT_END
377
378 STATIC void
379 S_del_sv(pTHX_ SV *p)
380 {
381     PERL_ARGS_ASSERT_DEL_SV;
382
383     if (DEBUG_D_TEST) {
384         SV* sva;
385         bool ok = 0;
386         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
387             const SV * const sv = sva + 1;
388             const SV * const svend = &sva[SvREFCNT(sva)];
389             if (p >= sv && p < svend) {
390                 ok = 1;
391                 break;
392             }
393         }
394         if (!ok) {
395             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
396                              "Attempt to free non-arena SV: 0x%" UVxf
397                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
398             return;
399         }
400     }
401     plant_SV(p);
402 }
403
404 #else /* ! DEBUGGING */
405
406 #define del_SV(p)   plant_SV(p)
407
408 #endif /* DEBUGGING */
409
410
411 /*
412 =head1 SV Manipulation Functions
413
414 =for apidoc sv_add_arena
415
416 Given a chunk of memory, link it to the head of the list of arenas,
417 and split it into a list of free SVs.
418
419 =cut
420 */
421
422 static void
423 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
424 {
425     SV *const sva = MUTABLE_SV(ptr);
426     SV* sv;
427     SV* svend;
428
429     PERL_ARGS_ASSERT_SV_ADD_ARENA;
430
431     /* The first SV in an arena isn't an SV. */
432     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
433     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
434     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
435
436     PL_sv_arenaroot = sva;
437     PL_sv_root = sva + 1;
438
439     svend = &sva[SvREFCNT(sva) - 1];
440     sv = sva + 1;
441     while (sv < svend) {
442         SvARENA_CHAIN_SET(sv, (sv + 1));
443 #ifdef DEBUGGING
444         SvREFCNT(sv) = 0;
445 #endif
446         /* Must always set typemask because it's always checked in on cleanup
447            when the arenas are walked looking for objects.  */
448         SvFLAGS(sv) = SVTYPEMASK;
449         sv++;
450     }
451     SvARENA_CHAIN_SET(sv, 0);
452 #ifdef DEBUGGING
453     SvREFCNT(sv) = 0;
454 #endif
455     SvFLAGS(sv) = SVTYPEMASK;
456 }
457
458 /* visit(): call the named function for each non-free SV in the arenas
459  * whose flags field matches the flags/mask args. */
460
461 STATIC I32
462 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
463 {
464     SV* sva;
465     I32 visited = 0;
466
467     PERL_ARGS_ASSERT_VISIT;
468
469     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
470         const SV * const svend = &sva[SvREFCNT(sva)];
471         SV* sv;
472         for (sv = sva + 1; sv < svend; ++sv) {
473             if (SvTYPE(sv) != (svtype)SVTYPEMASK
474                     && (sv->sv_flags & mask) == flags
475                     && SvREFCNT(sv))
476             {
477                 (*f)(aTHX_ sv);
478                 ++visited;
479             }
480         }
481     }
482     return visited;
483 }
484
485 #ifdef DEBUGGING
486
487 /* called by sv_report_used() for each live SV */
488
489 static void
490 do_report_used(pTHX_ SV *const sv)
491 {
492     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
493         PerlIO_printf(Perl_debug_log, "****\n");
494         sv_dump(sv);
495     }
496 }
497 #endif
498
499 /*
500 =for apidoc sv_report_used
501
502 Dump the contents of all SVs not yet freed (debugging aid).
503
504 =cut
505 */
506
507 void
508 Perl_sv_report_used(pTHX)
509 {
510 #ifdef DEBUGGING
511     visit(do_report_used, 0, 0);
512 #else
513     PERL_UNUSED_CONTEXT;
514 #endif
515 }
516
517 /* called by sv_clean_objs() for each live SV */
518
519 static void
520 do_clean_objs(pTHX_ SV *const ref)
521 {
522     assert (SvROK(ref));
523     {
524         SV * const target = SvRV(ref);
525         if (SvOBJECT(target)) {
526             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
527             if (SvWEAKREF(ref)) {
528                 sv_del_backref(target, ref);
529                 SvWEAKREF_off(ref);
530                 SvRV_set(ref, NULL);
531             } else {
532                 SvROK_off(ref);
533                 SvRV_set(ref, NULL);
534                 SvREFCNT_dec_NN(target);
535             }
536         }
537     }
538 }
539
540
541 /* clear any slots in a GV which hold objects - except IO;
542  * called by sv_clean_objs() for each live GV */
543
544 static void
545 do_clean_named_objs(pTHX_ SV *const sv)
546 {
547     SV *obj;
548     assert(SvTYPE(sv) == SVt_PVGV);
549     assert(isGV_with_GP(sv));
550     if (!GvGP(sv))
551         return;
552
553     /* freeing GP entries may indirectly free the current GV;
554      * hold onto it while we mess with the GP slots */
555     SvREFCNT_inc(sv);
556
557     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
558         DEBUG_D((PerlIO_printf(Perl_debug_log,
559                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
560         GvSV(sv) = NULL;
561         SvREFCNT_dec_NN(obj);
562     }
563     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
564         DEBUG_D((PerlIO_printf(Perl_debug_log,
565                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
566         GvAV(sv) = NULL;
567         SvREFCNT_dec_NN(obj);
568     }
569     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
570         DEBUG_D((PerlIO_printf(Perl_debug_log,
571                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
572         GvHV(sv) = NULL;
573         SvREFCNT_dec_NN(obj);
574     }
575     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
576         DEBUG_D((PerlIO_printf(Perl_debug_log,
577                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
578         GvCV_set(sv, NULL);
579         SvREFCNT_dec_NN(obj);
580     }
581     SvREFCNT_dec_NN(sv); /* undo the inc above */
582 }
583
584 /* clear any IO slots in a GV which hold objects (except stderr, defout);
585  * called by sv_clean_objs() for each live GV */
586
587 static void
588 do_clean_named_io_objs(pTHX_ SV *const sv)
589 {
590     SV *obj;
591     assert(SvTYPE(sv) == SVt_PVGV);
592     assert(isGV_with_GP(sv));
593     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
594         return;
595
596     SvREFCNT_inc(sv);
597     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
598         DEBUG_D((PerlIO_printf(Perl_debug_log,
599                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
600         GvIOp(sv) = NULL;
601         SvREFCNT_dec_NN(obj);
602     }
603     SvREFCNT_dec_NN(sv); /* undo the inc above */
604 }
605
606 /* Void wrapper to pass to visit() */
607 static void
608 do_curse(pTHX_ SV * const sv) {
609     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
610      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
611         return;
612     (void)curse(sv, 0);
613 }
614
615 /*
616 =for apidoc sv_clean_objs
617
618 Attempt to destroy all objects not yet freed.
619
620 =cut
621 */
622
623 void
624 Perl_sv_clean_objs(pTHX)
625 {
626     GV *olddef, *olderr;
627     PL_in_clean_objs = TRUE;
628     visit(do_clean_objs, SVf_ROK, SVf_ROK);
629     /* Some barnacles may yet remain, clinging to typeglobs.
630      * Run the non-IO destructors first: they may want to output
631      * error messages, close files etc */
632     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
634     /* And if there are some very tenacious barnacles clinging to arrays,
635        closures, or what have you.... */
636     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
637     olddef = PL_defoutgv;
638     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
639     if (olddef && isGV_with_GP(olddef))
640         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
641     olderr = PL_stderrgv;
642     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
643     if (olderr && isGV_with_GP(olderr))
644         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
645     SvREFCNT_dec(olddef);
646     PL_in_clean_objs = FALSE;
647 }
648
649 /* called by sv_clean_all() for each live SV */
650
651 static void
652 do_clean_all(pTHX_ SV *const sv)
653 {
654     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
655         /* don't clean pid table and strtab */
656         return;
657     }
658     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
659     SvFLAGS(sv) |= SVf_BREAK;
660     SvREFCNT_dec_NN(sv);
661 }
662
663 /*
664 =for apidoc sv_clean_all
665
666 Decrement the refcnt of each remaining SV, possibly triggering a
667 cleanup.  This function may have to be called multiple times to free
668 SVs which are in complex self-referential hierarchies.
669
670 =cut
671 */
672
673 I32
674 Perl_sv_clean_all(pTHX)
675 {
676     I32 cleaned;
677     PL_in_clean_all = TRUE;
678     cleaned = visit(do_clean_all, 0,0);
679     return cleaned;
680 }
681
682 /*
683   ARENASETS: a meta-arena implementation which separates arena-info
684   into struct arena_set, which contains an array of struct
685   arena_descs, each holding info for a single arena.  By separating
686   the meta-info from the arena, we recover the 1st slot, formerly
687   borrowed for list management.  The arena_set is about the size of an
688   arena, avoiding the needless malloc overhead of a naive linked-list.
689
690   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
691   memory in the last arena-set (1/2 on average).  In trade, we get
692   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
693   smaller types).  The recovery of the wasted space allows use of
694   small arenas for large, rare body types, by changing array* fields
695   in body_details_by_type[] below.
696 */
697 struct arena_desc {
698     char       *arena;          /* the raw storage, allocated aligned */
699     size_t      size;           /* its size ~4k typ */
700     svtype      utype;          /* bodytype stored in arena */
701 };
702
703 struct arena_set;
704
705 /* Get the maximum number of elements in set[] such that struct arena_set
706    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
707    therefore likely to be 1 aligned memory page.  */
708
709 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
710                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
711
712 struct arena_set {
713     struct arena_set* next;
714     unsigned int   set_size;    /* ie ARENAS_PER_SET */
715     unsigned int   curr;        /* index of next available arena-desc */
716     struct arena_desc set[ARENAS_PER_SET];
717 };
718
719 /*
720 =for apidoc sv_free_arenas
721
722 Deallocate the memory used by all arenas.  Note that all the individual SV
723 heads and bodies within the arenas must already have been freed.
724
725 =cut
726
727 */
728 void
729 Perl_sv_free_arenas(pTHX)
730 {
731     SV* sva;
732     SV* svanext;
733     unsigned int i;
734
735     /* Free arenas here, but be careful about fake ones.  (We assume
736        contiguity of the fake ones with the corresponding real ones.) */
737
738     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
739         svanext = MUTABLE_SV(SvANY(sva));
740         while (svanext && SvFAKE(svanext))
741             svanext = MUTABLE_SV(SvANY(svanext));
742
743         if (!SvFAKE(sva))
744             Safefree(sva);
745     }
746
747     {
748         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
749
750         while (aroot) {
751             struct arena_set *current = aroot;
752             i = aroot->curr;
753             while (i--) {
754                 assert(aroot->set[i].arena);
755                 Safefree(aroot->set[i].arena);
756             }
757             aroot = aroot->next;
758             Safefree(current);
759         }
760     }
761     PL_body_arenas = 0;
762
763     i = PERL_ARENA_ROOTS_SIZE;
764     while (i--)
765         PL_body_roots[i] = 0;
766
767     PL_sv_arenaroot = 0;
768     PL_sv_root = 0;
769 }
770
771 /*
772   Here are mid-level routines that manage the allocation of bodies out
773   of the various arenas.  There are 4 kinds of arenas:
774
775   1. SV-head arenas, which are discussed and handled above
776   2. regular body arenas
777   3. arenas for reduced-size bodies
778   4. Hash-Entry arenas
779
780   Arena types 2 & 3 are chained by body-type off an array of
781   arena-root pointers, which is indexed by svtype.  Some of the
782   larger/less used body types are malloced singly, since a large
783   unused block of them is wasteful.  Also, several svtypes dont have
784   bodies; the data fits into the sv-head itself.  The arena-root
785   pointer thus has a few unused root-pointers (which may be hijacked
786   later for arena type 4)
787
788   3 differs from 2 as an optimization; some body types have several
789   unused fields in the front of the structure (which are kept in-place
790   for consistency).  These bodies can be allocated in smaller chunks,
791   because the leading fields arent accessed.  Pointers to such bodies
792   are decremented to point at the unused 'ghost' memory, knowing that
793   the pointers are used with offsets to the real memory.
794
795 Allocation of SV-bodies is similar to SV-heads, differing as follows;
796 the allocation mechanism is used for many body types, so is somewhat
797 more complicated, it uses arena-sets, and has no need for still-live
798 SV detection.
799
800 At the outermost level, (new|del)_X*V macros return bodies of the
801 appropriate type.  These macros call either (new|del)_body_type or
802 (new|del)_body_allocated macro pairs, depending on specifics of the
803 type.  Most body types use the former pair, the latter pair is used to
804 allocate body types with "ghost fields".
805
806 "ghost fields" are fields that are unused in certain types, and
807 consequently don't need to actually exist.  They are declared because
808 they're part of a "base type", which allows use of functions as
809 methods.  The simplest examples are AVs and HVs, 2 aggregate types
810 which don't use the fields which support SCALAR semantics.
811
812 For these types, the arenas are carved up into appropriately sized
813 chunks, we thus avoid wasted memory for those unaccessed members.
814 When bodies are allocated, we adjust the pointer back in memory by the
815 size of the part not allocated, so it's as if we allocated the full
816 structure.  (But things will all go boom if you write to the part that
817 is "not there", because you'll be overwriting the last members of the
818 preceding structure in memory.)
819
820 We calculate the correction using the STRUCT_OFFSET macro on the first
821 member present.  If the allocated structure is smaller (no initial NV
822 actually allocated) then the net effect is to subtract the size of the NV
823 from the pointer, to return a new pointer as if an initial NV were actually
824 allocated.  (We were using structures named *_allocated for this, but
825 this turned out to be a subtle bug, because a structure without an NV
826 could have a lower alignment constraint, but the compiler is allowed to
827 optimised accesses based on the alignment constraint of the actual pointer
828 to the full structure, for example, using a single 64 bit load instruction
829 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
830
831 This is the same trick as was used for NV and IV bodies.  Ironically it
832 doesn't need to be used for NV bodies any more, because NV is now at
833 the start of the structure.  IV bodies, and also in some builds NV bodies,
834 don't need it either, because they are no longer allocated.
835
836 In turn, the new_body_* allocators call S_new_body(), which invokes
837 new_body_inline macro, which takes a lock, and takes a body off the
838 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
839 necessary to refresh an empty list.  Then the lock is released, and
840 the body is returned.
841
842 Perl_more_bodies allocates a new arena, and carves it up into an array of N
843 bodies, which it strings into a linked list.  It looks up arena-size
844 and body-size from the body_details table described below, thus
845 supporting the multiple body-types.
846
847 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
848 the (new|del)_X*V macros are mapped directly to malloc/free.
849
850 For each sv-type, struct body_details bodies_by_type[] carries
851 parameters which control these aspects of SV handling:
852
853 Arena_size determines whether arenas are used for this body type, and if
854 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
855 zero, forcing individual mallocs and frees.
856
857 Body_size determines how big a body is, and therefore how many fit into
858 each arena.  Offset carries the body-pointer adjustment needed for
859 "ghost fields", and is used in *_allocated macros.
860
861 But its main purpose is to parameterize info needed in
862 Perl_sv_upgrade().  The info here dramatically simplifies the function
863 vs the implementation in 5.8.8, making it table-driven.  All fields
864 are used for this, except for arena_size.
865
866 For the sv-types that have no bodies, arenas are not used, so those
867 PL_body_roots[sv_type] are unused, and can be overloaded.  In
868 something of a special case, SVt_NULL is borrowed for HE arenas;
869 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
870 bodies_by_type[SVt_NULL] slot is not used, as the table is not
871 available in hv.c.
872
873 */
874
875 struct body_details {
876     U8 body_size;       /* Size to allocate  */
877     U8 copy;            /* Size of structure to copy (may be shorter)  */
878     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
879     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
880     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
881     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
882     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
883     U32 arena_size;                 /* Size of arena to allocate */
884 };
885
886 #define HADNV FALSE
887 #define NONV TRUE
888
889
890 #ifdef PURIFY
891 /* With -DPURFIY we allocate everything directly, and don't use arenas.
892    This seems a rather elegant way to simplify some of the code below.  */
893 #define HASARENA FALSE
894 #else
895 #define HASARENA TRUE
896 #endif
897 #define NOARENA FALSE
898
899 /* Size the arenas to exactly fit a given number of bodies.  A count
900    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
901    simplifying the default.  If count > 0, the arena is sized to fit
902    only that many bodies, allowing arenas to be used for large, rare
903    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
904    limited by PERL_ARENA_SIZE, so we can safely oversize the
905    declarations.
906  */
907 #define FIT_ARENA0(body_size)                           \
908     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
909 #define FIT_ARENAn(count,body_size)                     \
910     ( count * body_size <= PERL_ARENA_SIZE)             \
911     ? count * body_size                                 \
912     : FIT_ARENA0 (body_size)
913 #define FIT_ARENA(count,body_size)                      \
914    (U32)(count                                          \
915     ? FIT_ARENAn (count, body_size)                     \
916     : FIT_ARENA0 (body_size))
917
918 /* Calculate the length to copy. Specifically work out the length less any
919    final padding the compiler needed to add.  See the comment in sv_upgrade
920    for why copying the padding proved to be a bug.  */
921
922 #define copy_length(type, last_member) \
923         STRUCT_OFFSET(type, last_member) \
924         + sizeof (((type*)SvANY((const SV *)0))->last_member)
925
926 static const struct body_details bodies_by_type[] = {
927     /* HEs use this offset for their arena.  */
928     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
929
930     /* IVs are in the head, so the allocation size is 0.  */
931     { 0,
932       sizeof(IV), /* This is used to copy out the IV body.  */
933       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
934       NOARENA /* IVS don't need an arena  */, 0
935     },
936
937 #if NVSIZE <= IVSIZE
938     { 0, sizeof(NV),
939       STRUCT_OFFSET(XPVNV, xnv_u),
940       SVt_NV, FALSE, HADNV, NOARENA, 0 },
941 #else
942     { sizeof(NV), sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
945 #endif
946
947     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
948       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
949       + STRUCT_OFFSET(XPV, xpv_cur),
950       SVt_PV, FALSE, NONV, HASARENA,
951       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
952
953     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
954       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
955       + STRUCT_OFFSET(XPV, xpv_cur),
956       SVt_INVLIST, TRUE, NONV, HASARENA,
957       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
958
959     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
960       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
961       + STRUCT_OFFSET(XPV, xpv_cur),
962       SVt_PVIV, FALSE, NONV, HASARENA,
963       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
964
965     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
966       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
967       + STRUCT_OFFSET(XPV, xpv_cur),
968       SVt_PVNV, FALSE, HADNV, HASARENA,
969       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
970
971     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
972       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
973
974     { sizeof(regexp),
975       sizeof(regexp),
976       0,
977       SVt_REGEXP, TRUE, NONV, HASARENA,
978       FIT_ARENA(0, sizeof(regexp))
979     },
980
981     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
982       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
983     
984     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
985       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
986
987     { sizeof(XPVAV),
988       copy_length(XPVAV, xav_alloc),
989       0,
990       SVt_PVAV, TRUE, NONV, HASARENA,
991       FIT_ARENA(0, sizeof(XPVAV)) },
992
993     { sizeof(XPVHV),
994       copy_length(XPVHV, xhv_max),
995       0,
996       SVt_PVHV, TRUE, NONV, HASARENA,
997       FIT_ARENA(0, sizeof(XPVHV)) },
998
999     { sizeof(XPVCV),
1000       sizeof(XPVCV),
1001       0,
1002       SVt_PVCV, TRUE, NONV, HASARENA,
1003       FIT_ARENA(0, sizeof(XPVCV)) },
1004
1005     { sizeof(XPVFM),
1006       sizeof(XPVFM),
1007       0,
1008       SVt_PVFM, TRUE, NONV, NOARENA,
1009       FIT_ARENA(20, sizeof(XPVFM)) },
1010
1011     { sizeof(XPVIO),
1012       sizeof(XPVIO),
1013       0,
1014       SVt_PVIO, TRUE, NONV, HASARENA,
1015       FIT_ARENA(24, sizeof(XPVIO)) },
1016 };
1017
1018 #define new_body_allocated(sv_type)             \
1019     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1020              - bodies_by_type[sv_type].offset)
1021
1022 /* return a thing to the free list */
1023
1024 #define del_body(thing, root)                           \
1025     STMT_START {                                        \
1026         void ** const thing_copy = (void **)thing;      \
1027         *thing_copy = *root;                            \
1028         *root = (void*)thing_copy;                      \
1029     } STMT_END
1030
1031 #ifdef PURIFY
1032 #if !(NVSIZE <= IVSIZE)
1033 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1034 #endif
1035 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1036 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1037
1038 #define del_XPVGV(p)    safefree(p)
1039
1040 #else /* !PURIFY */
1041
1042 #if !(NVSIZE <= IVSIZE)
1043 #  define new_XNV()     new_body_allocated(SVt_NV)
1044 #endif
1045 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1046 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1047
1048 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1049                                  &PL_body_roots[SVt_PVGV])
1050
1051 #endif /* PURIFY */
1052
1053 /* no arena for you! */
1054
1055 #define new_NOARENA(details) \
1056         safemalloc((details)->body_size + (details)->offset)
1057 #define new_NOARENAZ(details) \
1058         safecalloc((details)->body_size + (details)->offset, 1)
1059
1060 void *
1061 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1062                   const size_t arena_size)
1063 {
1064     void ** const root = &PL_body_roots[sv_type];
1065     struct arena_desc *adesc;
1066     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1067     unsigned int curr;
1068     char *start;
1069     const char *end;
1070     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1071 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1072     dVAR;
1073 #endif
1074 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT)
1075     static bool done_sanity_check;
1076
1077     /* PERL_GLOBAL_STRUCT cannot coexist with global
1078      * variables like done_sanity_check. */
1079     if (!done_sanity_check) {
1080         unsigned int i = SVt_LAST;
1081
1082         done_sanity_check = TRUE;
1083
1084         while (i--)
1085             assert (bodies_by_type[i].type == i);
1086     }
1087 #endif
1088
1089     assert(arena_size);
1090
1091     /* may need new arena-set to hold new arena */
1092     if (!aroot || aroot->curr >= aroot->set_size) {
1093         struct arena_set *newroot;
1094         Newxz(newroot, 1, struct arena_set);
1095         newroot->set_size = ARENAS_PER_SET;
1096         newroot->next = aroot;
1097         aroot = newroot;
1098         PL_body_arenas = (void *) newroot;
1099         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1100     }
1101
1102     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1103     curr = aroot->curr++;
1104     adesc = &(aroot->set[curr]);
1105     assert(!adesc->arena);
1106     
1107     Newx(adesc->arena, good_arena_size, char);
1108     adesc->size = good_arena_size;
1109     adesc->utype = sv_type;
1110     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1111                           curr, (void*)adesc->arena, (UV)good_arena_size));
1112
1113     start = (char *) adesc->arena;
1114
1115     /* Get the address of the byte after the end of the last body we can fit.
1116        Remember, this is integer division:  */
1117     end = start + good_arena_size / body_size * body_size;
1118
1119     /* computed count doesn't reflect the 1st slot reservation */
1120 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1121     DEBUG_m(PerlIO_printf(Perl_debug_log,
1122                           "arena %p end %p arena-size %d (from %d) type %d "
1123                           "size %d ct %d\n",
1124                           (void*)start, (void*)end, (int)good_arena_size,
1125                           (int)arena_size, sv_type, (int)body_size,
1126                           (int)good_arena_size / (int)body_size));
1127 #else
1128     DEBUG_m(PerlIO_printf(Perl_debug_log,
1129                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1130                           (void*)start, (void*)end,
1131                           (int)arena_size, sv_type, (int)body_size,
1132                           (int)good_arena_size / (int)body_size));
1133 #endif
1134     *root = (void *)start;
1135
1136     while (1) {
1137         /* Where the next body would start:  */
1138         char * const next = start + body_size;
1139
1140         if (next >= end) {
1141             /* This is the last body:  */
1142             assert(next == end);
1143
1144             *(void **)start = 0;
1145             return *root;
1146         }
1147
1148         *(void**) start = (void *)next;
1149         start = next;
1150     }
1151 }
1152
1153 /* grab a new thing from the free list, allocating more if necessary.
1154    The inline version is used for speed in hot routines, and the
1155    function using it serves the rest (unless PURIFY).
1156 */
1157 #define new_body_inline(xpv, sv_type) \
1158     STMT_START { \
1159         void ** const r3wt = &PL_body_roots[sv_type]; \
1160         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1161           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1162                                              bodies_by_type[sv_type].body_size,\
1163                                              bodies_by_type[sv_type].arena_size)); \
1164         *(r3wt) = *(void**)(xpv); \
1165     } STMT_END
1166
1167 #ifndef PURIFY
1168
1169 STATIC void *
1170 S_new_body(pTHX_ const svtype sv_type)
1171 {
1172     void *xpv;
1173     new_body_inline(xpv, sv_type);
1174     return xpv;
1175 }
1176
1177 #endif
1178
1179 static const struct body_details fake_rv =
1180     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1181
1182 /*
1183 =for apidoc sv_upgrade
1184
1185 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1186 SV, then copies across as much information as possible from the old body.
1187 It croaks if the SV is already in a more complex form than requested.  You
1188 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1189 before calling C<sv_upgrade>, and hence does not croak.  See also
1190 C<L</svtype>>.
1191
1192 =cut
1193 */
1194
1195 void
1196 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1197 {
1198     void*       old_body;
1199     void*       new_body;
1200     const svtype old_type = SvTYPE(sv);
1201     const struct body_details *new_type_details;
1202     const struct body_details *old_type_details
1203         = bodies_by_type + old_type;
1204     SV *referent = NULL;
1205
1206     PERL_ARGS_ASSERT_SV_UPGRADE;
1207
1208     if (old_type == new_type)
1209         return;
1210
1211     /* This clause was purposefully added ahead of the early return above to
1212        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1213        inference by Nick I-S that it would fix other troublesome cases. See
1214        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1215
1216        Given that shared hash key scalars are no longer PVIV, but PV, there is
1217        no longer need to unshare so as to free up the IVX slot for its proper
1218        purpose. So it's safe to move the early return earlier.  */
1219
1220     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1221         sv_force_normal_flags(sv, 0);
1222     }
1223
1224     old_body = SvANY(sv);
1225
1226     /* Copying structures onto other structures that have been neatly zeroed
1227        has a subtle gotcha. Consider XPVMG
1228
1229        +------+------+------+------+------+-------+-------+
1230        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1231        +------+------+------+------+------+-------+-------+
1232        0      4      8     12     16     20      24      28
1233
1234        where NVs are aligned to 8 bytes, so that sizeof that structure is
1235        actually 32 bytes long, with 4 bytes of padding at the end:
1236
1237        +------+------+------+------+------+-------+-------+------+
1238        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1239        +------+------+------+------+------+-------+-------+------+
1240        0      4      8     12     16     20      24      28     32
1241
1242        so what happens if you allocate memory for this structure:
1243
1244        +------+------+------+------+------+-------+-------+------+------+...
1245        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1246        +------+------+------+------+------+-------+-------+------+------+...
1247        0      4      8     12     16     20      24      28     32     36
1248
1249        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1250        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1251        started out as zero once, but it's quite possible that it isn't. So now,
1252        rather than a nicely zeroed GP, you have it pointing somewhere random.
1253        Bugs ensue.
1254
1255        (In fact, GP ends up pointing at a previous GP structure, because the
1256        principle cause of the padding in XPVMG getting garbage is a copy of
1257        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1258        this happens to be moot because XPVGV has been re-ordered, with GP
1259        no longer after STASH)
1260
1261        So we are careful and work out the size of used parts of all the
1262        structures.  */
1263
1264     switch (old_type) {
1265     case SVt_NULL:
1266         break;
1267     case SVt_IV:
1268         if (SvROK(sv)) {
1269             referent = SvRV(sv);
1270             old_type_details = &fake_rv;
1271             if (new_type == SVt_NV)
1272                 new_type = SVt_PVNV;
1273         } else {
1274             if (new_type < SVt_PVIV) {
1275                 new_type = (new_type == SVt_NV)
1276                     ? SVt_PVNV : SVt_PVIV;
1277             }
1278         }
1279         break;
1280     case SVt_NV:
1281         if (new_type < SVt_PVNV) {
1282             new_type = SVt_PVNV;
1283         }
1284         break;
1285     case SVt_PV:
1286         assert(new_type > SVt_PV);
1287         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1288         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1289         break;
1290     case SVt_PVIV:
1291         break;
1292     case SVt_PVNV:
1293         break;
1294     case SVt_PVMG:
1295         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1296            there's no way that it can be safely upgraded, because perl.c
1297            expects to Safefree(SvANY(PL_mess_sv))  */
1298         assert(sv != PL_mess_sv);
1299         break;
1300     default:
1301         if (UNLIKELY(old_type_details->cant_upgrade))
1302             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1303                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1304     }
1305
1306     if (UNLIKELY(old_type > new_type))
1307         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1308                 (int)old_type, (int)new_type);
1309
1310     new_type_details = bodies_by_type + new_type;
1311
1312     SvFLAGS(sv) &= ~SVTYPEMASK;
1313     SvFLAGS(sv) |= new_type;
1314
1315     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1316        the return statements above will have triggered.  */
1317     assert (new_type != SVt_NULL);
1318     switch (new_type) {
1319     case SVt_IV:
1320         assert(old_type == SVt_NULL);
1321         SET_SVANY_FOR_BODYLESS_IV(sv);
1322         SvIV_set(sv, 0);
1323         return;
1324     case SVt_NV:
1325         assert(old_type == SVt_NULL);
1326 #if NVSIZE <= IVSIZE
1327         SET_SVANY_FOR_BODYLESS_NV(sv);
1328 #else
1329         SvANY(sv) = new_XNV();
1330 #endif
1331         SvNV_set(sv, 0);
1332         return;
1333     case SVt_PVHV:
1334     case SVt_PVAV:
1335         assert(new_type_details->body_size);
1336
1337 #ifndef PURIFY  
1338         assert(new_type_details->arena);
1339         assert(new_type_details->arena_size);
1340         /* This points to the start of the allocated area.  */
1341         new_body_inline(new_body, new_type);
1342         Zero(new_body, new_type_details->body_size, char);
1343         new_body = ((char *)new_body) - new_type_details->offset;
1344 #else
1345         /* We always allocated the full length item with PURIFY. To do this
1346            we fake things so that arena is false for all 16 types..  */
1347         new_body = new_NOARENAZ(new_type_details);
1348 #endif
1349         SvANY(sv) = new_body;
1350         if (new_type == SVt_PVAV) {
1351             AvMAX(sv)   = -1;
1352             AvFILLp(sv) = -1;
1353             AvREAL_only(sv);
1354             if (old_type_details->body_size) {
1355                 AvALLOC(sv) = 0;
1356             } else {
1357                 /* It will have been zeroed when the new body was allocated.
1358                    Lets not write to it, in case it confuses a write-back
1359                    cache.  */
1360             }
1361         } else {
1362             assert(!SvOK(sv));
1363             SvOK_off(sv);
1364 #ifndef NODEFAULT_SHAREKEYS
1365             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1366 #endif
1367             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1368             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1369         }
1370
1371         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1372            The target created by newSVrv also is, and it can have magic.
1373            However, it never has SvPVX set.
1374         */
1375         if (old_type == SVt_IV) {
1376             assert(!SvROK(sv));
1377         } else if (old_type >= SVt_PV) {
1378             assert(SvPVX_const(sv) == 0);
1379         }
1380
1381         if (old_type >= SVt_PVMG) {
1382             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1383             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1384         } else {
1385             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1386         }
1387         break;
1388
1389     case SVt_PVIV:
1390         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1391            no route from NV to PVIV, NOK can never be true  */
1392         assert(!SvNOKp(sv));
1393         assert(!SvNOK(sv));
1394         /* FALLTHROUGH */
1395     case SVt_PVIO:
1396     case SVt_PVFM:
1397     case SVt_PVGV:
1398     case SVt_PVCV:
1399     case SVt_PVLV:
1400     case SVt_INVLIST:
1401     case SVt_REGEXP:
1402     case SVt_PVMG:
1403     case SVt_PVNV:
1404     case SVt_PV:
1405
1406         assert(new_type_details->body_size);
1407         /* We always allocated the full length item with PURIFY. To do this
1408            we fake things so that arena is false for all 16 types..  */
1409         if(new_type_details->arena) {
1410             /* This points to the start of the allocated area.  */
1411             new_body_inline(new_body, new_type);
1412             Zero(new_body, new_type_details->body_size, char);
1413             new_body = ((char *)new_body) - new_type_details->offset;
1414         } else {
1415             new_body = new_NOARENAZ(new_type_details);
1416         }
1417         SvANY(sv) = new_body;
1418
1419         if (old_type_details->copy) {
1420             /* There is now the potential for an upgrade from something without
1421                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1422             int offset = old_type_details->offset;
1423             int length = old_type_details->copy;
1424
1425             if (new_type_details->offset > old_type_details->offset) {
1426                 const int difference
1427                     = new_type_details->offset - old_type_details->offset;
1428                 offset += difference;
1429                 length -= difference;
1430             }
1431             assert (length >= 0);
1432                 
1433             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1434                  char);
1435         }
1436
1437 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1438         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1439          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1440          * NV slot, but the new one does, then we need to initialise the
1441          * freshly created NV slot with whatever the correct bit pattern is
1442          * for 0.0  */
1443         if (old_type_details->zero_nv && !new_type_details->zero_nv
1444             && !isGV_with_GP(sv))
1445             SvNV_set(sv, 0);
1446 #endif
1447
1448         if (UNLIKELY(new_type == SVt_PVIO)) {
1449             IO * const io = MUTABLE_IO(sv);
1450             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1451
1452             SvOBJECT_on(io);
1453             /* Clear the stashcache because a new IO could overrule a package
1454                name */
1455             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1456             hv_clear(PL_stashcache);
1457
1458             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1459             IoPAGE_LEN(sv) = 60;
1460         }
1461         if (old_type < SVt_PV) {
1462             /* referent will be NULL unless the old type was SVt_IV emulating
1463                SVt_RV */
1464             sv->sv_u.svu_rv = referent;
1465         }
1466         break;
1467     default:
1468         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1469                    (unsigned long)new_type);
1470     }
1471
1472     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1473        and sometimes SVt_NV */
1474     if (old_type_details->body_size) {
1475 #ifdef PURIFY
1476         safefree(old_body);
1477 #else
1478         /* Note that there is an assumption that all bodies of types that
1479            can be upgraded came from arenas. Only the more complex non-
1480            upgradable types are allowed to be directly malloc()ed.  */
1481         assert(old_type_details->arena);
1482         del_body((void*)((char*)old_body + old_type_details->offset),
1483                  &PL_body_roots[old_type]);
1484 #endif
1485     }
1486 }
1487
1488 /*
1489 =for apidoc sv_backoff
1490
1491 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1492 wrapper instead.
1493
1494 =cut
1495 */
1496
1497 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1498    prior to 5.23.4 this function always returned 0
1499 */
1500
1501 void
1502 Perl_sv_backoff(SV *const sv)
1503 {
1504     STRLEN delta;
1505     const char * const s = SvPVX_const(sv);
1506
1507     PERL_ARGS_ASSERT_SV_BACKOFF;
1508
1509     assert(SvOOK(sv));
1510     assert(SvTYPE(sv) != SVt_PVHV);
1511     assert(SvTYPE(sv) != SVt_PVAV);
1512
1513     SvOOK_offset(sv, delta);
1514     
1515     SvLEN_set(sv, SvLEN(sv) + delta);
1516     SvPV_set(sv, SvPVX(sv) - delta);
1517     SvFLAGS(sv) &= ~SVf_OOK;
1518     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1519     return;
1520 }
1521
1522
1523 /* forward declaration */
1524 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1525
1526
1527 /*
1528 =for apidoc sv_grow
1529
1530 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1531 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1532 Use the C<SvGROW> wrapper instead.
1533
1534 =cut
1535 */
1536
1537
1538 char *
1539 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1540 {
1541     char *s;
1542
1543     PERL_ARGS_ASSERT_SV_GROW;
1544
1545     if (SvROK(sv))
1546         sv_unref(sv);
1547     if (SvTYPE(sv) < SVt_PV) {
1548         sv_upgrade(sv, SVt_PV);
1549         s = SvPVX_mutable(sv);
1550     }
1551     else if (SvOOK(sv)) {       /* pv is offset? */
1552         sv_backoff(sv);
1553         s = SvPVX_mutable(sv);
1554         if (newlen > SvLEN(sv))
1555             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1556     }
1557     else
1558     {
1559         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1560         s = SvPVX_mutable(sv);
1561     }
1562
1563 #ifdef PERL_COPY_ON_WRITE
1564     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1565      * to store the COW count. So in general, allocate one more byte than
1566      * asked for, to make it likely this byte is always spare: and thus
1567      * make more strings COW-able.
1568      *
1569      * Only increment if the allocation isn't MEM_SIZE_MAX,
1570      * otherwise it will wrap to 0.
1571      */
1572     if ( newlen != MEM_SIZE_MAX )
1573         newlen++;
1574 #endif
1575
1576 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1577 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1578 #endif
1579
1580     if (newlen > SvLEN(sv)) {           /* need more room? */
1581         STRLEN minlen = SvCUR(sv);
1582         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1583         if (newlen < minlen)
1584             newlen = minlen;
1585 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1586
1587         /* Don't round up on the first allocation, as odds are pretty good that
1588          * the initial request is accurate as to what is really needed */
1589         if (SvLEN(sv)) {
1590             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1591             if (rounded > newlen)
1592                 newlen = rounded;
1593         }
1594 #endif
1595         if (SvLEN(sv) && s) {
1596             s = (char*)saferealloc(s, newlen);
1597         }
1598         else {
1599             s = (char*)safemalloc(newlen);
1600             if (SvPVX_const(sv) && SvCUR(sv)) {
1601                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1602             }
1603         }
1604         SvPV_set(sv, s);
1605 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1606         /* Do this here, do it once, do it right, and then we will never get
1607            called back into sv_grow() unless there really is some growing
1608            needed.  */
1609         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1610 #else
1611         SvLEN_set(sv, newlen);
1612 #endif
1613     }
1614     return s;
1615 }
1616
1617 /*
1618 =for apidoc sv_setiv
1619
1620 Copies an integer into the given SV, upgrading first if necessary.
1621 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1622
1623 =cut
1624 */
1625
1626 void
1627 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1628 {
1629     PERL_ARGS_ASSERT_SV_SETIV;
1630
1631     SV_CHECK_THINKFIRST_COW_DROP(sv);
1632     switch (SvTYPE(sv)) {
1633     case SVt_NULL:
1634     case SVt_NV:
1635         sv_upgrade(sv, SVt_IV);
1636         break;
1637     case SVt_PV:
1638         sv_upgrade(sv, SVt_PVIV);
1639         break;
1640
1641     case SVt_PVGV:
1642         if (!isGV_with_GP(sv))
1643             break;
1644         /* FALLTHROUGH */
1645     case SVt_PVAV:
1646     case SVt_PVHV:
1647     case SVt_PVCV:
1648     case SVt_PVFM:
1649     case SVt_PVIO:
1650         /* diag_listed_as: Can't coerce %s to %s in %s */
1651         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1652                    OP_DESC(PL_op));
1653         NOT_REACHED; /* NOTREACHED */
1654         break;
1655     default: NOOP;
1656     }
1657     (void)SvIOK_only(sv);                       /* validate number */
1658     SvIV_set(sv, i);
1659     SvTAINT(sv);
1660 }
1661
1662 /*
1663 =for apidoc sv_setiv_mg
1664
1665 Like C<sv_setiv>, but also handles 'set' magic.
1666
1667 =cut
1668 */
1669
1670 void
1671 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1672 {
1673     PERL_ARGS_ASSERT_SV_SETIV_MG;
1674
1675     sv_setiv(sv,i);
1676     SvSETMAGIC(sv);
1677 }
1678
1679 /*
1680 =for apidoc sv_setuv
1681
1682 Copies an unsigned integer into the given SV, upgrading first if necessary.
1683 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1684
1685 =cut
1686 */
1687
1688 void
1689 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1690 {
1691     PERL_ARGS_ASSERT_SV_SETUV;
1692
1693     /* With the if statement to ensure that integers are stored as IVs whenever
1694        possible:
1695        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1696
1697        without
1698        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1699
1700        If you wish to remove the following if statement, so that this routine
1701        (and its callers) always return UVs, please benchmark to see what the
1702        effect is. Modern CPUs may be different. Or may not :-)
1703     */
1704     if (u <= (UV)IV_MAX) {
1705        sv_setiv(sv, (IV)u);
1706        return;
1707     }
1708     sv_setiv(sv, 0);
1709     SvIsUV_on(sv);
1710     SvUV_set(sv, u);
1711 }
1712
1713 /*
1714 =for apidoc sv_setuv_mg
1715
1716 Like C<sv_setuv>, but also handles 'set' magic.
1717
1718 =cut
1719 */
1720
1721 void
1722 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1723 {
1724     PERL_ARGS_ASSERT_SV_SETUV_MG;
1725
1726     sv_setuv(sv,u);
1727     SvSETMAGIC(sv);
1728 }
1729
1730 /*
1731 =for apidoc sv_setnv
1732
1733 Copies a double into the given SV, upgrading first if necessary.
1734 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1735
1736 =cut
1737 */
1738
1739 void
1740 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1741 {
1742     PERL_ARGS_ASSERT_SV_SETNV;
1743
1744     SV_CHECK_THINKFIRST_COW_DROP(sv);
1745     switch (SvTYPE(sv)) {
1746     case SVt_NULL:
1747     case SVt_IV:
1748         sv_upgrade(sv, SVt_NV);
1749         break;
1750     case SVt_PV:
1751     case SVt_PVIV:
1752         sv_upgrade(sv, SVt_PVNV);
1753         break;
1754
1755     case SVt_PVGV:
1756         if (!isGV_with_GP(sv))
1757             break;
1758         /* FALLTHROUGH */
1759     case SVt_PVAV:
1760     case SVt_PVHV:
1761     case SVt_PVCV:
1762     case SVt_PVFM:
1763     case SVt_PVIO:
1764         /* diag_listed_as: Can't coerce %s to %s in %s */
1765         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1766                    OP_DESC(PL_op));
1767         NOT_REACHED; /* NOTREACHED */
1768         break;
1769     default: NOOP;
1770     }
1771     SvNV_set(sv, num);
1772     (void)SvNOK_only(sv);                       /* validate number */
1773     SvTAINT(sv);
1774 }
1775
1776 /*
1777 =for apidoc sv_setnv_mg
1778
1779 Like C<sv_setnv>, but also handles 'set' magic.
1780
1781 =cut
1782 */
1783
1784 void
1785 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1786 {
1787     PERL_ARGS_ASSERT_SV_SETNV_MG;
1788
1789     sv_setnv(sv,num);
1790     SvSETMAGIC(sv);
1791 }
1792
1793 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1794  * not incrementable warning display.
1795  * Originally part of S_not_a_number().
1796  * The return value may be != tmpbuf.
1797  */
1798
1799 STATIC const char *
1800 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1801     const char *pv;
1802
1803      PERL_ARGS_ASSERT_SV_DISPLAY;
1804
1805      if (DO_UTF8(sv)) {
1806           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1807           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1808      } else {
1809           char *d = tmpbuf;
1810           const char * const limit = tmpbuf + tmpbuf_size - 8;
1811           /* each *s can expand to 4 chars + "...\0",
1812              i.e. need room for 8 chars */
1813         
1814           const char *s = SvPVX_const(sv);
1815           const char * const end = s + SvCUR(sv);
1816           for ( ; s < end && d < limit; s++ ) {
1817                int ch = *s & 0xFF;
1818                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1819                     *d++ = 'M';
1820                     *d++ = '-';
1821
1822                     /* Map to ASCII "equivalent" of Latin1 */
1823                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1824                }
1825                if (ch == '\n') {
1826                     *d++ = '\\';
1827                     *d++ = 'n';
1828                }
1829                else if (ch == '\r') {
1830                     *d++ = '\\';
1831                     *d++ = 'r';
1832                }
1833                else if (ch == '\f') {
1834                     *d++ = '\\';
1835                     *d++ = 'f';
1836                }
1837                else if (ch == '\\') {
1838                     *d++ = '\\';
1839                     *d++ = '\\';
1840                }
1841                else if (ch == '\0') {
1842                     *d++ = '\\';
1843                     *d++ = '0';
1844                }
1845                else if (isPRINT_LC(ch))
1846                     *d++ = ch;
1847                else {
1848                     *d++ = '^';
1849                     *d++ = toCTRL(ch);
1850                }
1851           }
1852           if (s < end) {
1853                *d++ = '.';
1854                *d++ = '.';
1855                *d++ = '.';
1856           }
1857           *d = '\0';
1858           pv = tmpbuf;
1859     }
1860
1861     return pv;
1862 }
1863
1864 /* Print an "isn't numeric" warning, using a cleaned-up,
1865  * printable version of the offending string
1866  */
1867
1868 STATIC void
1869 S_not_a_number(pTHX_ SV *const sv)
1870 {
1871      char tmpbuf[64];
1872      const char *pv;
1873
1874      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1875
1876      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1877
1878     if (PL_op)
1879         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1880                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1881                     "Argument \"%s\" isn't numeric in %s", pv,
1882                     OP_DESC(PL_op));
1883     else
1884         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1885                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1886                     "Argument \"%s\" isn't numeric", pv);
1887 }
1888
1889 STATIC void
1890 S_not_incrementable(pTHX_ SV *const sv) {
1891      char tmpbuf[64];
1892      const char *pv;
1893
1894      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1895
1896      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1897
1898      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1899                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1900 }
1901
1902 /*
1903 =for apidoc looks_like_number
1904
1905 Test if the content of an SV looks like a number (or is a number).
1906 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1907 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1908 ignored.
1909
1910 =cut
1911 */
1912
1913 I32
1914 Perl_looks_like_number(pTHX_ SV *const sv)
1915 {
1916     const char *sbegin;
1917     STRLEN len;
1918     int numtype;
1919
1920     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1921
1922     if (SvPOK(sv) || SvPOKp(sv)) {
1923         sbegin = SvPV_nomg_const(sv, len);
1924     }
1925     else
1926         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1927     numtype = grok_number(sbegin, len, NULL);
1928     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1929 }
1930
1931 STATIC bool
1932 S_glob_2number(pTHX_ GV * const gv)
1933 {
1934     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1935
1936     /* We know that all GVs stringify to something that is not-a-number,
1937         so no need to test that.  */
1938     if (ckWARN(WARN_NUMERIC))
1939     {
1940         SV *const buffer = sv_newmortal();
1941         gv_efullname3(buffer, gv, "*");
1942         not_a_number(buffer);
1943     }
1944     /* We just want something true to return, so that S_sv_2iuv_common
1945         can tail call us and return true.  */
1946     return TRUE;
1947 }
1948
1949 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1950    until proven guilty, assume that things are not that bad... */
1951
1952 /*
1953    NV_PRESERVES_UV:
1954
1955    As 64 bit platforms often have an NV that doesn't preserve all bits of
1956    an IV (an assumption perl has been based on to date) it becomes necessary
1957    to remove the assumption that the NV always carries enough precision to
1958    recreate the IV whenever needed, and that the NV is the canonical form.
1959    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1960    precision as a side effect of conversion (which would lead to insanity
1961    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1962    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1963       where precision was lost, and IV/UV/NV slots that have a valid conversion
1964       which has lost no precision
1965    2) to ensure that if a numeric conversion to one form is requested that
1966       would lose precision, the precise conversion (or differently
1967       imprecise conversion) is also performed and cached, to prevent
1968       requests for different numeric formats on the same SV causing
1969       lossy conversion chains. (lossless conversion chains are perfectly
1970       acceptable (still))
1971
1972
1973    flags are used:
1974    SvIOKp is true if the IV slot contains a valid value
1975    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1976    SvNOKp is true if the NV slot contains a valid value
1977    SvNOK  is true only if the NV value is accurate
1978
1979    so
1980    while converting from PV to NV, check to see if converting that NV to an
1981    IV(or UV) would lose accuracy over a direct conversion from PV to
1982    IV(or UV). If it would, cache both conversions, return NV, but mark
1983    SV as IOK NOKp (ie not NOK).
1984
1985    While converting from PV to IV, check to see if converting that IV to an
1986    NV would lose accuracy over a direct conversion from PV to NV. If it
1987    would, cache both conversions, flag similarly.
1988
1989    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1990    correctly because if IV & NV were set NV *always* overruled.
1991    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1992    changes - now IV and NV together means that the two are interchangeable:
1993    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1994
1995    The benefit of this is that operations such as pp_add know that if
1996    SvIOK is true for both left and right operands, then integer addition
1997    can be used instead of floating point (for cases where the result won't
1998    overflow). Before, floating point was always used, which could lead to
1999    loss of precision compared with integer addition.
2000
2001    * making IV and NV equal status should make maths accurate on 64 bit
2002      platforms
2003    * may speed up maths somewhat if pp_add and friends start to use
2004      integers when possible instead of fp. (Hopefully the overhead in
2005      looking for SvIOK and checking for overflow will not outweigh the
2006      fp to integer speedup)
2007    * will slow down integer operations (callers of SvIV) on "inaccurate"
2008      values, as the change from SvIOK to SvIOKp will cause a call into
2009      sv_2iv each time rather than a macro access direct to the IV slot
2010    * should speed up number->string conversion on integers as IV is
2011      favoured when IV and NV are equally accurate
2012
2013    ####################################################################
2014    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2015    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2016    On the other hand, SvUOK is true iff UV.
2017    ####################################################################
2018
2019    Your mileage will vary depending your CPU's relative fp to integer
2020    performance ratio.
2021 */
2022
2023 #ifndef NV_PRESERVES_UV
2024 #  define IS_NUMBER_UNDERFLOW_IV 1
2025 #  define IS_NUMBER_UNDERFLOW_UV 2
2026 #  define IS_NUMBER_IV_AND_UV    2
2027 #  define IS_NUMBER_OVERFLOW_IV  4
2028 #  define IS_NUMBER_OVERFLOW_UV  5
2029
2030 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2031
2032 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2033 STATIC int
2034 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2035 #  ifdef DEBUGGING
2036                        , I32 numtype
2037 #  endif
2038                        )
2039 {
2040     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2041     PERL_UNUSED_CONTEXT;
2042
2043     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));
2044     if (SvNVX(sv) < (NV)IV_MIN) {
2045         (void)SvIOKp_on(sv);
2046         (void)SvNOK_on(sv);
2047         SvIV_set(sv, IV_MIN);
2048         return IS_NUMBER_UNDERFLOW_IV;
2049     }
2050     if (SvNVX(sv) > (NV)UV_MAX) {
2051         (void)SvIOKp_on(sv);
2052         (void)SvNOK_on(sv);
2053         SvIsUV_on(sv);
2054         SvUV_set(sv, UV_MAX);
2055         return IS_NUMBER_OVERFLOW_UV;
2056     }
2057     (void)SvIOKp_on(sv);
2058     (void)SvNOK_on(sv);
2059     /* Can't use strtol etc to convert this string.  (See truth table in
2060        sv_2iv  */
2061     if (SvNVX(sv) <= (UV)IV_MAX) {
2062         SvIV_set(sv, I_V(SvNVX(sv)));
2063         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2064             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2065         } else {
2066             /* Integer is imprecise. NOK, IOKp */
2067         }
2068         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2069     }
2070     SvIsUV_on(sv);
2071     SvUV_set(sv, U_V(SvNVX(sv)));
2072     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2073         if (SvUVX(sv) == UV_MAX) {
2074             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2075                possibly be preserved by NV. Hence, it must be overflow.
2076                NOK, IOKp */
2077             return IS_NUMBER_OVERFLOW_UV;
2078         }
2079         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2080     } else {
2081         /* Integer is imprecise. NOK, IOKp */
2082     }
2083     return IS_NUMBER_OVERFLOW_IV;
2084 }
2085 #endif /* !NV_PRESERVES_UV*/
2086
2087 /* If numtype is infnan, set the NV of the sv accordingly.
2088  * If numtype is anything else, try setting the NV using Atof(PV). */
2089 static void
2090 S_sv_setnv(pTHX_ SV* sv, int numtype)
2091 {
2092     bool pok = cBOOL(SvPOK(sv));
2093     bool nok = FALSE;
2094 #ifdef NV_INF
2095     if ((numtype & IS_NUMBER_INFINITY)) {
2096         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2097         nok = TRUE;
2098     } else
2099 #endif
2100 #ifdef NV_NAN
2101     if ((numtype & IS_NUMBER_NAN)) {
2102         SvNV_set(sv, NV_NAN);
2103         nok = TRUE;
2104     } else
2105 #endif
2106     if (pok) {
2107         SvNV_set(sv, Atof(SvPVX_const(sv)));
2108         /* Purposefully no true nok here, since we don't want to blow
2109          * away the possible IOK/UV of an existing sv. */
2110     }
2111     if (nok) {
2112         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2113         if (pok)
2114             SvPOK_on(sv); /* PV is okay, though. */
2115     }
2116 }
2117
2118 STATIC bool
2119 S_sv_2iuv_common(pTHX_ SV *const sv)
2120 {
2121     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2122
2123     if (SvNOKp(sv)) {
2124         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2125          * without also getting a cached IV/UV from it at the same time
2126          * (ie PV->NV conversion should detect loss of accuracy and cache
2127          * IV or UV at same time to avoid this. */
2128         /* IV-over-UV optimisation - choose to cache IV if possible */
2129
2130         if (SvTYPE(sv) == SVt_NV)
2131             sv_upgrade(sv, SVt_PVNV);
2132
2133         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2134         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2135            certainly cast into the IV range at IV_MAX, whereas the correct
2136            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2137            cases go to UV */
2138 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2139         if (Perl_isnan(SvNVX(sv))) {
2140             SvUV_set(sv, 0);
2141             SvIsUV_on(sv);
2142             return FALSE;
2143         }
2144 #endif
2145         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2146             SvIV_set(sv, I_V(SvNVX(sv)));
2147             if (SvNVX(sv) == (NV) SvIVX(sv)
2148 #ifndef NV_PRESERVES_UV
2149                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2150                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2151                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2152                 /* Don't flag it as "accurately an integer" if the number
2153                    came from a (by definition imprecise) NV operation, and
2154                    we're outside the range of NV integer precision */
2155 #endif
2156                 ) {
2157                 if (SvNOK(sv))
2158                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2159                 else {
2160                     /* scalar has trailing garbage, eg "42a" */
2161                 }
2162                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2163                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2164                                       PTR2UV(sv),
2165                                       SvNVX(sv),
2166                                       SvIVX(sv)));
2167
2168             } else {
2169                 /* IV not precise.  No need to convert from PV, as NV
2170                    conversion would already have cached IV if it detected
2171                    that PV->IV would be better than PV->NV->IV
2172                    flags already correct - don't set public IOK.  */
2173                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2174                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2175                                       PTR2UV(sv),
2176                                       SvNVX(sv),
2177                                       SvIVX(sv)));
2178             }
2179             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2180                but the cast (NV)IV_MIN rounds to a the value less (more
2181                negative) than IV_MIN which happens to be equal to SvNVX ??
2182                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2183                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2184                (NV)UVX == NVX are both true, but the values differ. :-(
2185                Hopefully for 2s complement IV_MIN is something like
2186                0x8000000000000000 which will be exact. NWC */
2187         }
2188         else {
2189             SvUV_set(sv, U_V(SvNVX(sv)));
2190             if (
2191                 (SvNVX(sv) == (NV) SvUVX(sv))
2192 #ifndef  NV_PRESERVES_UV
2193                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2194                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2195                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2196                 /* Don't flag it as "accurately an integer" if the number
2197                    came from a (by definition imprecise) NV operation, and
2198                    we're outside the range of NV integer precision */
2199 #endif
2200                 && SvNOK(sv)
2201                 )
2202                 SvIOK_on(sv);
2203             SvIsUV_on(sv);
2204             DEBUG_c(PerlIO_printf(Perl_debug_log,
2205                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2206                                   PTR2UV(sv),
2207                                   SvUVX(sv),
2208                                   SvUVX(sv)));
2209         }
2210     }
2211     else if (SvPOKp(sv)) {
2212         UV value;
2213         int numtype;
2214         const char *s = SvPVX_const(sv);
2215         const STRLEN cur = SvCUR(sv);
2216
2217         /* short-cut for a single digit string like "1" */
2218
2219         if (cur == 1) {
2220             char c = *s;
2221             if (isDIGIT(c)) {
2222                 if (SvTYPE(sv) < SVt_PVIV)
2223                     sv_upgrade(sv, SVt_PVIV);
2224                 (void)SvIOK_on(sv);
2225                 SvIV_set(sv, (IV)(c - '0'));
2226                 return FALSE;
2227             }
2228         }
2229
2230         numtype = grok_number(s, cur, &value);
2231         /* We want to avoid a possible problem when we cache an IV/ a UV which
2232            may be later translated to an NV, and the resulting NV is not
2233            the same as the direct translation of the initial string
2234            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2235            be careful to ensure that the value with the .456 is around if the
2236            NV value is requested in the future).
2237         
2238            This means that if we cache such an IV/a UV, we need to cache the
2239            NV as well.  Moreover, we trade speed for space, and do not
2240            cache the NV if we are sure it's not needed.
2241          */
2242
2243         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2244         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2245              == IS_NUMBER_IN_UV) {
2246             /* It's definitely an integer, only upgrade to PVIV */
2247             if (SvTYPE(sv) < SVt_PVIV)
2248                 sv_upgrade(sv, SVt_PVIV);
2249             (void)SvIOK_on(sv);
2250         } else if (SvTYPE(sv) < SVt_PVNV)
2251             sv_upgrade(sv, SVt_PVNV);
2252
2253         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2254             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2255                 not_a_number(sv);
2256             S_sv_setnv(aTHX_ sv, numtype);
2257             return FALSE;
2258         }
2259
2260         /* If NVs preserve UVs then we only use the UV value if we know that
2261            we aren't going to call atof() below. If NVs don't preserve UVs
2262            then the value returned may have more precision than atof() will
2263            return, even though value isn't perfectly accurate.  */
2264         if ((numtype & (IS_NUMBER_IN_UV
2265 #ifdef NV_PRESERVES_UV
2266                         | IS_NUMBER_NOT_INT
2267 #endif
2268             )) == IS_NUMBER_IN_UV) {
2269             /* This won't turn off the public IOK flag if it was set above  */
2270             (void)SvIOKp_on(sv);
2271
2272             if (!(numtype & IS_NUMBER_NEG)) {
2273                 /* positive */;
2274                 if (value <= (UV)IV_MAX) {
2275                     SvIV_set(sv, (IV)value);
2276                 } else {
2277                     /* it didn't overflow, and it was positive. */
2278                     SvUV_set(sv, value);
2279                     SvIsUV_on(sv);
2280                 }
2281             } else {
2282                 /* 2s complement assumption  */
2283                 if (value <= (UV)IV_MIN) {
2284                     SvIV_set(sv, value == (UV)IV_MIN
2285                                     ? IV_MIN : -(IV)value);
2286                 } else {
2287                     /* Too negative for an IV.  This is a double upgrade, but
2288                        I'm assuming it will be rare.  */
2289                     if (SvTYPE(sv) < SVt_PVNV)
2290                         sv_upgrade(sv, SVt_PVNV);
2291                     SvNOK_on(sv);
2292                     SvIOK_off(sv);
2293                     SvIOKp_on(sv);
2294                     SvNV_set(sv, -(NV)value);
2295                     SvIV_set(sv, IV_MIN);
2296                 }
2297             }
2298         }
2299         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2300            will be in the previous block to set the IV slot, and the next
2301            block to set the NV slot.  So no else here.  */
2302         
2303         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2304             != IS_NUMBER_IN_UV) {
2305             /* It wasn't an (integer that doesn't overflow the UV). */
2306             S_sv_setnv(aTHX_ sv, numtype);
2307
2308             if (! numtype && ckWARN(WARN_NUMERIC))
2309                 not_a_number(sv);
2310
2311             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2312                                   PTR2UV(sv), SvNVX(sv)));
2313
2314 #ifdef NV_PRESERVES_UV
2315             (void)SvIOKp_on(sv);
2316             (void)SvNOK_on(sv);
2317 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2318             if (Perl_isnan(SvNVX(sv))) {
2319                 SvUV_set(sv, 0);
2320                 SvIsUV_on(sv);
2321                 return FALSE;
2322             }
2323 #endif
2324             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2325                 SvIV_set(sv, I_V(SvNVX(sv)));
2326                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2327                     SvIOK_on(sv);
2328                 } else {
2329                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2330                 }
2331                 /* UV will not work better than IV */
2332             } else {
2333                 if (SvNVX(sv) > (NV)UV_MAX) {
2334                     SvIsUV_on(sv);
2335                     /* Integer is inaccurate. NOK, IOKp, is UV */
2336                     SvUV_set(sv, UV_MAX);
2337                 } else {
2338                     SvUV_set(sv, U_V(SvNVX(sv)));
2339                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2340                        NV preservse UV so can do correct comparison.  */
2341                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2342                         SvIOK_on(sv);
2343                     } else {
2344                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2345                     }
2346                 }
2347                 SvIsUV_on(sv);
2348             }
2349 #else /* NV_PRESERVES_UV */
2350             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2351                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2352                 /* The IV/UV slot will have been set from value returned by
2353                    grok_number above.  The NV slot has just been set using
2354                    Atof.  */
2355                 SvNOK_on(sv);
2356                 assert (SvIOKp(sv));
2357             } else {
2358                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2359                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2360                     /* Small enough to preserve all bits. */
2361                     (void)SvIOKp_on(sv);
2362                     SvNOK_on(sv);
2363                     SvIV_set(sv, I_V(SvNVX(sv)));
2364                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2365                         SvIOK_on(sv);
2366                     /* Assumption: first non-preserved integer is < IV_MAX,
2367                        this NV is in the preserved range, therefore: */
2368                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2369                           < (UV)IV_MAX)) {
2370                         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);
2371                     }
2372                 } else {
2373                     /* IN_UV NOT_INT
2374                          0      0       already failed to read UV.
2375                          0      1       already failed to read UV.
2376                          1      0       you won't get here in this case. IV/UV
2377                                         slot set, public IOK, Atof() unneeded.
2378                          1      1       already read UV.
2379                        so there's no point in sv_2iuv_non_preserve() attempting
2380                        to use atol, strtol, strtoul etc.  */
2381 #  ifdef DEBUGGING
2382                     sv_2iuv_non_preserve (sv, numtype);
2383 #  else
2384                     sv_2iuv_non_preserve (sv);
2385 #  endif
2386                 }
2387             }
2388 #endif /* NV_PRESERVES_UV */
2389         /* It might be more code efficient to go through the entire logic above
2390            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2391            gets complex and potentially buggy, so more programmer efficient
2392            to do it this way, by turning off the public flags:  */
2393         if (!numtype)
2394             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2395         }
2396     }
2397     else  {
2398         if (isGV_with_GP(sv))
2399             return glob_2number(MUTABLE_GV(sv));
2400
2401         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2402                 report_uninit(sv);
2403         if (SvTYPE(sv) < SVt_IV)
2404             /* Typically the caller expects that sv_any is not NULL now.  */
2405             sv_upgrade(sv, SVt_IV);
2406         /* Return 0 from the caller.  */
2407         return TRUE;
2408     }
2409     return FALSE;
2410 }
2411
2412 /*
2413 =for apidoc sv_2iv_flags
2414
2415 Return the integer value of an SV, doing any necessary string
2416 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2417 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2418
2419 =cut
2420 */
2421
2422 IV
2423 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2424 {
2425     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2426
2427     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2428          && SvTYPE(sv) != SVt_PVFM);
2429
2430     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2431         mg_get(sv);
2432
2433     if (SvROK(sv)) {
2434         if (SvAMAGIC(sv)) {
2435             SV * tmpstr;
2436             if (flags & SV_SKIP_OVERLOAD)
2437                 return 0;
2438             tmpstr = AMG_CALLunary(sv, numer_amg);
2439             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2440                 return SvIV(tmpstr);
2441             }
2442         }
2443         return PTR2IV(SvRV(sv));
2444     }
2445
2446     if (SvVALID(sv) || isREGEXP(sv)) {
2447         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2448            must not let them cache IVs.
2449            In practice they are extremely unlikely to actually get anywhere
2450            accessible by user Perl code - the only way that I'm aware of is when
2451            a constant subroutine which is used as the second argument to index.
2452
2453            Regexps have no SvIVX and SvNVX fields.
2454         */
2455         assert(SvPOKp(sv));
2456         {
2457             UV value;
2458             const char * const ptr =
2459                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2460             const int numtype
2461                 = grok_number(ptr, SvCUR(sv), &value);
2462
2463             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2464                 == IS_NUMBER_IN_UV) {
2465                 /* It's definitely an integer */
2466                 if (numtype & IS_NUMBER_NEG) {
2467                     if (value < (UV)IV_MIN)
2468                         return -(IV)value;
2469                 } else {
2470                     if (value < (UV)IV_MAX)
2471                         return (IV)value;
2472                 }
2473             }
2474
2475             /* Quite wrong but no good choices. */
2476             if ((numtype & IS_NUMBER_INFINITY)) {
2477                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2478             } else if ((numtype & IS_NUMBER_NAN)) {
2479                 return 0; /* So wrong. */
2480             }
2481
2482             if (!numtype) {
2483                 if (ckWARN(WARN_NUMERIC))
2484                     not_a_number(sv);
2485             }
2486             return I_V(Atof(ptr));
2487         }
2488     }
2489
2490     if (SvTHINKFIRST(sv)) {
2491         if (SvREADONLY(sv) && !SvOK(sv)) {
2492             if (ckWARN(WARN_UNINITIALIZED))
2493                 report_uninit(sv);
2494             return 0;
2495         }
2496     }
2497
2498     if (!SvIOKp(sv)) {
2499         if (S_sv_2iuv_common(aTHX_ sv))
2500             return 0;
2501     }
2502
2503     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2504         PTR2UV(sv),SvIVX(sv)));
2505     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2506 }
2507
2508 /*
2509 =for apidoc sv_2uv_flags
2510
2511 Return the unsigned integer value of an SV, doing any necessary string
2512 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2513 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2514
2515 =for apidoc Amnh||SV_GMAGIC
2516
2517 =cut
2518 */
2519
2520 UV
2521 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2522 {
2523     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2524
2525     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2526         mg_get(sv);
2527
2528     if (SvROK(sv)) {
2529         if (SvAMAGIC(sv)) {
2530             SV *tmpstr;
2531             if (flags & SV_SKIP_OVERLOAD)
2532                 return 0;
2533             tmpstr = AMG_CALLunary(sv, numer_amg);
2534             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2535                 return SvUV(tmpstr);
2536             }
2537         }
2538         return PTR2UV(SvRV(sv));
2539     }
2540
2541     if (SvVALID(sv) || isREGEXP(sv)) {
2542         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2543            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2544            Regexps have no SvIVX and SvNVX fields. */
2545         assert(SvPOKp(sv));
2546         {
2547             UV value;
2548             const char * const ptr =
2549                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2550             const int numtype
2551                 = grok_number(ptr, SvCUR(sv), &value);
2552
2553             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2554                 == IS_NUMBER_IN_UV) {
2555                 /* It's definitely an integer */
2556                 if (!(numtype & IS_NUMBER_NEG))
2557                     return value;
2558             }
2559
2560             /* Quite wrong but no good choices. */
2561             if ((numtype & IS_NUMBER_INFINITY)) {
2562                 return UV_MAX; /* So wrong. */
2563             } else if ((numtype & IS_NUMBER_NAN)) {
2564                 return 0; /* So wrong. */
2565             }
2566
2567             if (!numtype) {
2568                 if (ckWARN(WARN_NUMERIC))
2569                     not_a_number(sv);
2570             }
2571             return U_V(Atof(ptr));
2572         }
2573     }
2574
2575     if (SvTHINKFIRST(sv)) {
2576         if (SvREADONLY(sv) && !SvOK(sv)) {
2577             if (ckWARN(WARN_UNINITIALIZED))
2578                 report_uninit(sv);
2579             return 0;
2580         }
2581     }
2582
2583     if (!SvIOKp(sv)) {
2584         if (S_sv_2iuv_common(aTHX_ sv))
2585             return 0;
2586     }
2587
2588     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2589                           PTR2UV(sv),SvUVX(sv)));
2590     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2591 }
2592
2593 /*
2594 =for apidoc sv_2nv_flags
2595
2596 Return the num value of an SV, doing any necessary string or integer
2597 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2598 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2599
2600 =cut
2601 */
2602
2603 NV
2604 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2605 {
2606     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2607
2608     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2609          && SvTYPE(sv) != SVt_PVFM);
2610     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2611         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2612            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2613            Regexps have no SvIVX and SvNVX fields.  */
2614         const char *ptr;
2615         if (flags & SV_GMAGIC)
2616             mg_get(sv);
2617         if (SvNOKp(sv))
2618             return SvNVX(sv);
2619         if (SvPOKp(sv) && !SvIOKp(sv)) {
2620             ptr = SvPVX_const(sv);
2621             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2622                 !grok_number(ptr, SvCUR(sv), NULL))
2623                 not_a_number(sv);
2624             return Atof(ptr);
2625         }
2626         if (SvIOKp(sv)) {
2627             if (SvIsUV(sv))
2628                 return (NV)SvUVX(sv);
2629             else
2630                 return (NV)SvIVX(sv);
2631         }
2632         if (SvROK(sv)) {
2633             goto return_rok;
2634         }
2635         assert(SvTYPE(sv) >= SVt_PVMG);
2636         /* This falls through to the report_uninit near the end of the
2637            function. */
2638     } else if (SvTHINKFIRST(sv)) {
2639         if (SvROK(sv)) {
2640         return_rok:
2641             if (SvAMAGIC(sv)) {
2642                 SV *tmpstr;
2643                 if (flags & SV_SKIP_OVERLOAD)
2644                     return 0;
2645                 tmpstr = AMG_CALLunary(sv, numer_amg);
2646                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2647                     return SvNV(tmpstr);
2648                 }
2649             }
2650             return PTR2NV(SvRV(sv));
2651         }
2652         if (SvREADONLY(sv) && !SvOK(sv)) {
2653             if (ckWARN(WARN_UNINITIALIZED))
2654                 report_uninit(sv);
2655             return 0.0;
2656         }
2657     }
2658     if (SvTYPE(sv) < SVt_NV) {
2659         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2660         sv_upgrade(sv, SVt_NV);
2661         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2662         DEBUG_c({
2663             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2664             STORE_LC_NUMERIC_SET_STANDARD();
2665             PerlIO_printf(Perl_debug_log,
2666                           "0x%" UVxf " num(%" NVgf ")\n",
2667                           PTR2UV(sv), SvNVX(sv));
2668             RESTORE_LC_NUMERIC();
2669         });
2670         CLANG_DIAG_RESTORE_STMT;
2671
2672     }
2673     else if (SvTYPE(sv) < SVt_PVNV)
2674         sv_upgrade(sv, SVt_PVNV);
2675     if (SvNOKp(sv)) {
2676         return SvNVX(sv);
2677     }
2678     if (SvIOKp(sv)) {
2679         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2680 #ifdef NV_PRESERVES_UV
2681         if (SvIOK(sv))
2682             SvNOK_on(sv);
2683         else
2684             SvNOKp_on(sv);
2685 #else
2686         /* Only set the public NV OK flag if this NV preserves the IV  */
2687         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2688         if (SvIOK(sv) &&
2689             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2690                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2691             SvNOK_on(sv);
2692         else
2693             SvNOKp_on(sv);
2694 #endif
2695     }
2696     else if (SvPOKp(sv)) {
2697         UV value;
2698         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2699         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2700             not_a_number(sv);
2701 #ifdef NV_PRESERVES_UV
2702         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2703             == IS_NUMBER_IN_UV) {
2704             /* It's definitely an integer */
2705             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2706         } else {
2707             S_sv_setnv(aTHX_ sv, numtype);
2708         }
2709         if (numtype)
2710             SvNOK_on(sv);
2711         else
2712             SvNOKp_on(sv);
2713 #else
2714         SvNV_set(sv, Atof(SvPVX_const(sv)));
2715         /* Only set the public NV OK flag if this NV preserves the value in
2716            the PV at least as well as an IV/UV would.
2717            Not sure how to do this 100% reliably. */
2718         /* if that shift count is out of range then Configure's test is
2719            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2720            UV_BITS */
2721         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2722             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2723             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2724         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2725             /* Can't use strtol etc to convert this string, so don't try.
2726                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2727             SvNOK_on(sv);
2728         } else {
2729             /* value has been set.  It may not be precise.  */
2730             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2731                 /* 2s complement assumption for (UV)IV_MIN  */
2732                 SvNOK_on(sv); /* Integer is too negative.  */
2733             } else {
2734                 SvNOKp_on(sv);
2735                 SvIOKp_on(sv);
2736
2737                 if (numtype & IS_NUMBER_NEG) {
2738                     /* -IV_MIN is undefined, but we should never reach
2739                      * this point with both IS_NUMBER_NEG and value ==
2740                      * (UV)IV_MIN */
2741                     assert(value != (UV)IV_MIN);
2742                     SvIV_set(sv, -(IV)value);
2743                 } else if (value <= (UV)IV_MAX) {
2744                     SvIV_set(sv, (IV)value);
2745                 } else {
2746                     SvUV_set(sv, value);
2747                     SvIsUV_on(sv);
2748                 }
2749
2750                 if (numtype & IS_NUMBER_NOT_INT) {
2751                     /* I believe that even if the original PV had decimals,
2752                        they are lost beyond the limit of the FP precision.
2753                        However, neither is canonical, so both only get p
2754                        flags.  NWC, 2000/11/25 */
2755                     /* Both already have p flags, so do nothing */
2756                 } else {
2757                     const NV nv = SvNVX(sv);
2758                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2759                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2760                         if (SvIVX(sv) == I_V(nv)) {
2761                             SvNOK_on(sv);
2762                         } else {
2763                             /* It had no "." so it must be integer.  */
2764                         }
2765                         SvIOK_on(sv);
2766                     } else {
2767                         /* between IV_MAX and NV(UV_MAX).
2768                            Could be slightly > UV_MAX */
2769
2770                         if (numtype & IS_NUMBER_NOT_INT) {
2771                             /* UV and NV both imprecise.  */
2772                         } else {
2773                             const UV nv_as_uv = U_V(nv);
2774
2775                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2776                                 SvNOK_on(sv);
2777                             }
2778                             SvIOK_on(sv);
2779                         }
2780                     }
2781                 }
2782             }
2783         }
2784         /* It might be more code efficient to go through the entire logic above
2785            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2786            gets complex and potentially buggy, so more programmer efficient
2787            to do it this way, by turning off the public flags:  */
2788         if (!numtype)
2789             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2790 #endif /* NV_PRESERVES_UV */
2791     }
2792     else  {
2793         if (isGV_with_GP(sv)) {
2794             glob_2number(MUTABLE_GV(sv));
2795             return 0.0;
2796         }
2797
2798         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2799             report_uninit(sv);
2800         assert (SvTYPE(sv) >= SVt_NV);
2801         /* Typically the caller expects that sv_any is not NULL now.  */
2802         /* XXX Ilya implies that this is a bug in callers that assume this
2803            and ideally should be fixed.  */
2804         return 0.0;
2805     }
2806     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2807     DEBUG_c({
2808         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2809         STORE_LC_NUMERIC_SET_STANDARD();
2810         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2811                       PTR2UV(sv), SvNVX(sv));
2812         RESTORE_LC_NUMERIC();
2813     });
2814     CLANG_DIAG_RESTORE_STMT;
2815     return SvNVX(sv);
2816 }
2817
2818 /*
2819 =for apidoc sv_2num
2820
2821 Return an SV with the numeric value of the source SV, doing any necessary
2822 reference or overload conversion.  The caller is expected to have handled
2823 get-magic already.
2824
2825 =cut
2826 */
2827
2828 SV *
2829 Perl_sv_2num(pTHX_ SV *const sv)
2830 {
2831     PERL_ARGS_ASSERT_SV_2NUM;
2832
2833     if (!SvROK(sv))
2834         return sv;
2835     if (SvAMAGIC(sv)) {
2836         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2837         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2838         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2839             return sv_2num(tmpsv);
2840     }
2841     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2842 }
2843
2844 /* int2str_table: lookup table containing string representations of all
2845  * two digit numbers. For example, int2str_table.arr[0] is "00" and
2846  * int2str_table.arr[12*2] is "12".
2847  *
2848  * We are going to read two bytes at a time, so we have to ensure that
2849  * the array is aligned to a 2 byte boundary. That's why it was made a
2850  * union with a dummy U16 member. */
2851 static const union {
2852     char arr[200];
2853     U16 dummy;
2854 } int2str_table = {{
2855     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6',
2856     '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3',
2857     '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0',
2858     '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7',
2859     '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
2860     '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1',
2861     '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8',
2862     '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5',
2863     '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2',
2864     '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
2865     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6',
2866     '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3',
2867     '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0',
2868     '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7',
2869     '9', '8', '9', '9'
2870 }};
2871
2872 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2873  * UV as a string towards the end of buf, and return pointers to start and
2874  * end of it.
2875  *
2876  * We assume that buf is at least TYPE_CHARS(UV) long.
2877  */
2878
2879 PERL_STATIC_INLINE char *
2880 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2881 {
2882     char *ptr = buf + TYPE_CHARS(UV);
2883     char * const ebuf = ptr;
2884     int sign;
2885     U16 *word_ptr, *word_table;
2886
2887     PERL_ARGS_ASSERT_UIV_2BUF;
2888
2889     /* ptr has to be properly aligned, because we will cast it to U16* */
2890     assert(PTR2nat(ptr) % 2 == 0);
2891     /* we are going to read/write two bytes at a time */
2892     word_ptr = (U16*)ptr;
2893     word_table = (U16*)int2str_table.arr;
2894
2895     if (UNLIKELY(is_uv))
2896         sign = 0;
2897     else if (iv >= 0) {
2898         uv = iv;
2899         sign = 0;
2900     } else {
2901         /* Using 0- here to silence bogus warning from MS VC */
2902         uv = (UV) (0 - (UV) iv);
2903         sign = 1;
2904     }
2905
2906     while (uv > 99) {
2907         *--word_ptr = word_table[uv % 100];
2908         uv /= 100;
2909     }
2910     ptr = (char*)word_ptr;
2911
2912     if (uv < 10)
2913         *--ptr = (char)uv + '0';
2914     else {
2915         *--word_ptr = word_table[uv];
2916         ptr = (char*)word_ptr;
2917     }
2918
2919     if (sign)
2920         *--ptr = '-';
2921
2922     *peob = ebuf;
2923     return ptr;
2924 }
2925
2926 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2927  * infinity or a not-a-number, writes the appropriate strings to the
2928  * buffer, including a zero byte.  On success returns the written length,
2929  * excluding the zero byte, on failure (not an infinity, not a nan)
2930  * returns zero, assert-fails on maxlen being too short.
2931  *
2932  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2933  * shared string constants we point to, instead of generating a new
2934  * string for each instance. */
2935 STATIC size_t
2936 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2937     char* s = buffer;
2938     assert(maxlen >= 4);
2939     if (Perl_isinf(nv)) {
2940         if (nv < 0) {
2941             if (maxlen < 5) /* "-Inf\0"  */
2942                 return 0;
2943             *s++ = '-';
2944         } else if (plus) {
2945             *s++ = '+';
2946         }
2947         *s++ = 'I';
2948         *s++ = 'n';
2949         *s++ = 'f';
2950     }
2951     else if (Perl_isnan(nv)) {
2952         *s++ = 'N';
2953         *s++ = 'a';
2954         *s++ = 'N';
2955         /* XXX optionally output the payload mantissa bits as
2956          * "(unsigned)" (to match the nan("...") C99 function,
2957          * or maybe as "(0xhhh...)"  would make more sense...
2958          * provide a format string so that the user can decide?
2959          * NOTE: would affect the maxlen and assert() logic.*/
2960     }
2961     else {
2962       return 0;
2963     }
2964     assert((s == buffer + 3) || (s == buffer + 4));
2965     *s = 0;
2966     return s - buffer;
2967 }
2968
2969 /*
2970 =for apidoc sv_2pv_flags
2971
2972 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2973 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2974 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2975 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2976
2977 =cut
2978 */
2979
2980 char *
2981 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2982 {
2983     char *s;
2984
2985     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2986
2987     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2988          && SvTYPE(sv) != SVt_PVFM);
2989     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2990         mg_get(sv);
2991     if (SvROK(sv)) {
2992         if (SvAMAGIC(sv)) {
2993             SV *tmpstr;
2994             if (flags & SV_SKIP_OVERLOAD)
2995                 return NULL;
2996             tmpstr = AMG_CALLunary(sv, string_amg);
2997             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2998             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2999                 /* Unwrap this:  */
3000                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3001                  */
3002
3003                 char *pv;
3004                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3005                     if (flags & SV_CONST_RETURN) {
3006                         pv = (char *) SvPVX_const(tmpstr);
3007                     } else {
3008                         pv = (flags & SV_MUTABLE_RETURN)
3009                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3010                     }
3011                     if (lp)
3012                         *lp = SvCUR(tmpstr);
3013                 } else {
3014                     pv = sv_2pv_flags(tmpstr, lp, flags);
3015                 }
3016                 if (SvUTF8(tmpstr))
3017                     SvUTF8_on(sv);
3018                 else
3019                     SvUTF8_off(sv);
3020                 return pv;
3021             }
3022         }
3023         {
3024             STRLEN len;
3025             char *retval;
3026             char *buffer;
3027             SV *const referent = SvRV(sv);
3028
3029             if (!referent) {
3030                 len = 7;
3031                 retval = buffer = savepvn("NULLREF", len);
3032             } else if (SvTYPE(referent) == SVt_REGEXP &&
3033                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3034                         amagic_is_enabled(string_amg))) {
3035                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3036
3037                 assert(re);
3038                         
3039                 /* If the regex is UTF-8 we want the containing scalar to
3040                    have an UTF-8 flag too */
3041                 if (RX_UTF8(re))
3042                     SvUTF8_on(sv);
3043                 else
3044                     SvUTF8_off(sv);     
3045
3046                 if (lp)
3047                     *lp = RX_WRAPLEN(re);
3048  
3049                 return RX_WRAPPED(re);
3050             } else {
3051                 const char *const typestr = sv_reftype(referent, 0);
3052                 const STRLEN typelen = strlen(typestr);
3053                 UV addr = PTR2UV(referent);
3054                 const char *stashname = NULL;
3055                 STRLEN stashnamelen = 0; /* hush, gcc */
3056                 const char *buffer_end;
3057
3058                 if (SvOBJECT(referent)) {
3059                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3060
3061                     if (name) {
3062                         stashname = HEK_KEY(name);
3063                         stashnamelen = HEK_LEN(name);
3064
3065                         if (HEK_UTF8(name)) {
3066                             SvUTF8_on(sv);
3067                         } else {
3068                             SvUTF8_off(sv);
3069                         }
3070                     } else {
3071                         stashname = "__ANON__";
3072                         stashnamelen = 8;
3073                     }
3074                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3075                         + 2 * sizeof(UV) + 2 /* )\0 */;
3076                 } else {
3077                     len = typelen + 3 /* (0x */
3078                         + 2 * sizeof(UV) + 2 /* )\0 */;
3079                 }
3080
3081                 Newx(buffer, len, char);
3082                 buffer_end = retval = buffer + len;
3083
3084                 /* Working backwards  */
3085                 *--retval = '\0';
3086                 *--retval = ')';
3087                 do {
3088                     *--retval = PL_hexdigit[addr & 15];
3089                 } while (addr >>= 4);
3090                 *--retval = 'x';
3091                 *--retval = '0';
3092                 *--retval = '(';
3093
3094                 retval -= typelen;
3095                 memcpy(retval, typestr, typelen);
3096
3097                 if (stashname) {
3098                     *--retval = '=';
3099                     retval -= stashnamelen;
3100                     memcpy(retval, stashname, stashnamelen);
3101                 }
3102                 /* retval may not necessarily have reached the start of the
3103                    buffer here.  */
3104                 assert (retval >= buffer);
3105
3106                 len = buffer_end - retval - 1; /* -1 for that \0  */
3107             }
3108             if (lp)
3109                 *lp = len;
3110             SAVEFREEPV(buffer);
3111             return retval;
3112         }
3113     }
3114
3115     if (SvPOKp(sv)) {
3116         if (lp)
3117             *lp = SvCUR(sv);
3118         if (flags & SV_MUTABLE_RETURN)
3119             return SvPVX_mutable(sv);
3120         if (flags & SV_CONST_RETURN)
3121             return (char *)SvPVX_const(sv);
3122         return SvPVX(sv);
3123     }
3124
3125     if (SvIOK(sv)) {
3126         /* I'm assuming that if both IV and NV are equally valid then
3127            converting the IV is going to be more efficient */
3128         const U32 isUIOK = SvIsUV(sv);
3129         /* The purpose of this union is to ensure that arr is aligned on
3130            a 2 byte boundary, because that is what uiv_2buf() requires */
3131         union {
3132             char arr[TYPE_CHARS(UV)];
3133             U16 dummy;
3134         } buf;
3135         char *ebuf, *ptr;
3136         STRLEN len;
3137
3138         if (SvTYPE(sv) < SVt_PVIV)
3139             sv_upgrade(sv, SVt_PVIV);
3140         ptr = uiv_2buf(buf.arr, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3141         len = ebuf - ptr;
3142         /* inlined from sv_setpvn */
3143         s = SvGROW_mutable(sv, len + 1);
3144         Move(ptr, s, len, char);
3145         s += len;
3146         *s = '\0';
3147         SvPOK_on(sv);
3148     }
3149     else if (SvNOK(sv)) {
3150         if (SvTYPE(sv) < SVt_PVNV)
3151             sv_upgrade(sv, SVt_PVNV);
3152         if (SvNVX(sv) == 0.0
3153 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3154             && !Perl_isnan(SvNVX(sv))
3155 #endif
3156         ) {
3157             s = SvGROW_mutable(sv, 2);
3158             *s++ = '0';
3159             *s = '\0';
3160         } else {
3161             STRLEN len;
3162             STRLEN size = 5; /* "-Inf\0" */
3163
3164             s = SvGROW_mutable(sv, size);
3165             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3166             if (len > 0) {
3167                 s += len;
3168                 SvPOK_on(sv);
3169             }
3170             else {
3171                 /* some Xenix systems wipe out errno here */
3172                 dSAVE_ERRNO;
3173
3174                 size =
3175                     1 + /* sign */
3176                     1 + /* "." */
3177                     NV_DIG +
3178                     1 + /* "e" */
3179                     1 + /* sign */
3180                     5 + /* exponent digits */
3181                     1 + /* \0 */
3182                     2; /* paranoia */
3183
3184                 s = SvGROW_mutable(sv, size);
3185 #ifndef USE_LOCALE_NUMERIC
3186                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3187
3188                 SvPOK_on(sv);
3189 #else
3190                 {
3191                     bool local_radix;
3192                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3193                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3194
3195                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3196                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3197                         size += SvCUR(PL_numeric_radix_sv) - 1;
3198                         s = SvGROW_mutable(sv, size);
3199                     }
3200
3201                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3202
3203                     /* If the radix character is UTF-8, and actually is in the
3204                      * output, turn on the UTF-8 flag for the scalar */
3205                     if (   local_radix
3206                         && SvUTF8(PL_numeric_radix_sv)
3207                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3208                     {
3209                         SvUTF8_on(sv);
3210                     }
3211
3212                     RESTORE_LC_NUMERIC();
3213                 }
3214
3215                 /* We don't call SvPOK_on(), because it may come to
3216                  * pass that the locale changes so that the
3217                  * stringification we just did is no longer correct.  We
3218                  * will have to re-stringify every time it is needed */
3219 #endif
3220                 RESTORE_ERRNO;
3221             }
3222             while (*s) s++;
3223         }
3224     }
3225     else if (isGV_with_GP(sv)) {
3226         GV *const gv = MUTABLE_GV(sv);
3227         SV *const buffer = sv_newmortal();
3228
3229         gv_efullname3(buffer, gv, "*");
3230
3231         assert(SvPOK(buffer));
3232         if (SvUTF8(buffer))
3233             SvUTF8_on(sv);
3234         else
3235             SvUTF8_off(sv);
3236         if (lp)
3237             *lp = SvCUR(buffer);
3238         return SvPVX(buffer);
3239     }
3240     else {
3241         if (lp)
3242             *lp = 0;
3243         if (flags & SV_UNDEF_RETURNS_NULL)
3244             return NULL;
3245         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3246             report_uninit(sv);
3247         /* Typically the caller expects that sv_any is not NULL now.  */
3248         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3249             sv_upgrade(sv, SVt_PV);
3250         return (char *)"";
3251     }
3252
3253     {
3254         const STRLEN len = s - SvPVX_const(sv);
3255         if (lp) 
3256             *lp = len;
3257         SvCUR_set(sv, len);
3258     }
3259     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3260                           PTR2UV(sv),SvPVX_const(sv)));
3261     if (flags & SV_CONST_RETURN)
3262         return (char *)SvPVX_const(sv);
3263     if (flags & SV_MUTABLE_RETURN)
3264         return SvPVX_mutable(sv);
3265     return SvPVX(sv);
3266 }
3267
3268 /*
3269 =for apidoc sv_copypv
3270
3271 Copies a stringified representation of the source SV into the
3272 destination SV.  Automatically performs any necessary C<mg_get> and
3273 coercion of numeric values into strings.  Guaranteed to preserve
3274 C<UTF8> flag even from overloaded objects.  Similar in nature to
3275 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3276 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3277 would lose the UTF-8'ness of the PV.
3278
3279 =for apidoc sv_copypv_nomg
3280
3281 Like C<sv_copypv>, but doesn't invoke get magic first.
3282
3283 =for apidoc sv_copypv_flags
3284
3285 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3286 has the C<SV_GMAGIC> bit set.
3287
3288 =cut
3289 */
3290
3291 void
3292 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3293 {
3294     STRLEN len;
3295     const char *s;
3296
3297     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3298
3299     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3300     sv_setpvn(dsv,s,len);
3301     if (SvUTF8(ssv))
3302         SvUTF8_on(dsv);
3303     else
3304         SvUTF8_off(dsv);
3305 }
3306
3307 /*
3308 =for apidoc sv_2pvbyte
3309
3310 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3311 to its length.  If the SV is marked as being encoded as UTF-8, it will
3312 downgrade it to a byte string as a side-effect, if possible.  If the SV cannot
3313 be downgraded, this croaks.
3314
3315 Usually accessed via the C<SvPVbyte> macro.
3316
3317 =cut
3318 */
3319
3320 char *
3321 Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3322 {
3323     PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
3324
3325     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3326         mg_get(sv);
3327     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3328      || isGV_with_GP(sv) || SvROK(sv)) {
3329         SV *sv2 = sv_newmortal();
3330         sv_copypv_nomg(sv2,sv);
3331         sv = sv2;
3332     }
3333     sv_utf8_downgrade_nomg(sv,0);
3334     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3335 }
3336
3337 /*
3338 =for apidoc sv_2pvutf8
3339
3340 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3341 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3342
3343 Usually accessed via the C<SvPVutf8> macro.
3344
3345 =cut
3346 */
3347
3348 char *
3349 Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3350 {
3351     PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
3352
3353     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3354         mg_get(sv);
3355     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3356      || isGV_with_GP(sv) || SvROK(sv)) {
3357         SV *sv2 = sv_newmortal();
3358         sv_copypv_nomg(sv2,sv);
3359         sv = sv2;
3360     }
3361     sv_utf8_upgrade_nomg(sv);
3362     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3363 }
3364
3365
3366 /*
3367 =for apidoc sv_2bool
3368
3369 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3370 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3371 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3372
3373 =for apidoc sv_2bool_flags
3374
3375 This function is only used by C<sv_true()> and friends,  and only if
3376 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3377 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3378
3379
3380 =cut
3381 */
3382
3383 bool
3384 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3385 {
3386     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3387
3388     restart:
3389     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3390
3391     if (!SvOK(sv))
3392         return 0;
3393     if (SvROK(sv)) {
3394         if (SvAMAGIC(sv)) {
3395             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3396             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3397                 bool svb;
3398                 sv = tmpsv;
3399                 if(SvGMAGICAL(sv)) {
3400                     flags = SV_GMAGIC;
3401                     goto restart; /* call sv_2bool */
3402                 }
3403                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3404                 else if(!SvOK(sv)) {
3405                     svb = 0;
3406                 }
3407                 else if(SvPOK(sv)) {
3408                     svb = SvPVXtrue(sv);
3409                 }
3410                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3411                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3412                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3413                 }
3414                 else {
3415                     flags = 0;
3416                     goto restart; /* call sv_2bool_nomg */
3417                 }
3418                 return cBOOL(svb);
3419             }
3420         }
3421         assert(SvRV(sv));
3422         return TRUE;
3423     }
3424     if (isREGEXP(sv))
3425         return
3426           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3427
3428     if (SvNOK(sv) && !SvPOK(sv))
3429         return SvNVX(sv) != 0.0;
3430
3431     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3432 }
3433
3434 /*
3435 =for apidoc sv_utf8_upgrade
3436
3437 Converts the PV of an SV to its UTF-8-encoded form.
3438 Forces the SV to string form if it is not already.
3439 Will C<mg_get> on C<sv> if appropriate.
3440 Always sets the C<SvUTF8> flag to avoid future validity checks even
3441 if the whole string is the same in UTF-8 as not.
3442 Returns the number of bytes in the converted string
3443
3444 This is not a general purpose byte encoding to Unicode interface:
3445 use the Encode extension for that.
3446
3447 =for apidoc sv_utf8_upgrade_nomg
3448
3449 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3450
3451 =for apidoc sv_utf8_upgrade_flags
3452
3453 Converts the PV of an SV to its UTF-8-encoded form.
3454 Forces the SV to string form if it is not already.
3455 Always sets the SvUTF8 flag to avoid future validity checks even
3456 if all the bytes are invariant in UTF-8.
3457 If C<flags> has C<SV_GMAGIC> bit set,
3458 will C<mg_get> on C<sv> if appropriate, else not.
3459
3460 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3461
3462 Returns the number of bytes in the converted string.
3463
3464 This is not a general purpose byte encoding to Unicode interface:
3465 use the Encode extension for that.
3466
3467 =for apidoc sv_utf8_upgrade_flags_grow
3468
3469 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3470 the number of unused bytes the string of C<sv> is guaranteed to have free after
3471 it upon return.  This allows the caller to reserve extra space that it intends
3472 to fill, to avoid extra grows.
3473
3474 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3475 are implemented in terms of this function.
3476
3477 Returns the number of bytes in the converted string (not including the spares).
3478
3479 =cut
3480
3481 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3482 C<NUL> isn't guaranteed due to having other routines do the work in some input
3483 cases, or if the input is already flagged as being in utf8.
3484
3485 */
3486
3487 STRLEN
3488 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3489 {
3490     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3491
3492     if (sv == &PL_sv_undef)
3493         return 0;
3494     if (!SvPOK_nog(sv)) {
3495         STRLEN len = 0;
3496         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3497             (void) sv_2pv_flags(sv,&len, flags);
3498             if (SvUTF8(sv)) {
3499                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3500                 return len;
3501             }
3502         } else {
3503             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3504         }
3505     }
3506
3507     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3508      * compiled and individual nodes will remain non-utf8 even if the
3509      * stringified version of the pattern gets upgraded. Whether the
3510      * PVX of a REGEXP should be grown or we should just croak, I don't
3511      * know - DAPM */
3512     if (SvUTF8(sv) || isREGEXP(sv)) {
3513         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3514         return SvCUR(sv);
3515     }
3516
3517     if (SvIsCOW(sv)) {
3518         S_sv_uncow(aTHX_ sv, 0);
3519     }
3520
3521     if (SvCUR(sv) == 0) {
3522         if (extra) SvGROW(sv, extra + 1); /* Make sure is room for a trailing
3523                                              byte */
3524     } else { /* Assume Latin-1/EBCDIC */
3525         /* This function could be much more efficient if we
3526          * had a FLAG in SVs to signal if there are any variant
3527          * chars in the PV.  Given that there isn't such a flag
3528          * make the loop as fast as possible. */
3529         U8 * s = (U8 *) SvPVX_const(sv);
3530         U8 *t = s;
3531         
3532         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3533
3534             /* utf8 conversion not needed because all are invariants.  Mark
3535              * as UTF-8 even if no variant - saves scanning loop */
3536             SvUTF8_on(sv);
3537             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3538             return SvCUR(sv);
3539         }
3540
3541         /* Here, there is at least one variant (t points to the first one), so
3542          * the string should be converted to utf8.  Everything from 's' to
3543          * 't - 1' will occupy only 1 byte each on output.
3544          *
3545          * Note that the incoming SV may not have a trailing '\0', as certain
3546          * code in pp_formline can send us partially built SVs.
3547          *
3548          * There are two main ways to convert.  One is to create a new string
3549          * and go through the input starting from the beginning, appending each
3550          * converted value onto the new string as we go along.  Going this
3551          * route, it's probably best to initially allocate enough space in the
3552          * string rather than possibly running out of space and having to
3553          * reallocate and then copy what we've done so far.  Since everything
3554          * from 's' to 't - 1' is invariant, the destination can be initialized
3555          * with these using a fast memory copy.  To be sure to allocate enough
3556          * space, one could use the worst case scenario, where every remaining
3557          * byte expands to two under UTF-8, or one could parse it and count
3558          * exactly how many do expand.
3559          *
3560          * The other way is to unconditionally parse the remainder of the
3561          * string to figure out exactly how big the expanded string will be,
3562          * growing if needed.  Then start at the end of the string and place
3563          * the character there at the end of the unfilled space in the expanded
3564          * one, working backwards until reaching 't'.
3565          *
3566          * The problem with assuming the worst case scenario is that for very
3567          * long strings, we could allocate much more memory than actually
3568          * needed, which can create performance problems.  If we have to parse
3569          * anyway, the second method is the winner as it may avoid an extra
3570          * copy.  The code used to use the first method under some
3571          * circumstances, but now that there is faster variant counting on
3572          * ASCII platforms, the second method is used exclusively, eliminating
3573          * some code that no longer has to be maintained. */
3574
3575         {
3576             /* Count the total number of variants there are.  We can start
3577              * just beyond the first one, which is known to be at 't' */
3578             const Size_t invariant_length = t - s;
3579             U8 * e = (U8 *) SvEND(sv);
3580
3581             /* The length of the left overs, plus 1. */
3582             const Size_t remaining_length_p1 = e - t;
3583
3584             /* We expand by 1 for the variant at 't' and one for each remaining
3585              * variant (we start looking at 't+1') */
3586             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3587
3588             /* +1 = trailing NUL */
3589             Size_t need = SvCUR(sv) + expansion + extra + 1;
3590             U8 * d;
3591
3592             /* Grow if needed */
3593             if (SvLEN(sv) < need) {
3594                 t = invariant_length + (U8*) SvGROW(sv, need);
3595                 e = t + remaining_length_p1;
3596             }
3597             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3598
3599             /* Set the NUL at the end */
3600             d = (U8 *) SvEND(sv);
3601             *d-- = '\0';
3602
3603             /* Having decremented d, it points to the position to put the
3604              * very last byte of the expanded string.  Go backwards through
3605              * the string, copying and expanding as we go, stopping when we
3606              * get to the part that is invariant the rest of the way down */
3607
3608             e--;
3609             while (e >= t) {
3610                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3611                     *d-- = *e;
3612                 } else {
3613                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3614                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3615                 }
3616                 e--;
3617             }
3618
3619             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3620                 /* Update pos. We do it at the end rather than during
3621                  * the upgrade, to avoid slowing down the common case
3622                  * (upgrade without pos).
3623                  * pos can be stored as either bytes or characters.  Since
3624                  * this was previously a byte string we can just turn off
3625                  * the bytes flag. */
3626                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3627                 if (mg) {
3628                     mg->mg_flags &= ~MGf_BYTES;
3629                 }
3630                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3631                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3632             }
3633         }
3634     }
3635
3636     SvUTF8_on(sv);
3637     return SvCUR(sv);
3638 }
3639
3640 /*
3641 =for apidoc sv_utf8_downgrade
3642
3643 Attempts to convert the PV of an SV from characters to bytes.
3644 If the PV contains a character that cannot fit
3645 in a byte, this conversion will fail;
3646 in this case, either returns false or, if C<fail_ok> is not
3647 true, croaks.
3648
3649 This is not a general purpose Unicode to byte encoding interface:
3650 use the C<Encode> extension for that.
3651
3652 This function process get magic on C<sv>.
3653
3654 =for apidoc sv_utf8_downgrade_nomg
3655
3656 Like C<sv_utf8_downgrade>, but does not process get magic on C<sv>.
3657
3658 =for apidoc sv_utf8_downgrade_flags
3659
3660 Like C<sv_utf8_downgrade>, but with additional C<flags>.
3661 If C<flags> has C<SV_GMAGIC> bit set, processes get magic on C<sv>.
3662
3663 =cut
3664 */
3665
3666 bool
3667 Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
3668 {
3669     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
3670
3671     if (SvPOKp(sv) && SvUTF8(sv)) {
3672         if (SvCUR(sv)) {
3673             U8 *s;
3674             STRLEN len;
3675             U32 mg_flags = flags & SV_GMAGIC;
3676
3677             if (SvIsCOW(sv)) {
3678                 S_sv_uncow(aTHX_ sv, 0);
3679             }
3680             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3681                 /* update pos */
3682                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3683                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3684                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3685                                                 mg_flags|SV_CONST_RETURN);
3686                         mg_flags = 0; /* sv_pos_b2u does get magic */
3687                 }
3688                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3689                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3690
3691             }
3692             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3693
3694             if (!utf8_to_bytes(s, &len)) {
3695                 if (fail_ok)
3696                     return FALSE;
3697                 else {
3698                     if (PL_op)
3699                         Perl_croak(aTHX_ "Wide character in %s",
3700                                    OP_DESC(PL_op));
3701                     else
3702                         Perl_croak(aTHX_ "Wide character");
3703                 }
3704             }
3705             SvCUR_set(sv, len);
3706         }
3707     }
3708     SvUTF8_off(sv);
3709     return TRUE;
3710 }
3711
3712 /*
3713 =for apidoc sv_utf8_encode
3714
3715 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3716 flag off so that it looks like octets again.
3717
3718 =cut
3719 */
3720
3721 void
3722 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3723 {
3724     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3725
3726     if (SvREADONLY(sv)) {
3727         sv_force_normal_flags(sv, 0);
3728     }
3729     (void) sv_utf8_upgrade(sv);
3730     SvUTF8_off(sv);
3731 }
3732
3733 /*
3734 =for apidoc sv_utf8_decode
3735
3736 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3737 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3738 so that it looks like a character.  If the PV contains only single-byte
3739 characters, the C<SvUTF8> flag stays off.
3740 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3741
3742 =cut
3743 */
3744
3745 bool
3746 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3747 {
3748     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3749
3750     if (SvPOKp(sv)) {
3751         const U8 *start, *c, *first_variant;
3752
3753         /* The octets may have got themselves encoded - get them back as
3754          * bytes
3755          */
3756         if (!sv_utf8_downgrade(sv, TRUE))
3757             return FALSE;
3758
3759         /* it is actually just a matter of turning the utf8 flag on, but
3760          * we want to make sure everything inside is valid utf8 first.
3761          */
3762         c = start = (const U8 *) SvPVX_const(sv);
3763         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3764             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3765                 return FALSE;
3766             SvUTF8_on(sv);
3767         }
3768         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3769             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3770                    after this, clearing pos.  Does anything on CPAN
3771                    need this? */
3772             /* adjust pos to the start of a UTF8 char sequence */
3773             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3774             if (mg) {
3775                 I32 pos = mg->mg_len;
3776                 if (pos > 0) {
3777                     for (c = start + pos; c > start; c--) {
3778                         if (UTF8_IS_START(*c))
3779                             break;
3780                     }
3781                     mg->mg_len  = c - start;
3782                 }
3783             }
3784             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3785                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3786         }
3787     }
3788     return TRUE;
3789 }
3790
3791 /*
3792 =for apidoc sv_setsv
3793
3794 Copies the contents of the source SV C<ssv> into the destination SV
3795 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3796 function if the source SV needs to be reused.  Does not handle 'set' magic on
3797 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3798 performs a copy-by-value, obliterating any previous content of the
3799 destination.
3800
3801 You probably want to use one of the assortment of wrappers, such as
3802 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3803 C<SvSetMagicSV_nosteal>.
3804
3805 =for apidoc sv_setsv_flags
3806
3807 Copies the contents of the source SV C<ssv> into the destination SV
3808 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3809 function if the source SV needs to be reused.  Does not handle 'set' magic.
3810 Loosely speaking, it performs a copy-by-value, obliterating any previous
3811 content of the destination.
3812 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3813 C<ssv> if appropriate, else not.  If the C<flags>
3814 parameter has the C<SV_NOSTEAL> bit set then the
3815 buffers of temps will not be stolen.  C<sv_setsv>
3816 and C<sv_setsv_nomg> are implemented in terms of this function.
3817
3818 You probably want to use one of the assortment of wrappers, such as
3819 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3820 C<SvSetMagicSV_nosteal>.
3821
3822 This is the primary function for copying scalars, and most other
3823 copy-ish functions and macros use this underneath.
3824
3825 =for apidoc Amnh||SV_NOSTEAL
3826
3827 =cut
3828 */
3829
3830 static void
3831 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3832 {
3833     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3834     HV *old_stash = NULL;
3835
3836     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3837
3838     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3839         const char * const name = GvNAME(sstr);
3840         const STRLEN len = GvNAMELEN(sstr);
3841         {
3842             if (dtype >= SVt_PV) {
3843                 SvPV_free(dstr);
3844                 SvPV_set(dstr, 0);
3845                 SvLEN_set(dstr, 0);
3846                 SvCUR_set(dstr, 0);
3847             }
3848             SvUPGRADE(dstr, SVt_PVGV);
3849             (void)SvOK_off(dstr);
3850             isGV_with_GP_on(dstr);
3851         }
3852         GvSTASH(dstr) = GvSTASH(sstr);
3853         if (GvSTASH(dstr))
3854             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3855         gv_name_set(MUTABLE_GV(dstr), name, len,
3856                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3857         SvFAKE_on(dstr);        /* can coerce to non-glob */
3858     }
3859
3860     if(GvGP(MUTABLE_GV(sstr))) {
3861         /* If source has method cache entry, clear it */
3862         if(GvCVGEN(sstr)) {
3863             SvREFCNT_dec(GvCV(sstr));
3864             GvCV_set(sstr, NULL);
3865             GvCVGEN(sstr) = 0;
3866         }
3867         /* If source has a real method, then a method is
3868            going to change */
3869         else if(
3870          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3871         ) {
3872             mro_changes = 1;
3873         }
3874     }
3875
3876     /* If dest already had a real method, that's a change as well */
3877     if(
3878         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3879      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3880     ) {
3881         mro_changes = 1;
3882     }
3883
3884     /* We don't need to check the name of the destination if it was not a
3885        glob to begin with. */
3886     if(dtype == SVt_PVGV) {
3887         const char * const name = GvNAME((const GV *)dstr);
3888         const STRLEN len = GvNAMELEN(dstr);
3889         if(memEQs(name, len, "ISA")
3890          /* The stash may have been detached from the symbol table, so
3891             check its name. */
3892          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3893         )
3894             mro_changes = 2;
3895         else {
3896             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3897              || (len == 1 && name[0] == ':')) {
3898                 mro_changes = 3;
3899
3900                 /* Set aside the old stash, so we can reset isa caches on
3901                    its subclasses. */
3902                 if((old_stash = GvHV(dstr)))
3903                     /* Make sure we do not lose it early. */
3904                     SvREFCNT_inc_simple_void_NN(
3905                      sv_2mortal((SV *)old_stash)
3906                     );
3907             }
3908         }
3909
3910         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3911     }
3912
3913     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3914      * so temporarily protect it */
3915     ENTER;
3916     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3917     gp_free(MUTABLE_GV(dstr));
3918     GvINTRO_off(dstr);          /* one-shot flag */
3919     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3920     LEAVE;
3921
3922     if (SvTAINTED(sstr))
3923         SvTAINT(dstr);
3924     if (GvIMPORTED(dstr) != GVf_IMPORTED
3925         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3926         {
3927             GvIMPORTED_on(dstr);
3928         }
3929     GvMULTI_on(dstr);
3930     if(mro_changes == 2) {
3931       if (GvAV((const GV *)sstr)) {
3932         MAGIC *mg;
3933         SV * const sref = (SV *)GvAV((const GV *)dstr);
3934         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3935             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3936                 AV * const ary = newAV();
3937                 av_push(ary, mg->mg_obj); /* takes the refcount */
3938                 mg->mg_obj = (SV *)ary;
3939             }
3940             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3941         }
3942         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3943       }
3944       mro_isa_changed_in(GvSTASH(dstr));
3945     }
3946     else if(mro_changes == 3) {
3947         HV * const stash = GvHV(dstr);
3948         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3949             mro_package_moved(
3950                 stash, old_stash,
3951                 (GV *)dstr, 0
3952             );
3953     }
3954     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3955     if (GvIO(dstr) && dtype == SVt_PVGV) {
3956         DEBUG_o(Perl_deb(aTHX_
3957                         "glob_assign_glob clearing PL_stashcache\n"));
3958         /* It's a cache. It will rebuild itself quite happily.
3959            It's a lot of effort to work out exactly which key (or keys)
3960            might be invalidated by the creation of the this file handle.
3961          */
3962         hv_clear(PL_stashcache);
3963     }
3964     return;
3965 }
3966
3967 void
3968 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3969 {
3970     SV * const sref = SvRV(sstr);
3971     SV *dref;
3972     const int intro = GvINTRO(dstr);
3973     SV **location;
3974     U8 import_flag = 0;
3975     const U32 stype = SvTYPE(sref);
3976
3977     PERL_ARGS_ASSERT_GV_SETREF;
3978
3979     if (intro) {
3980         GvINTRO_off(dstr);      /* one-shot flag */
3981         GvLINE(dstr) = CopLINE(PL_curcop);
3982         GvEGV(dstr) = MUTABLE_GV(dstr);
3983     }
3984     GvMULTI_on(dstr);
3985     switch (stype) {
3986     case SVt_PVCV:
3987         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3988         import_flag = GVf_IMPORTED_CV;
3989         goto common;
3990     case SVt_PVHV:
3991         location = (SV **) &GvHV(dstr);
3992         import_flag = GVf_IMPORTED_HV;
3993         goto common;
3994     case SVt_PVAV:
3995         location = (SV **) &GvAV(dstr);
3996         import_flag = GVf_IMPORTED_AV;
3997         goto common;
3998     case SVt_PVIO:
3999         location = (SV **) &GvIOp(dstr);
4000         goto common;
4001     case SVt_PVFM:
4002         location = (SV **) &GvFORM(dstr);
4003         goto common;
4004     default:
4005         location = &GvSV(dstr);
4006         import_flag = GVf_IMPORTED_SV;
4007     common:
4008         if (intro) {
4009             if (stype == SVt_PVCV) {
4010                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4011                 if (GvCVGEN(dstr)) {
4012                     SvREFCNT_dec(GvCV(dstr));
4013                     GvCV_set(dstr, NULL);
4014                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4015                 }
4016             }
4017             /* SAVEt_GVSLOT takes more room on the savestack and has more
4018                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4019                leave_scope needs access to the GV so it can reset method
4020                caches.  We must use SAVEt_GVSLOT whenever the type is
4021                SVt_PVCV, even if the stash is anonymous, as the stash may
4022                gain a name somehow before leave_scope. */
4023             if (stype == SVt_PVCV) {
4024                 /* There is no save_pushptrptrptr.  Creating it for this
4025                    one call site would be overkill.  So inline the ss add
4026                    routines here. */
4027                 dSS_ADD;
4028                 SS_ADD_PTR(dstr);
4029                 SS_ADD_PTR(location);
4030                 SS_ADD_PTR(SvREFCNT_inc(*location));
4031                 SS_ADD_UV(SAVEt_GVSLOT);
4032                 SS_ADD_END(4);
4033             }
4034             else SAVEGENERICSV(*location);
4035         }
4036         dref = *location;
4037         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4038             CV* const cv = MUTABLE_CV(*location);
4039             if (cv) {
4040                 if (!GvCVGEN((const GV *)dstr) &&
4041                     (CvROOT(cv) || CvXSUB(cv)) &&
4042                     /* redundant check that avoids creating the extra SV
4043                        most of the time: */
4044                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4045                     {
4046                         SV * const new_const_sv =
4047                             CvCONST((const CV *)sref)
4048                                  ? cv_const_sv((const CV *)sref)
4049                                  : NULL;
4050                         HV * const stash = GvSTASH((const GV *)dstr);
4051                         report_redefined_cv(
4052                            sv_2mortal(
4053                              stash
4054                                ? Perl_newSVpvf(aTHX_
4055                                     "%" HEKf "::%" HEKf,
4056                                     HEKfARG(HvNAME_HEK(stash)),
4057                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4058                                : Perl_newSVpvf(aTHX_
4059                                     "%" HEKf,
4060                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4061                            ),
4062                            cv,
4063                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4064                         );
4065                     }
4066                 if (!intro)
4067                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4068                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4069                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4070                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4071             }
4072             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4073             GvASSUMECV_on(dstr);
4074             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4075                 if (intro && GvREFCNT(dstr) > 1) {
4076                     /* temporary remove extra savestack's ref */
4077                     --GvREFCNT(dstr);
4078                     gv_method_changed(dstr);
4079                     ++GvREFCNT(dstr);
4080                 }
4081                 else gv_method_changed(dstr);
4082             }
4083         }
4084         *location = SvREFCNT_inc_simple_NN(sref);
4085         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4086             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4087             GvFLAGS(dstr) |= import_flag;
4088         }
4089
4090         if (stype == SVt_PVHV) {
4091             const char * const name = GvNAME((GV*)dstr);
4092             const STRLEN len = GvNAMELEN(dstr);
4093             if (
4094                 (
4095                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4096                 || (len == 1 && name[0] == ':')
4097                 )
4098              && (!dref || HvENAME_get(dref))
4099             ) {
4100                 mro_package_moved(
4101                     (HV *)sref, (HV *)dref,
4102                     (GV *)dstr, 0
4103                 );
4104             }
4105         }
4106         else if (
4107             stype == SVt_PVAV && sref != dref
4108          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4109          /* The stash may have been detached from the symbol table, so
4110             check its name before doing anything. */
4111          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4112         ) {
4113             MAGIC *mg;
4114             MAGIC * const omg = dref && SvSMAGICAL(dref)
4115                                  ? mg_find(dref, PERL_MAGIC_isa)
4116                                  : NULL;
4117             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4118                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4119                     AV * const ary = newAV();
4120                     av_push(ary, mg->mg_obj); /* takes the refcount */
4121                     mg->mg_obj = (SV *)ary;
4122                 }
4123                 if (omg) {
4124                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4125                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4126                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4127                         while (items--)
4128                             av_push(
4129                              (AV *)mg->mg_obj,
4130                              SvREFCNT_inc_simple_NN(*svp++)
4131                             );
4132                     }
4133                     else
4134                         av_push(
4135                          (AV *)mg->mg_obj,
4136                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4137                         );
4138                 }
4139                 else
4140                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4141             }
4142             else
4143             {
4144                 SSize_t i;
4145                 sv_magic(
4146                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4147                 );
4148                 for (i = 0; i <= AvFILL(sref); ++i) {
4149                     SV **elem = av_fetch ((AV*)sref, i, 0);
4150                     if (elem) {
4151                         sv_magic(
4152                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4153                         );
4154                     }
4155                 }
4156                 mg = mg_find(sref, PERL_MAGIC_isa);
4157             }
4158             /* Since the *ISA assignment could have affected more than
4159                one stash, don't call mro_isa_changed_in directly, but let
4160                magic_clearisa do it for us, as it already has the logic for
4161                dealing with globs vs arrays of globs. */
4162             assert(mg);
4163             Perl_magic_clearisa(aTHX_ NULL, mg);
4164         }
4165         else if (stype == SVt_PVIO) {
4166             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4167             /* It's a cache. It will rebuild itself quite happily.
4168                It's a lot of effort to work out exactly which key (or keys)
4169                might be invalidated by the creation of the this file handle.
4170             */
4171             hv_clear(PL_stashcache);
4172         }
4173         break;
4174     }
4175     if (!intro) SvREFCNT_dec(dref);
4176     if (SvTAINTED(sstr))
4177         SvTAINT(dstr);
4178     return;
4179 }
4180
4181
4182
4183
4184 #ifdef PERL_DEBUG_READONLY_COW
4185 # include <sys/mman.h>
4186
4187 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4188 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4189 # endif
4190
4191 void
4192 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4193 {
4194     struct perl_memory_debug_header * const header =
4195         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4196     const MEM_SIZE len = header->size;
4197     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4198 # ifdef PERL_TRACK_MEMPOOL
4199     if (!header->readonly) header->readonly = 1;
4200 # endif
4201     if (mprotect(header, len, PROT_READ))
4202         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4203                          header, len, errno);
4204 }
4205
4206 static void
4207 S_sv_buf_to_rw(pTHX_ SV *sv)
4208 {
4209     struct perl_memory_debug_header * const header =
4210         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4211     const MEM_SIZE len = header->size;
4212     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4213     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4214         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4215                          header, len, errno);
4216 # ifdef PERL_TRACK_MEMPOOL
4217     header->readonly = 0;
4218 # endif
4219 }
4220
4221 #else
4222 # define sv_buf_to_ro(sv)       NOOP
4223 # define sv_buf_to_rw(sv)       NOOP
4224 #endif
4225
4226 void
4227 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4228 {
4229     U32 sflags;
4230     int dtype;
4231     svtype stype;
4232     unsigned int both_type;
4233
4234     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4235
4236     if (UNLIKELY( sstr == dstr ))
4237         return;
4238
4239     if (UNLIKELY( !sstr ))
4240         sstr = &PL_sv_undef;
4241
4242     stype = SvTYPE(sstr);
4243     dtype = SvTYPE(dstr);
4244     both_type = (stype | dtype);
4245
4246     /* with these values, we can check that both SVs are NULL/IV (and not
4247      * freed) just by testing the or'ed types */
4248     STATIC_ASSERT_STMT(SVt_NULL == 0);
4249     STATIC_ASSERT_STMT(SVt_IV   == 1);
4250     if (both_type <= 1) {
4251         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4252          * special-casing */
4253         U32 sflags;
4254         U32 new_dflags;
4255         SV *old_rv = NULL;
4256
4257         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4258         if (SvREADONLY(dstr))
4259             Perl_croak_no_modify();
4260         if (SvROK(dstr)) {
4261             if (SvWEAKREF(dstr))
4262                 sv_unref_flags(dstr, 0);
4263             else
4264                 old_rv = SvRV(dstr);
4265         }
4266
4267         assert(!SvGMAGICAL(sstr));
4268         assert(!SvGMAGICAL(dstr));
4269
4270         sflags = SvFLAGS(sstr);
4271         if (sflags & (SVf_IOK|SVf_ROK)) {
4272             SET_SVANY_FOR_BODYLESS_IV(dstr);
4273             new_dflags = SVt_IV;
4274
4275             if (sflags & SVf_ROK) {
4276                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4277                 new_dflags |= SVf_ROK;
4278             }
4279             else {
4280                 /* both src and dst are <= SVt_IV, so sv_any points to the
4281                  * head; so access the head directly
4282                  */
4283                 assert(    &(sstr->sv_u.svu_iv)
4284                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4285                 assert(    &(dstr->sv_u.svu_iv)
4286                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4287                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4288                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4289             }
4290         }
4291         else {
4292             new_dflags = dtype; /* turn off everything except the type */
4293         }
4294         SvFLAGS(dstr) = new_dflags;
4295         SvREFCNT_dec(old_rv);
4296
4297         return;
4298     }
4299
4300     if (UNLIKELY(both_type == SVTYPEMASK)) {
4301         if (SvIS_FREED(dstr)) {
4302             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4303                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4304         }
4305         if (SvIS_FREED(sstr)) {
4306             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4307                        (void*)sstr, (void*)dstr);
4308         }
4309     }
4310
4311
4312
4313     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4314     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4315
4316     /* There's a lot of redundancy below but we're going for speed here */
4317
4318     switch (stype) {
4319     case SVt_NULL:
4320       undef_sstr:
4321         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4322             (void)SvOK_off(dstr);
4323             return;
4324         }
4325         break;
4326     case SVt_IV:
4327         if (SvIOK(sstr)) {
4328             switch (dtype) {
4329             case SVt_NULL:
4330                 /* For performance, we inline promoting to type SVt_IV. */
4331                 /* We're starting from SVt_NULL, so provided that define is
4332                  * actual 0, we don't have to unset any SV type flags
4333                  * to promote to SVt_IV. */
4334                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4335                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4336                 SvFLAGS(dstr) |= SVt_IV;
4337                 break;
4338             case SVt_NV:
4339             case SVt_PV:
4340                 sv_upgrade(dstr, SVt_PVIV);
4341                 break;
4342             case SVt_PVGV:
4343             case SVt_PVLV:
4344                 goto end_of_first_switch;
4345             }
4346             (void)SvIOK_only(dstr);
4347             SvIV_set(dstr,  SvIVX(sstr));
4348             if (SvIsUV(sstr))
4349                 SvIsUV_on(dstr);
4350             /* SvTAINTED can only be true if the SV has taint magic, which in
4351                turn means that the SV type is PVMG (or greater). This is the
4352                case statement for SVt_IV, so this cannot be true (whatever gcov
4353                may say).  */
4354             assert(!SvTAINTED(sstr));
4355             return;
4356         }
4357         if (!SvROK(sstr))
4358             goto undef_sstr;
4359         if (dtype < SVt_PV && dtype != SVt_IV)
4360             sv_upgrade(dstr, SVt_IV);
4361         break;
4362
4363     case SVt_NV:
4364         if (LIKELY( SvNOK(sstr) )) {
4365             switch (dtype) {
4366             case SVt_NULL:
4367             case SVt_IV:
4368                 sv_upgrade(dstr, SVt_NV);
4369                 break;
4370             case SVt_PV:
4371             case SVt_PVIV:
4372                 sv_upgrade(dstr, SVt_PVNV);
4373                 break;
4374             case SVt_PVGV:
4375             case SVt_PVLV:
4376                 goto end_of_first_switch;
4377             }
4378             SvNV_set(dstr, SvNVX(sstr));
4379             (void)SvNOK_only(dstr);
4380             /* SvTAINTED can only be true if the SV has taint magic, which in
4381                turn means that the SV type is PVMG (or greater). This is the
4382                case statement for SVt_NV, so this cannot be true (whatever gcov
4383                may say).  */
4384             assert(!SvTAINTED(sstr));
4385             return;
4386         }
4387         goto undef_sstr;
4388
4389     case SVt_PV:
4390         if (dtype < SVt_PV)
4391             sv_upgrade(dstr, SVt_PV);
4392         break;
4393     case SVt_PVIV:
4394         if (dtype < SVt_PVIV)
4395             sv_upgrade(dstr, SVt_PVIV);
4396         break;
4397     case SVt_PVNV:
4398         if (dtype < SVt_PVNV)
4399             sv_upgrade(dstr, SVt_PVNV);
4400         break;
4401
4402     case SVt_INVLIST:
4403         invlist_clone(sstr, dstr);
4404         break;
4405     default:
4406         {
4407         const char * const type = sv_reftype(sstr,0);
4408         if (PL_op)
4409             /* diag_listed_as: Bizarre copy of %s */
4410             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4411         else
4412             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4413         }
4414         NOT_REACHED; /* NOTREACHED */
4415
4416     case SVt_REGEXP:
4417       upgregexp:
4418         if (dtype < SVt_REGEXP)
4419             sv_upgrade(dstr, SVt_REGEXP);
4420         break;
4421
4422     case SVt_PVLV:
4423     case SVt_PVGV:
4424     case SVt_PVMG:
4425         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4426             mg_get(sstr);
4427             if (SvTYPE(sstr) != stype)
4428                 stype = SvTYPE(sstr);
4429         }
4430         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4431                     glob_assign_glob(dstr, sstr, dtype);
4432                     return;
4433         }
4434         if (stype == SVt_PVLV)
4435         {
4436             if (isREGEXP(sstr)) goto upgregexp;
4437             SvUPGRADE(dstr, SVt_PVNV);
4438         }
4439         else
4440             SvUPGRADE(dstr, (svtype)stype);
4441     }
4442  end_of_first_switch:
4443
4444     /* dstr may have been upgraded.  */
4445     dtype = SvTYPE(dstr);
4446     sflags = SvFLAGS(sstr);
4447
4448     if (UNLIKELY( dtype == SVt_PVCV )) {
4449         /* Assigning to a subroutine sets the prototype.  */
4450         if (SvOK(sstr)) {
4451             STRLEN len;
4452             const char *const ptr = SvPV_const(sstr, len);
4453
4454             SvGROW(dstr, len + 1);
4455             Copy(ptr, SvPVX(dstr), len + 1, char);
4456             SvCUR_set(dstr, len);
4457             SvPOK_only(dstr);
4458             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4459             CvAUTOLOAD_off(dstr);
4460         } else {
4461             SvOK_off(dstr);
4462         }
4463     }
4464     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4465              || dtype == SVt_PVFM))
4466     {
4467         const char * const type = sv_reftype(dstr,0);
4468         if (PL_op)
4469             /* diag_listed_as: Cannot copy to %s */
4470             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4471         else
4472             Perl_croak(aTHX_ "Cannot copy to %s", type);
4473     } else if (sflags & SVf_ROK) {
4474         if (isGV_with_GP(dstr)
4475             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4476             sstr = SvRV(sstr);
4477             if (sstr == dstr) {
4478                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4479                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4480                 {
4481                     GvIMPORTED_on(dstr);
4482                 }
4483                 GvMULTI_on(dstr);
4484                 return;
4485             }
4486             glob_assign_glob(dstr, sstr, dtype);
4487             return;
4488         }
4489
4490         if (dtype >= SVt_PV) {
4491             if (isGV_with_GP(dstr)) {
4492                 gv_setref(dstr, sstr);
4493                 return;
4494             }
4495             if (SvPVX_const(dstr)) {
4496                 SvPV_free(dstr);
4497                 SvLEN_set(dstr, 0);
4498                 SvCUR_set(dstr, 0);
4499             }
4500         }
4501         (void)SvOK_off(dstr);
4502         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4503         SvFLAGS(dstr) |= sflags & SVf_ROK;
4504         assert(!(sflags & SVp_NOK));
4505         assert(!(sflags & SVp_IOK));
4506         assert(!(sflags & SVf_NOK));
4507         assert(!(sflags & SVf_IOK));
4508     }
4509     else if (isGV_with_GP(dstr)) {
4510         if (!(sflags & SVf_OK)) {
4511             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4512                            "Undefined value assigned to typeglob");
4513         }
4514         else {
4515             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4516             if (dstr != (const SV *)gv) {
4517                 const char * const name = GvNAME((const GV *)dstr);
4518                 const STRLEN len = GvNAMELEN(dstr);
4519                 HV *old_stash = NULL;
4520                 bool reset_isa = FALSE;
4521                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4522                  || (len == 1 && name[0] == ':')) {
4523                     /* Set aside the old stash, so we can reset isa caches
4524                        on its subclasses. */
4525                     if((old_stash = GvHV(dstr))) {
4526                         /* Make sure we do not lose it early. */
4527                         SvREFCNT_inc_simple_void_NN(
4528                          sv_2mortal((SV *)old_stash)
4529                         );
4530                     }
4531                     reset_isa = TRUE;
4532                 }
4533
4534                 if (GvGP(dstr)) {
4535                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4536                     gp_free(MUTABLE_GV(dstr));
4537                 }
4538                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4539
4540                 if (reset_isa) {
4541                     HV * const stash = GvHV(dstr);
4542                     if(
4543                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4544                     )
4545                         mro_package_moved(
4546                          stash, old_stash,
4547                          (GV *)dstr, 0
4548                         );
4549                 }
4550             }
4551         }
4552     }
4553     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4554           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4555         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4556     }
4557     else if (sflags & SVp_POK) {
4558         const STRLEN cur = SvCUR(sstr);
4559         const STRLEN len = SvLEN(sstr);
4560
4561         /*
4562          * We have three basic ways to copy the string:
4563          *
4564          *  1. Swipe
4565          *  2. Copy-on-write
4566          *  3. Actual copy
4567          * 
4568          * Which we choose is based on various factors.  The following
4569          * things are listed in order of speed, fastest to slowest:
4570          *  - Swipe
4571          *  - Copying a short string
4572          *  - Copy-on-write bookkeeping
4573          *  - malloc
4574          *  - Copying a long string
4575          * 
4576          * We swipe the string (steal the string buffer) if the SV on the
4577          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4578          * big win on long strings.  It should be a win on short strings if
4579          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4580          * slow things down, as SvPVX_const(sstr) would have been freed
4581          * soon anyway.
4582          * 
4583          * We also steal the buffer from a PADTMP (operator target) if it
4584          * is â€˜long enough’.  For short strings, a swipe does not help
4585          * here, as it causes more malloc calls the next time the target
4586          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4587          * be allocated it is still not worth swiping PADTMPs for short
4588          * strings, as the savings here are small.
4589          * 
4590          * If swiping is not an option, then we see whether it is
4591          * worth using copy-on-write.  If the lhs already has a buf-
4592          * fer big enough and the string is short, we skip it and fall back
4593          * to method 3, since memcpy is faster for short strings than the
4594          * later bookkeeping overhead that copy-on-write entails.
4595
4596          * If the rhs is not a copy-on-write string yet, then we also
4597          * consider whether the buffer is too large relative to the string
4598          * it holds.  Some operations such as readline allocate a large
4599          * buffer in the expectation of reusing it.  But turning such into
4600          * a COW buffer is counter-productive because it increases memory
4601          * usage by making readline allocate a new large buffer the sec-
4602          * ond time round.  So, if the buffer is too large, again, we use
4603          * method 3 (copy).
4604          * 
4605          * Finally, if there is no buffer on the left, or the buffer is too 
4606          * small, then we use copy-on-write and make both SVs share the
4607          * string buffer.
4608          *
4609          */
4610
4611         /* Whichever path we take through the next code, we want this true,
4612            and doing it now facilitates the COW check.  */
4613         (void)SvPOK_only(dstr);
4614
4615         if (
4616                  (              /* Either ... */
4617                                 /* slated for free anyway (and not COW)? */
4618                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4619                                 /* or a swipable TARG */
4620                  || ((sflags &
4621                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4622                        == SVs_PADTMP
4623                                 /* whose buffer is worth stealing */
4624                      && CHECK_COWBUF_THRESHOLD(cur,len)
4625                     )
4626                  ) &&
4627                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4628                  (!(flags & SV_NOSTEAL)) &&
4629                                         /* and we're allowed to steal temps */
4630                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4631                  len)             /* and really is a string */
4632         {       /* Passes the swipe test.  */
4633             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4634                 SvPV_free(dstr);
4635             SvPV_set(dstr, SvPVX_mutable(sstr));
4636             SvLEN_set(dstr, SvLEN(sstr));
4637             SvCUR_set(dstr, SvCUR(sstr));
4638
4639             SvTEMP_off(dstr);
4640             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4641             SvPV_set(sstr, NULL);
4642             SvLEN_set(sstr, 0);
4643             SvCUR_set(sstr, 0);
4644             SvTEMP_off(sstr);
4645         }
4646         else if (flags & SV_COW_SHARED_HASH_KEYS
4647               &&
4648 #ifdef PERL_COPY_ON_WRITE
4649                  (sflags & SVf_IsCOW
4650                    ? (!len ||
4651                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4652                           /* If this is a regular (non-hek) COW, only so
4653                              many COW "copies" are possible. */
4654                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4655                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4656                      && !(SvFLAGS(dstr) & SVf_BREAK)
4657                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4658                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4659                     ))
4660 #else
4661                  sflags & SVf_IsCOW
4662               && !(SvFLAGS(dstr) & SVf_BREAK)
4663 #endif
4664             ) {
4665             /* Either it's a shared hash key, or it's suitable for
4666                copy-on-write.  */
4667 #ifdef DEBUGGING
4668             if (DEBUG_C_TEST) {
4669                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4670                 sv_dump(sstr);
4671                 sv_dump(dstr);
4672             }
4673 #endif
4674 #ifdef PERL_ANY_COW
4675             if (!(sflags & SVf_IsCOW)) {
4676                     SvIsCOW_on(sstr);
4677                     CowREFCNT(sstr) = 0;
4678             }
4679 #endif
4680             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4681                 SvPV_free(dstr);
4682             }
4683
4684 #ifdef PERL_ANY_COW
4685             if (len) {
4686                     if (sflags & SVf_IsCOW) {
4687                         sv_buf_to_rw(sstr);
4688                     }
4689                     CowREFCNT(sstr)++;
4690                     SvPV_set(dstr, SvPVX_mutable(sstr));
4691                     sv_buf_to_ro(sstr);
4692             } else
4693 #endif
4694             {
4695                     /* SvIsCOW_shared_hash */
4696                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4697                                           "Copy on write: Sharing hash\n"));
4698
4699                     assert (SvTYPE(dstr) >= SVt_PV);
4700                     SvPV_set(dstr,
4701                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4702             }
4703             SvLEN_set(dstr, len);
4704             SvCUR_set(dstr, cur);
4705             SvIsCOW_on(dstr);
4706         } else {
4707             /* Failed the swipe test, and we cannot do copy-on-write either.
4708                Have to copy the string.  */
4709             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4710             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4711             SvCUR_set(dstr, cur);
4712             *SvEND(dstr) = '\0';
4713         }
4714         if (sflags & SVp_NOK) {
4715             SvNV_set(dstr, SvNVX(sstr));
4716         }
4717         if (sflags & SVp_IOK) {
4718             SvIV_set(dstr, SvIVX(sstr));
4719             if (sflags & SVf_IVisUV)
4720                 SvIsUV_on(dstr);
4721         }
4722         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4723         {
4724             const MAGIC * const smg = SvVSTRING_mg(sstr);
4725             if (smg) {
4726                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4727                          smg->mg_ptr, smg->mg_len);
4728                 SvRMAGICAL_on(dstr);
4729             }
4730         }
4731     }
4732     else if (sflags & (SVp_IOK|SVp_NOK)) {
4733         (void)SvOK_off(dstr);
4734         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4735         if (sflags & SVp_IOK) {
4736             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4737             SvIV_set(dstr, SvIVX(sstr));
4738         }
4739         if (sflags & SVp_NOK) {
4740             SvNV_set(dstr, SvNVX(sstr));
4741         }
4742     }
4743     else {
4744         if (isGV_with_GP(sstr)) {
4745             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4746         }
4747         else
4748             (void)SvOK_off(dstr);
4749     }
4750     if (SvTAINTED(sstr))
4751         SvTAINT(dstr);
4752 }
4753
4754
4755 /*
4756 =for apidoc sv_set_undef
4757
4758 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4759 Doesn't handle set magic.
4760
4761 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4762 buffer, unlike C<undef $sv>.
4763
4764 Introduced in perl 5.25.12.
4765
4766 =cut
4767 */
4768
4769 void
4770 Perl_sv_set_undef(pTHX_ SV *sv)
4771 {
4772     U32 type = SvTYPE(sv);
4773
4774     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4775
4776     /* shortcut, NULL, IV, RV */
4777
4778     if (type <= SVt_IV) {
4779         assert(!SvGMAGICAL(sv));
4780         if (SvREADONLY(sv)) {
4781             /* does undeffing PL_sv_undef count as modifying a read-only
4782              * variable? Some XS code does this */
4783             if (sv == &PL_sv_undef)
4784                 return;
4785             Perl_croak_no_modify();
4786         }
4787
4788         if (SvROK(sv)) {
4789             if (SvWEAKREF(sv))
4790                 sv_unref_flags(sv, 0);
4791             else {
4792                 SV *rv = SvRV(sv);
4793                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4794                 SvREFCNT_dec_NN(rv);
4795                 return;
4796             }
4797         }
4798         SvFLAGS(sv) = type; /* quickly turn off all flags */
4799         return;
4800     }
4801
4802     if (SvIS_FREED(sv))
4803         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4804             (void *)sv);
4805
4806     SV_CHECK_THINKFIRST_COW_DROP(sv);
4807
4808     if (isGV_with_GP(sv))
4809         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4810                        "Undefined value assigned to typeglob");
4811     else
4812         SvOK_off(sv);
4813 }
4814
4815
4816
4817 /*
4818 =for apidoc sv_setsv_mg
4819
4820 Like C<sv_setsv>, but also handles 'set' magic.
4821
4822 =cut
4823 */
4824
4825 void
4826 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4827 {
4828     PERL_ARGS_ASSERT_SV_SETSV_MG;
4829
4830     sv_setsv(dstr,sstr);
4831     SvSETMAGIC(dstr);
4832 }
4833
4834 #ifdef PERL_ANY_COW
4835 #  define SVt_COW SVt_PV
4836 SV *
4837 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4838 {
4839     STRLEN cur = SvCUR(sstr);
4840     STRLEN len = SvLEN(sstr);
4841     char *new_pv;
4842 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4843     const bool already = cBOOL(SvIsCOW(sstr));
4844 #endif
4845
4846     PERL_ARGS_ASSERT_SV_SETSV_COW;
4847 #ifdef DEBUGGING
4848     if (DEBUG_C_TEST) {
4849         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4850                       (void*)sstr, (void*)dstr);
4851         sv_dump(sstr);
4852         if (dstr)
4853                     sv_dump(dstr);
4854     }
4855 #endif
4856     if (dstr) {
4857         if (SvTHINKFIRST(dstr))
4858             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4859         else if (SvPVX_const(dstr))
4860             Safefree(SvPVX_mutable(dstr));
4861     }
4862     else
4863         new_SV(dstr);
4864     SvUPGRADE(dstr, SVt_COW);
4865
4866     assert (SvPOK(sstr));
4867     assert (SvPOKp(sstr));
4868
4869     if (SvIsCOW(sstr)) {
4870
4871         if (SvLEN(sstr) == 0) {
4872             /* source is a COW shared hash key.  */
4873             DEBUG_C(PerlIO_printf(Perl_debug_log,
4874                                   "Fast copy on write: Sharing hash\n"));
4875             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4876             goto common_exit;
4877         }
4878         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4879         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4880     } else {
4881         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4882         SvUPGRADE(sstr, SVt_COW);
4883         SvIsCOW_on(sstr);
4884         DEBUG_C(PerlIO_printf(Perl_debug_log,
4885                               "Fast copy on write: Converting sstr to COW\n"));
4886         CowREFCNT(sstr) = 0;    
4887     }
4888 #  ifdef PERL_DEBUG_READONLY_COW
4889     if (already) sv_buf_to_rw(sstr);
4890 #  endif
4891     CowREFCNT(sstr)++;  
4892     new_pv = SvPVX_mutable(sstr);
4893     sv_buf_to_ro(sstr);
4894
4895   common_exit:
4896     SvPV_set(dstr, new_pv);
4897     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4898     if (SvUTF8(sstr))
4899         SvUTF8_on(dstr);
4900     SvLEN_set(dstr, len);
4901     SvCUR_set(dstr, cur);
4902 #ifdef DEBUGGING
4903     if (DEBUG_C_TEST)
4904                 sv_dump(dstr);
4905 #endif
4906     return dstr;
4907 }
4908 #endif
4909
4910 /*
4911 =for apidoc sv_setpv_bufsize
4912
4913 Sets the SV to be a string of cur bytes length, with at least
4914 len bytes available. Ensures that there is a null byte at SvEND.
4915 Returns a char * pointer to the SvPV buffer.
4916
4917 =cut
4918 */
4919
4920 char *
4921 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4922 {
4923     char *pv;
4924
4925     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4926
4927     SV_CHECK_THINKFIRST_COW_DROP(sv);
4928     SvUPGRADE(sv, SVt_PV);
4929     pv = SvGROW(sv, len + 1);
4930     SvCUR_set(sv, cur);
4931     *(SvEND(sv))= '\0';
4932     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4933
4934     SvTAINT(sv);
4935     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4936     return pv;
4937 }
4938
4939 /*
4940 =for apidoc sv_setpvn
4941
4942 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4943 The C<len> parameter indicates the number of
4944 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4945 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4946
4947 =cut
4948 */
4949
4950 void
4951 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4952 {
4953     char *dptr;
4954
4955     PERL_ARGS_ASSERT_SV_SETPVN;
4956
4957     SV_CHECK_THINKFIRST_COW_DROP(sv);
4958     if (isGV_with_GP(sv))
4959         Perl_croak_no_modify();
4960     if (!ptr) {
4961         (void)SvOK_off(sv);
4962         return;
4963     }
4964     else {
4965         /* len is STRLEN which is unsigned, need to copy to signed */
4966         const IV iv = len;
4967         if (iv < 0)
4968             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4969                        IVdf, iv);
4970     }
4971     SvUPGRADE(sv, SVt_PV);
4972
4973     dptr = SvGROW(sv, len + 1);
4974     Move(ptr,dptr,len,char);
4975     dptr[len] = '\0';
4976     SvCUR_set(sv, len);
4977     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4978     SvTAINT(sv);
4979     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4980 }
4981
4982 /*
4983 =for apidoc sv_setpvn_mg
4984
4985 Like C<sv_setpvn>, but also handles 'set' magic.
4986
4987 =cut
4988 */
4989
4990 void
4991 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4992 {
4993     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4994
4995     sv_setpvn(sv,ptr,len);
4996     SvSETMAGIC(sv);
4997 }
4998
4999 /*
5000 =for apidoc sv_setpv
5001
5002 Copies a string into an SV.  The string must be terminated with a C<NUL>
5003 character, and not contain embeded C<NUL>'s.
5004 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5005
5006 =cut
5007 */
5008
5009 void
5010 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5011 {
5012     STRLEN len;
5013
5014     PERL_ARGS_ASSERT_SV_SETPV;
5015
5016     SV_CHECK_THINKFIRST_COW_DROP(sv);
5017     if (!ptr) {
5018         (void)SvOK_off(sv);
5019         return;
5020     }
5021     len = strlen(ptr);
5022     SvUPGRADE(sv, SVt_PV);
5023
5024     SvGROW(sv, len + 1);
5025     Move(ptr,SvPVX(sv),len+1,char);
5026     SvCUR_set(sv, len);
5027     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5028     SvTAINT(sv);
5029     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5030 }
5031
5032 /*
5033 =for apidoc sv_setpv_mg
5034
5035 Like C<sv_setpv>, but also handles 'set' magic.
5036
5037 =cut
5038 */
5039
5040 void
5041 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5042 {
5043     PERL_ARGS_ASSERT_SV_SETPV_MG;
5044
5045     sv_setpv(sv,ptr);
5046     SvSETMAGIC(sv);
5047 }
5048
5049 void
5050 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5051 {
5052     PERL_ARGS_ASSERT_SV_SETHEK;
5053
5054     if (!hek) {
5055         return;
5056     }
5057
5058     if (HEK_LEN(hek) == HEf_SVKEY) {
5059         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5060         return;
5061     } else {
5062         const int flags = HEK_FLAGS(hek);
5063         if (flags & HVhek_WASUTF8) {
5064             STRLEN utf8_len = HEK_LEN(hek);
5065             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5066             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5067             SvUTF8_on(sv);
5068             return;
5069         } else if (flags & HVhek_UNSHARED) {
5070             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5071             if (HEK_UTF8(hek))
5072                 SvUTF8_on(sv);
5073             else SvUTF8_off(sv);
5074             return;
5075         }
5076         {
5077             SV_CHECK_THINKFIRST_COW_DROP(sv);
5078             SvUPGRADE(sv, SVt_PV);
5079             SvPV_free(sv);
5080             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5081             SvCUR_set(sv, HEK_LEN(hek));
5082             SvLEN_set(sv, 0);
5083             SvIsCOW_on(sv);
5084             SvPOK_on(sv);
5085             if (HEK_UTF8(hek))
5086                 SvUTF8_on(sv);
5087             else SvUTF8_off(sv);
5088             return;
5089         }
5090     }
5091 }
5092
5093
5094 /*
5095 =for apidoc sv_usepvn_flags
5096
5097 Tells an SV to use C<ptr> to find its string value.  Normally the
5098 string is stored inside the SV, but sv_usepvn allows the SV to use an
5099 outside string.  C<ptr> should point to memory that was allocated
5100 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5101 the start of a C<Newx>-ed block of memory, and not a pointer to the
5102 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5103 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5104 string length, C<len>, must be supplied.  By default this function
5105 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5106 so that pointer should not be freed or used by the programmer after
5107 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5108 that pointer (e.g. ptr + 1) be used.
5109
5110 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5111 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5112 and the realloc
5113 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5114 C<len>, and already meets the requirements for storing in C<SvPVX>).
5115
5116 =for apidoc Amnh||SV_SMAGIC
5117 =for apidoc Amnh||SV_HAS_TRAILING_NUL
5118
5119 =cut
5120 */
5121
5122 void
5123 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5124 {
5125     STRLEN allocate;
5126
5127     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5128
5129     SV_CHECK_THINKFIRST_COW_DROP(sv);
5130     SvUPGRADE(sv, SVt_PV);
5131     if (!ptr) {
5132         (void)SvOK_off(sv);
5133         if (flags & SV_SMAGIC)
5134             SvSETMAGIC(sv);
5135         return;
5136     }
5137     if (SvPVX_const(sv))
5138         SvPV_free(sv);
5139
5140 #ifdef DEBUGGING
5141     if (flags & SV_HAS_TRAILING_NUL)
5142         assert(ptr[len] == '\0');
5143 #endif
5144
5145     allocate = (flags & SV_HAS_TRAILING_NUL)
5146         ? len + 1 :
5147 #ifdef Perl_safesysmalloc_size
5148         len + 1;
5149 #else 
5150         PERL_STRLEN_ROUNDUP(len + 1);
5151 #endif
5152     if (flags & SV_HAS_TRAILING_NUL) {
5153         /* It's long enough - do nothing.
5154            Specifically Perl_newCONSTSUB is relying on this.  */
5155     } else {
5156 #ifdef DEBUGGING
5157         /* Force a move to shake out bugs in callers.  */
5158         char *new_ptr = (char*)safemalloc(allocate);
5159         Copy(ptr, new_ptr, len, char);
5160         PoisonFree(ptr,len,char);
5161         Safefree(ptr);
5162         ptr = new_ptr;
5163 #else
5164         ptr = (char*) saferealloc (ptr, allocate);
5165 #endif
5166     }
5167 #ifdef Perl_safesysmalloc_size
5168     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5169 #else
5170     SvLEN_set(sv, allocate);
5171 #endif
5172     SvCUR_set(sv, len);
5173     SvPV_set(sv, ptr);
5174     if (!(flags & SV_HAS_TRAILING_NUL)) {
5175         ptr[len] = '\0';
5176     }
5177     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5178     SvTAINT(sv);
5179     if (flags & SV_SMAGIC)
5180         SvSETMAGIC(sv);
5181 }
5182
5183
5184 static void
5185 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5186 {
5187     assert(SvIsCOW(sv));
5188     {
5189 #ifdef PERL_ANY_COW
5190         const char * const pvx = SvPVX_const(sv);
5191         const STRLEN len = SvLEN(sv);
5192         const STRLEN cur = SvCUR(sv);
5193
5194 #ifdef DEBUGGING
5195         if (DEBUG_C_TEST) {
5196                 PerlIO_printf(Perl_debug_log,
5197                               "Copy on write: Force normal %ld\n",
5198                               (long) flags);
5199                 sv_dump(sv);
5200         }
5201 #endif
5202         SvIsCOW_off(sv);
5203 # ifdef PERL_COPY_ON_WRITE
5204         if (len) {
5205             /* Must do this first, since the CowREFCNT uses SvPVX and
5206             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5207             the only owner left of the buffer. */
5208             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5209             {
5210                 U8 cowrefcnt = CowREFCNT(sv);
5211                 if(cowrefcnt != 0) {
5212                     cowrefcnt--;
5213                     CowREFCNT(sv) = cowrefcnt;
5214                     sv_buf_to_ro(sv);
5215                     goto copy_over;
5216                 }
5217             }
5218             /* Else we are the only owner of the buffer. */
5219         }
5220         else
5221 # endif
5222         {
5223             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5224             copy_over:
5225             SvPV_set(sv, NULL);
5226             SvCUR_set(sv, 0);
5227             SvLEN_set(sv, 0);
5228             if (flags & SV_COW_DROP_PV) {
5229                 /* OK, so we don't need to copy our buffer.  */
5230                 SvPOK_off(sv);
5231             } else {
5232                 SvGROW(sv, cur + 1);
5233                 Move(pvx,SvPVX(sv),cur,char);
5234                 SvCUR_set(sv, cur);
5235                 *SvEND(sv) = '\0';
5236             }
5237             if (! len) {
5238                         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5239             }
5240 #ifdef DEBUGGING
5241             if (DEBUG_C_TEST)
5242                 sv_dump(sv);
5243 #endif
5244         }
5245 #else
5246             const char * const pvx = SvPVX_const(sv);
5247             const STRLEN len = SvCUR(sv);
5248             SvIsCOW_off(sv);
5249             SvPV_set(sv, NULL);
5250             SvLEN_set(sv, 0);
5251             if (flags & SV_COW_DROP_PV) {
5252                 /* OK, so we don't need to copy our buffer.  */
5253                 SvPOK_off(sv);
5254             } else {
5255                 SvGROW(sv, len + 1);
5256                 Move(pvx,SvPVX(sv),len,char);
5257                 *SvEND(sv) = '\0';
5258             }
5259             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5260 #endif
5261     }
5262 }
5263
5264
5265 /*
5266 =for apidoc sv_force_normal_flags
5267
5268 Undo various types of fakery on an SV, where fakery means
5269 "more than" a string: if the PV is a shared string, make
5270 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5271 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5272 we do the copy, and is also used locally; if this is a
5273 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5274 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5275 C<SvPOK_off> rather than making a copy.  (Used where this
5276 scalar is about to be set to some other value.)  In addition,
5277 the C<flags> parameter gets passed to C<sv_unref_flags()>
5278 when unreffing.  C<sv_force_normal> calls this function
5279 with flags set to 0.
5280
5281 This function is expected to be used to signal to perl that this SV is
5282 about to be written to, and any extra book-keeping needs to be taken care
5283 of.  Hence, it croaks on read-only values.
5284
5285 =for apidoc Amnh||SV_COW_DROP_PV
5286
5287 =cut
5288 */
5289
5290 void
5291 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5292 {
5293     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5294
5295     if (SvREADONLY(sv))
5296         Perl_croak_no_modify();
5297     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5298         S_sv_uncow(aTHX_ sv, flags);
5299     if (SvROK(sv))
5300         sv_unref_flags(sv, flags);
5301     else if (SvFAKE(sv) && isGV_with_GP(sv))
5302         sv_unglob(sv, flags);
5303     else if (SvFAKE(sv) && isREGEXP(sv)) {
5304         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5305            to sv_unglob. We only need it here, so inline it.  */
5306         const bool islv = SvTYPE(sv) == SVt_PVLV;
5307         const svtype new_type =
5308           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5309         SV *const temp = newSV_type(new_type);
5310         regexp *old_rx_body;
5311
5312         if (new_type == SVt_PVMG) {
5313             SvMAGIC_set(temp, SvMAGIC(sv));
5314             SvMAGIC_set(sv, NULL);
5315             SvSTASH_set(temp, SvSTASH(sv));
5316             SvSTASH_set(sv, NULL);
5317         }
5318         if (!islv)
5319             SvCUR_set(temp, SvCUR(sv));
5320         /* Remember that SvPVX is in the head, not the body. */
5321         assert(ReANY((REGEXP *)sv)->mother_re);
5322
5323         if (islv) {
5324             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5325              * whose xpvlenu_rx field points to the regex body */
5326             XPV *xpv = (XPV*)(SvANY(sv));
5327             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5328             xpv->xpv_len_u.xpvlenu_rx = NULL;
5329         }
5330         else
5331             old_rx_body = ReANY((REGEXP *)sv);
5332
5333         /* Their buffer is already owned by someone else. */
5334         if (flags & SV_COW_DROP_PV) {
5335             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5336                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5337                a union with xpvlenu_rx) */
5338             assert(!SvLEN(islv ? sv : temp));
5339             sv->sv_u.svu_pv = 0;
5340         }
5341         else {
5342             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5343             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5344             SvPOK_on(sv);
5345         }
5346
5347         /* Now swap the rest of the bodies. */
5348
5349         SvFAKE_off(sv);
5350         if (!islv) {
5351             SvFLAGS(sv) &= ~SVTYPEMASK;
5352             SvFLAGS(sv) |= new_type;
5353             SvANY(sv) = SvANY(temp);
5354         }
5355
5356         SvFLAGS(temp) &= ~(SVTYPEMASK);
5357         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5358         SvANY(temp) = old_rx_body;
5359
5360         SvREFCNT_dec_NN(temp);
5361     }
5362     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5363 }
5364
5365 /*
5366 =for apidoc sv_chop
5367
5368 Efficient removal of characters from the beginning of the string buffer.
5369 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5370 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5371 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5372 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5373
5374 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5375 refer to the same chunk of data.
5376
5377 The unfortunate similarity of this function's name to that of Perl's C<chop>
5378 operator is strictly coincidental.  This function works from the left;
5379 C<chop> works from the right.
5380
5381 =cut
5382 */
5383
5384 void
5385 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5386 {
5387     STRLEN delta;
5388     STRLEN old_delta;
5389     U8 *p;
5390 #ifdef DEBUGGING
5391     const U8 *evacp;
5392     STRLEN evacn;
5393 #endif
5394     STRLEN max_delta;
5395
5396     PERL_ARGS_ASSERT_SV_CHOP;
5397
5398     if (!ptr || !SvPOKp(sv))
5399         return;
5400     delta = ptr - SvPVX_const(sv);
5401     if (!delta) {
5402         /* Nothing to do.  */
5403         return;
5404     }
5405     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5406     if (delta > max_delta)
5407         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5408                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5409     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5410     SV_CHECK_THINKFIRST(sv);
5411     SvPOK_only_UTF8(sv);
5412
5413     if (!SvOOK(sv)) {
5414         if (!SvLEN(sv)) { /* make copy of shared string */
5415             const char *pvx = SvPVX_const(sv);
5416             const STRLEN len = SvCUR(sv);
5417             SvGROW(sv, len + 1);
5418             Move(pvx,SvPVX(sv),len,char);
5419             *SvEND(sv) = '\0';
5420         }
5421         SvOOK_on(sv);
5422         old_delta = 0;
5423     } else {
5424         SvOOK_offset(sv, old_delta);
5425     }
5426     SvLEN_set(sv, SvLEN(sv) - delta);
5427     SvCUR_set(sv, SvCUR(sv) - delta);
5428     SvPV_set(sv, SvPVX(sv) + delta);
5429
5430     p = (U8 *)SvPVX_const(sv);
5431
5432 #ifdef DEBUGGING
5433     /* how many bytes were evacuated?  we will fill them with sentinel
5434        bytes, except for the part holding the new offset of course. */
5435     evacn = delta;
5436     if (old_delta)
5437         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5438     assert(evacn);
5439     assert(evacn <= delta + old_delta);
5440     evacp = p - evacn;
5441 #endif
5442
5443     /* This sets 'delta' to the accumulated value of all deltas so far */
5444     delta += old_delta;
5445     assert(delta);
5446
5447     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5448      * the string; otherwise store a 0 byte there and store 'delta' just prior
5449      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5450      * portion of the chopped part of the string */
5451     if (delta < 0x100) {
5452         *--p = (U8) delta;
5453     } else {
5454         *--p = 0;
5455         p -= sizeof(STRLEN);
5456         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5457     }
5458
5459 #ifdef DEBUGGING
5460     /* Fill the preceding buffer with sentinals to verify that no-one is
5461        using it.  */
5462     while (p > evacp) {
5463         --p;
5464         *p = (U8)PTR2UV(p);
5465     }
5466 #endif
5467 }
5468
5469 /*
5470 =for apidoc sv_catpvn
5471
5472 Concatenates the string onto the end of the string which is in the SV.
5473 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5474 status set, then the bytes appended should be valid UTF-8.
5475 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5476
5477 =for apidoc sv_catpvn_flags
5478
5479 Concatenates the string onto the end of the string which is in the SV.  The
5480 C<len> indicates number of bytes to copy.
5481
5482 By default, the string appended is assumed to be valid UTF-8 if the SV has
5483 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5484 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5485 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5486 string appended will be upgraded to UTF-8 if necessary.
5487
5488 If C<flags> has the C<SV_SMAGIC> bit set, will
5489 C<mg_set> on C<dsv> afterwards if appropriate.
5490 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5491 in terms of this function.
5492
5493 =for apidoc Amnh||SV_CATUTF8
5494 =for apidoc Amnh||SV_CATBYTES
5495 =for apidoc Amnh||SV_SMAGIC
5496
5497 =cut
5498 */
5499
5500 void
5501 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5502 {
5503     STRLEN dlen;
5504     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5505
5506     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5507     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5508
5509     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5510       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5511          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5512          dlen = SvCUR(dsv);
5513       }
5514       else SvGROW(dsv, dlen + slen + 3);
5515       if (sstr == dstr)
5516         sstr = SvPVX_const(dsv);
5517       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5518       SvCUR_set(dsv, SvCUR(dsv) + slen);
5519     }
5520     else {
5521         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5522         const char * const send = sstr + slen;
5523         U8 *d;
5524
5525         /* Something this code does not account for, which I think is
5526            impossible; it would require the same pv to be treated as
5527            bytes *and* utf8, which would indicate a bug elsewhere. */
5528         assert(sstr != dstr);
5529
5530         SvGROW(dsv, dlen + slen * 2 + 3);
5531         d = (U8 *)SvPVX(dsv) + dlen;
5532
5533         while (sstr < send) {
5534             append_utf8_from_native_byte(*sstr, &d);
5535             sstr++;
5536         }
5537         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5538     }
5539     *SvEND(dsv) = '\0';
5540     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5541     SvTAINT(dsv);
5542     if (flags & SV_SMAGIC)
5543         SvSETMAGIC(dsv);
5544 }
5545
5546 /*
5547 =for apidoc sv_catsv
5548
5549 Concatenates the string from SV C<ssv> onto the end of the string in SV
5550 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5551 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5552 and C<L</sv_catsv_nomg>>.
5553
5554 =for apidoc sv_catsv_flags
5555
5556 Concatenates the string from SV C<ssv> onto the end of the string in SV
5557 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5558 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5559 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5560 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5561 and C<sv_catsv_mg> are implemented in terms of this function.
5562
5563 =cut */
5564
5565 void
5566 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5567 {
5568     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5569
5570     if (ssv) {
5571         STRLEN slen;
5572         const char *spv = SvPV_flags_const(ssv, slen, flags);
5573         if (flags & SV_GMAGIC)
5574                 SvGETMAGIC(dsv);
5575         sv_catpvn_flags(dsv, spv, slen,
5576                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5577         if (flags & SV_SMAGIC)
5578                 SvSETMAGIC(dsv);
5579     }
5580 }
5581
5582 /*
5583 =for apidoc sv_catpv
5584
5585 Concatenates the C<NUL>-terminated string onto the end of the string which is
5586 in the SV.
5587 If the SV has the UTF-8 status set, then the bytes appended should be
5588 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5589 C<L</sv_catpv_mg>>.
5590
5591 =cut */
5592
5593 void
5594 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5595 {
5596     STRLEN len;
5597     STRLEN tlen;
5598     char *junk;
5599
5600     PERL_ARGS_ASSERT_SV_CATPV;
5601
5602     if (!ptr)
5603         return;
5604     junk = SvPV_force(sv, tlen);
5605     len = strlen(ptr);
5606     SvGROW(sv, tlen + len + 1);
5607     if (ptr == junk)
5608         ptr = SvPVX_const(sv);
5609     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5610     SvCUR_set(sv, SvCUR(sv) + len);
5611     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5612     SvTAINT(sv);
5613 }
5614
5615 /*
5616 =for apidoc sv_catpv_flags
5617
5618 Concatenates the C<NUL>-terminated string onto the end of the string which is
5619 in the SV.
5620 If the SV has the UTF-8 status set, then the bytes appended should
5621 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5622 on the modified SV if appropriate.
5623
5624 =cut
5625 */
5626
5627 void
5628 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5629 {
5630     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5631     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5632 }
5633
5634 /*
5635 =for apidoc sv_catpv_mg
5636
5637 Like C<sv_catpv>, but also handles 'set' magic.
5638
5639 =cut
5640 */
5641
5642 void
5643 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5644 {
5645     PERL_ARGS_ASSERT_SV_CATPV_MG;
5646
5647     sv_catpv(sv,ptr);
5648     SvSETMAGIC(sv);
5649 }
5650
5651 /*
5652 =for apidoc newSV
5653
5654 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5655 bytes of preallocated string space the SV should have.  An extra byte for a
5656 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5657 space is allocated.)  The reference count for the new SV is set to 1.
5658
5659 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5660 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5661 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5662 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5663 modules supporting older perls.
5664
5665 =cut
5666 */
5667
5668 SV *
5669 Perl_newSV(pTHX_ const STRLEN len)
5670 {
5671     SV *sv;
5672
5673     new_SV(sv);
5674     if (len) {
5675         sv_grow(sv, len + 1);
5676     }
5677     return sv;
5678 }
5679 /*
5680 =for apidoc sv_magicext
5681
5682 Adds magic to an SV, upgrading it if necessary.  Applies the
5683 supplied C<vtable> and returns a pointer to the magic added.
5684
5685 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5686 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5687 one instance of the same C<how>.
5688
5689 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5690 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5691 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5692 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5693
5694 (This is now used as a subroutine by C<sv_magic>.)
5695
5696 =cut
5697 */
5698 MAGIC * 
5699 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5700                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5701 {
5702     MAGIC* mg;
5703
5704     PERL_ARGS_ASSERT_SV_MAGICEXT;
5705
5706     SvUPGRADE(sv, SVt_PVMG);
5707     Newxz(mg, 1, MAGIC);
5708     mg->mg_moremagic = SvMAGIC(sv);
5709     SvMAGIC_set(sv, mg);
5710
5711     /* Sometimes a magic contains a reference loop, where the sv and
5712        object refer to each other.  To prevent a reference loop that
5713        would prevent such objects being freed, we look for such loops
5714        and if we find one we avoid incrementing the object refcount.
5715
5716        Note we cannot do this to avoid self-tie loops as intervening RV must
5717        have its REFCNT incremented to keep it in existence.
5718
5719     */
5720     if (!obj || obj == sv ||
5721         how == PERL_MAGIC_arylen ||
5722         how == PERL_MAGIC_regdata ||
5723         how == PERL_MAGIC_regdatum ||
5724         how == PERL_MAGIC_symtab ||
5725         (SvTYPE(obj) == SVt_PVGV &&
5726             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5727              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5728              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5729     {
5730         mg->mg_obj = obj;
5731     }
5732     else {
5733         mg->mg_obj = SvREFCNT_inc_simple(obj);
5734         mg->mg_flags |= MGf_REFCOUNTED;
5735     }
5736
5737     /* Normal self-ties simply pass a null object, and instead of
5738        using mg_obj directly, use the SvTIED_obj macro to produce a
5739        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5740        with an RV obj pointing to the glob containing the PVIO.  In
5741        this case, to avoid a reference loop, we need to weaken the
5742        reference.
5743     */
5744
5745     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5746         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5747     {
5748       sv_rvweaken(obj);
5749     }
5750
5751     mg->mg_type = how;
5752     mg->mg_len = namlen;
5753     if (name) {
5754         if (namlen > 0)
5755             mg->mg_ptr = savepvn(name, namlen);
5756         else if (namlen == HEf_SVKEY) {
5757             /* Yes, this is casting away const. This is only for the case of
5758                HEf_SVKEY. I think we need to document this aberation of the
5759                constness of the API, rather than making name non-const, as
5760                that change propagating outwards a long way.  */
5761             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5762         } else
5763             mg->mg_ptr = (char *) name;
5764     }
5765     mg->mg_virtual = (MGVTBL *) vtable;
5766
5767     mg_magical(sv);
5768     return mg;
5769 }
5770
5771 MAGIC *
5772 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5773 {
5774     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5775     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5776         /* This sv is only a delegate.  //g magic must be attached to
5777            its target. */
5778         vivify_defelem(sv);
5779         sv = LvTARG(sv);
5780     }
5781     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5782                        &PL_vtbl_mglob, 0, 0);
5783 }
5784
5785 /*
5786 =for apidoc sv_magic
5787
5788 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5789 necessary, then adds a new magic item of type C<how> to the head of the
5790 magic list.
5791
5792 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5793 handling of the C<name> and C<namlen> arguments.
5794
5795 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5796 to add more than one instance of the same C<how>.
5797
5798 =cut
5799 */
5800
5801 void
5802 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5803              const char *const name, const I32 namlen)
5804 {
5805     const MGVTBL *vtable;
5806     MAGIC* mg;
5807     unsigned int flags;
5808     unsigned int vtable_index;
5809
5810     PERL_ARGS_ASSERT_SV_MAGIC;
5811
5812     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5813         || ((flags = PL_magic_data[how]),
5814             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5815             > magic_vtable_max))
5816         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5817
5818     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5819        Useful for attaching extension internal data to perl vars.
5820        Note that multiple extensions may clash if magical scalars
5821        etc holding private data from one are passed to another. */
5822
5823     vtable = (vtable_index == magic_vtable_max)
5824         ? NULL : PL_magic_vtables + vtable_index;
5825
5826     if (SvREADONLY(sv)) {
5827         if (
5828             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5829            )
5830         {
5831             Perl_croak_no_modify();
5832         }
5833     }
5834     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5835         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5836             /* sv_magic() refuses to add a magic of the same 'how' as an
5837                existing one
5838              */
5839             if (how == PERL_MAGIC_taint)
5840                 mg->mg_len |= 1;
5841             return;
5842         }
5843     }
5844
5845     /* Force pos to be stored as characters, not bytes. */
5846     if (SvMAGICAL(sv) && DO_UTF8(sv)
5847       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5848       && mg->mg_len != -1
5849       && mg->mg_flags & MGf_BYTES) {
5850         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5851                                                SV_CONST_RETURN);
5852         mg->mg_flags &= ~MGf_BYTES;
5853     }
5854
5855     /* Rest of work is done else where */
5856     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5857
5858     switch (how) {
5859     case PERL_MAGIC_taint:
5860         mg->mg_len = 1;
5861         break;
5862     case PERL_MAGIC_ext:
5863     case PERL_MAGIC_dbfile:
5864         SvRMAGICAL_on(sv);
5865         break;
5866     }
5867 }
5868
5869 static int
5870 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5871 {
5872     MAGIC* mg;
5873     MAGIC** mgp;
5874
5875     assert(flags <= 1);
5876
5877     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5878         return 0;
5879     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5880     for (mg = *mgp; mg; mg = *mgp) {
5881         const MGVTBL* const virt = mg->mg_virtual;
5882         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5883             *mgp = mg->mg_moremagic;
5884             if (virt && virt->svt_free)
5885                 virt->svt_free(aTHX_ sv, mg);
5886             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5887                 if (mg->mg_len > 0)
5888                     Safefree(mg->mg_ptr);
5889                 else if (mg->mg_len == HEf_SVKEY)
5890                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5891                 else if (mg->mg_type == PERL_MAGIC_utf8)
5892                     Safefree(mg->mg_ptr);
5893             }
5894             if (mg->mg_flags & MGf_REFCOUNTED)
5895                 SvREFCNT_dec(mg->mg_obj);
5896             Safefree(mg);
5897         }
5898         else
5899             mgp = &mg->mg_moremagic;
5900     }
5901     if (SvMAGIC(sv)) {
5902         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5903             mg_magical(sv);     /*    else fix the flags now */
5904     }
5905     else
5906         SvMAGICAL_off(sv);
5907
5908     return 0;
5909 }
5910
5911 /*
5912 =for apidoc sv_unmagic
5913
5914 Removes all magic of type C<type> from an SV.
5915
5916 =cut
5917 */
5918
5919 int
5920 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5921 {
5922     PERL_ARGS_ASSERT_SV_UNMAGIC;
5923     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5924 }
5925
5926 /*
5927 =for apidoc sv_unmagicext
5928
5929 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5930
5931 =cut
5932 */
5933
5934 int
5935 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5936 {
5937     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5938     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5939 }
5940
5941 /*
5942 =for apidoc sv_rvweaken
5943
5944 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5945 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5946 push a back-reference to this RV onto the array of backreferences
5947 associated with that magic.  If the RV is magical, set magic will be
5948 called after the RV is cleared.  Silently ignores C<undef> and warns
5949 on already-weak references.
5950
5951 =cut
5952 */
5953
5954 SV *
5955 Perl_sv_rvweaken(pTHX_ SV *const sv)
5956 {
5957     SV *tsv;
5958
5959     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5960
5961     if (!SvOK(sv))  /* let undefs pass */
5962         return sv;
5963     if (!SvROK(sv))
5964         Perl_croak(aTHX_ "Can't weaken a nonreference");
5965     else if (SvWEAKREF(sv)) {
5966         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5967         return sv;
5968     }
5969     else if (SvREADONLY(sv)) croak_no_modify();
5970     tsv = SvRV(sv);
5971     Perl_sv_add_backref(aTHX_ tsv, sv);
5972     SvWEAKREF_on(sv);
5973     SvREFCNT_dec_NN(tsv);
5974     return sv;
5975 }
5976
5977 /*
5978 =for apidoc sv_rvunweaken
5979
5980 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5981 the backreference to this RV from the array of backreferences
5982 associated with the target SV, increment the refcount of the target.
5983 Silently ignores C<undef> and warns on non-weak references.
5984
5985 =cut
5986 */
5987
5988 SV *
5989 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5990 {
5991     SV *tsv;
5992
5993     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5994
5995     if (!SvOK(sv)) /* let undefs pass */
5996         return sv;
5997     if (!SvROK(sv))
5998         Perl_croak(aTHX_ "Can't unweaken a nonreference");
5999     else if (!SvWEAKREF(sv)) {
6000         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
6001         return sv;
6002     }
6003     else if (SvREADONLY(sv)) croak_no_modify();
6004
6005     tsv = SvRV(sv);
6006     SvWEAKREF_off(sv);
6007     SvROK_on(sv);
6008     SvREFCNT_inc_NN(tsv);
6009     Perl_sv_del_backref(aTHX_ tsv, sv);
6010     return sv;
6011 }
6012
6013 /*
6014 =for apidoc sv_get_backrefs
6015
6016 If C<sv> is the target of a weak reference then it returns the back
6017 references structure associated with the sv; otherwise return C<NULL>.
6018
6019 When returning a non-null result the type of the return is relevant. If it
6020 is an AV then the elements of the AV are the weak reference RVs which
6021 point at this item. If it is any other type then the item itself is the
6022 weak reference.
6023
6024 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6025 C<Perl_sv_kill_backrefs()>
6026
6027 =cut
6028 */
6029
6030 SV *
6031 Perl_sv_get_backrefs(SV *const sv)
6032 {
6033     SV *backrefs= NULL;
6034
6035     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6036
6037     /* find slot to store array or singleton backref */
6038
6039     if (SvTYPE(sv) == SVt_PVHV) {
6040         if (SvOOK(sv)) {
6041             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6042             backrefs = (SV *)iter->xhv_backreferences;
6043         }
6044     } else if (SvMAGICAL(sv)) {
6045         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6046         if (mg)
6047             backrefs = mg->mg_obj;
6048     }
6049     return backrefs;
6050 }
6051
6052 /* Give tsv backref magic if it hasn't already got it, then push a
6053  * back-reference to sv onto the array associated with the backref magic.
6054  *
6055  * As an optimisation, if there's only one backref and it's not an AV,
6056  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6057  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6058  * active.)
6059  */
6060
6061 /* A discussion about the backreferences array and its refcount:
6062  *
6063  * The AV holding the backreferences is pointed to either as the mg_obj of
6064  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6065  * xhv_backreferences field. The array is created with a refcount
6066  * of 2. This means that if during global destruction the array gets
6067  * picked on before its parent to have its refcount decremented by the
6068  * random zapper, it won't actually be freed, meaning it's still there for
6069  * when its parent gets freed.
6070  *
6071  * When the parent SV is freed, the extra ref is killed by
6072  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6073  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6074  *
6075  * When a single backref SV is stored directly, it is not reference
6076  * counted.
6077  */
6078
6079 void
6080 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6081 {
6082     SV **svp;
6083     AV *av = NULL;
6084     MAGIC *mg = NULL;
6085
6086     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6087
6088     /* find slot to store array or singleton backref */
6089
6090     if (SvTYPE(tsv) == SVt_PVHV) {
6091         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6092     } else {
6093         if (SvMAGICAL(tsv))
6094             mg = mg_find(tsv, PERL_MAGIC_backref);
6095         if (!mg)
6096             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6097         svp = &(mg->mg_obj);
6098     }
6099
6100     /* create or retrieve the array */
6101
6102     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6103         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6104     ) {
6105         /* create array */
6106         if (mg)
6107             mg->mg_flags |= MGf_REFCOUNTED;
6108         av = newAV();
6109         AvREAL_off(av);
6110         SvREFCNT_inc_simple_void_NN(av);
6111         /* av now has a refcnt of 2; see discussion above */
6112         av_extend(av, *svp ? 2 : 1);
6113         if (*svp) {
6114             /* move single existing backref to the array */
6115             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6116         }
6117         *svp = (SV*)av;
6118     }
6119     else {
6120         av = MUTABLE_AV(*svp);
6121         if (!av) {
6122             /* optimisation: store single backref directly in HvAUX or mg_obj */
6123             *svp = sv;
6124             return;
6125         }
6126         assert(SvTYPE(av) == SVt_PVAV);
6127         if (AvFILLp(av) >= AvMAX(av)) {
6128             av_extend(av, AvFILLp(av)+1);
6129         }
6130     }
6131     /* push new backref */
6132     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6133 }
6134
6135 /* delete a back-reference to ourselves from the backref magic associated
6136  * with the SV we point to.
6137  */
6138
6139 void
6140 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6141 {
6142     SV **svp = NULL;
6143
6144     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6145
6146     if (SvTYPE(tsv) == SVt_PVHV) {
6147         if (SvOOK(tsv))
6148             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6149     }
6150     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6151         /* It's possible for the the last (strong) reference to tsv to have
6152            become freed *before* the last thing holding a weak reference.
6153            If both survive longer than the backreferences array, then when
6154            the referent's reference count drops to 0 and it is freed, it's
6155            not able to chase the backreferences, so they aren't NULLed.
6156
6157            For example, a CV holds a weak reference to its stash. If both the
6158            CV and the stash survive longer than the backreferences array,
6159            and the CV gets picked for the SvBREAK() treatment first,
6160            *and* it turns out that the stash is only being kept alive because
6161            of an our variable in the pad of the CV, then midway during CV
6162            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6163            It ends up pointing to the freed HV. Hence it's chased in here, and
6164            if this block wasn't here, it would hit the !svp panic just below.
6165
6166            I don't believe that "better" destruction ordering is going to help
6167            here - during global destruction there's always going to be the
6168            chance that something goes out of order. We've tried to make it
6169            foolproof before, and it only resulted in evolutionary pressure on
6170            fools. Which made us look foolish for our hubris. :-(
6171         */
6172         return;
6173     }
6174     else {
6175         MAGIC *const mg
6176             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6177         svp =  mg ? &(mg->mg_obj) : NULL;
6178     }
6179
6180     if (!svp)
6181         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6182     if (!*svp) {
6183         /* It's possible that sv is being freed recursively part way through the
6184            freeing of tsv. If this happens, the backreferences array of tsv has
6185            already been freed, and so svp will be NULL. If this is the case,
6186            we should not panic. Instead, nothing needs doing, so return.  */
6187         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6188             return;
6189         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6190                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6191     }
6192
6193     if (SvTYPE(*svp) == SVt_PVAV) {
6194 #ifdef DEBUGGING
6195         int count = 1;
6196 #endif
6197         AV * const av = (AV*)*svp;
6198         SSize_t fill;
6199         assert(!SvIS_FREED(av));
6200         fill = AvFILLp(av);
6201         assert(fill > -1);
6202         svp = AvARRAY(av);
6203         /* for an SV with N weak references to it, if all those
6204          * weak refs are deleted, then sv_del_backref will be called
6205          * N times and O(N^2) compares will be done within the backref
6206          * array. To ameliorate this potential slowness, we:
6207          * 1) make sure this code is as tight as possible;
6208          * 2) when looking for SV, look for it at both the head and tail of the
6209          *    array first before searching the rest, since some create/destroy
6210          *    patterns will cause the backrefs to be freed in order.
6211          */
6212         if (*svp == sv) {
6213             AvARRAY(av)++;
6214             AvMAX(av)--;
6215         }
6216         else {
6217             SV **p = &svp[fill];
6218             SV *const topsv = *p;
6219             if (topsv != sv) {
6220 #ifdef DEBUGGING
6221                 count = 0;
6222 #endif
6223                 while (--p > svp) {
6224                     if (*p == sv) {
6225                         /* We weren't the last entry.
6226                            An unordered list has this property that you
6227                            can take the last element off the end to fill
6228                            the hole, and it's still an unordered list :-)
6229                         */
6230                         *p = topsv;
6231 #ifdef DEBUGGING
6232                         count++;
6233 #else
6234                         break; /* should only be one */
6235 #endif
6236                     }
6237                 }
6238             }
6239         }
6240         assert(count ==1);
6241         AvFILLp(av) = fill-1;
6242     }
6243     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6244         /* freed AV; skip */
6245     }
6246     else {
6247         /* optimisation: only a single backref, stored directly */
6248         if (*svp != sv)
6249             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6250                        (void*)*svp, (void*)sv);
6251         *svp = NULL;
6252     }
6253
6254 }
6255
6256 void
6257 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6258 {
6259     SV **svp;
6260     SV **last;
6261     bool is_array;
6262
6263     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6264
6265     if (!av)
6266         return;
6267
6268     /* after multiple passes through Perl_sv_clean_all() for a thingy
6269      * that has badly leaked, the backref array may have gotten freed,
6270      * since we only protect it against 1 round of cleanup */
6271     if (SvIS_FREED(av)) {
6272         if (PL_in_clean_all) /* All is fair */
6273             return;
6274         Perl_croak(aTHX_
6275                    "panic: magic_killbackrefs (freed backref AV/SV)");
6276     }
6277
6278
6279     is_array = (SvTYPE(av) == SVt_PVAV);
6280     if (is_array) {
6281         assert(!SvIS_FREED(av));
6282         svp = AvARRAY(av);
6283         if (svp)
6284             last = svp + AvFILLp(av);
6285     }
6286     else {
6287         /* optimisation: only a single backref, stored directly */
6288         svp = (SV**)&av;
6289         last = svp;
6290     }
6291
6292     if (svp) {
6293         while (svp <= last) {
6294             if (*svp) {
6295                 SV *const referrer = *svp;
6296                 if (SvWEAKREF(referrer)) {
6297                     /* XXX Should we check that it hasn't changed? */
6298                     assert(SvROK(referrer));
6299                     SvRV_set(referrer, 0);
6300                     SvOK_off(referrer);
6301                     SvWEAKREF_off(referrer);
6302                     SvSETMAGIC(referrer);
6303                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6304                            SvTYPE(referrer) == SVt_PVLV) {
6305                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6306                     /* You lookin' at me?  */
6307                     assert(GvSTASH(referrer));
6308                     assert(GvSTASH(referrer) == (const HV *)sv);
6309                     GvSTASH(referrer) = 0;
6310                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6311                            SvTYPE(referrer) == SVt_PVFM) {
6312                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6313                         /* You lookin' at me?  */
6314                         assert(CvSTASH(referrer));
6315                         assert(CvSTASH(referrer) == (const HV *)sv);
6316                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6317                     }
6318                     else {
6319                         assert(SvTYPE(sv) == SVt_PVGV);
6320                         /* You lookin' at me?  */
6321                         assert(CvGV(referrer));
6322                         assert(CvGV(referrer) == (const GV *)sv);
6323                         anonymise_cv_maybe(MUTABLE_GV(sv),
6324                                                 MUTABLE_CV(referrer));
6325                     }
6326
6327                 } else {
6328                     Perl_croak(aTHX_
6329                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6330                                (UV)SvFLAGS(referrer));
6331                 }
6332
6333                 if (is_array)
6334                     *svp = NULL;
6335             }
6336             svp++;
6337         }
6338     }
6339     if (is_array) {
6340         AvFILLp(av) = -1;
6341         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6342     }
6343     return;
6344 }
6345
6346 /*
6347 =for apidoc sv_insert
6348
6349 Inserts and/or replaces a string at the specified offset/length within the SV.
6350 Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
6351 C<little> replacing C<len> bytes of the string in C<bigstr> starting at
6352 C<offset>.  Handles get magic.
6353
6354 =for apidoc sv_insert_flags
6355
6356 Same as C<sv_insert>, but the extra C<flags> are passed to the
6357 C<SvPV_force_flags> that applies to C<bigstr>.
6358
6359 =cut
6360 */
6361
6362 void
6363 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6364 {
6365     char *big;
6366     char *mid;
6367     char *midend;
6368     char *bigend;
6369     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6370     STRLEN curlen;
6371
6372     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6373
6374     SvPV_force_flags(bigstr, curlen, flags);
6375     (void)SvPOK_only_UTF8(bigstr);
6376
6377     if (little >= SvPVX(bigstr) &&
6378         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6379         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6380            or little...little+littlelen might overlap offset...offset+len we make a copy
6381         */
6382         little = savepvn(little, littlelen);
6383         SAVEFREEPV(little);
6384     }
6385
6386     if (offset + len > curlen) {
6387         SvGROW(bigstr, offset+len+1);
6388         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6389         SvCUR_set(bigstr, offset+len);
6390     }
6391
6392     SvTAINT(bigstr);
6393     i = littlelen - len;
6394     if (i > 0) {                        /* string might grow */
6395         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6396         mid = big + offset + len;
6397         midend = bigend = big + SvCUR(bigstr);
6398         bigend += i;
6399         *bigend = '\0';
6400         while (midend > mid)            /* shove everything down */
6401             *--bigend = *--midend;
6402         Move(little,big+offset,littlelen,char);
6403         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6404         SvSETMAGIC(bigstr);
6405         return;
6406     }
6407     else if (i == 0) {
6408         Move(little,SvPVX(bigstr)+offset,len,char);
6409         SvSETMAGIC(bigstr);
6410         return;
6411     }
6412
6413     big = SvPVX(bigstr);
6414     mid = big + offset;
6415     midend = mid + len;
6416     bigend = big + SvCUR(bigstr);
6417
6418     if (midend > bigend)
6419         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6420                    midend, bigend);
6421
6422     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6423         if (littlelen) {
6424             Move(little, mid, littlelen,char);
6425             mid += littlelen;
6426         }
6427         i = bigend - midend;
6428         if (i > 0) {
6429             Move(midend, mid, i,char);
6430             mid += i;
6431         }
6432         *mid = '\0';
6433         SvCUR_set(bigstr, mid - big);
6434     }
6435     else if ((i = mid - big)) { /* faster from front */
6436         midend -= littlelen;
6437         mid = midend;
6438         Move(big, midend - i, i, char);
6439         sv_chop(bigstr,midend-i);
6440         if (littlelen)
6441             Move(little, mid, littlelen,char);
6442     }
6443     else if (littlelen) {
6444         midend -= littlelen;
6445         sv_chop(bigstr,midend);
6446         Move(little,midend,littlelen,char);
6447     }
6448     else {
6449         sv_chop(bigstr,midend);
6450     }
6451     SvSETMAGIC(bigstr);
6452 }
6453
6454 /*
6455 =for apidoc sv_replace
6456
6457 Make the first argument a copy of the second, then delete the original.
6458 The target SV physically takes over ownership of the body of the source SV
6459 and inherits its flags; however, the target keeps any magic it owns,
6460 and any magic in the source is discarded.
6461 Note that this is a rather specialist SV copying operation; most of the
6462 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6463
6464 =cut
6465 */
6466
6467 void
6468 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6469 {
6470     const U32 refcnt = SvREFCNT(sv);
6471
6472     PERL_ARGS_ASSERT_SV_REPLACE;
6473
6474     SV_CHECK_THINKFIRST_COW_DROP(sv);
6475     if (SvREFCNT(nsv) != 1) {
6476         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6477                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6478     }
6479     if (SvMAGICAL(sv)) {
6480         if (SvMAGICAL(nsv))
6481             mg_free(nsv);
6482         else
6483             sv_upgrade(nsv, SVt_PVMG);
6484         SvMAGIC_set(nsv, SvMAGIC(sv));
6485         SvFLAGS(nsv) |= SvMAGICAL(sv);
6486         SvMAGICAL_off(sv);
6487         SvMAGIC_set(sv, NULL);
6488     }
6489     SvREFCNT(sv) = 0;
6490     sv_clear(sv);
6491     assert(!SvREFCNT(sv));
6492 #ifdef DEBUG_LEAKING_SCALARS
6493     sv->sv_flags  = nsv->sv_flags;
6494     sv->sv_any    = nsv->sv_any;
6495     sv->sv_refcnt = nsv->sv_refcnt;
6496     sv->sv_u      = nsv->sv_u;
6497 #else
6498     StructCopy(nsv,sv,SV);
6499 #endif
6500     if(SvTYPE(sv) == SVt_IV) {
6501         SET_SVANY_FOR_BODYLESS_IV(sv);
6502     }
6503         
6504
6505     SvREFCNT(sv) = refcnt;
6506     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6507     SvREFCNT(nsv) = 0;
6508     del_SV(nsv);
6509 }
6510
6511 /* We're about to free a GV which has a CV that refers back to us.
6512  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6513  * field) */
6514
6515 STATIC void
6516 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6517 {
6518     SV *gvname;
6519     GV *anongv;
6520
6521     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6522
6523     /* be assertive! */
6524     assert(SvREFCNT(gv) == 0);
6525     assert(isGV(gv) && isGV_with_GP(gv));
6526     assert(GvGP(gv));
6527     assert(!CvANON(cv));
6528     assert(CvGV(cv) == gv);
6529     assert(!CvNAMED(cv));
6530
6531     /* will the CV shortly be freed by gp_free() ? */
6532     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6533         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6534         return;
6535     }
6536
6537     /* if not, anonymise: */
6538     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6539                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6540                     : newSVpvn_flags( "__ANON__", 8, 0 );
6541     sv_catpvs(gvname, "::__ANON__");
6542     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6543     SvREFCNT_dec_NN(gvname);
6544
6545     CvANON_on(cv);
6546     CvCVGV_RC_on(cv);
6547     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6548 }
6549
6550
6551 /*
6552 =for apidoc sv_clear
6553
6554 Clear an SV: call any destructors, free up any memory used by the body,
6555 and free the body itself.  The SV's head is I<not> freed, although
6556 its type is set to all 1's so that it won't inadvertently be assumed
6557 to be live during global destruction etc.
6558 This function should only be called when C<REFCNT> is zero.  Most of the time
6559 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6560 instead.
6561
6562 =cut
6563 */
6564
6565 void
6566 Perl_sv_clear(pTHX_ SV *const orig_sv)
6567 {
6568     dVAR;
6569     HV *stash;
6570     U32 type;
6571     const struct body_details *sv_type_details;
6572     SV* iter_sv = NULL;
6573     SV* next_sv = NULL;
6574     SV *sv = orig_sv;
6575     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6576                               Not strictly necessary */
6577
6578     PERL_ARGS_ASSERT_SV_CLEAR;
6579
6580     /* within this loop, sv is the SV currently being freed, and
6581      * iter_sv is the most recent AV or whatever that's being iterated
6582      * over to provide more SVs */
6583
6584     while (sv) {
6585
6586         type = SvTYPE(sv);
6587
6588         assert(SvREFCNT(sv) == 0);
6589         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6590
6591         if (type <= SVt_IV) {
6592             /* See the comment in sv.h about the collusion between this
6593              * early return and the overloading of the NULL slots in the
6594              * size table.  */
6595             if (SvROK(sv))
6596                 goto free_rv;
6597             SvFLAGS(sv) &= SVf_BREAK;
6598             SvFLAGS(sv) |= SVTYPEMASK;
6599             goto free_head;
6600         }
6601
6602         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6603            for another purpose  */
6604         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6605
6606         if (type >= SVt_PVMG) {
6607             if (SvOBJECT(sv)) {
6608                 if (!curse(sv, 1)) goto get_next_sv;
6609                 type = SvTYPE(sv); /* destructor may have changed it */
6610             }
6611             /* Free back-references before magic, in case the magic calls
6612              * Perl code that has weak references to sv. */
6613             if (type == SVt_PVHV) {
6614                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6615                 if (SvMAGIC(sv))
6616                     mg_free(sv);
6617             }
6618             else if (SvMAGIC(sv)) {
6619                 /* Free back-references before other types of magic. */
6620                 sv_unmagic(sv, PERL_MAGIC_backref);
6621                 mg_free(sv);
6622             }
6623             SvMAGICAL_off(sv);
6624         }
6625         switch (type) {
6626             /* case SVt_INVLIST: */
6627         case SVt_PVIO:
6628             if (IoIFP(sv) &&
6629                 IoIFP(sv) != PerlIO_stdin() &&
6630                 IoIFP(sv) != PerlIO_stdout() &&
6631                 IoIFP(sv) != PerlIO_stderr() &&
6632                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6633             {
6634                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6635                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6636                           IoTYPE(sv) == IoTYPE_RDWR   ||
6637                           IoTYPE(sv) == IoTYPE_APPEND));
6638             }
6639             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6640                 PerlDir_close(IoDIRP(sv));
6641             IoDIRP(sv) = (DIR*)NULL;
6642             Safefree(IoTOP_NAME(sv));
6643             Safefree(IoFMT_NAME(sv));
6644             Safefree(IoBOTTOM_NAME(sv));
6645             if ((const GV *)sv == PL_statgv)
6646                 PL_statgv = NULL;
6647             goto freescalar;
6648         case SVt_REGEXP:
6649             /* FIXME for plugins */
6650             pregfree2((REGEXP*) sv);
6651             goto freescalar;
6652         case SVt_PVCV:
6653         case SVt_PVFM:
6654             cv_undef(MUTABLE_CV(sv));
6655             /* If we're in a stash, we don't own a reference to it.
6656              * However it does have a back reference to us, which needs to
6657              * be cleared.  */
6658             if ((stash = CvSTASH(sv)))
6659                 sv_del_backref(MUTABLE_SV(stash), sv);
6660             goto freescalar;
6661         case SVt_PVHV:
6662             if (HvTOTALKEYS((HV*)sv) > 0) {
6663                 const HEK *hek;
6664                 /* this statement should match the one at the beginning of
6665                  * hv_undef_flags() */
6666                 if (   PL_phase != PERL_PHASE_DESTRUCT
6667                     && (hek = HvNAME_HEK((HV*)sv)))
6668                 {
6669                     if (PL_stashcache) {
6670                         DEBUG_o(Perl_deb(aTHX_
6671                             "sv_clear clearing PL_stashcache for '%" HEKf
6672                             "'\n",
6673                              HEKfARG(hek)));
6674                         (void)hv_deletehek(PL_stashcache,
6675                                            hek, G_DISCARD);
6676                     }
6677                     hv_name_set((HV*)sv, NULL, 0, 0);
6678                 }
6679
6680                 /* save old iter_sv in unused SvSTASH field */
6681                 assert(!SvOBJECT(sv));
6682                 SvSTASH(sv) = (HV*)iter_sv;
6683                 iter_sv = sv;
6684
6685                 /* save old hash_index in unused SvMAGIC field */
6686                 assert(!SvMAGICAL(sv));
6687                 assert(!SvMAGIC(sv));
6688                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6689                 hash_index = 0;
6690
6691                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6692                 goto get_next_sv; /* process this new sv */
6693             }
6694             /* free empty hash */
6695             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6696             assert(!HvARRAY((HV*)sv));
6697             break;
6698         case SVt_PVAV:
6699             {
6700                 AV* av = MUTABLE_AV(sv);
6701                 if (PL_comppad == av) {
6702                     PL_comppad = NULL;
6703                     PL_curpad = NULL;
6704                 }
6705                 if (AvREAL(av) && AvFILLp(av) > -1) {
6706                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6707                     /* save old iter_sv in top-most slot of AV,
6708                      * and pray that it doesn't get wiped in the meantime */
6709                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6710                     iter_sv = sv;
6711                     goto get_next_sv; /* process this new sv */
6712                 }
6713                 Safefree(AvALLOC(av));
6714             }
6715
6716             break;
6717         case SVt_PVLV:
6718             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6719                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6720                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6721                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6722             }
6723             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6724                 SvREFCNT_dec(LvTARG(sv));
6725             if (isREGEXP(sv)) {
6726                 /* SvLEN points to a regex body. Free the body, then
6727                  * set SvLEN to whatever value was in the now-freed
6728                  * regex body. The PVX buffer is shared by multiple re's
6729                  * and only freed once, by the re whose len in non-null */
6730                 STRLEN len = ReANY(sv)->xpv_len;
6731                 pregfree2((REGEXP*) sv);
6732                 SvLEN_set((sv), len);
6733                 goto freescalar;
6734             }
6735             /* FALLTHROUGH */
6736         case SVt_PVGV:
6737             if (isGV_with_GP(sv)) {
6738                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6739                    && HvENAME_get(stash))
6740                     mro_method_changed_in(stash);
6741                 gp_free(MUTABLE_GV(sv));
6742                 if (GvNAME_HEK(sv))
6743                     unshare_hek(GvNAME_HEK(sv));
6744                 /* If we're in a stash, we don't own a reference to it.
6745                  * However it does have a back reference to us, which
6746                  * needs to be cleared.  */
6747                 if ((stash = GvSTASH(sv)))
6748                         sv_del_backref(MUTABLE_SV(stash), sv);
6749             }
6750             /* FIXME. There are probably more unreferenced pointers to SVs
6751              * in the interpreter struct that we should check and tidy in
6752              * a similar fashion to this:  */
6753             /* See also S_sv_unglob, which does the same thing. */
6754             if ((const GV *)sv == PL_last_in_gv)
6755                 PL_last_in_gv = NULL;
6756             else if ((const GV *)sv == PL_statgv)
6757                 PL_statgv = NULL;
6758             else if ((const GV *)sv == PL_stderrgv)
6759                 PL_stderrgv = NULL;
6760             /* FALLTHROUGH */
6761         case SVt_PVMG:
6762         case SVt_PVNV:
6763         case SVt_PVIV:
6764         case SVt_INVLIST:
6765         case SVt_PV:
6766           freescalar:
6767             /* Don't bother with SvOOK_off(sv); as we're only going to
6768              * free it.  */
6769             if (SvOOK(sv)) {
6770                 STRLEN offset;
6771                 SvOOK_offset(sv, offset);
6772                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6773                 /* Don't even bother with turning off the OOK flag.  */
6774             }
6775             if (SvROK(sv)) {
6776             free_rv:
6777                 {
6778                     SV * const target = SvRV(sv);
6779                     if (SvWEAKREF(sv))
6780                         sv_del_backref(target, sv);
6781                     else
6782                         next_sv = target;
6783                 }
6784             }
6785 #ifdef PERL_ANY_COW
6786             else if (SvPVX_const(sv)
6787                      && !(SvTYPE(sv) == SVt_PVIO
6788                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6789             {
6790                 if (SvIsCOW(sv)) {
6791 #ifdef DEBUGGING
6792                     if (DEBUG_C_TEST) {
6793                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6794                         sv_dump(sv);
6795                     }
6796 #endif
6797                     if (SvLEN(sv)) {
6798                         if (CowREFCNT(sv)) {
6799                             sv_buf_to_rw(sv);
6800                             CowREFCNT(sv)--;
6801                             sv_buf_to_ro(sv);
6802                             SvLEN_set(sv, 0);
6803                         }
6804                     } else {
6805                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6806                     }
6807
6808                 }
6809                 if (SvLEN(sv)) {
6810                     Safefree(SvPVX_mutable(sv));
6811                 }
6812             }
6813 #else
6814             else if (SvPVX_const(sv) && SvLEN(sv)
6815                      && !(SvTYPE(sv) == SVt_PVIO
6816                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6817                 Safefree(SvPVX_mutable(sv));
6818             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6819                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6820             }
6821 #endif
6822             break;
6823         case SVt_NV:
6824             break;
6825         }
6826
6827       free_body:
6828
6829         SvFLAGS(sv) &= SVf_BREAK;
6830         SvFLAGS(sv) |= SVTYPEMASK;
6831
6832         sv_type_details = bodies_by_type + type;
6833         if (sv_type_details->arena) {
6834             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6835                      &PL_body_roots[type]);
6836         }
6837         else if (sv_type_details->body_size) {
6838             safefree(SvANY(sv));
6839         }
6840
6841       free_head:
6842         /* caller is responsible for freeing the head of the original sv */
6843         if (sv != orig_sv && !SvREFCNT(sv))
6844             del_SV(sv);
6845
6846         /* grab and free next sv, if any */
6847       get_next_sv:
6848         while (1) {
6849             sv = NULL;
6850             if (next_sv) {
6851                 sv = next_sv;
6852                 next_sv = NULL;
6853             }
6854             else if (!iter_sv) {
6855                 break;
6856             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6857                 AV *const av = (AV*)iter_sv;
6858                 if (AvFILLp(av) > -1) {
6859                     sv = AvARRAY(av)[AvFILLp(av)--];
6860                 }
6861                 else { /* no more elements of current AV to free */
6862                     sv = iter_sv;
6863                     type = SvTYPE(sv);
6864                     /* restore previous value, squirrelled away */
6865                     iter_sv = AvARRAY(av)[AvMAX(av)];
6866                     Safefree(AvALLOC(av));
6867                     goto free_body;
6868                 }
6869             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6870                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6871                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6872                     /* no more elements of current HV to free */
6873                     sv = iter_sv;
6874                     type = SvTYPE(sv);
6875                     /* Restore previous values of iter_sv and hash_index,
6876                      * squirrelled away */
6877                     assert(!SvOBJECT(sv));
6878                     iter_sv = (SV*)SvSTASH(sv);
6879                     assert(!SvMAGICAL(sv));
6880                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6881 #ifdef DEBUGGING
6882                     /* perl -DA does not like rubbish in SvMAGIC. */
6883                     SvMAGIC_set(sv, 0);
6884 #endif
6885
6886                     /* free any remaining detritus from the hash struct */
6887                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6888                     assert(!HvARRAY((HV*)sv));
6889                     goto free_body;
6890                 }
6891             }
6892
6893             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6894
6895             if (!sv)
6896                 continue;
6897             if (!SvREFCNT(sv)) {
6898                 sv_free(sv);
6899                 continue;
6900             }
6901             if (--(SvREFCNT(sv)))
6902                 continue;
6903 #ifdef DEBUGGING
6904             if (SvTEMP(sv)) {
6905                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6906                          "Attempt to free temp prematurely: SV 0x%" UVxf
6907                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6908                 continue;
6909             }
6910 #endif
6911             if (SvIMMORTAL(sv)) {
6912                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6913                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6914                 continue;
6915             }
6916             break;
6917         } /* while 1 */
6918
6919     } /* while sv */
6920 }
6921
6922 /* This routine curses the sv itself, not the object referenced by sv. So
6923    sv does not have to be ROK. */
6924
6925 static bool
6926 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6927     PERL_ARGS_ASSERT_CURSE;
6928     assert(SvOBJECT(sv));
6929
6930     if (PL_defstash &&  /* Still have a symbol table? */
6931         SvDESTROYABLE(sv))
6932     {
6933         dSP;
6934         HV* stash;
6935         do {
6936           stash = SvSTASH(sv);
6937           assert(SvTYPE(stash) == SVt_PVHV);
6938           if (HvNAME(stash)) {
6939             CV* destructor = NULL;
6940             struct mro_meta *meta;
6941
6942             assert (SvOOK(stash));
6943
6944             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6945                          HvNAME(stash)) );
6946
6947             /* don't make this an initialization above the assert, since it needs
6948                an AUX structure */
6949             meta = HvMROMETA(stash);
6950             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6951                 destructor = meta->destroy;
6952                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6953                              (void *)destructor, HvNAME(stash)) );
6954             }
6955             else {
6956                 bool autoload = FALSE;
6957                 GV *gv =
6958                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6959                 if (gv)
6960                     destructor = GvCV(gv);
6961                 if (!destructor) {
6962                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6963                                          GV_AUTOLOAD_ISMETHOD);
6964                     if (gv)
6965                         destructor = GvCV(gv);
6966                     if (destructor)
6967                         autoload = TRUE;
6968                 }
6969                 /* we don't cache AUTOLOAD for DESTROY, since this code
6970                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6971                    equivalent for XS AUTOLOADs */
6972                 if (!autoload) {
6973                     meta->destroy_gen = PL_sub_generation;
6974                     meta->destroy = destructor;
6975
6976                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6977                                       (void *)destructor, HvNAME(stash)) );
6978                 }
6979                 else {
6980                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6981                                       HvNAME(stash)) );
6982                 }
6983             }
6984             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6985             if (destructor
6986                 /* A constant subroutine can have no side effects, so
6987                    don't bother calling it.  */
6988                 && !CvCONST(destructor)
6989                 /* Don't bother calling an empty destructor or one that
6990                    returns immediately. */
6991                 && (CvISXSUB(destructor)
6992                 || (CvSTART(destructor)
6993                     && (CvSTART(destructor)->op_next->op_type
6994                                         != OP_LEAVESUB)
6995                     && (CvSTART(destructor)->op_next->op_type
6996                                         != OP_PUSHMARK
6997                         || CvSTART(destructor)->op_next->op_next->op_type
6998                                         != OP_RETURN
6999                        )
7000                    ))
7001                )
7002             {
7003                 SV* const tmpref = newRV(sv);
7004                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
7005                 ENTER;
7006                 PUSHSTACKi(PERLSI_DESTROY);
7007                 EXTEND(SP, 2);
7008                 PUSHMARK(SP);
7009                 PUSHs(tmpref);
7010                 PUTBACK;
7011                 call_sv(MUTABLE_SV(destructor),
7012                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7013                 POPSTACK;
7014                 SPAGAIN;
7015                 LEAVE;
7016                 if(SvREFCNT(tmpref) < 2) {
7017                     /* tmpref is not kept alive! */
7018                     SvREFCNT(sv)--;
7019                     SvRV_set(tmpref, NULL);
7020                     SvROK_off(tmpref);
7021                 }
7022                 SvREFCNT_dec_NN(tmpref);
7023             }
7024           }
7025         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7026
7027
7028         if (check_refcnt && SvREFCNT(sv)) {
7029             if (PL_in_clean_objs)
7030                 Perl_croak(aTHX_
7031                   "DESTROY created new reference to dead object '%" HEKf "'",
7032                    HEKfARG(HvNAME_HEK(stash)));
7033             /* DESTROY gave object new lease on life */
7034             return FALSE;
7035         }
7036     }
7037
7038     if (SvOBJECT(sv)) {
7039         HV * const stash = SvSTASH(sv);
7040         /* Curse before freeing the stash, as freeing the stash could cause
7041            a recursive call into S_curse. */
7042         SvOBJECT_off(sv);       /* Curse the object. */
7043         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7044         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7045     }
7046     return TRUE;
7047 }
7048
7049 /*
7050 =for apidoc sv_newref
7051
7052 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7053 instead.
7054
7055 =cut
7056 */
7057
7058 SV *
7059 Perl_sv_newref(pTHX_ SV *const sv)
7060 {
7061     PERL_UNUSED_CONTEXT;
7062     if (sv)
7063         (SvREFCNT(sv))++;
7064     return sv;
7065 }
7066
7067 /*
7068 =for apidoc sv_free
7069
7070 Decrement an SV's reference count, and if it drops to zero, call
7071 C<sv_clear> to invoke destructors and free up any memory used by
7072 the body; finally, deallocating the SV's head itself.
7073 Normally called via a wrapper macro C<SvREFCNT_dec>.
7074
7075 =cut
7076 */
7077
7078 void
7079 Perl_sv_free(pTHX_ SV *const sv)
7080 {
7081     SvREFCNT_dec(sv);
7082 }
7083
7084
7085 /* Private helper function for SvREFCNT_dec().
7086  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7087
7088 void
7089 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7090 {
7091     dVAR;
7092
7093     PERL_ARGS_ASSERT_SV_FREE2;
7094
7095     if (LIKELY( rc == 1 )) {
7096         /* normal case */
7097         SvREFCNT(sv) = 0;
7098
7099 #ifdef DEBUGGING
7100         if (SvTEMP(sv)) {
7101             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7102                              "Attempt to free temp prematurely: SV 0x%" UVxf
7103                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7104             return;
7105         }
7106 #endif
7107         if (SvIMMORTAL(sv)) {
7108             /* make sure SvREFCNT(sv)==0 happens very seldom */
7109             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7110             return;
7111         }
7112         sv_clear(sv);
7113         if (! SvREFCNT(sv)) /* may have have been resurrected */
7114             del_SV(sv);
7115         return;
7116     }
7117
7118     /* handle exceptional cases */
7119
7120     assert(rc == 0);
7121
7122     if (SvFLAGS(sv) & SVf_BREAK)
7123         /* this SV's refcnt has been artificially decremented to
7124          * trigger cleanup */
7125         return;
7126     if (PL_in_clean_all) /* All is fair */
7127         return;
7128     if (SvIMMORTAL(sv)) {
7129         /* make sure SvREFCNT(sv)==0 happens very seldom */
7130         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7131         return;
7132     }
7133     if (ckWARN_d(WARN_INTERNAL)) {
7134 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7135         Perl_dump_sv_child(aTHX_ sv);
7136 #else
7137     #ifdef DEBUG_LEAKING_SCALARS
7138         sv_dump(sv);
7139     #endif
7140 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7141         if (PL_warnhook == PERL_WARNHOOK_FATAL
7142             || ckDEAD(packWARN(WARN_INTERNAL))) {
7143             /* Don't let Perl_warner cause us to escape our fate:  */
7144             abort();
7145         }
7146 #endif
7147         /* This may not return:  */
7148         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7149                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7150                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7151 #endif
7152     }
7153 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7154     abort();
7155 #endif
7156
7157 }
7158
7159
7160 /*
7161 =for apidoc sv_len
7162
7163 Returns the length of the string in the SV.  Handles magic and type
7164 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7165 gives raw access to the C<xpv_cur> slot.
7166
7167 =cut
7168 */
7169
7170 STRLEN
7171 Perl_sv_len(pTHX_ SV *const sv)
7172 {
7173     STRLEN len;
7174
7175     if (!sv)
7176         return 0;
7177
7178     (void)SvPV_const(sv, len);
7179     return len;
7180 }
7181
7182 /*
7183 =for apidoc sv_len_utf8
7184
7185 Returns the number of characters in the string in an SV, counting wide
7186 UTF-8 bytes as a single character.  Handles magic and type coercion.
7187
7188 =cut
7189 */
7190
7191 /*
7192  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7193  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7194  * (Note that the mg_len is not the length of the mg_ptr field.
7195  * This allows the cache to store the character length of the string without
7196  * needing to malloc() extra storage to attach to the mg_ptr.)
7197  *
7198  */
7199
7200 STRLEN
7201 Perl_sv_len_utf8(pTHX_ SV *const sv)
7202 {
7203     if (!sv)
7204         return 0;
7205
7206     SvGETMAGIC(sv);
7207     return sv_len_utf8_nomg(sv);
7208 }
7209
7210 STRLEN
7211 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7212 {
7213     STRLEN len;
7214     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7215
7216     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7217
7218     if (PL_utf8cache && SvUTF8(sv)) {
7219             STRLEN ulen;
7220             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7221
7222             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7223                 if (mg->mg_len != -1)
7224                     ulen = mg->mg_len;
7225                 else {
7226                     /* We can use the offset cache for a headstart.
7227                        The longer value is stored in the first pair.  */
7228                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7229
7230                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7231                                                        s + len);
7232                 }
7233                 
7234                 if (PL_utf8cache < 0) {
7235                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7236                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7237                 }
7238             }
7239             else {
7240                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7241                 utf8_mg_len_cache_update(sv, &mg, ulen);
7242             }
7243             return ulen;
7244     }
7245     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7246 }
7247
7248 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7249    offset.  */
7250 static STRLEN
7251 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7252                       STRLEN *const uoffset_p, bool *const at_end)
7253 {
7254     const U8 *s = start;
7255     STRLEN uoffset = *uoffset_p;
7256
7257     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7258
7259     while (s < send && uoffset) {
7260         --uoffset;
7261         s += UTF8SKIP(s);
7262     }
7263     if (s == send) {
7264         *at_end = TRUE;
7265     }
7266     else if (s > send) {
7267         *at_end = TRUE;
7268         /* This is the existing behaviour. Possibly it should be a croak, as
7269            it's actually a bounds error  */
7270         s = send;
7271     }
7272     *uoffset_p -= uoffset;
7273     return s - start;
7274 }
7275
7276 /* Given the length of the string in both bytes and UTF-8 characters, decide
7277    whether to walk forwards or backwards to find the byte corresponding to
7278    the passed in UTF-8 offset.  */
7279 static STRLEN
7280 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7281                     STRLEN uoffset, const STRLEN uend)
7282 {
7283     STRLEN backw = uend - uoffset;
7284
7285     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7286
7287     if (uoffset < 2 * backw) {
7288         /* The assumption is that going forwards is twice the speed of going
7289            forward (that's where the 2 * backw comes from).
7290            (The real figure of course depends on the UTF-8 data.)  */
7291         const U8 *s = start;
7292
7293         while (s < send && uoffset--)
7294             s += UTF8SKIP(s);
7295         assert (s <= send);
7296         if (s > send)
7297             s = send;
7298         return s - start;
7299     }
7300
7301     while (backw--) {
7302         send--;
7303         while (UTF8_IS_CONTINUATION(*send))
7304             send--;
7305     }
7306     return send - start;
7307 }
7308
7309 /* For the string representation of the given scalar, find the byte
7310    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7311    give another position in the string, *before* the sought offset, which
7312    (which is always true, as 0, 0 is a valid pair of positions), which should
7313    help reduce the amount of linear searching.
7314    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7315    will be used to reduce the amount of linear searching. The cache will be
7316    created if necessary, and the found value offered to it for update.  */
7317 static STRLEN
7318 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7319                     const U8 *const send, STRLEN uoffset,
7320                     STRLEN uoffset0, STRLEN boffset0)
7321 {
7322     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7323     bool found = FALSE;
7324     bool at_end = FALSE;
7325
7326     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7327
7328     assert (uoffset >= uoffset0);
7329
7330     if (!uoffset)
7331         return 0;
7332
7333     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7334         && PL_utf8cache
7335         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7336                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7337         if ((*mgp)->mg_ptr) {
7338             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7339             if (cache[0] == uoffset) {
7340                 /* An exact match. */
7341                 return cache[1];
7342             }
7343             if (cache[2] == uoffset) {
7344                 /* An exact match. */
7345                 return cache[3];
7346             }
7347
7348             if (cache[0] < uoffset) {
7349                 /* The cache already knows part of the way.   */
7350                 if (cache[0] > uoffset0) {
7351                     /* The cache knows more than the passed in pair  */
7352                     uoffset0 = cache[0];
7353                     boffset0 = cache[1];
7354                 }
7355                 if ((*mgp)->mg_len != -1) {
7356                     /* And we know the end too.  */
7357                     boffset = boffset0
7358                         + sv_pos_u2b_midway(start + boffset0, send,
7359                                               uoffset - uoffset0,
7360                                               (*mgp)->mg_len - uoffset0);
7361                 } else {
7362                     uoffset -= uoffset0;
7363                     boffset = boffset0
7364                         + sv_pos_u2b_forwards(start + boffset0,
7365                                               send, &uoffset, &at_end);
7366                     uoffset += uoffset0;
7367                 }
7368             }
7369             else if (cache[2] < uoffset) {
7370                 /* We're between the two cache entries.  */
7371                 if (cache[2] > uoffset0) {
7372                     /* and the cache knows more than the passed in pair  */
7373                     uoffset0 = cache[2];
7374                     boffset0 = cache[3];
7375                 }
7376
7377                 boffset = boffset0
7378                     + sv_pos_u2b_midway(start + boffset0,
7379                                           start + cache[1],
7380                                           uoffset - uoffset0,
7381                                           cache[0] - uoffset0);
7382             } else {
7383                 boffset = boffset0
7384                     + sv_pos_u2b_midway(start + boffset0,
7385                                           start + cache[3],
7386                                           uoffset - uoffset0,
7387                                           cache[2] - uoffset0);
7388             }
7389             found = TRUE;
7390         }
7391         else if ((*mgp)->mg_len != -1) {
7392             /* If we can take advantage of a passed in offset, do so.  */
7393             /* In fact, offset0 is either 0, or less than offset, so don't
7394                need to worry about the other possibility.  */
7395             boffset = boffset0
7396                 + sv_pos_u2b_midway(start + boffset0, send,
7397                                       uoffset - uoffset0,
7398                                       (*mgp)->mg_len - uoffset0);
7399             found = TRUE;
7400         }
7401     }
7402
7403     if (!found || PL_utf8cache < 0) {
7404         STRLEN real_boffset;
7405         uoffset -= uoffset0;
7406         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7407                                                       send, &uoffset, &at_end);
7408         uoffset += uoffset0;
7409
7410         if (found && PL_utf8cache < 0)
7411             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7412                                        real_boffset, sv);
7413         boffset = real_boffset;
7414     }
7415
7416     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7417         if (at_end)
7418             utf8_mg_len_cache_update(sv, mgp, uoffset);
7419         else
7420             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7421     }
7422     return boffset;
7423 }
7424
7425
7426 /*
7427 =for apidoc sv_pos_u2b_flags
7428
7429 Converts the offset from a count of UTF-8 chars from
7430 the start of the string, to a count of the equivalent number of bytes; if
7431 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7432 C<offset>, rather than from the start
7433 of the string.  Handles type coercion.
7434 C<flags> is passed to C<SvPV_flags>, and usually should be
7435 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7436
7437 =cut
7438 */
7439
7440 /*
7441  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7442  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7443  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7444  *
7445  */
7446
7447 STRLEN
7448 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7449                       U32 flags)
7450 {
7451     const U8 *start;
7452     STRLEN len;
7453     STRLEN boffset;
7454
7455     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7456
7457     start = (U8*)SvPV_flags(sv, len, flags);
7458     if (len) {
7459         const U8 * const send = start + len;
7460         MAGIC *mg = NULL;
7461         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7462
7463         if (lenp
7464             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7465                         is 0, and *lenp is already set to that.  */) {
7466             /* Convert the relative offset to absolute.  */
7467             const STRLEN uoffset2 = uoffset + *lenp;
7468             const STRLEN boffset2
7469                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7470                                       uoffset, boffset) - boffset;
7471
7472             *lenp = boffset2;
7473         }
7474     } else {
7475         if (lenp)
7476             *lenp = 0;
7477         boffset = 0;
7478     }
7479
7480     return boffset;
7481 }
7482
7483 /*
7484 =for apidoc sv_pos_u2b
7485
7486 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7487 the start of the string, to a count of the equivalent number of bytes; if
7488 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7489 the offset, rather than from the start of the string.  Handles magic and
7490 type coercion.
7491
7492 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7493 than 2Gb.
7494
7495 =cut
7496 */
7497
7498 /*
7499  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7500  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7501  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7502  *
7503  */
7504
7505 /* This function is subject to size and sign problems */
7506
7507 void
7508 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7509 {
7510     PERL_ARGS_ASSERT_SV_POS_U2B;
7511
7512     if (lenp) {
7513         STRLEN ulen = (STRLEN)*lenp;
7514         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7515                                          SV_GMAGIC|SV_CONST_RETURN);
7516         *lenp = (I32)ulen;
7517     } else {
7518         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7519                                          SV_GMAGIC|SV_CONST_RETURN);
7520     }
7521 }
7522
7523 static void
7524 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7525                            const STRLEN ulen)
7526 {
7527     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7528     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7529         return;
7530
7531     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7532                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7533         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7534     }
7535     assert(*mgp);
7536
7537     (*mgp)->mg_len = ulen;
7538 }
7539
7540 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7541    byte length pairing. The (byte) length of the total SV is passed in too,
7542    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7543    may not have updated SvCUR, so we can't rely on reading it directly.
7544
7545    The proffered utf8/byte length pairing isn't used if the cache already has
7546    two pairs, and swapping either for the proffered pair would increase the
7547    RMS of the intervals between known byte offsets.
7548
7549    The cache itself consists of 4 STRLEN values
7550    0: larger UTF-8 offset
7551    1: corresponding byte offset
7552    2: smaller UTF-8 offset
7553    3: corresponding byte offset
7554
7555    Unused cache pairs have the value 0, 0.
7556    Keeping the cache "backwards" means that the invariant of
7557    cache[0] >= cache[2] is maintained even with empty slots, which means that
7558    the code that uses it doesn't need to worry if only 1 entry has actually
7559    been set to non-zero.  It also makes the "position beyond the end of the
7560    cache" logic much simpler, as the first slot is always the one to start
7561    from.   
7562 */
7563 static void
7564 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7565                            const STRLEN utf8, const STRLEN blen)
7566 {
7567     STRLEN *cache;
7568
7569     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7570
7571     if (SvREADONLY(sv))
7572         return;
7573
7574     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7575                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7576         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7577                            0);
7578         (*mgp)->mg_len = -1;
7579     }
7580     assert(*mgp);
7581
7582     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7583         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7584         (*mgp)->mg_ptr = (char *) cache;
7585     }
7586     assert(cache);
7587
7588     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7589         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7590            a pointer.  Note that we no longer cache utf8 offsets on refer-
7591            ences, but this check is still a good idea, for robustness.  */
7592         const U8 *start = (const U8 *) SvPVX_const(sv);
7593         const STRLEN realutf8 = utf8_length(start, start + byte);
7594
7595         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7596                                    sv);
7597     }
7598
7599     /* Cache is held with the later position first, to simplify the code
7600        that deals with unbounded ends.  */
7601        
7602     ASSERT_UTF8_CACHE(cache);
7603     if (cache[1] == 0) {
7604         /* Cache is totally empty  */
7605         cache[0] = utf8;
7606         cache[1] = byte;
7607     } else if (cache[3] == 0) {
7608         if (byte > cache[1]) {
7609             /* New one is larger, so goes first.  */
7610             cache[2] = cache[0];
7611             cache[3] = cache[1];
7612             cache[0] = utf8;
7613             cache[1] = byte;
7614         } else {
7615             cache[2] = utf8;
7616             cache[3] = byte;
7617         }
7618     } else {
7619 /* float casts necessary? XXX */
7620 #define THREEWAY_SQUARE(a,b,c,d) \
7621             ((float)((d) - (c))) * ((float)((d) - (c))) \
7622             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7623                + ((float)((b) - (a))) * ((float)((b) - (a)))
7624
7625         /* Cache has 2 slots in use, and we know three potential pairs.
7626            Keep the two that give the lowest RMS distance. Do the
7627            calculation in bytes simply because we always know the byte
7628            length.  squareroot has the same ordering as the positive value,
7629            so don't bother with the actual square root.  */
7630         if (byte > cache[1]) {
7631             /* New position is after the existing pair of pairs.  */
7632             const float keep_earlier
7633                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7634             const float keep_later
7635                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7636
7637             if (keep_later < keep_earlier) {
7638                 cache[2] = cache[0];
7639                 cache[3] = cache[1];
7640             }
7641             cache[0] = utf8;
7642             cache[1] = byte;
7643         }
7644         else {
7645             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7646             float b, c, keep_earlier;
7647             if (byte > cache[3]) {
7648                 /* New position is between the existing pair of pairs.  */
7649                 b = (float)cache[3];
7650                 c = (float)byte;
7651             } else {
7652                 /* New position is before the existing pair of pairs.  */
7653                 b = (float)byte;
7654                 c = (float)cache[3];
7655             }
7656             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7657             if (byte > cache[3]) {
7658                 if (keep_later < keep_earlier) {
7659                     cache[2] = utf8;
7660                     cache[3] = byte;
7661                 }
7662                 else {
7663                     cache[0] = utf8;
7664                     cache[1] = byte;
7665                 }
7666             }
7667             else {
7668                 if (! (keep_later < keep_earlier)) {
7669                     cache[0] = cache[2];
7670                     cache[1] = cache[3];
7671                 }
7672                 cache[2] = utf8;
7673                 cache[3] = byte;
7674             }
7675         }
7676     }
7677     ASSERT_UTF8_CACHE(cache);
7678 }
7679
7680 /* We already know all of the way, now we may be able to walk back.  The same
7681    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7682    backward is half the speed of walking forward. */
7683 static STRLEN
7684 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7685                     const U8 *end, STRLEN endu)
7686 {
7687     const STRLEN forw = target - s;
7688     STRLEN backw = end - target;
7689
7690     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7691
7692     if (forw < 2 * backw) {
7693         return utf8_length(s, target);
7694     }
7695
7696     while (end > target) {
7697         end--;
7698         while (UTF8_IS_CONTINUATION(*end)) {
7699             end--;
7700         }
7701         endu--;
7702     }
7703     return endu;
7704 }
7705
7706 /*
7707 =for apidoc sv_pos_b2u_flags
7708
7709 Converts C<offset> from a count of bytes from the start of the string, to
7710 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7711 C<flags> is passed to C<SvPV_flags>, and usually should be
7712 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7713
7714 =cut
7715 */
7716
7717 /*
7718  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7719  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7720  * and byte offsets.
7721  *
7722  */
7723 STRLEN
7724 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7725 {
7726     const U8* s;
7727     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7728     STRLEN blen;
7729     MAGIC* mg = NULL;
7730     const U8* send;
7731     bool found = FALSE;
7732
7733     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7734
7735     s = (const U8*)SvPV_flags(sv, blen, flags);
7736
7737     if (blen < offset)
7738         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7739                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7740
7741     send = s + offset;
7742
7743     if (!SvREADONLY(sv)
7744         && PL_utf8cache
7745         && SvTYPE(sv) >= SVt_PVMG
7746         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7747     {
7748         if (mg->mg_ptr) {
7749             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7750             if (cache[1] == offset) {
7751                 /* An exact match. */
7752                 return cache[0];
7753             }
7754             if (cache[3] == offset) {
7755                 /* An exact match. */
7756                 return cache[2];
7757             }
7758
7759             if (cache[1] < offset) {
7760                 /* We already know part of the way. */
7761                 if (mg->mg_len != -1) {
7762                     /* Actually, we know the end too.  */
7763                     len = cache[0]
7764                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7765                                               s + blen, mg->mg_len - cache[0]);
7766                 } else {
7767                     len = cache[0] + utf8_length(s + cache[1], send);
7768                 }
7769             }
7770             else if (cache[3] < offset) {
7771                 /* We're between the two cached pairs, so we do the calculation
7772                    offset by the byte/utf-8 positions for the earlier pair,
7773                    then add the utf-8 characters from the string start to
7774                    there.  */
7775                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7776                                           s + cache[1], cache[0] - cache[2])
7777                     + cache[2];
7778
7779             }
7780             else { /* cache[3] > offset */
7781                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7782                                           cache[2]);
7783
7784             }
7785             ASSERT_UTF8_CACHE(cache);
7786             found = TRUE;
7787         } else if (mg->mg_len != -1) {
7788             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7789             found = TRUE;
7790         }
7791     }
7792     if (!found || PL_utf8cache < 0) {
7793         const STRLEN real_len = utf8_length(s, send);
7794
7795         if (found && PL_utf8cache < 0)
7796             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7797         len = real_len;
7798     }
7799
7800     if (PL_utf8cache) {
7801         if (blen == offset)
7802             utf8_mg_len_cache_update(sv, &mg, len);
7803         else
7804             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7805     }
7806
7807     return len;
7808 }
7809
7810 /*
7811 =for apidoc sv_pos_b2u
7812
7813 Converts the value pointed to by C<offsetp> from a count of bytes from the
7814 start of the string, to a count of the equivalent number of UTF-8 chars.
7815 Handles magic and type coercion.
7816
7817 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7818 longer than 2Gb.
7819
7820 =cut
7821 */
7822
7823 /*
7824  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7825  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7826  * byte offsets.
7827  *
7828  */
7829 void
7830 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7831 {
7832     PERL_ARGS_ASSERT_SV_POS_B2U;
7833
7834     if (!sv)
7835         return;
7836
7837     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7838                                      SV_GMAGIC|SV_CONST_RETURN);
7839 }
7840
7841 static void
7842 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7843                              STRLEN real, SV *const sv)
7844 {
7845     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7846
7847     /* As this is debugging only code, save space by keeping this test here,
7848        rather than inlining it in all the callers.  */
7849     if (from_cache == real)
7850         return;
7851
7852     /* Need to turn the assertions off otherwise we may recurse infinitely
7853        while printing error messages.  */
7854     SAVEI8(PL_utf8cache);
7855     PL_utf8cache = 0;
7856     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7857                func, (UV) from_cache, (UV) real, SVfARG(sv));
7858 }
7859
7860 /*
7861 =for apidoc sv_eq
7862
7863 Returns a boolean indicating whether the strings in the two SVs are
7864 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7865 coerce its args to strings if necessary.
7866
7867 =for apidoc sv_eq_flags
7868
7869 Returns a boolean indicating whether the strings in the two SVs are
7870 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7871 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7872
7873 =cut
7874 */
7875
7876 I32
7877 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7878 {
7879     const char *pv1;
7880     STRLEN cur1;
7881     const char *pv2;
7882     STRLEN cur2;
7883
7884     if (!sv1) {
7885         pv1 = "";
7886         cur1 = 0;
7887     }
7888     else {
7889         /* if pv1 and pv2 are the same, second SvPV_const call may
7890          * invalidate pv1 (if we are handling magic), so we may need to
7891          * make a copy */
7892         if (sv1 == sv2 && flags & SV_GMAGIC
7893          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7894             pv1 = SvPV_const(sv1, cur1);
7895             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7896         }
7897         pv1 = SvPV_flags_const(sv1, cur1, flags);
7898     }
7899
7900     if (!sv2){
7901         pv2 = "";
7902         cur2 = 0;
7903     }
7904     else
7905         pv2 = SvPV_flags_const(sv2, cur2, flags);
7906
7907     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7908         /* Differing utf8ness.  */
7909         if (SvUTF8(sv1)) {
7910                   /* sv1 is the UTF-8 one  */
7911                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7912                                         (const U8*)pv1, cur1) == 0;
7913         }
7914         else {
7915                   /* sv2 is the UTF-8 one  */
7916                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7917                                         (const U8*)pv2, cur2) == 0;
7918         }
7919     }
7920
7921     if (cur1 == cur2)
7922         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7923     else
7924         return 0;
7925 }
7926
7927 /*
7928 =for apidoc sv_cmp
7929
7930 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7931 string in C<sv1> is less than, equal to, or greater than the string in
7932 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7933 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7934
7935 =for apidoc sv_cmp_flags
7936
7937 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7938 string in C<sv1> is less than, equal to, or greater than the string in
7939 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7940 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7941 also C<L</sv_cmp_locale_flags>>.
7942
7943 =cut
7944 */
7945
7946 I32
7947 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7948 {
7949     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7950 }
7951
7952 I32
7953 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7954                   const U32 flags)
7955 {
7956     STRLEN cur1, cur2;
7957     const char *pv1, *pv2;
7958     I32  cmp;
7959     SV *svrecode = NULL;
7960
7961     if (!sv1) {
7962         pv1 = "";
7963         cur1 = 0;
7964     }
7965     else
7966         pv1 = SvPV_flags_const(sv1, cur1, flags);
7967
7968     if (!sv2) {
7969         pv2 = "";
7970         cur2 = 0;
7971     }
7972     else
7973         pv2 = SvPV_flags_const(sv2, cur2, flags);
7974
7975     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7976         /* Differing utf8ness.  */
7977         if (SvUTF8(sv1)) {
7978                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7979                                                    (const U8*)pv1, cur1);
7980                 return retval ? retval < 0 ? -1 : +1 : 0;
7981         }
7982         else {
7983                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7984                                                   (const U8*)pv2, cur2);
7985                 return retval ? retval < 0 ? -1 : +1 : 0;
7986         }
7987     }
7988
7989     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7990
7991     if (!cur1) {
7992         cmp = cur2 ? -1 : 0;
7993     } else if (!cur2) {
7994         cmp = 1;
7995     } else {
7996         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7997
7998 #ifdef EBCDIC
7999         if (! DO_UTF8(sv1)) {
8000 #endif
8001             const I32 retval = memcmp((const void*)pv1,
8002                                       (const void*)pv2,
8003                                       shortest_len);
8004             if (retval) {
8005                 cmp = retval < 0 ? -1 : 1;
8006             } else if (cur1 == cur2) {
8007                 cmp = 0;
8008             } else {
8009                 cmp = cur1 < cur2 ? -1 : 1;
8010             }
8011 #ifdef EBCDIC
8012         }
8013         else {  /* Both are to be treated as UTF-EBCDIC */
8014
8015             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
8016              * which remaps code points 0-255.  We therefore generally have to
8017              * unmap back to the original values to get an accurate comparison.
8018              * But we don't have to do that for UTF-8 invariants, as by
8019              * definition, they aren't remapped, nor do we have to do it for
8020              * above-latin1 code points, as they also aren't remapped.  (This
8021              * code also works on ASCII platforms, but the memcmp() above is
8022              * much faster). */
8023
8024             const char *e = pv1 + shortest_len;
8025
8026             /* Find the first bytes that differ between the two strings */
8027             while (pv1 < e && *pv1 == *pv2) {
8028                 pv1++;
8029                 pv2++;
8030             }
8031
8032
8033             if (pv1 == e) { /* Are the same all the way to the end */
8034                 if (cur1 == cur2) {
8035                     cmp = 0;
8036                 } else {
8037                     cmp = cur1 < cur2 ? -1 : 1;
8038                 }
8039             }
8040             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8041                     * in the strings were.  The current bytes may or may not be
8042                     * at the beginning of a character.  But neither or both are
8043                     * (or else earlier bytes would have been different).  And
8044                     * if we are in the middle of a character, the two
8045                     * characters are comprised of the same number of bytes
8046                     * (because in this case the start bytes are the same, and
8047                     * the start bytes encode the character's length). */
8048                  if (UTF8_IS_INVARIANT(*pv1))
8049             {
8050                 /* If both are invariants; can just compare directly */
8051                 if (UTF8_IS_INVARIANT(*pv2)) {
8052                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8053                 }
8054                 else   /* Since *pv1 is invariant, it is the whole character,
8055                           which means it is at the beginning of a character.
8056                           That means pv2 is also at the beginning of a
8057                           character (see earlier comment).  Since it isn't
8058                           invariant, it must be a start byte.  If it starts a
8059                           character whose code point is above 255, that
8060                           character is greater than any single-byte char, which
8061                           *pv1 is */
8062                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8063                 {
8064                     cmp = -1;
8065                 }
8066                 else {
8067                     /* Here, pv2 points to a character composed of 2 bytes
8068                      * whose code point is < 256.  Get its code point and
8069                      * compare with *pv1 */
8070                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8071                            ?  -1
8072                            : 1;
8073                 }
8074             }
8075             else   /* The code point starting at pv1 isn't a single byte */
8076                  if (UTF8_IS_INVARIANT(*pv2))
8077             {
8078                 /* But here, the code point starting at *pv2 is a single byte,
8079                  * and so *pv1 must begin a character, hence is a start byte.
8080                  * If that character is above 255, it is larger than any
8081                  * single-byte char, which *pv2 is */
8082                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8083                     cmp = 1;
8084                 }
8085                 else {
8086                     /* Here, pv1 points to a character composed of 2 bytes
8087                      * whose code point is < 256.  Get its code point and
8088                      * compare with the single byte character *pv2 */
8089                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8090                           ?  -1
8091                           : 1;
8092                 }
8093             }
8094             else   /* Here, we've ruled out either *pv1 and *pv2 being
8095                       invariant.  That means both are part of variants, but not
8096                       necessarily at the start of a character */
8097                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8098                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8099             {
8100                 /* Here, at least one is the start of a character, which means
8101                  * the other is also a start byte.  And the code point of at
8102                  * least one of the characters is above 255.  It is a
8103                  * characteristic of UTF-EBCDIC that all start bytes for
8104                  * above-latin1 code points are well behaved as far as code
8105                  * point comparisons go, and all are larger than all other
8106                  * start bytes, so the comparison with those is also well
8107                  * behaved */
8108                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8109             }
8110             else {
8111                 /* Here both *pv1 and *pv2 are part of variant characters.
8112                  * They could be both continuations, or both start characters.
8113                  * (One or both could even be an illegal start character (for
8114                  * an overlong) which for the purposes of sorting we treat as
8115                  * legal. */
8116                 if (UTF8_IS_CONTINUATION(*pv1)) {
8117
8118                     /* If they are continuations for code points above 255,
8119                      * then comparing the current byte is sufficient, as there
8120                      * is no remapping of these and so the comparison is
8121                      * well-behaved.   We determine if they are such
8122                      * continuations by looking at the preceding byte.  It
8123                      * could be a start byte, from which we can tell if it is
8124                      * for an above 255 code point.  Or it could be a
8125                      * continuation, which means the character occupies at
8126                      * least 3 bytes, so must be above 255.  */
8127                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8128                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8129                     {
8130                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8131                         goto cmp_done;
8132                     }
8133
8134                     /* Here, the continuations are for code points below 256;
8135                      * back up one to get to the start byte */
8136                     pv1--;
8137                     pv2--;
8138                 }
8139
8140                 /* We need to get the actual native code point of each of these
8141                  * variants in order to compare them */
8142                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8143                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8144                         ? -1
8145                         : 1;
8146             }
8147         }
8148       cmp_done: ;
8149 #endif
8150     }
8151
8152     SvREFCNT_dec(svrecode);
8153
8154     return cmp;
8155 }
8156
8157 /*
8158 =for apidoc sv_cmp_locale
8159
8160 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8161 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8162 if necessary.  See also C<L</sv_cmp>>.
8163
8164 =for apidoc sv_cmp_locale_flags
8165
8166 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8167 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8168 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8169 C<L</sv_cmp_flags>>.
8170
8171 =cut
8172 */
8173
8174 I32
8175 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8176 {
8177     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8178 }
8179
8180 I32
8181 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8182                          const U32 flags)
8183 {
8184 #ifdef USE_LOCALE_COLLATE
8185
8186     char *pv1, *pv2;
8187     STRLEN len1, len2;
8188     I32 retval;
8189
8190     if (PL_collation_standard)
8191         goto raw_compare;
8192
8193     len1 = len2 = 0;
8194
8195     /* Revert to using raw compare if both operands exist, but either one
8196      * doesn't transform properly for collation */
8197     if (sv1 && sv2) {
8198         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8199         if (! pv1) {
8200             goto raw_compare;
8201         }
8202         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8203         if (! pv2) {
8204             goto raw_compare;
8205         }
8206     }
8207     else {
8208         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8209         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8210     }
8211
8212     if (!pv1 || !len1) {
8213         if (pv2 && len2)
8214             return -1;
8215         else
8216             goto raw_compare;
8217     }
8218     else {
8219         if (!pv2 || !len2)
8220             return 1;
8221     }
8222
8223     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8224
8225     if (retval)
8226         return retval < 0 ? -1 : 1;
8227
8228     /*
8229      * When the result of collation is equality, that doesn't mean
8230      * that there are no differences -- some locales exclude some
8231      * characters from consideration.  So to avoid false equalities,
8232      * we use the raw string as a tiebreaker.
8233      */
8234
8235   raw_compare:
8236     /* FALLTHROUGH */
8237
8238 #else
8239     PERL_UNUSED_ARG(flags);
8240 #endif /* USE_LOCALE_COLLATE */
8241
8242     return sv_cmp(sv1, sv2);
8243 }
8244
8245
8246 #ifdef USE_LOCALE_COLLATE
8247
8248 /*
8249 =for apidoc sv_collxfrm
8250
8251 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8252 C<L</sv_collxfrm_flags>>.
8253
8254 =for apidoc sv_collxfrm_flags
8255
8256 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8257 flags contain C<SV_GMAGIC>, it handles get-magic.
8258
8259 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8260 scalar data of the variable, but transformed to such a format that a normal
8261 memory comparison can be used to compare the data according to the locale
8262 settings.
8263
8264 =cut
8265 */
8266
8267 char *
8268 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8269 {
8270     MAGIC *mg;
8271
8272     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8273
8274     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8275
8276     /* If we don't have collation magic on 'sv', or the locale has changed
8277      * since the last time we calculated it, get it and save it now */
8278     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8279         const char *s;
8280         char *xf;
8281         STRLEN len, xlen;
8282
8283         /* Free the old space */
8284         if (mg)
8285             Safefree(mg->mg_ptr);
8286
8287         s = SvPV_flags_const(sv, len, flags);
8288         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8289             if (! mg) {
8290                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8291                                  0, 0);
8292                 assert(mg);
8293             }
8294             mg->mg_ptr = xf;
8295             mg->mg_len = xlen;
8296         }
8297         else {
8298             if (mg) {
8299                 mg->mg_ptr = NULL;
8300                 mg->mg_len = -1;
8301             }
8302         }
8303     }
8304
8305     if (mg && mg->mg_ptr) {
8306         *nxp = mg->mg_len;
8307         return mg->mg_ptr + sizeof(PL_collation_ix);
8308     }
8309     else {
8310         *nxp = 0;
8311         return NULL;
8312     }
8313 }
8314
8315 #endif /* USE_LOCALE_COLLATE */
8316
8317 static char *
8318 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8319 {
8320     SV * const tsv = newSV(0);
8321     ENTER;
8322     SAVEFREESV(tsv);
8323     sv_gets(tsv, fp, 0);
8324     sv_utf8_upgrade_nomg(tsv);
8325     SvCUR_set(sv,append);
8326     sv_catsv(sv,tsv);
8327     LEAVE;
8328     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8329 }
8330
8331 static char *
8332 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8333 {
8334     SSize_t bytesread;
8335     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8336       /* Grab the size of the record we're getting */
8337     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8338     
8339     /* Go yank in */
8340 #ifdef __VMS
8341     int fd;
8342     Stat_t st;
8343
8344     /* With a true, record-oriented file on VMS, we need to use read directly
8345      * to ensure that we respect RMS record boundaries.  The user is responsible
8346      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8347      * record size) field.  N.B. This is likely to produce invalid results on
8348      * varying-width character data when a record ends mid-character.
8349      */
8350     fd = PerlIO_fileno(fp);
8351     if (fd != -1
8352         && PerlLIO_fstat(fd, &st) == 0
8353         && (st.st_fab_rfm == FAB$C_VAR
8354             || st.st_fab_rfm == FAB$C_VFC
8355             || st.st_fab_rfm == FAB$C_FIX)) {
8356
8357         bytesread = PerlLIO_read(fd, buffer, recsize);
8358     }
8359     else /* in-memory file from PerlIO::Scalar
8360           * or not a record-oriented file
8361           */
8362 #endif
8363     {
8364         bytesread = PerlIO_read(fp, buffer, recsize);
8365
8366         /* At this point, the logic in sv_get() means that sv will
8367            be treated as utf-8 if the handle is utf8.
8368         */
8369         if (PerlIO_isutf8(fp) && bytesread > 0) {
8370             char *bend = buffer + bytesread;
8371             char *bufp = buffer;
8372             size_t charcount = 0;
8373             bool charstart = TRUE;
8374             STRLEN skip = 0;
8375
8376             while (charcount < recsize) {
8377                 /* count accumulated characters */
8378                 while (bufp < bend) {
8379                     if (charstart) {
8380                         skip = UTF8SKIP(bufp);
8381                     }
8382                     if (bufp + skip > bend) {
8383                         /* partial at the end */
8384                         charstart = FALSE;
8385                         break;
8386                     }
8387                     else {
8388                         ++charcount;
8389                         bufp += skip;
8390                         charstart = TRUE;
8391                     }
8392                 }
8393
8394                 if (charcount < recsize) {
8395                     STRLEN readsize;
8396                     STRLEN bufp_offset = bufp - buffer;
8397                     SSize_t morebytesread;
8398
8399                     /* originally I read enough to fill any incomplete
8400                        character and the first byte of the next
8401                        character if needed, but if there's many
8402                        multi-byte encoded characters we're going to be
8403                        making a read call for every character beyond
8404                        the original read size.
8405
8406                        So instead, read the rest of the character if
8407                        any, and enough bytes to match at least the
8408                        start bytes for each character we're going to
8409                        read.
8410                     */
8411                     if (charstart)
8412                         readsize = recsize - charcount;
8413                     else 
8414                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8415                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8416                     bend = buffer + bytesread;
8417                     morebytesread = PerlIO_read(fp, bend, readsize);
8418                     if (morebytesread <= 0) {
8419                         /* we're done, if we still have incomplete
8420                            characters the check code in sv_gets() will
8421                            warn about them.
8422
8423                            I'd originally considered doing
8424                            PerlIO_ungetc() on all but the lead
8425                            character of the incomplete character, but
8426                            read() doesn't do that, so I don't.
8427                         */
8428                         break;
8429                     }
8430
8431                     /* prepare to scan some more */
8432                     bytesread += morebytesread;
8433                     bend = buffer + bytesread;
8434                     bufp = buffer + bufp_offset;
8435                 }
8436             }
8437         }
8438     }
8439
8440     if (bytesread < 0)
8441         bytesread = 0;
8442     SvCUR_set(sv, bytesread + append);
8443     buffer[bytesread] = '\0';
8444     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8445 }
8446
8447 /*
8448 =for apidoc sv_gets
8449
8450 Get a line from the filehandle and store it into the SV, optionally
8451 appending to the currently-stored string.  If C<append> is not 0, the
8452 line is appended to the SV instead of overwriting it.  C<append> should
8453 be set to the byte offset that the appended string should start at
8454 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8455
8456 =cut
8457 */
8458
8459 char *
8460 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8461 {
8462     const char *rsptr;
8463     STRLEN rslen;
8464     STDCHAR rslast;
8465     STDCHAR *bp;
8466     SSize_t cnt;
8467     int i = 0;
8468     int rspara = 0;
8469
8470     PERL_ARGS_ASSERT_SV_GETS;
8471
8472     if (SvTHINKFIRST(sv))
8473         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8474     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8475        from <>.
8476        However, perlbench says it's slower, because the existing swipe code
8477        is faster than copy on write.
8478        Swings and roundabouts.  */
8479     SvUPGRADE(sv, SVt_PV);
8480
8481     if (append) {
8482         /* line is going to be appended to the existing buffer in the sv */
8483         if (PerlIO_isutf8(fp)) {
8484             if (!SvUTF8(sv)) {
8485                 sv_utf8_upgrade_nomg(sv);
8486                 sv_pos_u2b(sv,&append,0);
8487             }
8488         } else if (SvUTF8(sv)) {
8489             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8490         }
8491     }
8492
8493     SvPOK_only(sv);
8494     if (!append) {
8495         /* not appending - "clear" the string by setting SvCUR to 0,
8496          * the pv is still avaiable. */
8497         SvCUR_set(sv,0);
8498     }
8499     if (PerlIO_isutf8(fp))
8500         SvUTF8_on(sv);
8501
8502     if (IN_PERL_COMPILETIME) {
8503         /* we always read code in line mode */
8504         rsptr = "\n";
8505         rslen = 1;
8506     }
8507     else if (RsSNARF(PL_rs)) {
8508         /* If it is a regular disk file use size from stat() as estimate
8509            of amount we are going to read -- may result in mallocing
8510            more memory than we really need if the layers below reduce
8511            the size we read (e.g. CRLF or a gzip layer).
8512          */
8513         Stat_t st;
8514         int fd = PerlIO_fileno(fp);
8515         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8516             const Off_t offset = PerlIO_tell(fp);
8517             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8518 #ifdef PERL_COPY_ON_WRITE
8519                 /* Add an extra byte for the sake of copy-on-write's
8520                  * buffer reference count. */
8521                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8522 #else
8523                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8524 #endif
8525             }
8526         }
8527         rsptr = NULL;
8528         rslen = 0;
8529     }
8530     else if (RsRECORD(PL_rs)) {
8531         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8532     }
8533     else if (RsPARA(PL_rs)) {
8534         rsptr = "\n\n";
8535         rslen = 2;
8536         rspara = 1;
8537     }
8538     else {
8539         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8540         if (PerlIO_isutf8(fp)) {
8541             rsptr = SvPVutf8(PL_rs, rslen);
8542         }
8543         else {
8544             if (SvUTF8(PL_rs)) {
8545                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8546                     Perl_croak(aTHX_ "Wide character in $/");
8547                 }
8548             }
8549             /* extract the raw pointer to the record separator */
8550             rsptr = SvPV_const(PL_rs, rslen);
8551         }
8552     }
8553
8554     /* rslast is the last character in the record separator
8555      * note we don't use rslast except when rslen is true, so the
8556      * null assign is a placeholder. */
8557     rslast = rslen ? rsptr[rslen - 1] : '\0';
8558
8559     if (rspara) {        /* have to do this both before and after */
8560                          /* to make sure file boundaries work right */
8561         while (1) {
8562             if (PerlIO_eof(fp))
8563                 return 0;
8564             i = PerlIO_getc(fp);
8565             if (i != '\n') {
8566                 if (i == -1)
8567                     return 0;
8568                 PerlIO_ungetc(fp,i);
8569                 break;
8570             }
8571         }
8572     }
8573
8574     /* See if we know enough about I/O mechanism to cheat it ! */
8575
8576     /* This used to be #ifdef test - it is made run-time test for ease
8577        of abstracting out stdio interface. One call should be cheap
8578        enough here - and may even be a macro allowing compile
8579        time optimization.
8580      */
8581
8582     if (PerlIO_fast_gets(fp)) {
8583     /*
8584      * We can do buffer based IO operations on this filehandle.
8585      *
8586      * This means we can bypass a lot of subcalls and process
8587      * the buffer directly, it also means we know the upper bound
8588      * on the amount of data we might read of the current buffer
8589      * into our sv. Knowing this allows us to preallocate the pv
8590      * to be able to hold that maximum, which allows us to simplify
8591      * a lot of logic. */
8592
8593     /*
8594      * We're going to steal some values from the stdio struct
8595      * and put EVERYTHING in the innermost loop into registers.
8596      */
8597     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8598     STRLEN bpx;         /* length of the data in the target sv
8599                            used to fix pointers after a SvGROW */
8600     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8601                            of data left in the read-ahead buffer.
8602                            If 0 then the pv buffer can hold the full
8603                            amount left, otherwise this is the amount it
8604                            can hold. */
8605
8606     /* Here is some breathtakingly efficient cheating */
8607
8608     /* When you read the following logic resist the urge to think
8609      * of record separators that are 1 byte long. They are an
8610      * uninteresting special (simple) case.
8611      *
8612      * Instead think of record separators which are at least 2 bytes
8613      * long, and keep in mind that we need to deal with such
8614      * separators when they cross a read-ahead buffer boundary.
8615      *
8616      * Also consider that we need to gracefully deal with separators
8617      * that may be longer than a single read ahead buffer.
8618      *
8619      * Lastly do not forget we want to copy the delimiter as well. We
8620      * are copying all data in the file _up_to_and_including_ the separator
8621      * itself.
8622      *
8623      * Now that you have all that in mind here is what is happening below:
8624      *
8625      * 1. When we first enter the loop we do some memory book keeping to see
8626      * how much free space there is in the target SV. (This sub assumes that
8627      * it is operating on the same SV most of the time via $_ and that it is
8628      * going to be able to reuse the same pv buffer each call.) If there is
8629      * "enough" room then we set "shortbuffered" to how much space there is
8630      * and start reading forward.
8631      *
8632      * 2. When we scan forward we copy from the read-ahead buffer to the target
8633      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8634      * and the end of the of pv, as well as for the "rslast", which is the last
8635      * char of the separator.
8636      *
8637      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8638      * (which has a "complete" record up to the point we saw rslast) and check
8639      * it to see if it matches the separator. If it does we are done. If it doesn't
8640      * we continue on with the scan/copy.
8641      *
8642      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8643      * the IO system to read the next buffer. We do this by doing a getc(), which
8644      * returns a single char read (or EOF), and prefills the buffer, and also
8645      * allows us to find out how full the buffer is.  We use this information to
8646      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8647      * the returned single char into the target sv, and then go back into scan
8648      * forward mode.
8649      *
8650      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8651      * remaining space in the read-buffer.
8652      *
8653      * Note that this code despite its twisty-turny nature is pretty darn slick.
8654      * It manages single byte separators, multi-byte cross boundary separators,
8655      * and cross-read-buffer separators cleanly and efficiently at the cost
8656      * of potentially greatly overallocating the target SV.
8657      *
8658      * Yves
8659      */
8660
8661
8662     /* get the number of bytes remaining in the read-ahead buffer
8663      * on first call on a given fp this will return 0.*/
8664     cnt = PerlIO_get_cnt(fp);
8665
8666     /* make sure we have the room */
8667     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8668         /* Not room for all of it
8669            if we are looking for a separator and room for some
8670          */
8671         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8672             /* just process what we have room for */
8673             shortbuffered = cnt - SvLEN(sv) + append + 1;
8674             cnt -= shortbuffered;
8675         }
8676         else {
8677             /* ensure that the target sv has enough room to hold
8678              * the rest of the read-ahead buffer */
8679             shortbuffered = 0;
8680             /* remember that cnt can be negative */
8681             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8682         }
8683     }
8684     else {
8685         /* we have enough room to hold the full buffer, lets scream */
8686         shortbuffered = 0;
8687     }
8688
8689     /* extract the pointer to sv's string buffer, offset by append as necessary */
8690     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8691     /* extract the point to the read-ahead buffer */
8692     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8693
8694     /* some trace debug output */
8695     DEBUG_P(PerlIO_printf(Perl_debug_log,
8696         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8697     DEBUG_P(PerlIO_printf(Perl_debug_log,
8698         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8699          UVuf "\n",
8700                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8701                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8702
8703     for (;;) {
8704       screamer:
8705         /* if there is stuff left in the read-ahead buffer */
8706         if (cnt > 0) {
8707             /* if there is a separator */
8708             if (rslen) {
8709                 /* find next rslast */
8710                 STDCHAR *p;
8711
8712                 /* shortcut common case of blank line */
8713                 cnt--;
8714                 if ((*bp++ = *ptr++) == rslast)
8715                     goto thats_all_folks;
8716
8717                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8718                 if (p) {
8719                     SSize_t got = p - ptr + 1;
8720                     Copy(ptr, bp, got, STDCHAR);
8721                     ptr += got;
8722                     bp  += got;
8723                     cnt -= got;
8724                     goto thats_all_folks;
8725                 }
8726                 Copy(ptr, bp, cnt, STDCHAR);
8727                 ptr += cnt;
8728                 bp  += cnt;
8729                 cnt = 0;
8730             }
8731             else {
8732                 /* no separator, slurp the full buffer */
8733                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8734                 bp += cnt;                           /* screams  |  dust */
8735                 ptr += cnt;                          /* louder   |  sed :-) */
8736                 cnt = 0;
8737                 assert (!shortbuffered);
8738                 goto cannot_be_shortbuffered;
8739             }
8740         }
8741         
8742         if (shortbuffered) {            /* oh well, must extend */
8743             /* we didnt have enough room to fit the line into the target buffer
8744              * so we must extend the target buffer and keep going */
8745             cnt = shortbuffered;
8746             shortbuffered = 0;
8747             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8748             SvCUR_set(sv, bpx);
8749             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8750             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8751             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8752             continue;
8753         }
8754
8755     cannot_be_shortbuffered:
8756         /* we need to refill the read-ahead buffer if possible */
8757
8758         DEBUG_P(PerlIO_printf(Perl_debug_log,
8759                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8760                               PTR2UV(ptr),(IV)cnt));
8761         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8762
8763         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8764            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8765             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8766             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8767
8768         /*
8769             call PerlIO_getc() to let it prefill the lookahead buffer
8770
8771             This used to call 'filbuf' in stdio form, but as that behaves like
8772             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8773             another abstraction.
8774
8775             Note we have to deal with the char in 'i' if we are not at EOF
8776         */
8777         bpx = bp - (STDCHAR*)SvPVX_const(sv);
8778         /* signals might be called here, possibly modifying sv */
8779         i   = PerlIO_getc(fp);          /* get more characters */
8780         bp = (STDCHAR*)SvPVX_const(sv) + bpx;
8781
8782         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8783            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8784             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8785             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8786
8787         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8788         cnt = PerlIO_get_cnt(fp);
8789         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8790         DEBUG_P(PerlIO_printf(Perl_debug_log,
8791             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8792             PTR2UV(ptr),(IV)cnt));
8793
8794         if (i == EOF)                   /* all done for ever? */
8795             goto thats_really_all_folks;
8796
8797         /* make sure we have enough space in the target sv */
8798         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8799         SvCUR_set(sv, bpx);
8800         SvGROW(sv, bpx + cnt + 2);
8801         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8802
8803         /* copy of the char we got from getc() */
8804         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8805
8806         /* make sure we deal with the i being the last character of a separator */
8807         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8808             goto thats_all_folks;
8809     }
8810
8811   thats_all_folks:
8812     /* check if we have actually found the separator - only really applies
8813      * when rslen > 1 */
8814     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8815           memNE((char*)bp - rslen, rsptr, rslen))
8816         goto screamer;                          /* go back to the fray */
8817   thats_really_all_folks:
8818     if (shortbuffered)
8819         cnt += shortbuffered;
8820         DEBUG_P(PerlIO_printf(Perl_debug_log,
8821              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8822     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8823     DEBUG_P(PerlIO_printf(Perl_debug_log,
8824         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8825         "\n",
8826         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8827         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8828     *bp = '\0';
8829     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8830     DEBUG_P(PerlIO_printf(Perl_debug_log,
8831         "Screamer: done, len=%ld, string=|%.*s|\n",
8832         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8833     }
8834    else
8835     {
8836        /*The big, slow, and stupid way. */
8837 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8838         STDCHAR *buf = NULL;
8839         Newx(buf, 8192, STDCHAR);
8840         assert(buf);
8841 #else
8842         STDCHAR buf[8192];
8843 #endif
8844
8845       screamer2:
8846         if (rslen) {
8847             const STDCHAR * const bpe = buf + sizeof(buf);
8848             bp = buf;
8849             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8850                 ; /* keep reading */
8851             cnt = bp - buf;
8852         }
8853         else {
8854             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8855             /* Accommodate broken VAXC compiler, which applies U8 cast to
8856              * both args of ?: operator, causing EOF to change into 255
8857              */
8858             if (cnt > 0)
8859                  i = (U8)buf[cnt - 1];
8860             else
8861                  i = EOF;
8862         }
8863
8864         if (cnt < 0)
8865             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8866         if (append)
8867             sv_catpvn_nomg(sv, (char *) buf, cnt);
8868         else
8869             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8870
8871         if (i != EOF &&                 /* joy */
8872             (!rslen ||
8873              SvCUR(sv) < rslen ||
8874              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8875         {
8876             append = -1;
8877             /*
8878              * If we're reading from a TTY and we get a short read,
8879              * indicating that the user hit his EOF character, we need
8880              * to notice it now, because if we try to read from the TTY
8881              * again, the EOF condition will disappear.
8882              *
8883              * The comparison of cnt to sizeof(buf) is an optimization
8884              * that prevents unnecessary calls to feof().
8885              *
8886              * - jik 9/25/96
8887              */
8888             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8889                 goto screamer2;
8890         }
8891
8892 #ifdef USE_HEAP_INSTEAD_OF_STACK
8893         Safefree(buf);
8894 #endif
8895     }
8896
8897     if (rspara) {               /* have to do this both before and after */
8898         while (i != EOF) {      /* to make sure file boundaries work right */
8899             i = PerlIO_getc(fp);
8900             if (i != '\n') {
8901                 PerlIO_ungetc(fp,i);
8902                 break;
8903             }
8904         }
8905     }
8906
8907     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8908 }
8909
8910 /*
8911 =for apidoc sv_inc
8912
8913 Auto-increment of the value in the SV, doing string to numeric conversion
8914 if necessary.  Handles 'get' magic and operator overloading.
8915
8916 =cut
8917 */
8918
8919 void
8920 Perl_sv_inc(pTHX_ SV *const sv)
8921 {
8922     if (!sv)
8923         return;
8924     SvGETMAGIC(sv);
8925     sv_inc_nomg(sv);
8926 }
8927
8928 /*
8929 =for apidoc sv_inc_nomg
8930
8931 Auto-increment of the value in the SV, doing string to numeric conversion
8932 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8933
8934 =cut
8935 */
8936
8937 void
8938 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8939 {
8940     char *d;
8941     int flags;
8942
8943     if (!sv)
8944         return;
8945     if (SvTHINKFIRST(sv)) {
8946         if (SvREADONLY(sv)) {
8947                 Perl_croak_no_modify();
8948         }
8949         if (SvROK(sv)) {
8950             IV i;
8951             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8952                 return;
8953             i = PTR2IV(SvRV(sv));
8954             sv_unref(sv);
8955             sv_setiv(sv, i);
8956         }
8957         else sv_force_normal_flags(sv, 0);
8958     }
8959     flags = SvFLAGS(sv);
8960     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8961         /* It's (privately or publicly) a float, but not tested as an
8962            integer, so test it to see. */
8963         (void) SvIV(sv);
8964         flags = SvFLAGS(sv);
8965     }
8966     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8967         /* It's publicly an integer, or privately an integer-not-float */
8968 #ifdef PERL_PRESERVE_IVUV
8969       oops_its_int:
8970 #endif
8971         if (SvIsUV(sv)) {
8972             if (SvUVX(sv) == UV_MAX)
8973                 sv_setnv(sv, UV_MAX_P1);
8974             else
8975                 (void)SvIOK_only_UV(sv);
8976                 SvUV_set(sv, SvUVX(sv) + 1);
8977         } else {
8978             if (SvIVX(sv) == IV_MAX)
8979                 sv_setuv(sv, (UV)IV_MAX + 1);
8980             else {
8981                 (void)SvIOK_only(sv);
8982                 SvIV_set(sv, SvIVX(sv) + 1);
8983             }   
8984         }
8985         return;
8986     }
8987     if (flags & SVp_NOK) {
8988         const NV was = SvNVX(sv);
8989         if (LIKELY(!Perl_isinfnan(was)) &&
8990             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8991             was >= NV_OVERFLOWS_INTEGERS_AT) {
8992             /* diag_listed_as: Lost precision when %s %f by 1 */
8993             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8994                            "Lost precision when incrementing %" NVff " by 1",
8995                            was);
8996         }
8997         (void)SvNOK_only(sv);
8998         SvNV_set(sv, was + 1.0);
8999         return;
9000     }
9001
9002     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9003     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9004         Perl_croak_no_modify();
9005
9006     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
9007         if ((flags & SVTYPEMASK) < SVt_PVIV)
9008             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
9009         (void)SvIOK_only(sv);
9010         SvIV_set(sv, 1);
9011         return;
9012     }
9013     d = SvPVX(sv);
9014     while (isALPHA(*d)) d++;
9015     while (isDIGIT(*d)) d++;
9016     if (d < SvEND(sv)) {
9017         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
9018 #ifdef PERL_PRESERVE_IVUV
9019         /* Got to punt this as an integer if needs be, but we don't issue
9020            warnings. Probably ought to make the sv_iv_please() that does
9021            the conversion if possible, and silently.  */
9022         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9023             /* Need to try really hard to see if it's an integer.
9024                9.22337203685478e+18 is an integer.
9025                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9026                so $a="9.22337203685478e+18"; $a+0; $a++
9027                needs to be the same as $a="9.22337203685478e+18"; $a++
9028                or we go insane. */
9029         
9030             (void) sv_2iv(sv);
9031             if (SvIOK(sv))
9032                 goto oops_its_int;
9033
9034             /* sv_2iv *should* have made this an NV */
9035             if (flags & SVp_NOK) {
9036                 (void)SvNOK_only(sv);
9037                 SvNV_set(sv, SvNVX(sv) + 1.0);
9038                 return;
9039             }
9040             /* I don't think we can get here. Maybe I should assert this
9041                And if we do get here I suspect that sv_setnv will croak. NWC
9042                Fall through. */
9043             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9044                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9045         }
9046 #endif /* PERL_PRESERVE_IVUV */
9047         if (!numtype && ckWARN(WARN_NUMERIC))
9048             not_incrementable(sv);
9049         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9050         return;
9051     }
9052     d--;
9053     while (d >= SvPVX_const(sv)) {
9054         if (isDIGIT(*d)) {
9055             if (++*d <= '9')
9056                 return;
9057             *(d--) = '0';
9058         }
9059         else {
9060 #ifdef EBCDIC
9061             /* MKS: The original code here died if letters weren't consecutive.
9062              * at least it didn't have to worry about non-C locales.  The
9063              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9064              * arranged in order (although not consecutively) and that only
9065              * [A-Za-z] are accepted by isALPHA in the C locale.
9066              */
9067             if (isALPHA_FOLD_NE(*d, 'z')) {
9068                 do { ++*d; } while (!isALPHA(*d));
9069                 return;
9070             }
9071             *(d--) -= 'z' - 'a';
9072 #else
9073             ++*d;
9074             if (isALPHA(*d))
9075                 return;
9076             *(d--) -= 'z' - 'a' + 1;
9077 #endif
9078         }
9079     }
9080     /* oh,oh, the number grew */
9081     SvGROW(sv, SvCUR(sv) + 2);
9082     SvCUR_set(sv, SvCUR(sv) + 1);
9083     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9084         *d = d[-1];
9085     if (isDIGIT(d[1]))
9086         *d = '1';
9087     else
9088         *d = d[1];
9089 }
9090
9091 /*
9092 =for apidoc sv_dec
9093
9094 Auto-decrement of the value in the SV, doing string to numeric conversion
9095 if necessary.  Handles 'get' magic and operator overloading.
9096
9097 =cut
9098 */
9099
9100 void
9101 Perl_sv_dec(pTHX_ SV *const sv)
9102 {
9103     if (!sv)
9104         return;
9105     SvGETMAGIC(sv);
9106     sv_dec_nomg(sv);
9107 }
9108
9109 /*
9110 =for apidoc sv_dec_nomg
9111
9112 Auto-decrement of the value in the SV, doing string to numeric conversion
9113 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9114
9115 =cut
9116 */
9117
9118 void
9119 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9120 {
9121     int flags;
9122
9123     if (!sv)
9124         return;
9125     if (SvTHINKFIRST(sv)) {
9126         if (SvREADONLY(sv)) {
9127                 Perl_croak_no_modify();
9128         }
9129         if (SvROK(sv)) {
9130             IV i;
9131             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9132                 return;
9133             i = PTR2IV(SvRV(sv));
9134             sv_unref(sv);
9135             sv_setiv(sv, i);
9136         }
9137         else sv_force_normal_flags(sv, 0);
9138     }
9139     /* Unlike sv_inc we don't have to worry about string-never-numbers
9140        and keeping them magic. But we mustn't warn on punting */
9141     flags = SvFLAGS(sv);
9142     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9143         /* It's publicly an integer, or privately an integer-not-float */
9144 #ifdef PERL_PRESERVE_IVUV
9145       oops_its_int:
9146 #endif
9147         if (SvIsUV(sv)) {
9148             if (SvUVX(sv) == 0) {
9149                 (void)SvIOK_only(sv);
9150                 SvIV_set(sv, -1);
9151             }
9152             else {
9153                 (void)SvIOK_only_UV(sv);
9154                 SvUV_set(sv, SvUVX(sv) - 1);
9155             }   
9156         } else {
9157             if (SvIVX(sv) == IV_MIN) {
9158                 sv_setnv(sv, (NV)IV_MIN);
9159                 goto oops_its_num;
9160             }
9161             else {
9162                 (void)SvIOK_only(sv);
9163                 SvIV_set(sv, SvIVX(sv) - 1);
9164             }   
9165         }
9166         return;
9167     }
9168     if (flags & SVp_NOK) {
9169     oops_its_num:
9170         {
9171             const NV was = SvNVX(sv);
9172             if (LIKELY(!Perl_isinfnan(was)) &&
9173                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9174                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9175                 /* diag_listed_as: Lost precision when %s %f by 1 */
9176                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9177                                "Lost precision when decrementing %" NVff " by 1",
9178                                was);
9179             }
9180             (void)SvNOK_only(sv);
9181             SvNV_set(sv, was - 1.0);
9182             return;
9183         }
9184     }
9185
9186     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9187     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9188         Perl_croak_no_modify();
9189
9190     if (!(flags & SVp_POK)) {
9191         if ((flags & SVTYPEMASK) < SVt_PVIV)
9192             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9193         SvIV_set(sv, -1);
9194         (void)SvIOK_only(sv);
9195         return;
9196     }
9197 #ifdef PERL_PRESERVE_IVUV
9198     {
9199         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9200         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9201             /* Need to try really hard to see if it's an integer.
9202                9.22337203685478e+18 is an integer.
9203                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9204                so $a="9.22337203685478e+18"; $a+0; $a--
9205                needs to be the same as $a="9.22337203685478e+18"; $a--
9206                or we go insane. */
9207         
9208             (void) sv_2iv(sv);
9209             if (SvIOK(sv))
9210                 goto oops_its_int;
9211
9212             /* sv_2iv *should* have made this an NV */
9213             if (flags & SVp_NOK) {
9214                 (void)SvNOK_only(sv);
9215                 SvNV_set(sv, SvNVX(sv) - 1.0);
9216                 return;
9217             }
9218             /* I don't think we can get here. Maybe I should assert this
9219                And if we do get here I suspect that sv_setnv will croak. NWC
9220                Fall through. */
9221             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9222                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9223         }
9224     }
9225 #endif /* PERL_PRESERVE_IVUV */
9226     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9227 }
9228
9229 /* this define is used to eliminate a chunk of duplicated but shared logic
9230  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9231  * used anywhere but here - yves
9232  */
9233 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9234     STMT_START {      \
9235         SSize_t ix = ++PL_tmps_ix;              \
9236         if (UNLIKELY(ix >= PL_tmps_max))        \
9237             ix = tmps_grow_p(ix);                       \
9238         PL_tmps_stack[ix] = (AnSv); \
9239     } STMT_END
9240
9241 /*
9242 =for apidoc sv_mortalcopy
9243
9244 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9245 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9246 explicit call to C<FREETMPS>, or by an implicit call at places such as
9247 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9248
9249 =for apidoc sv_mortalcopy_flags
9250
9251 Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
9252 C<sv_setsv_flags>.
9253
9254 =cut
9255 */
9256
9257 /* Make a string that will exist for the duration of the expression
9258  * evaluation.  Actually, it may have to last longer than that, but
9259  * hopefully we won't free it until it has been assigned to a
9260  * permanent location. */
9261
9262 SV *
9263 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9264 {
9265     SV *sv;
9266
9267     if (flags & SV_GMAGIC)
9268         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9269     new_SV(sv);
9270     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9271     PUSH_EXTEND_MORTAL__SV_C(sv);
9272     SvTEMP_on(sv);
9273     return sv;
9274 }
9275
9276 /*
9277 =for apidoc sv_newmortal
9278
9279 Creates a new null SV which is mortal.  The reference count of the SV is
9280 set to 1.  It will be destroyed "soon", either by an explicit call to
9281 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9282 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9283
9284 =cut
9285 */
9286
9287 SV *
9288 Perl_sv_newmortal(pTHX)
9289 {
9290     SV *sv;
9291
9292     new_SV(sv);
9293     SvFLAGS(sv) = SVs_TEMP;
9294     PUSH_EXTEND_MORTAL__SV_C(sv);
9295     return sv;
9296 }
9297
9298
9299 /*
9300 =for apidoc newSVpvn_flags
9301
9302 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9303 characters) into it.  The reference count for the
9304 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9305 string.  You are responsible for ensuring that the source string is at least
9306 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9307 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9308 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9309 returning.  If C<SVf_UTF8> is set, C<s>
9310 is considered to be in UTF-8 and the
9311 C<SVf_UTF8> flag will be set on the new SV.
9312 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9313
9314     #define newSVpvn_utf8(s, len, u)                    \
9315         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9316
9317 =for apidoc Amnh||SVf_UTF8
9318 =for apidoc Amnh||SVs_TEMP
9319
9320 =cut
9321 */
9322
9323 SV *
9324 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9325 {
9326     SV *sv;
9327
9328     /* All the flags we don't support must be zero.
9329        And we're new code so I'm going to assert this from the start.  */
9330     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9331     new_SV(sv);
9332     sv_setpvn(sv,s,len);
9333
9334     /* This code used to do a sv_2mortal(), however we now unroll the call to
9335      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9336      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9337      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9338      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9339      * means that we eliminate quite a few steps than it looks - Yves
9340      * (explaining patch by gfx) */
9341
9342     SvFLAGS(sv) |= flags;
9343
9344     if(flags & SVs_TEMP){
9345         PUSH_EXTEND_MORTAL__SV_C(sv);
9346     }
9347
9348     return sv;
9349 }
9350
9351 /*
9352 =for apidoc sv_2mortal
9353
9354 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9355 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9356 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9357 string buffer can be "stolen" if this SV is copied.  See also
9358 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9359
9360 =cut
9361 */
9362
9363 SV *
9364 Perl_sv_2mortal(pTHX_ SV *const sv)
9365 {
9366     dVAR;
9367     if (!sv)
9368         return sv;
9369     if (SvIMMORTAL(sv))
9370         return sv;
9371     PUSH_EXTEND_MORTAL__SV_C(sv);
9372     SvTEMP_on(sv);
9373     return sv;
9374 }
9375
9376 /*
9377 =for apidoc newSVpv
9378
9379 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9380 characters) into it.  The reference count for the
9381 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9382 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9383 C<NUL> characters and has to have a terminating C<NUL> byte).
9384
9385 This function can cause reliability issues if you are likely to pass in
9386 empty strings that are not null terminated, because it will run
9387 strlen on the string and potentially run past valid memory.
9388
9389 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9390 For string literals use L</newSVpvs> instead.  This function will work fine for
9391 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9392 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9393
9394 =cut
9395 */
9396
9397 SV *
9398 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9399 {
9400     SV *sv;
9401
9402     new_SV(sv);
9403     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9404     return sv;
9405 }
9406
9407 /*
9408 =for apidoc newSVpvn
9409
9410 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9411 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9412 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9413 are responsible for ensuring that the source buffer is at least
9414 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9415 undefined.
9416
9417 =cut
9418 */
9419
9420 SV *
9421 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9422 {
9423     SV *sv;
9424     new_SV(sv);
9425     sv_setpvn(sv,buffer,len);
9426     return sv;
9427 }
9428
9429 /*
9430 =for apidoc newSVhek
9431
9432 Creates a new SV from the hash key structure.  It will generate scalars that
9433 point to the shared string table where possible.  Returns a new (undefined)
9434 SV if C<hek> is NULL.
9435
9436 =cut
9437 */
9438
9439 SV *
9440 Perl_newSVhek(pTHX_ const HEK *const hek)
9441 {
9442     if (!hek) {
9443         SV *sv;
9444
9445         new_SV(sv);
9446         return sv;
9447     }
9448
9449     if (HEK_LEN(hek) == HEf_SVKEY) {
9450         return newSVsv(*(SV**)HEK_KEY(hek));
9451     } else {
9452         const int flags = HEK_FLAGS(hek);
9453         if (flags & HVhek_WASUTF8) {
9454             /* Trouble :-)
9455                Andreas would like keys he put in as utf8 to come back as utf8
9456             */
9457             STRLEN utf8_len = HEK_LEN(hek);
9458             SV * const sv = newSV_type(SVt_PV);
9459             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9460             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9461             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9462             SvUTF8_on (sv);
9463             return sv;
9464         } else if (flags & HVhek_UNSHARED) {
9465             /* A hash that isn't using shared hash keys has to have
9466                the flag in every key so that we know not to try to call
9467                share_hek_hek on it.  */
9468
9469             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9470             if (HEK_UTF8(hek))
9471                 SvUTF8_on (sv);
9472             return sv;
9473         }
9474         /* This will be overwhelminly the most common case.  */
9475         {
9476             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9477                more efficient than sharepvn().  */
9478             SV *sv;
9479
9480             new_SV(sv);
9481             sv_upgrade(sv, SVt_PV);
9482             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9483             SvCUR_set(sv, HEK_LEN(hek));
9484             SvLEN_set(sv, 0);
9485             SvIsCOW_on(sv);
9486             SvPOK_on(sv);
9487             if (HEK_UTF8(hek))
9488                 SvUTF8_on(sv);
9489             return sv;
9490         }
9491     }
9492 }
9493
9494 /*
9495 =for apidoc newSVpvn_share
9496
9497 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9498 table.  If the string does not already exist in the table, it is
9499 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9500 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9501 is non-zero, that value is used; otherwise the hash is computed.
9502 The string's hash can later be retrieved from the SV
9503 with the C<SvSHARED_HASH()> macro.  The idea here is
9504 that as the string table is used for shared hash keys these strings will have
9505 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9506
9507 =cut
9508 */
9509
9510 SV *
9511 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9512 {
9513     dVAR;
9514     SV *sv;
9515     bool is_utf8 = FALSE;
9516     const char *const orig_src = src;
9517
9518     if (len < 0) {
9519         STRLEN tmplen = -len;
9520         is_utf8 = TRUE;
9521         /* See the note in hv.c:hv_fetch() --jhi */
9522         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9523         len = tmplen;
9524     }
9525     if (!hash)
9526         PERL_HASH(hash, src, len);
9527     new_SV(sv);
9528     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9529        changes here, update it there too.  */
9530     sv_upgrade(sv, SVt_PV);
9531     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9532     SvCUR_set(sv, len);
9533     SvLEN_set(sv, 0);
9534     SvIsCOW_on(sv);
9535     SvPOK_on(sv);
9536     if (is_utf8)
9537         SvUTF8_on(sv);
9538     if (src != orig_src)
9539         Safefree(src);
9540     return sv;
9541 }
9542
9543 /*
9544 =for apidoc newSVpv_share
9545
9546 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9547 string/length pair.
9548
9549 =cut
9550 */
9551
9552 SV *
9553 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9554 {
9555     return newSVpvn_share(src, strlen(src), hash);
9556 }
9557
9558 #if defined(PERL_IMPLICIT_CONTEXT)
9559
9560 /* pTHX_ magic can't cope with varargs, so this is a no-context
9561  * version of the main function, (which may itself be aliased to us).
9562  * Don't access this version directly.
9563  */
9564
9565 SV *
9566 Perl_newSVpvf_nocontext(const char *const pat, ...)
9567 {
9568     dTHX;
9569     SV *sv;
9570     va_list args;
9571
9572     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9573
9574     va_start(args, pat);
9575     sv = vnewSVpvf(pat, &args);
9576     va_end(args);
9577     return sv;
9578 }
9579 #endif
9580
9581 /*
9582 =for apidoc newSVpvf
9583
9584 Creates a new SV and initializes it with the string formatted like
9585 C<sv_catpvf>.
9586
9587 =cut
9588 */
9589
9590 SV *
9591 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9592 {
9593     SV *sv;
9594     va_list args;
9595
9596     PERL_ARGS_ASSERT_NEWSVPVF;
9597
9598     va_start(args, pat);
9599     sv = vnewSVpvf(pat, &args);
9600     va_end(args);
9601     return sv;
9602 }
9603
9604 /* backend for newSVpvf() and newSVpvf_nocontext() */
9605
9606 SV *
9607 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9608 {
9609     SV *sv;
9610
9611     PERL_ARGS_ASSERT_VNEWSVPVF;
9612
9613     new_SV(sv);
9614     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9615     return sv;
9616 }
9617
9618 /*
9619 =for apidoc newSVnv
9620
9621 Creates a new SV and copies a floating point value into it.
9622 The reference count for the SV is set to 1.
9623
9624 =cut
9625 */
9626
9627 SV *
9628 Perl_newSVnv(pTHX_ const NV n)
9629 {
9630     SV *sv;
9631
9632     new_SV(sv);
9633     sv_setnv(sv,n);
9634     return sv;
9635 }
9636
9637 /*
9638 =for apidoc newSViv
9639
9640 Creates a new SV and copies an integer into it.  The reference count for the
9641 SV is set to 1.
9642
9643 =cut
9644 */
9645
9646 SV *
9647 Perl_newSViv(pTHX_ const IV i)
9648 {
9649     SV *sv;
9650
9651     new_SV(sv);
9652
9653     /* Inlining ONLY the small relevant subset of sv_setiv here
9654      * for performance. Makes a significant difference. */
9655
9656     /* We're starting from SVt_FIRST, so provided that's
9657      * actual 0, we don't have to unset any SV type flags
9658      * to promote to SVt_IV. */
9659     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9660
9661     SET_SVANY_FOR_BODYLESS_IV(sv);
9662     SvFLAGS(sv) |= SVt_IV;
9663     (void)SvIOK_on(sv);
9664
9665     SvIV_set(sv, i);
9666     SvTAINT(sv);
9667
9668     return sv;
9669 }
9670
9671 /*
9672 =for apidoc newSVuv
9673
9674 Creates a new SV and copies an unsigned integer into it.
9675 The reference count for the SV is set to 1.
9676
9677 =cut
9678 */
9679
9680 SV *
9681 Perl_newSVuv(pTHX_ const UV u)
9682 {
9683     SV *sv;
9684
9685     /* Inlining ONLY the small relevant subset of sv_setuv here
9686      * for performance. Makes a significant difference. */
9687
9688     /* Using ivs is more efficient than using uvs - see sv_setuv */
9689     if (u <= (UV)IV_MAX) {
9690         return newSViv((IV)u);
9691     }
9692
9693     new_SV(sv);
9694
9695     /* We're starting from SVt_FIRST, so provided that's
9696      * actual 0, we don't have to unset any SV type flags
9697      * to promote to SVt_IV. */
9698     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9699
9700     SET_SVANY_FOR_BODYLESS_IV(sv);
9701     SvFLAGS(sv) |= SVt_IV;
9702     (void)SvIOK_on(sv);
9703     (void)SvIsUV_on(sv);
9704
9705     SvUV_set(sv, u);
9706     SvTAINT(sv);
9707
9708     return sv;
9709 }
9710
9711 /*
9712 =for apidoc newSV_type
9713
9714 Creates a new SV, of the type specified.  The reference count for the new SV
9715 is set to 1.
9716
9717 =cut
9718 */
9719
9720 SV *
9721 Perl_newSV_type(pTHX_ const svtype type)
9722 {
9723     SV *sv;
9724
9725     new_SV(sv);
9726     ASSUME(SvTYPE(sv) == SVt_FIRST);
9727     if(type != SVt_FIRST)
9728         sv_upgrade(sv, type);
9729     return sv;
9730 }
9731
9732 /*
9733 =for apidoc newRV_noinc
9734
9735 Creates an RV wrapper for an SV.  The reference count for the original
9736 SV is B<not> incremented.
9737
9738 =cut
9739 */
9740
9741 SV *
9742 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9743 {
9744     SV *sv;
9745
9746     PERL_ARGS_ASSERT_NEWRV_NOINC;
9747
9748     new_SV(sv);
9749
9750     /* We're starting from SVt_FIRST, so provided that's
9751      * actual 0, we don't have to unset any SV type flags
9752      * to promote to SVt_IV. */
9753     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9754
9755     SET_SVANY_FOR_BODYLESS_IV(sv);
9756     SvFLAGS(sv) |= SVt_IV;
9757     SvROK_on(sv);
9758     SvIV_set(sv, 0);
9759
9760     SvTEMP_off(tmpRef);
9761     SvRV_set(sv, tmpRef);
9762
9763     return sv;
9764 }
9765
9766 /* newRV_inc is the official function name to use now.
9767  * newRV_inc is in fact #defined to newRV in sv.h
9768  */
9769
9770 SV *
9771 Perl_newRV(pTHX_ SV *const sv)
9772 {
9773     PERL_ARGS_ASSERT_NEWRV;
9774
9775     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9776 }
9777
9778 /*
9779 =for apidoc newSVsv
9780
9781 Creates a new SV which is an exact duplicate of the original SV.
9782 (Uses C<sv_setsv>.)
9783
9784 =for apidoc newSVsv_nomg
9785
9786 Like C<newSVsv> but does not process get magic.
9787
9788 =cut
9789 */
9790
9791 SV *
9792 Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
9793 {
9794     SV *sv;
9795
9796     if (!old)
9797         return NULL;
9798     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9799         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9800         return NULL;
9801     }
9802     /* Do this here, otherwise we leak the new SV if this croaks. */
9803     if (flags & SV_GMAGIC)
9804         SvGETMAGIC(old);
9805     new_SV(sv);
9806     sv_setsv_flags(sv, old, flags & ~SV_GMAGIC);
9807     return sv;
9808 }
9809
9810 /*
9811 =for apidoc sv_reset
9812
9813 Underlying implementation for the C<reset> Perl function.
9814 Note that the perl-level function is vaguely deprecated.
9815
9816 =cut
9817 */
9818
9819 void
9820 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9821 {
9822     PERL_ARGS_ASSERT_SV_RESET;
9823
9824     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9825 }
9826
9827 void
9828 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9829 {
9830     char todo[PERL_UCHAR_MAX+1];
9831     const char *send;
9832
9833     if (!stash || SvTYPE(stash) != SVt_PVHV)
9834         return;
9835
9836     if (!s) {           /* reset ?? searches */
9837         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9838         if (mg) {
9839             const U32 count = mg->mg_len / sizeof(PMOP**);
9840             PMOP **pmp = (PMOP**) mg->mg_ptr;
9841             PMOP *const *const end = pmp + count;
9842
9843             while (pmp < end) {
9844 #ifdef USE_ITHREADS
9845                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9846 #else
9847                 (*pmp)->op_pmflags &= ~PMf_USED;
9848 #endif
9849                 ++pmp;
9850             }
9851         }
9852         return;
9853     }
9854
9855     /* reset variables */
9856
9857     if (!HvARRAY(stash))
9858         return;
9859
9860     Zero(todo, 256, char);
9861     send = s + len;
9862     while (s < send) {
9863         I32 max;
9864         I32 i = (unsigned char)*s;
9865         if (s[1] == '-') {
9866             s += 2;
9867         }
9868         max = (unsigned char)*s++;
9869         for ( ; i <= max; i++) {
9870             todo[i] = 1;
9871         }
9872         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9873             HE *entry;
9874             for (entry = HvARRAY(stash)[i];
9875                  entry;
9876                  entry = HeNEXT(entry))
9877             {
9878                 GV *gv;
9879                 SV *sv;
9880
9881                 if (!todo[(U8)*HeKEY(entry)])
9882                     continue;
9883                 gv = MUTABLE_GV(HeVAL(entry));
9884                 if (!isGV(gv))
9885                     continue;
9886                 sv = GvSV(gv);
9887                 if (sv && !SvREADONLY(sv)) {
9888                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9889                     if (!isGV(sv)) SvOK_off(sv);
9890                 }
9891                 if (GvAV(gv)) {
9892                     av_clear(GvAV(gv));
9893                 }
9894                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9895                     hv_clear(GvHV(gv));
9896                 }
9897             }
9898         }
9899     }
9900 }
9901
9902 /*
9903 =for apidoc sv_2io
9904
9905 Using various gambits, try to get an IO from an SV: the IO slot if its a
9906 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9907 named after the PV if we're a string.
9908
9909 'Get' magic is ignored on the C<sv> passed in, but will be called on
9910 C<SvRV(sv)> if C<sv> is an RV.
9911
9912 =cut
9913 */
9914
9915 IO*
9916 Perl_sv_2io(pTHX_ SV *const sv)
9917 {
9918     IO* io;
9919     GV* gv;
9920
9921     PERL_ARGS_ASSERT_SV_2IO;
9922
9923     switch (SvTYPE(sv)) {
9924     case SVt_PVIO:
9925         io = MUTABLE_IO(sv);
9926         break;
9927     case SVt_PVGV:
9928     case SVt_PVLV:
9929         if (isGV_with_GP(sv)) {
9930             gv = MUTABLE_GV(sv);
9931             io = GvIO(gv);
9932             if (!io)
9933                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9934                                     HEKfARG(GvNAME_HEK(gv)));
9935             break;
9936         }
9937         /* FALLTHROUGH */
9938     default:
9939         if (!SvOK(sv))
9940             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9941         if (SvROK(sv)) {
9942             SvGETMAGIC(SvRV(sv));
9943             return sv_2io(SvRV(sv));
9944         }
9945         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9946         if (gv)
9947             io = GvIO(gv);
9948         else
9949             io = 0;
9950         if (!io) {
9951             SV *newsv = sv;
9952             if (SvGMAGICAL(sv)) {
9953                 newsv = sv_newmortal();
9954                 sv_setsv_nomg(newsv, sv);
9955             }
9956             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9957         }
9958         break;
9959     }
9960     return io;
9961 }
9962
9963 /*
9964 =for apidoc sv_2cv
9965
9966 Using various gambits, try to get a CV from an SV; in addition, try if
9967 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9968 The flags in C<lref> are passed to C<gv_fetchsv>.
9969
9970 =cut
9971 */
9972
9973 CV *
9974 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9975 {
9976     GV *gv = NULL;
9977     CV *cv = NULL;
9978
9979     PERL_ARGS_ASSERT_SV_2CV;
9980
9981     if (!sv) {
9982         *st = NULL;
9983         *gvp = NULL;
9984         return NULL;
9985     }
9986     switch (SvTYPE(sv)) {
9987     case SVt_PVCV:
9988         *st = CvSTASH(sv);
9989         *gvp = NULL;
9990         return MUTABLE_CV(sv);
9991     case SVt_PVHV:
9992     case SVt_PVAV:
9993         *st = NULL;
9994         *gvp = NULL;
9995         return NULL;
9996     default:
9997         SvGETMAGIC(sv);
9998         if (SvROK(sv)) {
9999             if (SvAMAGIC(sv))
10000                 sv = amagic_deref_call(sv, to_cv_amg);
10001
10002             sv = SvRV(sv);
10003             if (SvTYPE(sv) == SVt_PVCV) {
10004                 cv = MUTABLE_CV(sv);
10005                 *gvp = NULL;
10006                 *st = CvSTASH(cv);
10007                 return cv;
10008             }
10009             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
10010                 gv = MUTABLE_GV(sv);
10011             else
10012                 Perl_croak(aTHX_ "Not a subroutine reference");
10013         }
10014         else if (isGV_with_GP(sv)) {
10015             gv = MUTABLE_GV(sv);
10016         }
10017         else {
10018             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
10019         }
10020         *gvp = gv;
10021         if (!gv) {
10022             *st = NULL;
10023             return NULL;
10024         }
10025         /* Some flags to gv_fetchsv mean don't really create the GV  */
10026         if (!isGV_with_GP(gv)) {
10027             *st = NULL;
10028             return NULL;
10029         }
10030         *st = GvESTASH(gv);
10031         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10032             /* XXX this is probably not what they think they're getting.
10033              * It has the same effect as "sub name;", i.e. just a forward
10034              * declaration! */
10035             newSTUB(gv,0);
10036         }
10037         return GvCVu(gv);
10038     }
10039 }
10040
10041 /*
10042 =for apidoc sv_true
10043
10044 Returns true if the SV has a true value by Perl's rules.
10045 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10046 instead use an in-line version.
10047
10048 =cut
10049 */
10050
10051 I32
10052 Perl_sv_true(pTHX_ SV *const sv)
10053 {
10054     if (!sv)
10055         return 0;
10056     if (SvPOK(sv)) {
10057         const XPV* const tXpv = (XPV*)SvANY(sv);
10058         if (tXpv &&
10059                 (tXpv->xpv_cur > 1 ||
10060                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10061             return 1;
10062         else
10063             return 0;
10064     }
10065     else {
10066         if (SvIOK(sv))
10067             return SvIVX(sv) != 0;
10068         else {
10069             if (SvNOK(sv))
10070                 return SvNVX(sv) != 0.0;
10071             else
10072                 return sv_2bool(sv);
10073         }
10074     }
10075 }
10076
10077 /*
10078 =for apidoc sv_pvn_force
10079
10080 Get a sensible string out of the SV somehow.
10081 A private implementation of the C<SvPV_force> macro for compilers which
10082 can't cope with complex macro expressions.  Always use the macro instead.
10083
10084 =for apidoc sv_pvn_force_flags
10085
10086 Get a sensible string out of the SV somehow.
10087 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10088 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10089 implemented in terms of this function.
10090 You normally want to use the various wrapper macros instead: see
10091 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10092
10093 =cut
10094 */
10095
10096 char *
10097 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10098 {
10099     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10100
10101     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10102     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10103         sv_force_normal_flags(sv, 0);
10104
10105     if (SvPOK(sv)) {
10106         if (lp)
10107             *lp = SvCUR(sv);
10108     }
10109     else {
10110         char *s;
10111         STRLEN len;
10112  
10113         if (SvTYPE(sv) > SVt_PVLV
10114             || isGV_with_GP(sv))
10115             /* diag_listed_as: Can't coerce %s to %s in %s */
10116             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10117                 OP_DESC(PL_op));
10118         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10119         if (!s) {
10120           s = (char *)"";
10121         }
10122         if (lp)
10123             *lp = len;
10124
10125         if (SvTYPE(sv) < SVt_PV ||
10126             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10127             if (SvROK(sv))
10128                 sv_unref(sv);
10129             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10130             SvGROW(sv, len + 1);
10131             Move(s,SvPVX(sv),len,char);
10132             SvCUR_set(sv, len);
10133             SvPVX(sv)[len] = '\0';
10134         }
10135         if (!SvPOK(sv)) {
10136             SvPOK_on(sv);               /* validate pointer */
10137             SvTAINT(sv);
10138             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10139                                   PTR2UV(sv),SvPVX_const(sv)));
10140         }
10141     }
10142     (void)SvPOK_only_UTF8(sv);
10143     return SvPVX_mutable(sv);
10144 }
10145
10146 /*
10147 =for apidoc sv_pvbyten_force
10148
10149 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10150 instead.  If the SV cannot be downgraded from UTF-8, this croaks.
10151
10152 =cut
10153 */
10154
10155 char *
10156 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10157 {
10158     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10159
10160     sv_pvn_force(sv,lp);
10161     sv_utf8_downgrade(sv,0);
10162     *lp = SvCUR(sv);
10163     return SvPVX(sv);
10164 }
10165
10166 /*
10167 =for apidoc sv_pvutf8n_force
10168
10169 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10170 instead.
10171
10172 =cut
10173 */
10174
10175 char *
10176 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10177 {
10178     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10179
10180     sv_pvn_force(sv,0);
10181     sv_utf8_upgrade_nomg(sv);
10182     *lp = SvCUR(sv);
10183     return SvPVX(sv);
10184 }
10185
10186 /*
10187 =for apidoc sv_reftype
10188
10189 Returns a string describing what the SV is a reference to.
10190
10191 If ob is true and the SV is blessed, the string is the class name,
10192 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10193
10194 =cut
10195 */
10196
10197 const char *
10198 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10199 {
10200     PERL_ARGS_ASSERT_SV_REFTYPE;
10201     if (ob && SvOBJECT(sv)) {
10202         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10203     }
10204     else {
10205         /* WARNING - There is code, for instance in mg.c, that assumes that
10206          * the only reason that sv_reftype(sv,0) would return a string starting
10207          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10208          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10209          * this routine inside other subs, and it saves time.
10210          * Do not change this assumption without searching for "dodgy type check" in
10211          * the code.
10212          * - Yves */
10213         switch (SvTYPE(sv)) {
10214         case SVt_NULL:
10215         case SVt_IV:
10216         case SVt_NV:
10217         case SVt_PV:
10218         case SVt_PVIV:
10219         case SVt_PVNV:
10220         case SVt_PVMG:
10221                                 if (SvVOK(sv))
10222                                     return "VSTRING";
10223                                 if (SvROK(sv))
10224                                     return "REF";
10225                                 else
10226                                     return "SCALAR";
10227
10228         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10229                                 /* tied lvalues should appear to be
10230                                  * scalars for backwards compatibility */
10231                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10232                                     ? "SCALAR" : "LVALUE");
10233         case SVt_PVAV:          return "ARRAY";
10234         case SVt_PVHV:          return "HASH";
10235         case SVt_PVCV:          return "CODE";
10236         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10237                                     ? "GLOB" : "SCALAR");
10238         case SVt_PVFM:          return "FORMAT";
10239         case SVt_PVIO:          return "IO";
10240         case SVt_INVLIST:       return "INVLIST";
10241         case SVt_REGEXP:        return "REGEXP";
10242         default:                return "UNKNOWN";
10243         }
10244     }
10245 }
10246
10247 /*
10248 =for apidoc sv_ref
10249
10250 Returns a SV describing what the SV passed in is a reference to.
10251
10252 dst can be a SV to be set to the description or NULL, in which case a
10253 mortal SV is returned.
10254
10255 If ob is true and the SV is blessed, the description is the class
10256 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10257
10258 =cut
10259 */
10260
10261 SV *
10262 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10263 {
10264     PERL_ARGS_ASSERT_SV_REF;
10265
10266     if (!dst)
10267         dst = sv_newmortal();
10268
10269     if (ob && SvOBJECT(sv)) {
10270         HvNAME_get(SvSTASH(sv))
10271                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10272                     : sv_setpvs(dst, "__ANON__");
10273     }
10274     else {
10275         const char * reftype = sv_reftype(sv, 0);
10276         sv_setpv(dst, reftype);
10277     }
10278     return dst;
10279 }
10280
10281 /*
10282 =for apidoc sv_isobject
10283
10284 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10285 object.  If the SV is not an RV, or if the object is not blessed, then this
10286 will return false.
10287
10288 =cut
10289 */
10290
10291 int
10292 Perl_sv_isobject(pTHX_ SV *sv)
10293 {
10294     if (!sv)
10295         return 0;
10296     SvGETMAGIC(sv);
10297     if (!SvROK(sv))
10298         return 0;
10299     sv = SvRV(sv);
10300     if (!SvOBJECT(sv))
10301         return 0;
10302     return 1;
10303 }
10304
10305 /*
10306 =for apidoc sv_isa
10307
10308 Returns a boolean indicating whether the SV is blessed into the specified
10309 class.
10310
10311 This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
10312 verify an inheritance relationship in the same way as the C<isa> operator by
10313 respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
10314 directly on the actual object type.
10315
10316 =cut
10317 */
10318
10319 int
10320 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10321 {
10322     const char *hvname;
10323
10324     PERL_ARGS_ASSERT_SV_ISA;
10325
10326     if (!sv)
10327         return 0;
10328     SvGETMAGIC(sv);
10329     if (!SvROK(sv))
10330         return 0;
10331     sv = SvRV(sv);
10332     if (!SvOBJECT(sv))
10333         return 0;
10334     hvname = HvNAME_get(SvSTASH(sv));
10335     if (!hvname)
10336         return 0;
10337
10338     return strEQ(hvname, name);
10339 }
10340
10341 /*
10342 =for apidoc newSVrv
10343
10344 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10345 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10346 SV will be blessed in the specified package.  The new SV is returned and its
10347 reference count is 1.  The reference count 1 is owned by C<rv>. See also
10348 newRV_inc() and newRV_noinc() for creating a new RV properly.
10349
10350 =cut
10351 */
10352
10353 SV*
10354 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10355 {
10356     SV *sv;
10357
10358     PERL_ARGS_ASSERT_NEWSVRV;
10359
10360     new_SV(sv);
10361
10362     SV_CHECK_THINKFIRST_COW_DROP(rv);
10363
10364     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10365         const U32 refcnt = SvREFCNT(rv);
10366         SvREFCNT(rv) = 0;
10367         sv_clear(rv);
10368         SvFLAGS(rv) = 0;
10369         SvREFCNT(rv) = refcnt;
10370
10371         sv_upgrade(rv, SVt_IV);
10372     } else if (SvROK(rv)) {
10373         SvREFCNT_dec(SvRV(rv));
10374     } else {
10375         prepare_SV_for_RV(rv);
10376     }
10377
10378     SvOK_off(rv);
10379     SvRV_set(rv, sv);
10380     SvROK_on(rv);
10381
10382     if (classname) {
10383         HV* const stash = gv_stashpv(classname, GV_ADD);
10384         (void)sv_bless(rv, stash);
10385     }
10386     return sv;
10387 }
10388
10389 SV *
10390 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10391 {
10392     SV * const lv = newSV_type(SVt_PVLV);
10393     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10394     LvTYPE(lv) = 'y';
10395     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10396     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10397     LvSTARGOFF(lv) = ix;
10398     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10399     return lv;
10400 }
10401
10402 /*
10403 =for apidoc sv_setref_pv
10404
10405 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10406 argument will be upgraded to an RV.  That RV will be modified to point to
10407 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10408 into the SV.  The C<classname> argument indicates the package for the
10409 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10410 will have a reference count of 1, and the RV will be returned.
10411
10412 Do not use with other Perl types such as HV, AV, SV, CV, because those
10413 objects will become corrupted by the pointer copy process.
10414
10415 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10416
10417 =cut
10418 */
10419
10420 SV*
10421 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10422 {
10423     PERL_ARGS_ASSERT_SV_SETREF_PV;
10424
10425     if (!pv) {
10426         sv_set_undef(rv);
10427         SvSETMAGIC(rv);
10428     }
10429     else
10430         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10431     return rv;
10432 }
10433
10434 /*
10435 =for apidoc sv_setref_iv
10436
10437 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10438 argument will be upgraded to an RV.  That RV will be modified to point to
10439 the new SV.  The C<classname> argument indicates the package for the
10440 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10441 will have a reference count of 1, and the RV will be returned.
10442
10443 =cut
10444 */
10445
10446 SV*
10447 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10448 {
10449     PERL_ARGS_ASSERT_SV_SETREF_IV;
10450
10451     sv_setiv(newSVrv(rv,classname), iv);
10452     return rv;
10453 }
10454
10455 /*
10456 =for apidoc sv_setref_uv
10457
10458 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10459 argument will be upgraded to an RV.  That RV will be modified to point to
10460 the new SV.  The C<classname> argument indicates the package for the
10461 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10462 will have a reference count of 1, and the RV will be returned.
10463
10464 =cut
10465 */
10466
10467 SV*
10468 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10469 {
10470     PERL_ARGS_ASSERT_SV_SETREF_UV;
10471
10472     sv_setuv(newSVrv(rv,classname), uv);
10473     return rv;
10474 }
10475
10476 /*
10477 =for apidoc sv_setref_nv
10478
10479 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10480 argument will be upgraded to an RV.  That RV will be modified to point to
10481 the new SV.  The C<classname> argument indicates the package for the
10482 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10483 will have a reference count of 1, and the RV will be returned.
10484
10485 =cut
10486 */
10487
10488 SV*
10489 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10490 {
10491     PERL_ARGS_ASSERT_SV_SETREF_NV;
10492
10493     sv_setnv(newSVrv(rv,classname), nv);
10494     return rv;
10495 }
10496
10497 /*
10498 =for apidoc sv_setref_pvn
10499
10500 Copies a string into a new SV, optionally blessing the SV.  The length of the
10501 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10502 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10503 argument indicates the package for the blessing.  Set C<classname> to
10504 C<NULL> to avoid the blessing.  The new SV will have a reference count
10505 of 1, and the RV will be returned.
10506
10507 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10508
10509 =cut
10510 */
10511
10512 SV*
10513 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10514                    const char *const pv, const STRLEN n)
10515 {
10516     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10517
10518     sv_setpvn(newSVrv(rv,classname), pv, n);
10519     return rv;
10520 }
10521
10522 /*
10523 =for apidoc sv_bless
10524
10525 Blesses an SV into a specified package.  The SV must be an RV.  The package
10526 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10527 of the SV is unaffected.
10528
10529 =cut
10530 */
10531
10532 SV*
10533 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10534 {
10535     SV *tmpRef;
10536     HV *oldstash = NULL;
10537
10538     PERL_ARGS_ASSERT_SV_BLESS;
10539
10540     SvGETMAGIC(sv);
10541     if (!SvROK(sv))
10542         Perl_croak(aTHX_ "Can't bless non-reference value");
10543     tmpRef = SvRV(sv);
10544     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10545         if (SvREADONLY(tmpRef))
10546             Perl_croak_no_modify();
10547         if (SvOBJECT(tmpRef)) {
10548             oldstash = SvSTASH(tmpRef);
10549         }
10550     }
10551     SvOBJECT_on(tmpRef);
10552     SvUPGRADE(tmpRef, SVt_PVMG);
10553     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10554     SvREFCNT_dec(oldstash);
10555
10556     if(SvSMAGICAL(tmpRef))
10557         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10558             mg_set(tmpRef);
10559
10560
10561
10562     return sv;
10563 }
10564
10565 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10566  * as it is after unglobbing it.
10567  */
10568
10569 PERL_STATIC_INLINE void
10570 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10571 {
10572     void *xpvmg;
10573     HV *stash;
10574     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10575
10576     PERL_ARGS_ASSERT_SV_UNGLOB;
10577
10578     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10579     SvFAKE_off(sv);
10580     if (!(flags & SV_COW_DROP_PV))
10581         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10582
10583     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10584     if (GvGP(sv)) {
10585         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10586            && HvNAME_get(stash))
10587             mro_method_changed_in(stash);
10588         gp_free(MUTABLE_GV(sv));
10589     }
10590     if (GvSTASH(sv)) {
10591         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10592         GvSTASH(sv) = NULL;
10593     }
10594     GvMULTI_off(sv);
10595     if (GvNAME_HEK(sv)) {
10596         unshare_hek(GvNAME_HEK(sv));
10597     }
10598     isGV_with_GP_off(sv);
10599
10600     if(SvTYPE(sv) == SVt_PVGV) {
10601         /* need to keep SvANY(sv) in the right arena */
10602         xpvmg = new_XPVMG();
10603         StructCopy(SvANY(sv), xpvmg, XPVMG);
10604         del_XPVGV(SvANY(sv));
10605         SvANY(sv) = xpvmg;
10606
10607         SvFLAGS(sv) &= ~SVTYPEMASK;
10608         SvFLAGS(sv) |= SVt_PVMG;
10609     }
10610
10611     /* Intentionally not calling any local SET magic, as this isn't so much a
10612        set operation as merely an internal storage change.  */
10613     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10614     else sv_setsv_flags(sv, temp, 0);
10615
10616     if ((const GV *)sv == PL_last_in_gv)
10617         PL_last_in_gv = NULL;
10618     else if ((const GV *)sv == PL_statgv)
10619         PL_statgv = NULL;
10620 }
10621
10622 /*
10623 =for apidoc sv_unref_flags
10624
10625 Unsets the RV status of the SV, and decrements the reference count of
10626 whatever was being referenced by the RV.  This can almost be thought of
10627 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10628 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10629 (otherwise the decrementing is conditional on the reference count being
10630 different from one or the reference being a readonly SV).
10631 See C<L</SvROK_off>>.
10632
10633 =for apidoc Amnh||SV_IMMEDIATE_UNREF
10634
10635 =cut
10636 */
10637
10638 void
10639 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10640 {
10641     SV* const target = SvRV(ref);
10642
10643     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10644
10645     if (SvWEAKREF(ref)) {
10646         sv_del_backref(target, ref);
10647         SvWEAKREF_off(ref);
10648         SvRV_set(ref, NULL);
10649         return;
10650     }
10651     SvRV_set(ref, NULL);
10652     SvROK_off(ref);
10653     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10654        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10655     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10656         SvREFCNT_dec_NN(target);
10657     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10658         sv_2mortal(target);     /* Schedule for freeing later */
10659 }
10660
10661 /*
10662 =for apidoc sv_untaint
10663
10664 Untaint an SV.  Use C<SvTAINTED_off> instead.
10665
10666 =cut
10667 */
10668
10669 void
10670 Perl_sv_untaint(pTHX_ SV *const sv)
10671 {
10672     PERL_ARGS_ASSERT_SV_UNTAINT;
10673     PERL_UNUSED_CONTEXT;
10674
10675     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10676         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10677         if (mg)
10678             mg->mg_len &= ~1;
10679     }
10680 }
10681
10682 /*
10683 =for apidoc sv_tainted
10684
10685 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10686
10687 =cut
10688 */
10689
10690 bool
10691 Perl_sv_tainted(pTHX_ SV *const sv)
10692 {
10693     PERL_ARGS_ASSERT_SV_TAINTED;
10694     PERL_UNUSED_CONTEXT;
10695
10696     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10697         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10698         if (mg && (mg->mg_len & 1) )
10699             return TRUE;
10700     }
10701     return FALSE;
10702 }
10703
10704 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10705                        private to this file */
10706
10707 /*
10708 =for apidoc sv_setpviv
10709
10710 Copies an integer into the given SV, also updating its string value.
10711 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10712
10713 =cut
10714 */
10715
10716 void
10717 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10718 {
10719     /* The purpose of this union is to ensure that arr is aligned on
10720        a 2 byte boundary, because that is what uiv_2buf() requires */
10721     union {
10722         char arr[TYPE_CHARS(UV)];
10723         U16 dummy;
10724     } buf;
10725     char *ebuf;
10726     char * const ptr = uiv_2buf(buf.arr, iv, 0, 0, &ebuf);
10727
10728     PERL_ARGS_ASSERT_SV_SETPVIV;
10729
10730     sv_setpvn(sv, ptr, ebuf - ptr);
10731 }
10732
10733 /*
10734 =for apidoc sv_setpviv_mg
10735
10736 Like C<sv_setpviv>, but also handles 'set' magic.
10737
10738 =cut
10739 */
10740
10741 void
10742 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10743 {
10744     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10745
10746     GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
10747
10748     sv_setpviv(sv, iv);
10749
10750     GCC_DIAG_RESTORE_STMT;
10751
10752     SvSETMAGIC(sv);
10753 }
10754
10755 #endif  /* NO_MATHOMS */
10756
10757 #if defined(PERL_IMPLICIT_CONTEXT)
10758
10759 /* pTHX_ magic can't cope with varargs, so this is a no-context
10760  * version of the main function, (which may itself be aliased to us).
10761  * Don't access this version directly.
10762  */
10763
10764 void
10765 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10766 {
10767     dTHX;
10768     va_list args;
10769
10770     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10771
10772     va_start(args, pat);
10773     sv_vsetpvf(sv, pat, &args);
10774     va_end(args);
10775 }
10776
10777 /* pTHX_ magic can't cope with varargs, so this is a no-context
10778  * version of the main function, (which may itself be aliased to us).
10779  * Don't access this version directly.
10780  */
10781
10782 void
10783 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10784 {
10785     dTHX;
10786     va_list args;
10787
10788     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10789
10790     va_start(args, pat);
10791     sv_vsetpvf_mg(sv, pat, &args);
10792     va_end(args);
10793 }
10794 #endif
10795
10796 /*
10797 =for apidoc sv_setpvf
10798
10799 Works like C<sv_catpvf> but copies the text into the SV instead of
10800 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10801
10802 =cut
10803 */
10804
10805 void
10806 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10807 {
10808     va_list args;
10809
10810     PERL_ARGS_ASSERT_SV_SETPVF;
10811
10812     va_start(args, pat);
10813     sv_vsetpvf(sv, pat, &args);
10814     va_end(args);
10815 }
10816
10817 /*
10818 =for apidoc sv_vsetpvf
10819
10820 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10821 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10822
10823 Usually used via its frontend C<sv_setpvf>.
10824
10825 =cut
10826 */
10827
10828 void
10829 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10830 {
10831     PERL_ARGS_ASSERT_SV_VSETPVF;
10832
10833     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10834 }
10835
10836 /*
10837 =for apidoc sv_setpvf_mg
10838
10839 Like C<sv_setpvf>, but also handles 'set' magic.
10840
10841 =cut
10842 */
10843
10844 void
10845 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10846 {
10847     va_list args;
10848
10849     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10850
10851     va_start(args, pat);
10852     sv_vsetpvf_mg(sv, pat, &args);
10853     va_end(args);
10854 }
10855
10856 /*
10857 =for apidoc sv_vsetpvf_mg
10858
10859 Like C<sv_vsetpvf>, but also handles 'set' magic.
10860
10861 Usually used via its frontend C<sv_setpvf_mg>.
10862
10863 =cut
10864 */
10865
10866 void
10867 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10868 {
10869     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10870
10871     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10872     SvSETMAGIC(sv);
10873 }
10874
10875 #if defined(PERL_IMPLICIT_CONTEXT)
10876
10877 /* pTHX_ magic can't cope with varargs, so this is a no-context
10878  * version of the main function, (which may itself be aliased to us).
10879  * Don't access this version directly.
10880  */
10881
10882 void
10883 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10884 {
10885     dTHX;
10886     va_list args;
10887
10888     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10889
10890     va_start(args, pat);
10891     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10892     va_end(args);
10893 }
10894
10895 /* pTHX_ magic can't cope with varargs, so this is a no-context
10896  * version of the main function, (which may itself be aliased to us).
10897  * Don't access this version directly.
10898  */
10899
10900 void
10901 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10902 {
10903     dTHX;
10904     va_list args;
10905
10906     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10907
10908     va_start(args, pat);
10909     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10910     SvSETMAGIC(sv);
10911     va_end(args);
10912 }
10913 #endif
10914
10915 /*
10916 =for apidoc sv_catpvf
10917
10918 Processes its arguments like C<sprintf>, and appends the formatted
10919 output to an SV.  As with C<sv_vcatpvfn> called with a non-null C-style
10920 variable argument list, argument reordering is not supported.
10921 If the appended data contains "wide" characters
10922 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10923 and characters >255 formatted with C<%c>), the original SV might get
10924 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10925 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10926 valid UTF-8; if the original SV was bytes, the pattern should be too.
10927
10928 =cut */
10929
10930 void
10931 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10932 {
10933     va_list args;
10934
10935     PERL_ARGS_ASSERT_SV_CATPVF;
10936
10937     va_start(args, pat);
10938     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10939     va_end(args);
10940 }
10941
10942 /*
10943 =for apidoc sv_vcatpvf
10944
10945 Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
10946 variable argument list, and appends the formatted output
10947 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10948
10949 Usually used via its frontend C<sv_catpvf>.
10950
10951 =cut
10952 */
10953
10954 void
10955 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10956 {
10957     PERL_ARGS_ASSERT_SV_VCATPVF;
10958
10959     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10960 }
10961
10962 /*
10963 =for apidoc sv_catpvf_mg
10964
10965 Like C<sv_catpvf>, but also handles 'set' magic.
10966
10967 =cut
10968 */
10969
10970 void
10971 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10972 {
10973     va_list args;
10974
10975     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10976
10977     va_start(args, pat);
10978     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10979     SvSETMAGIC(sv);
10980     va_end(args);
10981 }
10982
10983 /*
10984 =for apidoc sv_vcatpvf_mg
10985
10986 Like C<sv_vcatpvf>, but also handles 'set' magic.
10987
10988 Usually used via its frontend C<sv_catpvf_mg>.
10989
10990 =cut
10991 */
10992
10993 void
10994 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10995 {
10996     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10997
10998     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10999     SvSETMAGIC(sv);
11000 }
11001
11002 /*
11003 =for apidoc sv_vsetpvfn
11004
11005 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11006 appending it.
11007
11008 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11009
11010 =cut
11011 */
11012
11013 void
11014 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11015                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11016 {
11017     PERL_ARGS_ASSERT_SV_VSETPVFN;
11018
11019     SvPVCLEAR(sv);
11020     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
11021 }
11022
11023
11024 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
11025
11026 PERL_STATIC_INLINE void
11027 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
11028 {
11029     STRLEN const need = len + SvCUR(sv) + 1;
11030     char *end;
11031
11032     /* can't wrap as both len and SvCUR() are allocated in
11033      * memory and together can't consume all the address space
11034      */
11035     assert(need > len);
11036
11037     assert(SvPOK(sv));
11038     SvGROW(sv, need);
11039     end = SvEND(sv);
11040     Copy(buf, end, len, char);
11041     end += len;
11042     *end = '\0';
11043     SvCUR_set(sv, need - 1);
11044 }
11045
11046
11047 /*
11048  * Warn of missing argument to sprintf. The value used in place of such
11049  * arguments should be &PL_sv_no; an undefined value would yield
11050  * inappropriate "use of uninit" warnings [perl #71000].
11051  */
11052 STATIC void
11053 S_warn_vcatpvfn_missing_argument(pTHX) {
11054     if (ckWARN(WARN_MISSING)) {
11055         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11056                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11057     }
11058 }
11059
11060
11061 static void
11062 S_croak_overflow()
11063 {
11064     dTHX;
11065     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11066                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11067 }
11068
11069
11070 /* Given an int i from the next arg (if args is true) or an sv from an arg
11071  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11072  * with overflow checking.
11073  * Sets *neg to true if the value was negative (untouched otherwise.
11074  * Returns the absolute value.
11075  * As an extra margin of safety, it croaks if the returned value would
11076  * exceed the maximum value of a STRLEN / 4.
11077  */
11078
11079 static STRLEN
11080 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11081 {
11082     IV iv;
11083
11084     if (args) {
11085         iv = i;
11086         goto do_iv;
11087     }
11088
11089     if (!sv)
11090         return 0;
11091
11092     SvGETMAGIC(sv);
11093
11094     if (UNLIKELY(SvIsUV(sv))) {
11095         UV uv = SvUV_nomg(sv);
11096         if (uv > IV_MAX)
11097             S_croak_overflow();
11098         iv = uv;
11099     }
11100     else {
11101         iv = SvIV_nomg(sv);
11102       do_iv:
11103         if (iv < 0) {
11104             if (iv < -IV_MAX)
11105                 S_croak_overflow();
11106             iv = -iv;
11107             *neg = TRUE;
11108         }
11109     }
11110
11111     if (iv > (IV)(((STRLEN)~0) / 4))
11112         S_croak_overflow();
11113
11114     return (STRLEN)iv;
11115 }
11116
11117 /* Read in and return a number. Updates *pattern to point to the char
11118  * following the number. Expects the first char to 1..9.
11119  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11120  * This is a belt-and-braces safety measure to complement any
11121  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11122  * It means that e.g. on a 32-bit system the width/precision can't be more
11123  * than 1G, which seems reasonable.
11124  */
11125
11126 STATIC STRLEN
11127 S_expect_number(pTHX_ const char **const pattern)
11128 {
11129     STRLEN var;
11130
11131     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11132
11133     assert(inRANGE(**pattern, '1', '9'));
11134
11135     var = *(*pattern)++ - '0';
11136     while (isDIGIT(**pattern)) {
11137         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11138         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11139             S_croak_overflow();
11140         var = var * 10 + (*(*pattern)++ - '0');
11141     }
11142     return var;
11143 }
11144
11145 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11146  * ensures it's big enough), back fill it with the rounded integer part of
11147  * nv. Returns ptr to start of string, and sets *len to its length.
11148  * Returns NULL if not convertible.
11149  */
11150
11151 STATIC char *
11152 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11153 {
11154     const int neg = nv < 0;
11155     UV uv;
11156
11157     PERL_ARGS_ASSERT_F0CONVERT;
11158
11159     assert(!Perl_isinfnan(nv));
11160     if (neg)
11161         nv = -nv;
11162     if (nv != 0.0 && nv < UV_MAX) {
11163         char *p = endbuf;
11164         uv = (UV)nv;
11165         if (uv != nv) {
11166             nv += 0.5;
11167             uv = (UV)nv;
11168             if (uv & 1 && uv == nv)
11169                 uv--;                   /* Round to even */
11170         }
11171         do {
11172             const unsigned dig = uv % 10;
11173             *--p = '0' + dig;
11174         } while (uv /= 10);
11175         if (neg)
11176             *--p = '-';
11177         *len = endbuf - p;
11178         return p;
11179     }
11180     return NULL;
11181 }
11182
11183
11184 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11185
11186 void
11187 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11188                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11189 {
11190     PERL_ARGS_ASSERT_SV_VCATPVFN;
11191
11192     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11193 }
11194
11195
11196 /* For the vcatpvfn code, we need a long double target in case
11197  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11198  * with long double formats, even without NV being long double.  But we
11199  * call the target 'fv' instead of 'nv', since most of the time it is not
11200  * (most compilers these days recognize "long double", even if only as a
11201  * synonym for "double").
11202 */
11203 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11204         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11205 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11206 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11207        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11208 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11209             STMT_START {                                \
11210                 double _dv = nv;                        \
11211                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11212             } STMT_END
11213 #  else
11214 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11215 #  endif
11216    typedef long double vcatpvfn_long_double_t;
11217 #else
11218 #  define VCATPVFN_FV_GF NVgf
11219 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11220    typedef NV vcatpvfn_long_double_t;
11221 #endif
11222
11223 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11224 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11225  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11226  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11227  * after the first 1023 zero bits.
11228  *
11229  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11230  * of dynamically growing buffer might be better, start at just 16 bytes
11231  * (for example) and grow only when necessary.  Or maybe just by looking
11232  * at the exponents of the two doubles? */
11233 #  define DOUBLEDOUBLE_MAXBITS 2098
11234 #endif
11235
11236 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11237  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11238  * per xdigit.  For the double-double case, this can be rather many.
11239  * The non-double-double-long-double overshoots since all bits of NV
11240  * are not mantissa bits, there are also exponent bits. */
11241 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11242 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11243 #else
11244 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11245 #endif
11246
11247 /* If we do not have a known long double format, (including not using
11248  * long doubles, or long doubles being equal to doubles) then we will
11249  * fall back to the ldexp/frexp route, with which we can retrieve at
11250  * most as many bits as our widest unsigned integer type is.  We try
11251  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11252  *
11253  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11254  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11255  */
11256 #if defined(HAS_QUAD) && defined(Uquad_t)
11257 #  define MANTISSATYPE Uquad_t
11258 #  define MANTISSASIZE 8
11259 #else
11260 #  define MANTISSATYPE UV
11261 #  define MANTISSASIZE UVSIZE
11262 #endif
11263
11264 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11265 #  define HEXTRACT_LITTLE_ENDIAN
11266 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11267 #  define HEXTRACT_BIG_ENDIAN
11268 #else
11269 #  define HEXTRACT_MIX_ENDIAN
11270 #endif
11271
11272 /* S_hextract() is a helper for S_format_hexfp, for extracting
11273  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11274  * are being extracted from (either directly from the long double in-memory
11275  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11276  * is used to update the exponent.  The subnormal is set to true
11277  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11278  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11279  *
11280  * The tricky part is that S_hextract() needs to be called twice:
11281  * the first time with vend as NULL, and the second time with vend as
11282  * the pointer returned by the first call.  What happens is that on
11283  * the first round the output size is computed, and the intended
11284  * extraction sanity checked.  On the second round the actual output
11285  * (the extraction of the hexadecimal values) takes place.
11286  * Sanity failures cause fatal failures during both rounds. */
11287 STATIC U8*
11288 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11289            U8* vhex, U8* vend)
11290 {
11291     U8* v = vhex;
11292     int ix;
11293     int ixmin = 0, ixmax = 0;
11294
11295     /* XXX Inf/NaN are not handled here, since it is
11296      * assumed they are to be output as "Inf" and "NaN". */
11297
11298     /* These macros are just to reduce typos, they have multiple
11299      * repetitions below, but usually only one (or sometimes two)
11300      * of them is really being used. */
11301     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11302 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11303 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11304 #define HEXTRACT_OUTPUT(ix) \
11305     STMT_START { \
11306       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11307    } STMT_END
11308 #define HEXTRACT_COUNT(ix, c) \
11309     STMT_START { \
11310       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11311    } STMT_END
11312 #define HEXTRACT_BYTE(ix) \
11313     STMT_START { \
11314       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11315    } STMT_END
11316 #define HEXTRACT_LO_NYBBLE(ix) \
11317     STMT_START { \
11318       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11319    } STMT_END
11320     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11321      * to make it look less odd when the top bits of a NV
11322      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11323      * order bits can be in the "low nybble" of a byte. */
11324 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11325 #define HEXTRACT_BYTES_LE(a, b) \
11326     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11327 #define HEXTRACT_BYTES_BE(a, b) \
11328     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11329 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11330 #define HEXTRACT_IMPLICIT_BIT(nv) \
11331     STMT_START { \
11332         if (!*subnormal) { \
11333             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11334         } \
11335    } STMT_END
11336
11337 /* Most formats do.  Those which don't should undef this.
11338  *
11339  * But also note that IEEE 754 subnormals do not have it, or,
11340  * expressed alternatively, their implicit bit is zero. */
11341 #define HEXTRACT_HAS_IMPLICIT_BIT
11342
11343 /* Many formats do.  Those which don't should undef this. */
11344 #define HEXTRACT_HAS_TOP_NYBBLE
11345
11346     /* HEXTRACTSIZE is the maximum number of xdigits. */
11347 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11348 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11349 #else
11350 #  define HEXTRACTSIZE 2 * NVSIZE
11351 #endif
11352
11353     const U8* vmaxend = vhex + HEXTRACTSIZE;
11354
11355     assert(HEXTRACTSIZE <= VHEX_SIZE);
11356
11357     PERL_UNUSED_VAR(ix); /* might happen */
11358     (void)Perl_frexp(PERL_ABS(nv), exponent);
11359     *subnormal = FALSE;
11360     if (vend && (vend <= vhex || vend > vmaxend)) {
11361         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11362         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11363     }
11364     {
11365         /* First check if using long doubles. */
11366 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11367 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11368         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11369          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11370         /* The bytes 13..0 are the mantissa/fraction,
11371          * the 15,14 are the sign+exponent. */
11372         const U8* nvp = (const U8*)(&nv);
11373         HEXTRACT_GET_SUBNORMAL(nv);
11374         HEXTRACT_IMPLICIT_BIT(nv);
11375 #    undef HEXTRACT_HAS_TOP_NYBBLE
11376         HEXTRACT_BYTES_LE(13, 0);
11377 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11378         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11379          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11380         /* The bytes 2..15 are the mantissa/fraction,
11381          * the 0,1 are the sign+exponent. */
11382         const U8* nvp = (const U8*)(&nv);
11383         HEXTRACT_GET_SUBNORMAL(nv);
11384         HEXTRACT_IMPLICIT_BIT(nv);
11385 #    undef HEXTRACT_HAS_TOP_NYBBLE
11386         HEXTRACT_BYTES_BE(2, 15);
11387 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11388         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11389          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11390          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11391          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11392         /* The bytes 0..1 are the sign+exponent,
11393          * the bytes 2..9 are the mantissa/fraction. */
11394         const U8* nvp = (const U8*)(&nv);
11395 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11396 #    undef HEXTRACT_HAS_TOP_NYBBLE
11397         HEXTRACT_GET_SUBNORMAL(nv);
11398         HEXTRACT_BYTES_LE(7, 0);
11399 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11400         /* Does this format ever happen? (Wikipedia says the Motorola
11401          * 6888x math coprocessors used format _like_ this but padded
11402          * to 96 bits with 16 unused bits between the exponent and the
11403          * mantissa.) */
11404         const U8* nvp = (const U8*)(&nv);
11405 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11406 #    undef HEXTRACT_HAS_TOP_NYBBLE
11407         HEXTRACT_GET_SUBNORMAL(nv);
11408         HEXTRACT_BYTES_BE(0, 7);
11409 #  else
11410 #    define HEXTRACT_FALLBACK
11411         /* Double-double format: two doubles next to each other.
11412          * The first double is the high-order one, exactly like
11413          * it would be for a "lone" double.  The second double
11414          * is shifted down using the exponent so that that there
11415          * are no common bits.  The tricky part is that the value
11416          * of the double-double is the SUM of the two doubles and
11417          * the second one can be also NEGATIVE.
11418          *
11419          * Because of this tricky construction the bytewise extraction we
11420          * use for the other long double formats doesn't work, we must
11421          * extract the values bit by bit.
11422          *
11423          * The little-endian double-double is used .. somewhere?
11424          *
11425          * The big endian double-double is used in e.g. PPC/Power (AIX)
11426          * and MIPS (SGI).
11427          *
11428          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11429          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11430          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11431          */
11432 #  endif
11433 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11434         /* Using normal doubles, not long doubles.
11435          *
11436          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11437          * bytes, since we might need to handle printf precision, and
11438          * also need to insert the radix. */
11439 #  if NVSIZE == 8
11440 #    ifdef HEXTRACT_LITTLE_ENDIAN
11441         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11442         const U8* nvp = (const U8*)(&nv);
11443         HEXTRACT_GET_SUBNORMAL(nv);
11444         HEXTRACT_IMPLICIT_BIT(nv);
11445         HEXTRACT_TOP_NYBBLE(6);
11446         HEXTRACT_BYTES_LE(5, 0);
11447 #    elif defined(HEXTRACT_BIG_ENDIAN)
11448         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11449         const U8* nvp = (const U8*)(&nv);
11450         HEXTRACT_GET_SUBNORMAL(nv);
11451         HEXTRACT_IMPLICIT_BIT(nv);
11452         HEXTRACT_TOP_NYBBLE(1);
11453         HEXTRACT_BYTES_BE(2, 7);
11454 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11455         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11456         const U8* nvp = (const U8*)(&nv);
11457         HEXTRACT_GET_SUBNORMAL(nv);
11458         HEXTRACT_IMPLICIT_BIT(nv);
11459         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11460         HEXTRACT_BYTE(1); /* 5 */
11461         HEXTRACT_BYTE(0); /* 4 */
11462         HEXTRACT_BYTE(7); /* 3 */
11463         HEXTRACT_BYTE(6); /* 2 */
11464         HEXTRACT_BYTE(5); /* 1 */
11465         HEXTRACT_BYTE(4); /* 0 */
11466 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11467         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11468         const U8* nvp = (const U8*)(&nv);
11469         HEXTRACT_GET_SUBNORMAL(nv);
11470         HEXTRACT_IMPLICIT_BIT(nv);
11471         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11472         HEXTRACT_BYTE(6); /* 5 */
11473         HEXTRACT_BYTE(7); /* 4 */
11474         HEXTRACT_BYTE(0); /* 3 */
11475         HEXTRACT_BYTE(1); /* 2 */
11476         HEXTRACT_BYTE(2); /* 1 */
11477         HEXTRACT_BYTE(3); /* 0 */
11478 #    else
11479 #      define HEXTRACT_FALLBACK
11480 #    endif
11481 #  else
11482 #    define HEXTRACT_FALLBACK
11483 #  endif
11484 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11485
11486 #ifdef HEXTRACT_FALLBACK
11487         HEXTRACT_GET_SUBNORMAL(nv);
11488 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11489         /* The fallback is used for the double-double format, and
11490          * for unknown long double formats, and for unknown double
11491          * formats, or in general unknown NV formats. */
11492         if (nv == (NV)0.0) {
11493             if (vend)
11494                 *v++ = 0;
11495             else
11496                 v++;
11497             *exponent = 0;
11498         }
11499         else {
11500             NV d = nv < 0 ? -nv : nv;
11501             NV e = (NV)1.0;
11502             U8 ha = 0x0; /* hexvalue accumulator */
11503             U8 hd = 0x8; /* hexvalue digit */
11504
11505             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11506              * this is essentially manual frexp(). Multiplying by 0.5 and
11507              * doubling should be lossless in binary floating point. */
11508
11509             *exponent = 1;
11510
11511             while (e > d) {
11512                 e *= (NV)0.5;
11513                 (*exponent)--;
11514             }
11515             /* Now d >= e */
11516
11517             while (d >= e + e) {
11518                 e += e;
11519                 (*exponent)++;
11520             }
11521             /* Now e <= d < 2*e */
11522
11523             /* First extract the leading hexdigit (the implicit bit). */
11524             if (d >= e) {
11525                 d -= e;
11526                 if (vend)
11527                     *v++ = 1;
11528                 else
11529                     v++;
11530             }
11531             else {
11532                 if (vend)
11533                     *v++ = 0;
11534                 else
11535                     v++;
11536             }
11537             e *= (NV)0.5;
11538
11539             /* Then extract the remaining hexdigits. */
11540             while (d > (NV)0.0) {
11541                 if (d >= e) {
11542                     ha |= hd;
11543                     d -= e;
11544                 }
11545                 if (hd == 1) {
11546                     /* Output or count in groups of four bits,
11547                      * that is, when the hexdigit is down to one. */
11548                     if (vend)
11549                         *v++ = ha;
11550                     else
11551                         v++;
11552                     /* Reset the hexvalue. */
11553                     ha = 0x0;
11554                     hd = 0x8;
11555                 }
11556                 else
11557                     hd >>= 1;
11558                 e *= (NV)0.5;
11559             }
11560
11561             /* Flush possible pending hexvalue. */
11562             if (ha) {
11563                 if (vend)
11564                     *v++ = ha;
11565                 else
11566                     v++;
11567             }
11568         }
11569 #endif
11570     }
11571     /* Croak for various reasons: if the output pointer escaped the
11572      * output buffer, if the extraction index escaped the extraction
11573      * buffer, or if the ending output pointer didn't match the
11574      * previously computed value. */
11575     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11576         /* For double-double the ixmin and ixmax stay at zero,
11577          * which is convenient since the HEXTRACTSIZE is tricky
11578          * for double-double. */
11579         ixmin < 0 || ixmax >= NVSIZE ||
11580         (vend && v != vend)) {
11581         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11582         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11583     }
11584     return v;
11585 }
11586
11587
11588 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11589  *
11590  * Processes the %a/%A hexadecimal floating-point format, since the
11591  * built-in snprintf()s which are used for most of the f/p formats, don't
11592  * universally handle %a/%A.
11593  * Populates buf of length bufsize, and returns the length of the created
11594  * string.
11595  * The rest of the args have the same meaning as the local vars of the
11596  * same name within Perl_sv_vcatpvfn_flags().
11597  *
11598  * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
11599  * is used to ensure we do the right thing when we need to access the locale's
11600  * numeric radix.
11601  *
11602  * It requires the caller to make buf large enough.
11603  */
11604
11605 static STRLEN
11606 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11607                     const NV nv, const vcatpvfn_long_double_t fv,
11608                     bool has_precis, STRLEN precis, STRLEN width,
11609                     bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
11610 {
11611     /* Hexadecimal floating point. */
11612     char* p = buf;
11613     U8 vhex[VHEX_SIZE];
11614     U8* v = vhex; /* working pointer to vhex */
11615     U8* vend; /* pointer to one beyond last digit of vhex */
11616     U8* vfnz = NULL; /* first non-zero */
11617     U8* vlnz = NULL; /* last non-zero */
11618     U8* v0 = NULL; /* first output */
11619     const bool lower = (c == 'a');
11620     /* At output the values of vhex (up to vend) will
11621      * be mapped through the xdig to get the actual
11622      * human-readable xdigits. */
11623     const char* xdig = PL_hexdigit;
11624     STRLEN zerotail = 0; /* how many extra zeros to append */
11625     int exponent = 0; /* exponent of the floating point input */
11626     bool hexradix = FALSE; /* should we output the radix */
11627     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11628     bool negative = FALSE;
11629     STRLEN elen;
11630
11631     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11632      *
11633      * For example with denormals, (assuming the vanilla
11634      * 64-bit double): the exponent is zero. 1xp-1074 is
11635      * the smallest denormal and the smallest double, it
11636      * could be output also as 0x0.0000000000001p-1022 to
11637      * match its internal structure. */
11638
11639     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11640     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11641
11642 #if NVSIZE > DOUBLESIZE
11643 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11644     /* In this case there is an implicit bit,
11645      * and therefore the exponent is shifted by one. */
11646     exponent--;
11647 #  elif defined(NV_X86_80_BIT)
11648     if (subnormal) {
11649         /* The subnormals of the x86-80 have a base exponent of -16382,
11650          * (while the physical exponent bits are zero) but the frexp()
11651          * returned the scientific-style floating exponent.  We want
11652          * to map the last one as:
11653          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11654          * -16835..-16388 -> -16384
11655          * since we want to keep the first hexdigit
11656          * as one of the [8421]. */
11657         exponent = -4 * ( (exponent + 1) / -4) - 2;
11658     } else {
11659         exponent -= 4;
11660     }
11661     /* TBD: other non-implicit-bit platforms than the x86-80. */
11662 #  endif
11663 #endif
11664
11665     negative = fv < 0 || Perl_signbit(nv);
11666     if (negative)
11667         *p++ = '-';
11668     else if (plus)
11669         *p++ = plus;
11670     *p++ = '0';
11671     if (lower) {
11672         *p++ = 'x';
11673     }
11674     else {
11675         *p++ = 'X';
11676         xdig += 16; /* Use uppercase hex. */
11677     }
11678
11679     /* Find the first non-zero xdigit. */
11680     for (v = vhex; v < vend; v++) {
11681         if (*v) {
11682             vfnz = v;
11683             break;
11684         }
11685     }
11686
11687     if (vfnz) {
11688         /* Find the last non-zero xdigit. */
11689         for (v = vend - 1; v >= vhex; v--) {
11690             if (*v) {
11691                 vlnz = v;
11692                 break;
11693             }
11694         }
11695
11696 #if NVSIZE == DOUBLESIZE
11697         if (fv != 0.0)
11698             exponent--;
11699 #endif
11700
11701         if (subnormal) {
11702 #ifndef NV_X86_80_BIT
11703           if (vfnz[0] > 1) {
11704             /* IEEE 754 subnormals (but not the x86 80-bit):
11705              * we want "normalize" the subnormal,
11706              * so we need to right shift the hex nybbles
11707              * so that the output of the subnormal starts
11708              * from the first true bit.  (Another, equally
11709              * valid, policy would be to dump the subnormal
11710              * nybbles as-is, to display the "physical" layout.) */
11711             int i, n;
11712             U8 *vshr;
11713             /* Find the ceil(log2(v[0])) of
11714              * the top non-zero nybble. */
11715             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11716             assert(n < 4);
11717             assert(vlnz);
11718             vlnz[1] = 0;
11719             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11720               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11721               vshr[0] >>= n;
11722             }
11723             if (vlnz[1]) {
11724               vlnz++;
11725             }
11726           }
11727 #endif
11728           v0 = vfnz;
11729         } else {
11730           v0 = vhex;
11731         }
11732
11733         if (has_precis) {
11734             U8* ve = (subnormal ? vlnz + 1 : vend);
11735             SSize_t vn = ve - v0;
11736             assert(vn >= 1);
11737             if (precis < (Size_t)(vn - 1)) {
11738                 bool overflow = FALSE;
11739                 if (v0[precis + 1] < 0x8) {
11740                     /* Round down, nothing to do. */
11741                 } else if (v0[precis + 1] > 0x8) {
11742                     /* Round up. */
11743                     v0[precis]++;
11744                     overflow = v0[precis] > 0xF;
11745                     v0[precis] &= 0xF;
11746                 } else { /* v0[precis] == 0x8 */
11747                     /* Half-point: round towards the one
11748                      * with the even least-significant digit:
11749                      * 08 -> 0  88 -> 8
11750                      * 18 -> 2  98 -> a
11751                      * 28 -> 2  a8 -> a
11752                      * 38 -> 4  b8 -> c
11753                      * 48 -> 4  c8 -> c
11754                      * 58 -> 6  d8 -> e
11755                      * 68 -> 6  e8 -> e
11756                      * 78 -> 8  f8 -> 10 */
11757                     if ((v0[precis] & 0x1)) {
11758                         v0[precis]++;
11759                     }
11760                     overflow = v0[precis] > 0xF;
11761                     v0[precis] &= 0xF;
11762                 }
11763
11764                 if (overflow) {
11765                     for (v = v0 + precis - 1; v >= v0; v--) {
11766                         (*v)++;
11767                         overflow = *v > 0xF;
11768                         (*v) &= 0xF;
11769                         if (!overflow) {
11770                             break;
11771                         }
11772                     }
11773                     if (v == v0 - 1 && overflow) {
11774                         /* If the overflow goes all the
11775                          * way to the front, we need to
11776                          * insert 0x1 in front, and adjust
11777                          * the exponent. */
11778                         Move(v0, v0 + 1, vn - 1, char);
11779                         *v0 = 0x1;
11780                         exponent += 4;
11781                     }
11782                 }
11783
11784                 /* The new effective "last non zero". */
11785                 vlnz = v0 + precis;
11786             }
11787             else {
11788                 zerotail =
11789                   subnormal ? precis - vn + 1 :
11790                   precis - (vlnz - vhex);
11791             }
11792         }
11793
11794         v = v0;
11795         *p++ = xdig[*v++];
11796
11797         /* If there are non-zero xdigits, the radix
11798          * is output after the first one. */
11799         if (vfnz < vlnz) {
11800           hexradix = TRUE;
11801         }
11802     }
11803     else {
11804         *p++ = '0';
11805         exponent = 0;
11806         zerotail = has_precis ? precis : 0;
11807     }
11808
11809     /* The radix is always output if precis, or if alt. */
11810     if ((has_precis && precis > 0) || alt) {
11811       hexradix = TRUE;
11812     }
11813
11814     if (hexradix) {
11815 #ifndef USE_LOCALE_NUMERIC
11816         *p++ = '.';
11817 #else
11818         if (in_lc_numeric) {
11819             STRLEN n;
11820             WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
11821                 const char* r = SvPV(PL_numeric_radix_sv, n);
11822                 Copy(r, p, n, char);
11823             });
11824             p += n;
11825         }
11826         else {
11827             *p++ = '.';
11828         }
11829 #endif
11830     }
11831
11832     if (vlnz) {
11833         while (v <= vlnz)
11834             *p++ = xdig[*v++];
11835     }
11836
11837     if (zerotail > 0) {
11838       while (zerotail--) {
11839         *p++ = '0';
11840       }
11841     }
11842
11843     elen = p - buf;
11844
11845     /* sanity checks */
11846     if (elen >= bufsize || width >= bufsize)
11847         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11848         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11849
11850     elen += my_snprintf(p, bufsize - elen,
11851                         "%c%+d", lower ? 'p' : 'P',
11852                         exponent);
11853
11854     if (elen < width) {
11855         STRLEN gap = (STRLEN)(width - elen);
11856         if (left) {
11857             /* Pad the back with spaces. */
11858             memset(buf + elen, ' ', gap);
11859         }
11860         else if (fill) {
11861             /* Insert the zeros after the "0x" and the
11862              * the potential sign, but before the digits,
11863              * otherwise we end up with "0000xH.HHH...",
11864              * when we want "0x000H.HHH..."  */
11865             STRLEN nzero = gap;
11866             char* zerox = buf + 2;
11867             STRLEN nmove = elen - 2;
11868             if (negative || plus) {
11869                 zerox++;
11870                 nmove--;
11871             }
11872             Move(zerox, zerox + nzero, nmove, char);
11873             memset(zerox, fill ? '0' : ' ', nzero);
11874         }
11875         else {
11876             /* Move it to the right. */
11877             Move(buf, buf + gap,
11878                  elen, char);
11879             /* Pad the front with spaces. */
11880             memset(buf, ' ', gap);
11881         }
11882         elen = width;
11883     }
11884     return elen;
11885 }
11886
11887
11888 /*
11889 =for apidoc sv_vcatpvfn
11890
11891 =for apidoc sv_vcatpvfn_flags
11892
11893 Processes its arguments like C<vsprintf> and appends the formatted output
11894 to an SV.  Uses an array of SVs if the C-style variable argument list is
11895 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11896 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11897 C<va_list> argument list with a format string that uses argument reordering
11898 will yield an exception.
11899
11900 When running with taint checks enabled, indicates via
11901 C<maybe_tainted> if results are untrustworthy (often due to the use of
11902 locales).
11903
11904 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11905
11906 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11907 responsibility to ensure that this is so.
11908
11909 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11910
11911 =cut
11912 */
11913
11914
11915 void
11916 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11917                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11918                        const U32 flags)
11919 {
11920     const char *fmtstart; /* character following the current '%' */
11921     const char *q;        /* current position within format */
11922     const char *patend;
11923     STRLEN origlen;
11924     Size_t svix = 0;
11925     static const char nullstr[] = "(null)";
11926     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11927     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11928     /* Times 4: a decimal digit takes more than 3 binary digits.
11929      * NV_DIG: mantissa takes that many decimal digits.
11930      * Plus 32: Playing safe. */
11931     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11932     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11933 #ifdef USE_LOCALE_NUMERIC
11934     bool have_in_lc_numeric = FALSE;
11935 #endif
11936     /* we never change this unless USE_LOCALE_NUMERIC */
11937     bool in_lc_numeric = FALSE;
11938
11939     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11940     PERL_UNUSED_ARG(maybe_tainted);
11941
11942     if (flags & SV_GMAGIC)
11943         SvGETMAGIC(sv);
11944
11945     /* no matter what, this is a string now */
11946     (void)SvPV_force_nomg(sv, origlen);
11947
11948     /* the code that scans for flags etc following a % relies on
11949      * a '\0' being present to avoid falling off the end. Ideally that
11950      * should be fixed */
11951     assert(pat[patlen] == '\0');
11952
11953
11954     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11955      * In each case, if there isn't the correct number of args, instead
11956      * fall through to the main code to handle the issuing of any
11957      * warnings etc.
11958      */
11959
11960     if (patlen == 0 && (args || sv_count == 0))
11961         return;
11962
11963     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11964
11965         /* "%s" */
11966         if (patlen == 2 && pat[1] == 's') {
11967             if (args) {
11968                 const char * const s = va_arg(*args, char*);
11969                 sv_catpv_nomg(sv, s ? s : nullstr);
11970             }
11971             else {
11972                 /* we want get magic on the source but not the target.
11973                  * sv_catsv can't do that, though */
11974                 SvGETMAGIC(*svargs);
11975                 sv_catsv_nomg(sv, *svargs);
11976             }
11977             return;
11978         }
11979
11980         /* "%-p" */
11981         if (args) {
11982             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11983                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11984                 sv_catsv_nomg(sv, asv);
11985                 return;
11986             }
11987         }
11988 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11989         /* special-case "%.0f" */
11990         else if (   patlen == 4
11991                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11992         {
11993             const NV nv = SvNV(*svargs);
11994             if (LIKELY(!Perl_isinfnan(nv))) {
11995                 STRLEN l;
11996                 char *p;
11997
11998                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11999                     sv_catpvn_nomg(sv, p, l);
12000                     return;
12001                 }
12002             }
12003         }
12004 #endif /* !USE_LONG_DOUBLE */
12005     }
12006
12007
12008     patend = (char*)pat + patlen;
12009     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
12010         char intsize     = 0;         /* size qualifier in "%hi..." etc */
12011         bool alt         = FALSE;     /* has      "%#..."    */
12012         bool left        = FALSE;     /* has      "%-..."    */
12013         bool fill        = FALSE;     /* has      "%0..."    */
12014         char plus        = 0;         /* has      "%+..."    */
12015         STRLEN width     = 0;         /* value of "%NNN..."  */
12016         bool has_precis  = FALSE;     /* has      "%.NNN..." */
12017         STRLEN precis    = 0;         /* value of "%.NNN..." */
12018         int base         = 0;         /* base to print in, e.g. 8 for %o */
12019         UV uv            = 0;         /* the value to print of int-ish args */
12020
12021         bool vectorize   = FALSE;     /* has      "%v..."    */
12022         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
12023         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
12024         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
12025         const char *dotstr = NULL;    /* separator string for %v */
12026         STRLEN dotstrlen;             /* length of separator string for %v */
12027
12028         Size_t efix      = 0;         /* explicit format parameter index */
12029         const Size_t osvix  = svix;   /* original index in case of bad fmt */
12030
12031         SV *argsv        = NULL;
12032         bool is_utf8     = FALSE;     /* is this item utf8?   */
12033         bool arg_missing = FALSE;     /* give "Missing argument" warning */
12034         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
12035         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
12036         STRLEN zeros     = 0;         /* how many '0' to prepend */
12037
12038         const char *eptr = NULL;      /* the address of the element string */
12039         STRLEN elen      = 0;         /* the length  of the element string */
12040
12041         char c;                       /* the actual format ('d', s' etc) */
12042
12043
12044         /* echo everything up to the next format specification */
12045         for (q = fmtstart; q < patend && *q != '%'; ++q)
12046             {};
12047
12048         if (q > fmtstart) {
12049             if (has_utf8 && !pat_utf8) {
12050                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12051                  * the fly */
12052                 const char *p;
12053                 char *dst;
12054                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12055
12056                 for (p = fmtstart; p < q; p++)
12057                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12058                         need++;
12059                 SvGROW(sv, need);
12060
12061                 dst = SvEND(sv);
12062                 for (p = fmtstart; p < q; p++)
12063                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12064                 *dst = '\0';
12065                 SvCUR_set(sv, need - 1);
12066             }
12067             else
12068                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12069         }
12070         if (q++ >= patend)
12071             break;
12072
12073         fmtstart = q; /* fmtstart is char following the '%' */
12074
12075 /*
12076     We allow format specification elements in this order:
12077         \d+\$              explicit format parameter index
12078         [-+ 0#]+           flags
12079         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12080         0                  flag (as above): repeated to allow "v02"     
12081         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12082         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12083         [hlqLV]            size
12084     [%bcdefginopsuxDFOUX] format (mandatory)
12085 */
12086
12087         if (inRANGE(*q, '1', '9')) {
12088             width = expect_number(&q);
12089             if (*q == '$') {
12090                 if (args)
12091                     Perl_croak_nocontext(
12092                         "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12093                 ++q;
12094                 efix = (Size_t)width;
12095                 width = 0;
12096                 no_redundant_warning = TRUE;
12097             } else {
12098                 goto gotwidth;
12099             }
12100         }
12101
12102         /* FLAGS */
12103
12104         while (*q) {
12105             switch (*q) {
12106             case ' ':
12107             case '+':
12108                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12109                     q++;
12110                 else
12111                     plus = *q++;
12112                 continue;
12113
12114             case '-':
12115                 left = TRUE;
12116                 q++;
12117                 continue;
12118
12119             case '0':
12120                 fill = TRUE;
12121                 q++;
12122                 continue;
12123
12124             case '#':
12125                 alt = TRUE;
12126                 q++;
12127                 continue;
12128
12129             default:
12130                 break;
12131             }
12132             break;
12133         }
12134
12135       /* at this point we can expect one of:
12136        *
12137        *  123  an explicit width
12138        *  *    width taken from next arg
12139        *  *12$ width taken from 12th arg
12140        *       or no width
12141        *
12142        * But any width specification may be preceded by a v, in one of its
12143        * forms:
12144        *        v
12145        *        *v
12146        *        *12$v
12147        * So an asterisk may be either a width specifier or a vector
12148        * separator arg specifier, and we don't know which initially
12149        */
12150
12151       tryasterisk:
12152         if (*q == '*') {
12153             STRLEN ix; /* explicit width/vector separator index */
12154             q++;
12155             if (inRANGE(*q, '1', '9')) {
12156                 ix = expect_number(&q);
12157                 if (*q++ == '$') {
12158                     if (args)
12159                         Perl_croak_nocontext(
12160                             "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12161                     no_redundant_warning = TRUE;
12162                 } else
12163                     goto unknown;
12164             }
12165             else
12166                 ix = 0;
12167
12168             if (*q == 'v') {
12169                 SV *vecsv;
12170                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12171                  * with the default "." */
12172                 q++;
12173                 if (vectorize)
12174                     goto unknown;
12175                 if (args)
12176                     vecsv = va_arg(*args, SV*);
12177                 else {
12178                     ix = ix ? ix - 1 : svix++;
12179                     vecsv = ix < sv_count ? svargs[ix]
12180                                        : (arg_missing = TRUE, &PL_sv_no);
12181                 }
12182                 dotstr = SvPV_const(vecsv, dotstrlen);
12183                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12184                    bad with tied or overloaded values that return UTF8.  */
12185                 if (DO_UTF8(vecsv))
12186                     is_utf8 = TRUE;
12187                 else if (has_utf8) {
12188                     vecsv = sv_mortalcopy(vecsv);
12189                     sv_utf8_upgrade(vecsv);
12190                     dotstr = SvPV_const(vecsv, dotstrlen);
12191                     is_utf8 = TRUE;
12192                 }
12193                 vectorize = TRUE;
12194                 goto tryasterisk;
12195             }
12196
12197             /* the asterisk specified a width */
12198             {
12199                 int i = 0;
12200                 SV *width_sv = NULL;
12201                 if (args)
12202                     i = va_arg(*args, int);
12203                 else {
12204                     ix = ix ? ix - 1 : svix++;
12205                     width_sv = (ix < sv_count) ? svargs[ix]
12206                                       : (arg_missing = TRUE, (SV*)NULL);
12207                 }
12208                 width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
12209             }
12210         }
12211         else if (*q == 'v') {
12212             q++;
12213             if (vectorize)
12214                 goto unknown;
12215             vectorize = TRUE;
12216             dotstr = ".";
12217             dotstrlen = 1;
12218             goto tryasterisk;
12219
12220         }
12221         else {
12222         /* explicit width? */
12223             if(*q == '0') {
12224                 fill = TRUE;
12225                 q++;
12226             }
12227             if (inRANGE(*q, '1', '9'))
12228                 width = expect_number(&q);
12229         }
12230
12231       gotwidth:
12232
12233         /* PRECISION */
12234
12235         if (*q == '.') {
12236             q++;
12237             if (*q == '*') {
12238                 STRLEN ix; /* explicit precision index */
12239                 q++;
12240                 if (inRANGE(*q, '1', '9')) {
12241                     ix = expect_number(&q);
12242                     if (*q++ == '$') {
12243                         if (args)
12244                             Perl_croak_nocontext(
12245                                 "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12246                         no_redundant_warning = TRUE;
12247                     } else
12248                         goto unknown;
12249                 }
12250                 else
12251                     ix = 0;
12252
12253                 {
12254                     int i = 0;
12255                     SV *width_sv = NULL;
12256                     bool neg = FALSE;
12257
12258                     if (args)
12259                         i = va_arg(*args, int);
12260                     else {
12261                         ix = ix ? ix - 1 : svix++;
12262                         width_sv = (ix < sv_count) ? svargs[ix]
12263                                           : (arg_missing = TRUE, (SV*)NULL);
12264                     }
12265                     precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
12266                     has_precis = !neg;
12267                     /* ignore negative precision */
12268                     if (!has_precis)
12269                         precis = 0;
12270                 }
12271             }
12272             else {
12273                 /* although it doesn't seem documented, this code has long
12274                  * behaved so that:
12275                  *   no digits following the '.' is treated like '.0'
12276                  *   the number may be preceded by any number of zeroes,
12277                  *      e.g. "%.0001f", which is the same as "%.1f"
12278                  * so I've kept that behaviour. DAPM May 2017
12279                  */
12280                 while (*q == '0')
12281                     q++;
12282                 precis = inRANGE(*q, '1', '9') ? expect_number(&q) : 0;
12283                 has_precis = TRUE;
12284             }
12285         }
12286
12287         /* SIZE */
12288
12289         switch (*q) {
12290 #ifdef WIN32
12291         case 'I':                       /* Ix, I32x, and I64x */
12292 #  ifdef USE_64_BIT_INT
12293             if (q[1] == '6' && q[2] == '4') {
12294                 q += 3;
12295                 intsize = 'q';
12296                 break;
12297             }
12298 #  endif
12299             if (q[1] == '3' && q[2] == '2') {
12300                 q += 3;
12301                 break;
12302             }
12303 #  ifdef USE_64_BIT_INT
12304             intsize = 'q';
12305 #  endif
12306             q++;
12307             break;
12308 #endif
12309 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12310     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12311         case 'L':                       /* Ld */
12312             /* FALLTHROUGH */
12313 #  ifdef USE_QUADMATH
12314         case 'Q':
12315             /* FALLTHROUGH */
12316 #  endif
12317 #  if IVSIZE >= 8
12318         case 'q':                       /* qd */
12319 #  endif
12320             intsize = 'q';
12321             q++;
12322             break;
12323 #endif
12324         case 'l':
12325             ++q;
12326 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12327     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12328             if (*q == 'l') {    /* lld, llf */
12329                 intsize = 'q';
12330                 ++q;
12331             }
12332             else
12333 #endif
12334                 intsize = 'l';
12335             break;
12336         case 'h':
12337             if (*++q == 'h') {  /* hhd, hhu */
12338                 intsize = 'c';
12339                 ++q;
12340             }
12341             else
12342                 intsize = 'h';
12343             break;
12344         case 'V':
12345         case 'z':
12346         case 't':
12347         case 'j':
12348             intsize = *q++;
12349             break;
12350         }
12351
12352         /* CONVERSION */
12353
12354         c = *q++; /* c now holds the conversion type */
12355
12356         /* '%' doesn't have an arg, so skip arg processing */
12357         if (c == '%') {
12358             eptr = q - 1;
12359             elen = 1;
12360             if (vectorize)
12361                 goto unknown;
12362             goto string;
12363         }
12364
12365         if (vectorize && !memCHRs("BbDdiOouUXx", c))
12366             goto unknown;
12367
12368         /* get next arg (individual branches do their own va_arg()
12369          * handling for the args case) */
12370
12371         if (!args) {
12372             efix = efix ? efix - 1 : svix++;
12373             argsv = efix < sv_count ? svargs[efix]
12374                                  : (arg_missing = TRUE, &PL_sv_no);
12375         }
12376
12377
12378         switch (c) {
12379
12380             /* STRINGS */
12381
12382         case 's':
12383             if (args) {
12384                 eptr = va_arg(*args, char*);
12385                 if (eptr)
12386                     if (has_precis)
12387                         elen = my_strnlen(eptr, precis);
12388                     else
12389                         elen = strlen(eptr);
12390                 else {
12391                     eptr = (char *)nullstr;
12392                     elen = sizeof nullstr - 1;
12393                 }
12394             }
12395             else {
12396                 eptr = SvPV_const(argsv, elen);
12397                 if (DO_UTF8(argsv)) {
12398                     STRLEN old_precis = precis;
12399                     if (has_precis && precis < elen) {
12400                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12401                         STRLEN p = precis > ulen ? ulen : precis;
12402                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12403                                                         /* sticks at end */
12404                     }
12405                     if (width) { /* fudge width (can't fudge elen) */
12406                         if (has_precis && precis < elen)
12407                             width += precis - old_precis;
12408                         else
12409                             width +=
12410                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12411                     }
12412                     is_utf8 = TRUE;
12413                 }
12414             }
12415
12416         string:
12417             if (has_precis && precis < elen)
12418                 elen = precis;
12419             break;
12420
12421             /* INTEGERS */
12422
12423         case 'p':
12424             if (alt)
12425                 goto unknown;
12426
12427             /* %p extensions:
12428              *
12429              * "%...p" is normally treated like "%...x", except that the
12430              * number to print is the SV's address (or a pointer address
12431              * for C-ish sprintf).
12432              *
12433              * However, the C-ish sprintf variant allows a few special
12434              * extensions. These are currently:
12435              *
12436              * %-p       (SVf)  Like %s, but gets the string from an SV*
12437              *                  arg rather than a char* arg.
12438              *                  (This was previously %_).
12439              *
12440              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12441              *
12442              * %2p       (HEKf) Like %s, but using the key string in a HEK
12443              *
12444              * %3p       (HEKf256) Ditto but like %.256s
12445              *
12446              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12447              *                       (cBOOL(utf8), len, string_buf).
12448              *                   It's handled by the "case 'd'" branch
12449              *                   rather than here.
12450              *
12451              * %<num>p   where num is 1 or > 4: reserved for future
12452              *           extensions. Warns, but then is treated as a
12453              *           general %p (print hex address) format.
12454              */
12455
12456             if (   args
12457                 && !intsize
12458                 && !fill
12459                 && !plus
12460                 && !has_precis
12461                     /* not %*p or %*1$p - any width was explicit */
12462                 && q[-2] != '*'
12463                 && q[-2] != '$'
12464             ) {
12465                 if (left) {                     /* %-p (SVf), %-NNNp */
12466                     if (width) {
12467                         precis = width;
12468                         has_precis = TRUE;
12469                     }
12470                     argsv = MUTABLE_SV(va_arg(*args, void*));
12471                     eptr = SvPV_const(argsv, elen);
12472                     if (DO_UTF8(argsv))
12473                         is_utf8 = TRUE;
12474                     width = 0;
12475                     goto string;
12476                 }
12477                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12478                     HEK * const hek = va_arg(*args, HEK *);
12479                     eptr = HEK_KEY(hek);
12480                     elen = HEK_LEN(hek);
12481                     if (HEK_UTF8(hek))
12482                         is_utf8 = TRUE;
12483                     if (width == 3) {
12484                         precis = 256;
12485                         has_precis = TRUE;
12486                     }
12487                     width = 0;
12488                     goto string;
12489                 }
12490                 else if (width) {
12491                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12492                          "internal %%<num>p might conflict with future printf extensions");
12493                 }
12494             }
12495
12496             /* treat as normal %...p */
12497
12498             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12499             base = 16;
12500             goto do_integer;
12501
12502         case 'c':
12503             /* Ignore any size specifiers, since they're not documented as
12504              * being allowed for %c (ideally we should warn on e.g. '%hc').
12505              * Setting a default intsize, along with a positive
12506              * (which signals unsigned) base, causes, for C-ish use, the
12507              * va_arg to be interpreted as as unsigned int, when it's
12508              * actually signed, which will convert -ve values to high +ve
12509              * values. Note that unlike the libc %c, values > 255 will
12510              * convert to high unicode points rather than being truncated
12511              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12512              * will again convert -ve args to high -ve values.
12513              */
12514             intsize = 0;
12515             base = 1; /* special value that indicates we're doing a 'c' */
12516             goto get_int_arg_val;
12517
12518         case 'D':
12519 #ifdef IV_IS_QUAD
12520             intsize = 'q';
12521 #else
12522             intsize = 'l';
12523 #endif
12524             base = -10;
12525             goto get_int_arg_val;
12526
12527         case 'd':
12528             /* probably just a plain %d, but it might be the start of the
12529              * special UTF8f format, which usually looks something like
12530              * "%d%lu%4p" (the lu may vary by platform)
12531              */
12532             assert((UTF8f)[0] == 'd');
12533             assert((UTF8f)[1] == '%');
12534
12535              if (   args              /* UTF8f only valid for C-ish sprintf */
12536                  && q == fmtstart + 1 /* plain %d, not %....d */
12537                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12538                  && *q == '%'
12539                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12540             {
12541                 /* The argument has already gone through cBOOL, so the cast
12542                    is safe. */
12543                 is_utf8 = (bool)va_arg(*args, int);
12544                 elen = va_arg(*args, UV);
12545                 /* if utf8 length is larger than 0x7ffff..., then it might
12546                  * have been a signed value that wrapped */
12547                 if (elen  > ((~(STRLEN)0) >> 1)) {
12548                     assert(0); /* in DEBUGGING build we want to crash */
12549                     elen = 0; /* otherwise we want to treat this as an empty string */
12550                 }
12551                 eptr = va_arg(*args, char *);
12552                 q += sizeof(UTF8f) - 2;
12553                 goto string;
12554             }
12555
12556             /* FALLTHROUGH */
12557         case 'i':
12558             base = -10;
12559             goto get_int_arg_val;
12560
12561         case 'U':
12562 #ifdef IV_IS_QUAD
12563             intsize = 'q';
12564 #else
12565             intsize = 'l';
12566 #endif
12567             /* FALLTHROUGH */
12568         case 'u':
12569             base = 10;
12570             goto get_int_arg_val;
12571
12572         case 'B':
12573         case 'b':
12574             base = 2;
12575             goto get_int_arg_val;
12576
12577         case 'O':
12578 #ifdef IV_IS_QUAD
12579             intsize = 'q';
12580 #else
12581             intsize = 'l';
12582 #endif
12583             /* FALLTHROUGH */
12584         case 'o':
12585             base = 8;
12586             goto get_int_arg_val;
12587
12588         case 'X':
12589         case 'x':
12590             base = 16;
12591
12592           get_int_arg_val:
12593
12594             if (vectorize) {
12595                 STRLEN ulen;
12596                 SV *vecsv;
12597
12598                 if (base < 0) {
12599                     base = -base;
12600                     if (plus)
12601                          esignbuf[esignlen++] = plus;
12602                 }
12603
12604                 /* initialise the vector string to iterate over */
12605
12606                 vecsv = args ? va_arg(*args, SV*) : argsv;
12607
12608                 /* if this is a version object, we need to convert
12609                  * back into v-string notation and then let the
12610                  * vectorize happen normally
12611                  */
12612                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12613                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12614                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12615                         "vector argument not supported with alpha versions");
12616                         vecsv = &PL_sv_no;
12617                     }
12618                     else {
12619                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12620                         vecsv = sv_newmortal();
12621                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12622                                      vecsv);
12623                     }
12624                 }
12625                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12626                 vec_utf8 = DO_UTF8(vecsv);
12627
12628               /* This is the re-entry point for when we're iterating
12629                * over the individual characters of a vector arg */
12630               vector:
12631                 if (!veclen)
12632                     goto done_valid_conversion;
12633                 if (vec_utf8)
12634                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12635                                         UTF8_ALLOW_ANYUV);
12636                 else {
12637                     uv = *vecstr;
12638                     ulen = 1;
12639                 }
12640                 vecstr += ulen;
12641                 veclen -= ulen;
12642             }
12643             else {
12644                 /* test arg for inf/nan. This can trigger an unwanted
12645                  * 'str' overload, so manually force 'num' overload first
12646                  * if necessary */
12647                 if (argsv) {
12648                     SvGETMAGIC(argsv);
12649                     if (UNLIKELY(SvAMAGIC(argsv)))
12650                         argsv = sv_2num(argsv);
12651                     if (UNLIKELY(isinfnansv(argsv)))
12652                         goto handle_infnan_argsv;
12653                 }
12654
12655                 if (base < 0) {
12656                     /* signed int type */
12657                     IV iv;
12658                     base = -base;
12659                     if (args) {
12660                         switch (intsize) {
12661                         case 'c':  iv = (char)va_arg(*args, int);  break;
12662                         case 'h':  iv = (short)va_arg(*args, int); break;
12663                         case 'l':  iv = va_arg(*args, long);       break;
12664                         case 'V':  iv = va_arg(*args, IV);         break;
12665                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12666 #ifdef HAS_PTRDIFF_T
12667                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12668 #endif
12669                         default:   iv = va_arg(*args, int);        break;
12670                         case 'j':  iv = (IV) va_arg(*args, PERL_INTMAX_T); break;
12671                         case 'q':
12672 #if IVSIZE >= 8
12673                                    iv = va_arg(*args, Quad_t);     break;
12674 #else
12675                                    goto unknown;
12676 #endif
12677                         }
12678                     }
12679                     else {
12680                         /* assign to tiv then cast to iv to work around
12681                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12682                         IV tiv = SvIV_nomg(argsv);
12683                         switch (intsize) {
12684                         case 'c':  iv = (char)tiv;   break;
12685                         case 'h':  iv = (short)tiv;  break;
12686                         case 'l':  iv = (long)tiv;   break;
12687                         case 'V':
12688                         default:   iv = tiv;         break;
12689                         case 'q':
12690 #if IVSIZE >= 8
12691                                    iv = (Quad_t)tiv; break;
12692 #else
12693                                    goto unknown;
12694 #endif
12695                         }
12696                     }
12697
12698                     /* now convert iv to uv */
12699                     if (iv >= 0) {
12700                         uv = iv;
12701                         if (plus)
12702                             esignbuf[esignlen++] = plus;
12703                     }
12704                     else {
12705                         /* Using 0- here to silence bogus warning from MS VC */
12706                         uv = (UV) (0 - (UV) iv);
12707                         esignbuf[esignlen++] = '-';
12708                     }
12709                 }
12710                 else {
12711                     /* unsigned int type */
12712                     if (args) {
12713                         switch (intsize) {
12714                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12715                                   break;
12716                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12717                                   break;
12718                         case 'l': uv = va_arg(*args, unsigned long); break;
12719                         case 'V': uv = va_arg(*args, UV);            break;
12720                         case 'z': uv = va_arg(*args, Size_t);        break;
12721 #ifdef HAS_PTRDIFF_T
12722                                   /* will sign extend, but there is no
12723                                    * uptrdiff_t, so oh well */
12724                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12725 #endif
12726                         case 'j': uv = (UV) va_arg(*args, PERL_UINTMAX_T); break;
12727                         default:  uv = va_arg(*args, unsigned);      break;
12728                         case 'q':
12729 #if IVSIZE >= 8
12730                                   uv = va_arg(*args, Uquad_t);       break;
12731 #else
12732                                   goto unknown;
12733 #endif
12734                         }
12735                     }
12736                     else {
12737                         /* assign to tiv then cast to iv to work around
12738                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12739                         UV tuv = SvUV_nomg(argsv);
12740                         switch (intsize) {
12741                         case 'c': uv = (unsigned char)tuv;  break;
12742                         case 'h': uv = (unsigned short)tuv; break;
12743                         case 'l': uv = (unsigned long)tuv;  break;
12744                         case 'V':
12745                         default:  uv = tuv;                 break;
12746                         case 'q':
12747 #if IVSIZE >= 8
12748                                   uv = (Uquad_t)tuv;        break;
12749 #else
12750                                   goto unknown;
12751 #endif
12752                         }
12753                     }
12754                 }
12755             }
12756
12757         do_integer:
12758             {
12759                 char *ptr = ebuf + sizeof ebuf;
12760                 unsigned dig;
12761                 zeros = 0;
12762
12763                 switch (base) {
12764                 case 16:
12765                     {
12766                     const char * const p =
12767                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12768
12769                         do {
12770                             dig = uv & 15;
12771                             *--ptr = p[dig];
12772                         } while (uv >>= 4);
12773                         if (alt && *ptr != '0') {
12774                             esignbuf[esignlen++] = '0';
12775                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12776                         }
12777                         break;
12778                     }
12779                 case 8:
12780                     do {
12781                         dig = uv & 7;
12782                         *--ptr = '0' + dig;
12783                     } while (uv >>= 3);
12784                     if (alt && *ptr != '0')
12785                         *--ptr = '0';
12786                     break;
12787                 case 2:
12788                     do {
12789                         dig = uv & 1;
12790                         *--ptr = '0' + dig;
12791                     } while (uv >>= 1);
12792                     if (alt && *ptr != '0') {
12793                         esignbuf[esignlen++] = '0';
12794                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12795                     }
12796                     break;
12797
12798                 case 1:
12799                     /* special-case: base 1 indicates a 'c' format:
12800                      * we use the common code for extracting a uv,
12801                      * but handle that value differently here than
12802                      * all the other int types */
12803                     if ((uv > 255 ||
12804                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12805                         && !IN_BYTES)
12806                     {
12807                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12808                         eptr = ebuf;
12809                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12810                         is_utf8 = TRUE;
12811                     }
12812                     else {
12813                         eptr = ebuf;
12814                         ebuf[0] = (char)uv;
12815                         elen = 1;
12816                     }
12817                     goto string;
12818
12819                 default:                /* it had better be ten or less */
12820                     do {
12821                         dig = uv % base;
12822                         *--ptr = '0' + dig;
12823                     } while (uv /= base);
12824                     break;
12825                 }
12826                 elen = (ebuf + sizeof ebuf) - ptr;
12827                 eptr = ptr;
12828                 if (has_precis) {
12829                     if (precis > elen)
12830                         zeros = precis - elen;
12831                     else if (precis == 0 && elen == 1 && *eptr == '0'
12832                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12833                         elen = 0;
12834
12835                     /* a precision nullifies the 0 flag. */
12836                     fill = FALSE;
12837                 }
12838             }
12839             break;
12840
12841             /* FLOATING POINT */
12842
12843         case 'F':
12844             c = 'f';            /* maybe %F isn't supported here */
12845             /* FALLTHROUGH */
12846         case 'e': case 'E':
12847         case 'f':
12848         case 'g': case 'G':
12849         case 'a': case 'A':
12850
12851         {
12852             STRLEN float_need; /* what PL_efloatsize needs to become */
12853             bool hexfp;        /* hexadecimal floating point? */
12854
12855             vcatpvfn_long_double_t fv;
12856             NV                     nv;
12857
12858             /* This is evil, but floating point is even more evil */
12859
12860             /* for SV-style calling, we can only get NV
12861                for C-style calling, we assume %f is double;
12862                for simplicity we allow any of %Lf, %llf, %qf for long double
12863             */
12864             switch (intsize) {
12865             case 'V':
12866 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12867                 intsize = 'q';
12868 #endif
12869                 break;
12870 /* [perl #20339] - we should accept and ignore %lf rather than die */
12871             case 'l':
12872                 /* FALLTHROUGH */
12873             default:
12874 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12875                 intsize = args ? 0 : 'q';
12876 #endif
12877                 break;
12878             case 'q':
12879 #if defined(HAS_LONG_DOUBLE)
12880                 break;
12881 #else
12882                 /* FALLTHROUGH */
12883 #endif
12884             case 'c':
12885             case 'h':
12886             case 'z':
12887             case 't':
12888             case 'j':
12889                 goto unknown;
12890             }
12891
12892             /* Now we need (long double) if intsize == 'q', else (double). */
12893             if (args) {
12894                 /* Note: do not pull NVs off the va_list with va_arg()
12895                  * (pull doubles instead) because if you have a build
12896                  * with long doubles, you would always be pulling long
12897                  * doubles, which would badly break anyone using only
12898                  * doubles (i.e. the majority of builds). In other
12899                  * words, you cannot mix doubles and long doubles.
12900                  * The only case where you can pull off long doubles
12901                  * is when the format specifier explicitly asks so with
12902                  * e.g. "%Lg". */
12903 #ifdef USE_QUADMATH
12904                 fv = intsize == 'q' ?
12905                     va_arg(*args, NV) : va_arg(*args, double);
12906                 nv = fv;
12907 #elif LONG_DOUBLESIZE > DOUBLESIZE
12908                 if (intsize == 'q') {
12909                     fv = va_arg(*args, long double);
12910                     nv = fv;
12911                 } else {
12912                     nv = va_arg(*args, double);
12913                     VCATPVFN_NV_TO_FV(nv, fv);
12914                 }
12915 #else
12916                 nv = va_arg(*args, double);
12917                 fv = nv;
12918 #endif
12919             }
12920             else
12921             {
12922                 SvGETMAGIC(argsv);
12923                 /* we jump here if an int-ish format encountered an
12924                  * infinite/Nan argsv. After setting nv/fv, it falls
12925                  * into the isinfnan block which follows */
12926               handle_infnan_argsv:
12927                 nv = SvNV_nomg(argsv);
12928                 VCATPVFN_NV_TO_FV(nv, fv);
12929             }
12930
12931             if (Perl_isinfnan(nv)) {
12932                 if (c == 'c')
12933                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12934                            SvNV_nomg(argsv), (int)c);
12935
12936                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12937                 assert(elen);
12938                 eptr = ebuf;
12939                 zeros     = 0;
12940                 esignlen  = 0;
12941                 dotstrlen = 0;
12942                 break;
12943             }
12944
12945             /* special-case "%.0f" */
12946             if (   c == 'f'
12947                 && !precis
12948                 && has_precis
12949                 && !(width || left || plus || alt)
12950                 && !fill
12951                 && intsize != 'q'
12952                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12953             )
12954                 goto float_concat;
12955
12956             /* Determine the buffer size needed for the various
12957              * floating-point formats.
12958              *
12959              * The basic possibilities are:
12960              *
12961              *               <---P--->
12962              *    %f 1111111.123456789
12963              *    %e       1.111111123e+06
12964              *    %a     0x1.0f4471f9bp+20
12965              *    %g        1111111.12
12966              *    %g        1.11111112e+15
12967              *
12968              * where P is the value of the precision in the format, or 6
12969              * if not specified. Note the two possible output formats of
12970              * %g; in both cases the number of significant digits is <=
12971              * precision.
12972              *
12973              * For most of the format types the maximum buffer size needed
12974              * is precision, plus: any leading 1 or 0x1, the radix
12975              * point, and an exponent.  The difficult one is %f: for a
12976              * large positive exponent it can have many leading digits,
12977              * which needs to be calculated specially. Also %a is slightly
12978              * different in that in the absence of a specified precision,
12979              * it uses as many digits as necessary to distinguish
12980              * different values.
12981              *
12982              * First, here are the constant bits. For ease of calculation
12983              * we over-estimate the needed buffer size, for example by
12984              * assuming all formats have an exponent and a leading 0x1.
12985              *
12986              * Also for production use, add a little extra overhead for
12987              * safety's sake. Under debugging don't, as it means we're
12988              * more likely to quickly spot issues during development.
12989              */
12990
12991             float_need =     1  /* possible unary minus */
12992                           +  4  /* "0x1" plus very unlikely carry */
12993                           +  1  /* default radix point '.' */
12994                           +  2  /* "e-", "p+" etc */
12995                           +  6  /* exponent: up to 16383 (quad fp) */
12996 #ifndef DEBUGGING
12997                           + 20  /* safety net */
12998 #endif
12999                           +  1; /* \0 */
13000
13001
13002             /* determine the radix point len, e.g. length(".") in "1.2" */
13003 #ifdef USE_LOCALE_NUMERIC
13004             /* note that we may either explicitly use PL_numeric_radix_sv
13005              * below, or implicitly, via an snprintf() variant.
13006              * Note also things like ps_AF.utf8 which has
13007              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
13008             if (! have_in_lc_numeric) {
13009                 in_lc_numeric = IN_LC(LC_NUMERIC);
13010                 have_in_lc_numeric = TRUE;
13011             }
13012
13013             if (in_lc_numeric) {
13014                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
13015                     /* this can't wrap unless PL_numeric_radix_sv is a string
13016                      * consuming virtually all the 32-bit or 64-bit address
13017                      * space
13018                      */
13019                     float_need += (SvCUR(PL_numeric_radix_sv) - 1);
13020
13021                     /* floating-point formats only get utf8 if the radix point
13022                      * is utf8. All other characters in the string are < 128
13023                      * and so can be safely appended to both a non-utf8 and utf8
13024                      * string as-is.
13025                      * Note that this will convert the output to utf8 even if
13026                      * the radix point didn't get output.
13027                      */
13028                     if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
13029                         sv_utf8_upgrade(sv);
13030                         has_utf8 = TRUE;
13031                     }
13032                 });
13033             }
13034 #endif
13035
13036             hexfp = FALSE;
13037
13038             if (isALPHA_FOLD_EQ(c, 'f')) {
13039                 /* Determine how many digits before the radix point
13040                  * might be emitted.  frexp() (or frexpl) has some
13041                  * unspecified behaviour for nan/inf/-inf, so lucky we've
13042                  * already handled them above */
13043                 STRLEN digits;
13044                 int i = PERL_INT_MIN;
13045                 (void)Perl_frexp((NV)fv, &i);
13046                 if (i == PERL_INT_MIN)
13047                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
13048
13049                 if (i > 0) {
13050                     digits = BIT_DIGITS(i);
13051                     /* this can't overflow. 'digits' will only be a few
13052                      * thousand even for the largest floating-point types.
13053                      * And up until now float_need is just some small
13054                      * constants plus radix len, which can't be in
13055                      * overflow territory unless the radix SV is consuming
13056                      * over 1/2 the address space */
13057                     assert(float_need < ((STRLEN)~0) - digits);
13058                     float_need += digits;
13059                 }
13060             }
13061             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13062                 hexfp = TRUE;
13063                 if (!has_precis) {
13064                     /* %a in the absence of precision may print as many
13065                      * digits as needed to represent the entire mantissa
13066                      * bit pattern.
13067                      * This estimate seriously overshoots in most cases,
13068                      * but better the undershooting.  Firstly, all bytes
13069                      * of the NV are not mantissa, some of them are
13070                      * exponent.  Secondly, for the reasonably common
13071                      * long doubles case, the "80-bit extended", two
13072                      * or six bytes of the NV are unused. Also, we'll
13073                      * still pick up an extra +6 from the default
13074                      * precision calculation below. */
13075                     STRLEN digits =
13076 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13077                         /* For the "double double", we need more.
13078                          * Since each double has their own exponent, the
13079                          * doubles may float (haha) rather far from each
13080                          * other, and the number of required bits is much
13081                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13082                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13083                          *
13084                          * Need 2 hexdigits for each byte. */
13085                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13086 #else
13087                         NVSIZE * 2; /* 2 hexdigits for each byte */
13088 #endif
13089                     /* see "this can't overflow" comment above */
13090                     assert(float_need < ((STRLEN)~0) - digits);
13091                     float_need += digits;
13092                 }
13093             }
13094             /* special-case "%.<number>g" if it will fit in ebuf */
13095             else if (c == 'g'
13096                 && precis   /* See earlier comment about buggy Gconvert
13097                                when digits, aka precis, is 0  */
13098                 && has_precis
13099                 /* check, in manner not involving wrapping, that it will
13100                  * fit in ebuf  */
13101                 && float_need < sizeof(ebuf)
13102                 && sizeof(ebuf) - float_need > precis
13103                 && !(width || left || plus || alt)
13104                 && !fill
13105                 && intsize != 'q'
13106             ) {
13107                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13108                     SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
13109                 );
13110                 elen = strlen(ebuf);
13111                 eptr = ebuf;
13112                 goto float_concat;
13113             }
13114
13115
13116             {
13117                 STRLEN pr = has_precis ? precis : 6; /* known default */
13118                 /* this probably can't wrap, since precis is limited
13119                  * to 1/4 address space size, but better safe than sorry
13120                  */
13121                 if (float_need >= ((STRLEN)~0) - pr)
13122                     croak_memory_wrap();
13123                 float_need += pr;
13124             }
13125
13126             if (float_need < width)
13127                 float_need = width;
13128
13129             if (float_need > INT_MAX) {
13130                 /* snprintf() returns an int, and we use that return value,
13131                    so die horribly if the expected size is too large for int
13132                 */
13133                 Perl_croak(aTHX_ "Numeric format result too large");
13134             }
13135
13136             if (PL_efloatsize <= float_need) {
13137                 /* PL_efloatbuf should be at least 1 greater than
13138                  * float_need to allow a trailing \0 to be returned by
13139                  * snprintf().  If we need to grow, overgrow for the
13140                  * benefit of future generations */
13141                 const STRLEN extra = 0x20;
13142                 if (float_need >= ((STRLEN)~0) - extra)
13143                     croak_memory_wrap();
13144                 float_need += extra;
13145                 Safefree(PL_efloatbuf);
13146                 PL_efloatsize = float_need;
13147                 Newx(PL_efloatbuf, PL_efloatsize, char);
13148                 PL_efloatbuf[0] = '\0';
13149             }
13150
13151             if (UNLIKELY(hexfp)) {
13152                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13153                                 nv, fv, has_precis, precis, width,
13154                                 alt, plus, left, fill, in_lc_numeric);
13155             }
13156             else {
13157                 char *ptr = ebuf + sizeof ebuf;
13158                 *--ptr = '\0';
13159                 *--ptr = c;
13160 #if defined(USE_QUADMATH)
13161                 if (intsize == 'q') {
13162                     /* "g" -> "Qg" */
13163                     *--ptr = 'Q';
13164                 }
13165                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13166 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13167                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13168                  * not USE_LONG_DOUBLE and NVff.  In other words,
13169                  * this needs to work without USE_LONG_DOUBLE. */
13170                 if (intsize == 'q') {
13171                     /* Copy the one or more characters in a long double
13172                      * format before the 'base' ([efgEFG]) character to
13173                      * the format string. */
13174                     static char const ldblf[] = PERL_PRIfldbl;
13175                     char const *p = ldblf + sizeof(ldblf) - 3;
13176                     while (p >= ldblf) { *--ptr = *p--; }
13177                 }
13178 #endif
13179                 if (has_precis) {
13180                     base = precis;
13181                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13182                     *--ptr = '.';
13183                 }
13184                 if (width) {
13185                     base = width;
13186                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13187                 }
13188                 if (fill)
13189                     *--ptr = '0';
13190                 if (left)
13191                     *--ptr = '-';
13192                 if (plus)
13193                     *--ptr = plus;
13194                 if (alt)
13195                     *--ptr = '#';
13196                 *--ptr = '%';
13197
13198                 /* No taint.  Otherwise we are in the strange situation
13199                  * where printf() taints but print($float) doesn't.
13200                  * --jhi */
13201
13202                 /* hopefully the above makes ptr a very constrained format
13203                  * that is safe to use, even though it's not literal */
13204                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13205 #ifdef USE_QUADMATH
13206                 {
13207                     if (!quadmath_format_valid(ptr))
13208                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13209                     WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13210                         elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13211                                                  ptr, nv);
13212                     );
13213                     if ((IV)elen == -1) {
13214                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
13215                     }
13216                 }
13217 #elif defined(HAS_LONG_DOUBLE)
13218                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13219                     elen = ((intsize == 'q')
13220                             ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13221                             : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
13222                 );
13223 #else
13224                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13225                     elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13226                 );
13227 #endif
13228                 GCC_DIAG_RESTORE_STMT;
13229             }
13230
13231             eptr = PL_efloatbuf;
13232
13233           float_concat:
13234
13235             /* Since floating-point formats do their own formatting and
13236              * padding, we skip the main block of code at the end of this
13237              * loop which handles appending eptr to sv, and do our own
13238              * stripped-down version */
13239
13240             assert(!zeros);
13241             assert(!esignlen);
13242             assert(elen);
13243             assert(elen >= width);
13244
13245             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13246
13247             goto done_valid_conversion;
13248         }
13249
13250             /* SPECIAL */
13251
13252         case 'n':
13253             {
13254                 STRLEN len;
13255                 /* XXX ideally we should warn if any flags etc have been
13256                  * set, e.g. "%-4.5n" */
13257                 /* XXX if sv was originally non-utf8 with a char in the
13258                  * range 0x80-0xff, then if it got upgraded, we should
13259                  * calculate char len rather than byte len here */
13260                 len = SvCUR(sv) - origlen;
13261                 if (args) {
13262                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13263
13264                     switch (intsize) {
13265                     case 'c':  *(va_arg(*args, char*))      = i; break;
13266                     case 'h':  *(va_arg(*args, short*))     = i; break;
13267                     default:   *(va_arg(*args, int*))       = i; break;
13268                     case 'l':  *(va_arg(*args, long*))      = i; break;
13269                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13270                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13271 #ifdef HAS_PTRDIFF_T
13272                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13273 #endif
13274                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13275                     case 'q':
13276 #if IVSIZE >= 8
13277                                *(va_arg(*args, Quad_t*))    = i; break;
13278 #else
13279                                goto unknown;
13280 #endif
13281                     }
13282                 }
13283                 else {
13284                     if (arg_missing)
13285                         Perl_croak_nocontext(
13286                             "Missing argument for %%n in %s",
13287                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13288                     sv_setuv_mg(argsv, has_utf8
13289                         ? (UV)utf8_length((U8*)SvPVX(sv), (U8*)SvEND(sv))
13290                         : (UV)len);
13291                 }
13292                 goto done_valid_conversion;
13293             }
13294
13295             /* UNKNOWN */
13296
13297         default:
13298       unknown:
13299             if (!args
13300                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13301                 && ckWARN(WARN_PRINTF))
13302             {
13303                 SV * const msg = sv_newmortal();
13304                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13305                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13306                 if (fmtstart < patend) {
13307                     const char * const fmtend = q < patend ? q : patend;
13308                     const char * f;
13309                     sv_catpvs(msg, "\"%");
13310                     for (f = fmtstart; f < fmtend; f++) {
13311                         if (isPRINT(*f)) {
13312                             sv_catpvn_nomg(msg, f, 1);
13313                         } else {
13314                             Perl_sv_catpvf(aTHX_ msg,
13315                                            "\\%03" UVof, (UV)*f & 0xFF);
13316                         }
13317                     }
13318                     sv_catpvs(msg, "\"");
13319                 } else {
13320                     sv_catpvs(msg, "end of string");
13321                 }
13322                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13323             }
13324
13325             /* mangled format: output the '%', then continue from the
13326              * character following that */
13327             sv_catpvn_nomg(sv, fmtstart-1, 1);
13328             q = fmtstart;
13329             svix = osvix;
13330             /* Any "redundant arg" warning from now onwards will probably
13331              * just be misleading, so don't bother. */
13332             no_redundant_warning = TRUE;
13333             continue;   /* not "break" */
13334         }
13335
13336         if (is_utf8 != has_utf8) {
13337             if (is_utf8) {
13338                 if (SvCUR(sv))
13339                     sv_utf8_upgrade(sv);
13340             }
13341             else {
13342                 const STRLEN old_elen = elen;
13343                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13344                 sv_utf8_upgrade(nsv);
13345                 eptr = SvPVX_const(nsv);
13346                 elen = SvCUR(nsv);
13347
13348                 if (width) { /* fudge width (can't fudge elen) */
13349                     width += elen - old_elen;
13350                 }
13351                 is_utf8 = TRUE;
13352             }
13353         }
13354
13355
13356         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13357
13358         {
13359             STRLEN need, have, gap;
13360             STRLEN i;
13361             char *s;
13362
13363             /* signed value that's wrapped? */
13364             assert(elen  <= ((~(STRLEN)0) >> 1));
13365
13366             /* if zeros is non-zero, then it represents filler between
13367              * elen and precis. So adding elen and zeros together will
13368              * always be <= precis, and the addition can never wrap */
13369             assert(!zeros || (precis > elen && precis - elen == zeros));
13370             have = elen + zeros;
13371
13372             if (have >= (((STRLEN)~0) - esignlen))
13373                 croak_memory_wrap();
13374             have += esignlen;
13375
13376             need = (have > width ? have : width);
13377             gap = need - have;
13378
13379             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13380                 croak_memory_wrap();
13381             need += (SvCUR(sv) + 1);
13382
13383             SvGROW(sv, need);
13384
13385             s = SvEND(sv);
13386
13387             if (left) {
13388                 for (i = 0; i < esignlen; i++)
13389                     *s++ = esignbuf[i];
13390                 for (i = zeros; i; i--)
13391                     *s++ = '0';
13392                 Copy(eptr, s, elen, char);
13393                 s += elen;
13394                 for (i = gap; i; i--)
13395                     *s++ = ' ';
13396             }
13397             else {
13398                 if (fill) {
13399                     for (i = 0; i < esignlen; i++)
13400                         *s++ = esignbuf[i];
13401                     assert(!zeros);
13402                     zeros = gap;
13403                 }
13404                 else {
13405                     for (i = gap; i; i--)
13406                         *s++ = ' ';
13407                     for (i = 0; i < esignlen; i++)
13408                         *s++ = esignbuf[i];
13409                 }
13410
13411                 for (i = zeros; i; i--)
13412                     *s++ = '0';
13413                 Copy(eptr, s, elen, char);
13414                 s += elen;
13415             }
13416
13417             *s = '\0';
13418             SvCUR_set(sv, s - SvPVX_const(sv));
13419
13420             if (is_utf8)
13421                 has_utf8 = TRUE;
13422             if (has_utf8)
13423                 SvUTF8_on(sv);
13424         }
13425
13426         if (vectorize && veclen) {
13427             /* we append the vector separator separately since %v isn't
13428              * very common: don't slow down the general case by adding
13429              * dotstrlen to need etc */
13430             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13431             esignlen = 0;
13432             goto vector; /* do next iteration */
13433         }
13434
13435       done_valid_conversion:
13436
13437         if (arg_missing)
13438             S_warn_vcatpvfn_missing_argument(aTHX);
13439     }
13440
13441     /* Now that we've consumed all our printf format arguments (svix)
13442      * do we have things left on the stack that we didn't use?
13443      */
13444     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13445         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13446                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13447     }
13448
13449     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13450         /* while we shouldn't set the cache, it may have been previously
13451            set in the caller, so clear it */
13452         MAGIC *mg = mg_find(sv, PERL_MAGIC_utf8);
13453         if (mg)
13454             magic_setutf8(sv,mg); /* clear UTF8 cache */
13455     }
13456     SvTAINT(sv);
13457 }
13458
13459 /* =========================================================================
13460
13461 =head1 Cloning an interpreter
13462
13463 =cut
13464
13465 All the macros and functions in this section are for the private use of
13466 the main function, perl_clone().
13467
13468 The foo_dup() functions make an exact copy of an existing foo thingy.
13469 During the course of a cloning, a hash table is used to map old addresses
13470 to new addresses.  The table is created and manipulated with the
13471 ptr_table_* functions.
13472
13473  * =========================================================================*/
13474
13475
13476 #if defined(USE_ITHREADS)
13477
13478 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13479 #ifndef GpREFCNT_inc
13480 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13481 #endif
13482
13483
13484 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13485    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13486    If this changes, please unmerge ss_dup.
13487    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13488 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13489 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13490 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13491 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13492 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13493 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13494 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13495 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13496 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13497 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13498 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13499 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13500 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13501
13502 /* clone a parser */
13503
13504 yy_parser *
13505 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13506 {
13507     yy_parser *parser;
13508
13509     PERL_ARGS_ASSERT_PARSER_DUP;
13510
13511     if (!proto)
13512         return NULL;
13513
13514     /* look for it in the table first */
13515     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13516     if (parser)
13517         return parser;
13518
13519     /* create anew and remember what it is */
13520     Newxz(parser, 1, yy_parser);
13521     ptr_table_store(PL_ptr_table, proto, parser);
13522
13523     /* XXX eventually, just Copy() most of the parser struct ? */
13524
13525     parser->lex_brackets = proto->lex_brackets;
13526     parser->lex_casemods = proto->lex_casemods;
13527     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13528                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13529     parser->lex_casestack = savepvn(proto->lex_casestack,
13530                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13531     parser->lex_defer   = proto->lex_defer;
13532     parser->lex_dojoin  = proto->lex_dojoin;
13533     parser->lex_formbrack = proto->lex_formbrack;
13534     parser->lex_inpat   = proto->lex_inpat;
13535     parser->lex_inwhat  = proto->lex_inwhat;
13536     parser->lex_op      = proto->lex_op;
13537     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13538     parser->lex_starts  = proto->lex_starts;
13539     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13540     parser->multi_close = proto->multi_close;
13541     parser->multi_open  = proto->multi_open;
13542     parser->multi_start = proto->multi_start;
13543     parser->multi_end   = proto->multi_end;
13544     parser->preambled   = proto->preambled;
13545     parser->lex_super_state = proto->lex_super_state;
13546     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13547     parser->lex_sub_op  = proto->lex_sub_op;
13548     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13549     parser->linestr     = sv_dup_inc(proto->linestr, param);
13550     parser->expect      = proto->expect;
13551     parser->copline     = proto->copline;
13552     parser->last_lop_op = proto->last_lop_op;
13553     parser->lex_state   = proto->lex_state;
13554     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13555     /* rsfp_filters entries have fake IoDIRP() */
13556     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13557     parser->in_my       = proto->in_my;
13558     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13559     parser->error_count = proto->error_count;
13560     parser->sig_elems   = proto->sig_elems;
13561     parser->sig_optelems= proto->sig_optelems;
13562     parser->sig_slurpy  = proto->sig_slurpy;
13563     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13564
13565     {
13566         char * const ols = SvPVX(proto->linestr);
13567         char * const ls  = SvPVX(parser->linestr);
13568
13569         parser->bufptr      = ls + (proto->bufptr >= ols ?
13570                                     proto->bufptr -  ols : 0);
13571         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13572                                     proto->oldbufptr -  ols : 0);
13573         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13574                                     proto->oldoldbufptr -  ols : 0);
13575         parser->linestart   = ls + (proto->linestart >= ols ?
13576                                     proto->linestart -  ols : 0);
13577         parser->last_uni    = ls + (proto->last_uni >= ols ?
13578                                     proto->last_uni -  ols : 0);
13579         parser->last_lop    = ls + (proto->last_lop >= ols ?
13580                                     proto->last_lop -  ols : 0);
13581
13582         parser->bufend      = ls + SvCUR(parser->linestr);
13583     }
13584
13585     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13586
13587
13588     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13589     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13590     parser->nexttoke    = proto->nexttoke;
13591
13592     /* XXX should clone saved_curcop here, but we aren't passed
13593      * proto_perl; so do it in perl_clone_using instead */
13594
13595     return parser;
13596 }
13597
13598
13599 /* duplicate a file handle */
13600
13601 PerlIO *
13602 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13603 {
13604     PerlIO *ret;
13605
13606     PERL_ARGS_ASSERT_FP_DUP;
13607     PERL_UNUSED_ARG(type);
13608
13609     if (!fp)
13610         return (PerlIO*)NULL;
13611
13612     /* look for it in the table first */
13613     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13614     if (ret)
13615         return ret;
13616
13617     /* create anew and remember what it is */
13618 #ifdef __amigaos4__
13619     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13620 #else
13621     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13622 #endif
13623     ptr_table_store(PL_ptr_table, fp, ret);
13624     return ret;
13625 }
13626
13627 /* duplicate a directory handle */
13628
13629 DIR *
13630 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13631 {
13632     DIR *ret;
13633
13634 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13635     DIR *pwd;
13636     const Direntry_t *dirent;
13637     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13638     char *name = NULL;
13639     STRLEN len = 0;
13640     long pos;
13641 #endif
13642
13643     PERL_UNUSED_CONTEXT;
13644     PERL_ARGS_ASSERT_DIRP_DUP;
13645
13646     if (!dp)
13647         return (DIR*)NULL;
13648
13649     /* look for it in the table first */
13650     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13651     if (ret)
13652         return ret;
13653
13654 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13655
13656     PERL_UNUSED_ARG(param);
13657
13658     /* create anew */
13659
13660     /* open the current directory (so we can switch back) */
13661     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13662
13663     /* chdir to our dir handle and open the present working directory */
13664     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13665         PerlDir_close(pwd);
13666         return (DIR *)NULL;
13667     }
13668     /* Now we should have two dir handles pointing to the same dir. */
13669
13670     /* Be nice to the calling code and chdir back to where we were. */
13671     /* XXX If this fails, then what? */
13672     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13673
13674     /* We have no need of the pwd handle any more. */
13675     PerlDir_close(pwd);
13676
13677 #ifdef DIRNAMLEN
13678 # define d_namlen(d) (d)->d_namlen
13679 #else
13680 # define d_namlen(d) strlen((d)->d_name)
13681 #endif
13682     /* Iterate once through dp, to get the file name at the current posi-
13683        tion. Then step back. */
13684     pos = PerlDir_tell(dp);
13685     if ((dirent = PerlDir_read(dp))) {
13686         len = d_namlen(dirent);
13687         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13688             /* If the len is somehow magically longer than the
13689              * maximum length of the directory entry, even though
13690              * we could fit it in a buffer, we could not copy it
13691              * from the dirent.  Bail out. */
13692             PerlDir_close(ret);
13693             return (DIR*)NULL;
13694         }
13695         if (len <= sizeof smallbuf) name = smallbuf;
13696         else Newx(name, len, char);
13697         Move(dirent->d_name, name, len, char);
13698     }
13699     PerlDir_seek(dp, pos);
13700
13701     /* Iterate through the new dir handle, till we find a file with the
13702        right name. */
13703     if (!dirent) /* just before the end */
13704         for(;;) {
13705             pos = PerlDir_tell(ret);
13706             if (PerlDir_read(ret)) continue; /* not there yet */
13707             PerlDir_seek(ret, pos); /* step back */
13708             break;
13709         }
13710     else {
13711         const long pos0 = PerlDir_tell(ret);
13712         for(;;) {
13713             pos = PerlDir_tell(ret);
13714             if ((dirent = PerlDir_read(ret))) {
13715                 if (len == (STRLEN)d_namlen(dirent)
13716                     && memEQ(name, dirent->d_name, len)) {
13717                     /* found it */
13718                     PerlDir_seek(ret, pos); /* step back */
13719                     break;
13720                 }
13721                 /* else we are not there yet; keep iterating */
13722             }
13723             else { /* This is not meant to happen. The best we can do is
13724                       reset the iterator to the beginning. */
13725                 PerlDir_seek(ret, pos0);
13726                 break;
13727             }
13728         }
13729     }
13730 #undef d_namlen
13731
13732     if (name && name != smallbuf)
13733         Safefree(name);
13734 #endif
13735
13736 #ifdef WIN32
13737     ret = win32_dirp_dup(dp, param);
13738 #endif
13739
13740     /* pop it in the pointer table */
13741     if (ret)
13742         ptr_table_store(PL_ptr_table, dp, ret);
13743
13744     return ret;
13745 }
13746
13747 /* duplicate a typeglob */
13748
13749 GP *
13750 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13751 {
13752     GP *ret;
13753
13754     PERL_ARGS_ASSERT_GP_DUP;
13755
13756     if (!gp)
13757         return (GP*)NULL;
13758     /* look for it in the table first */
13759     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13760     if (ret)
13761         return ret;
13762
13763     /* create anew and remember what it is */
13764     Newxz(ret, 1, GP);
13765     ptr_table_store(PL_ptr_table, gp, ret);
13766
13767     /* clone */
13768     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13769        on Newxz() to do this for us.  */
13770     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13771     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13772     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13773     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13774     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13775     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13776     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13777     ret->gp_cvgen       = gp->gp_cvgen;
13778     ret->gp_line        = gp->gp_line;
13779     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13780     return ret;
13781 }
13782
13783 /* duplicate a chain of magic */
13784
13785 MAGIC *
13786 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13787 {
13788     MAGIC *mgret = NULL;
13789     MAGIC **mgprev_p = &mgret;
13790
13791     PERL_ARGS_ASSERT_MG_DUP;
13792
13793     for (; mg; mg = mg->mg_moremagic) {
13794         MAGIC *nmg;
13795
13796         if ((param->flags & CLONEf_JOIN_IN)
13797                 && mg->mg_type == PERL_MAGIC_backref)
13798             /* when joining, we let the individual SVs add themselves to
13799              * backref as needed. */
13800             continue;
13801
13802         Newx(nmg, 1, MAGIC);
13803         *mgprev_p = nmg;
13804         mgprev_p = &(nmg->mg_moremagic);
13805
13806         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13807            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13808            from the original commit adding Perl_mg_dup() - revision 4538.
13809            Similarly there is the annotation "XXX random ptr?" next to the
13810            assignment to nmg->mg_ptr.  */
13811         *nmg = *mg;
13812
13813         /* FIXME for plugins
13814         if (nmg->mg_type == PERL_MAGIC_qr) {
13815             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13816         }
13817         else
13818         */
13819         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13820                           ? nmg->mg_type == PERL_MAGIC_backref
13821                                 /* The backref AV has its reference
13822                                  * count deliberately bumped by 1 */
13823                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13824                                                     nmg->mg_obj, param))
13825                                 : sv_dup_inc(nmg->mg_obj, param)
13826                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13827                              nmg->mg_type == PERL_MAGIC_regdata)
13828                                   ? nmg->mg_obj
13829                                   : sv_dup(nmg->mg_obj, param);
13830
13831         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13832             if (nmg->mg_len > 0) {
13833                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13834                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13835                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13836                 {
13837                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13838                     sv_dup_inc_multiple((SV**)(namtp->table),
13839                                         (SV**)(namtp->table), NofAMmeth, param);
13840                 }
13841             }
13842             else if (nmg->mg_len == HEf_SVKEY)
13843                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13844         }
13845         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13846             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13847         }
13848     }
13849     return mgret;
13850 }
13851
13852 #endif /* USE_ITHREADS */
13853
13854 struct ptr_tbl_arena {
13855     struct ptr_tbl_arena *next;
13856     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13857 };
13858
13859 /* create a new pointer-mapping table */
13860
13861 PTR_TBL_t *
13862 Perl_ptr_table_new(pTHX)
13863 {
13864     PTR_TBL_t *tbl;
13865     PERL_UNUSED_CONTEXT;
13866
13867     Newx(tbl, 1, PTR_TBL_t);
13868     tbl->tbl_max        = 511;
13869     tbl->tbl_items      = 0;
13870     tbl->tbl_arena      = NULL;
13871     tbl->tbl_arena_next = NULL;
13872     tbl->tbl_arena_end  = NULL;
13873     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13874     return tbl;
13875 }
13876
13877 #define PTR_TABLE_HASH(ptr) \
13878   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13879
13880 /* map an existing pointer using a table */
13881
13882 STATIC PTR_TBL_ENT_t *
13883 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13884 {
13885     PTR_TBL_ENT_t *tblent;
13886     const UV hash = PTR_TABLE_HASH(sv);
13887
13888     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13889
13890     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13891     for (; tblent; tblent = tblent->next) {
13892         if (tblent->oldval == sv)
13893             return tblent;
13894     }
13895     return NULL;
13896 }
13897
13898 void *
13899 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13900 {
13901     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13902
13903     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13904     PERL_UNUSED_CONTEXT;
13905
13906     return tblent ? tblent->newval : NULL;
13907 }
13908
13909 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13910  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13911  * the core's typical use of ptr_tables in thread cloning. */
13912
13913 void
13914 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13915 {
13916     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13917
13918     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13919     PERL_UNUSED_CONTEXT;
13920
13921     if (tblent) {
13922         tblent->newval = newsv;
13923     } else {
13924         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13925
13926         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13927             struct ptr_tbl_arena *new_arena;
13928
13929             Newx(new_arena, 1, struct ptr_tbl_arena);
13930             new_arena->next = tbl->tbl_arena;
13931             tbl->tbl_arena = new_arena;
13932             tbl->tbl_arena_next = new_arena->array;
13933             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13934         }
13935
13936         tblent = tbl->tbl_arena_next++;
13937
13938         tblent->oldval = oldsv;
13939         tblent->newval = newsv;
13940         tblent->next = tbl->tbl_ary[entry];
13941         tbl->tbl_ary[entry] = tblent;
13942         tbl->tbl_items++;
13943         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13944             ptr_table_split(tbl);
13945     }
13946 }
13947
13948 /* double the hash bucket size of an existing ptr table */
13949
13950 void
13951 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13952 {
13953     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13954     const UV oldsize = tbl->tbl_max + 1;
13955     UV newsize = oldsize * 2;
13956     UV i;
13957
13958     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13959     PERL_UNUSED_CONTEXT;
13960
13961     Renew(ary, newsize, PTR_TBL_ENT_t*);
13962     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13963     tbl->tbl_max = --newsize;
13964     tbl->tbl_ary = ary;
13965     for (i=0; i < oldsize; i++, ary++) {
13966         PTR_TBL_ENT_t **entp = ary;
13967         PTR_TBL_ENT_t *ent = *ary;
13968         PTR_TBL_ENT_t **curentp;
13969         if (!ent)
13970             continue;
13971         curentp = ary + oldsize;
13972         do {
13973             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13974                 *entp = ent->next;
13975                 ent->next = *curentp;
13976                 *curentp = ent;
13977             }
13978             else
13979                 entp = &ent->next;
13980             ent = *entp;
13981         } while (ent);
13982     }
13983 }
13984
13985 /* remove all the entries from a ptr table */
13986 /* Deprecated - will be removed post 5.14 */
13987
13988 void
13989 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13990 {
13991     PERL_UNUSED_CONTEXT;
13992     if (tbl && tbl->tbl_items) {
13993         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13994
13995         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13996
13997         while (arena) {
13998             struct ptr_tbl_arena *next = arena->next;
13999
14000             Safefree(arena);
14001             arena = next;
14002         };
14003
14004         tbl->tbl_items = 0;
14005         tbl->tbl_arena = NULL;
14006         tbl->tbl_arena_next = NULL;
14007         tbl->tbl_arena_end = NULL;
14008     }
14009 }
14010
14011 /* clear and free a ptr table */
14012
14013 void
14014 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
14015 {
14016     struct ptr_tbl_arena *arena;
14017
14018     PERL_UNUSED_CONTEXT;
14019
14020     if (!tbl) {
14021         return;
14022     }
14023
14024     arena = tbl->tbl_arena;
14025
14026     while (arena) {
14027         struct ptr_tbl_arena *next = arena->next;
14028
14029         Safefree(arena);
14030         arena = next;
14031     }
14032
14033     Safefree(tbl->tbl_ary);
14034     Safefree(tbl);
14035 }
14036
14037 #if defined(USE_ITHREADS)
14038
14039 void
14040 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
14041 {
14042     PERL_ARGS_ASSERT_RVPV_DUP;
14043
14044     assert(!isREGEXP(sstr));
14045     if (SvROK(sstr)) {
14046         if (SvWEAKREF(sstr)) {
14047             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
14048             if (param->flags & CLONEf_JOIN_IN) {
14049                 /* if joining, we add any back references individually rather
14050                  * than copying the whole backref array */
14051                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
14052             }
14053         }
14054         else
14055             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
14056     }
14057     else if (SvPVX_const(sstr)) {
14058         /* Has something there */
14059         if (SvLEN(sstr)) {
14060             /* Normal PV - clone whole allocated space */
14061             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
14062             /* sstr may not be that normal, but actually copy on write.
14063                But we are a true, independent SV, so:  */
14064             SvIsCOW_off(dstr);
14065         }
14066         else {
14067             /* Special case - not normally malloced for some reason */
14068             if (isGV_with_GP(sstr)) {
14069                 /* Don't need to do anything here.  */
14070             }
14071             else if ((SvIsCOW(sstr))) {
14072                 /* A "shared" PV - clone it as "shared" PV */
14073                 SvPV_set(dstr,
14074                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
14075                                          param)));
14076             }
14077             else {
14078                 /* Some other special case - random pointer */
14079                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
14080             }
14081         }
14082     }
14083     else {
14084         /* Copy the NULL */
14085         SvPV_set(dstr, NULL);
14086     }
14087 }
14088
14089 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14090 static SV **
14091 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14092                       SSize_t items, CLONE_PARAMS *const param)
14093 {
14094     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14095
14096     while (items-- > 0) {
14097         *dest++ = sv_dup_inc(*source++, param);
14098     }
14099
14100     return dest;
14101 }
14102
14103 /* duplicate an SV of any type (including AV, HV etc) */
14104
14105 static SV *
14106 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14107 {
14108     dVAR;
14109     SV *dstr;
14110
14111     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14112
14113     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
14114 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14115         abort();
14116 #endif
14117         return NULL;
14118     }
14119     /* look for it in the table first */
14120     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14121     if (dstr)
14122         return dstr;
14123
14124     if(param->flags & CLONEf_JOIN_IN) {
14125         /** We are joining here so we don't want do clone
14126             something that is bad **/
14127         if (SvTYPE(sstr) == SVt_PVHV) {
14128             const HEK * const hvname = HvNAME_HEK(sstr);
14129             if (hvname) {
14130                 /** don't clone stashes if they already exist **/
14131                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14132                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14133                 ptr_table_store(PL_ptr_table, sstr, dstr);
14134                 return dstr;
14135             }
14136         }
14137         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14138             HV *stash = GvSTASH(sstr);
14139             const HEK * hvname;
14140             if (stash && (hvname = HvNAME_HEK(stash))) {
14141                 /** don't clone GVs if they already exist **/
14142                 SV **svp;
14143                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14144                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14145                 svp = hv_fetch(
14146                         stash, GvNAME(sstr),
14147                         GvNAMEUTF8(sstr)
14148                             ? -GvNAMELEN(sstr)
14149                             :  GvNAMELEN(sstr),
14150                         0
14151                       );
14152                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14153                     ptr_table_store(PL_ptr_table, sstr, *svp);
14154                     return *svp;
14155                 }
14156             }
14157         }
14158     }
14159
14160     /* create anew and remember what it is */
14161     new_SV(dstr);
14162
14163 #ifdef DEBUG_LEAKING_SCALARS
14164     dstr->sv_debug_optype = sstr->sv_debug_optype;
14165     dstr->sv_debug_line = sstr->sv_debug_line;
14166     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14167     dstr->sv_debug_parent = (SV*)sstr;
14168     FREE_SV_DEBUG_FILE(dstr);
14169     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14170 #endif
14171
14172     ptr_table_store(PL_ptr_table, sstr, dstr);
14173
14174     /* clone */
14175     SvFLAGS(dstr)       = SvFLAGS(sstr);
14176     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14177     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14178
14179 #ifdef DEBUGGING
14180     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14181         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14182                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14183 #endif
14184
14185     /* don't clone objects whose class has asked us not to */
14186     if (SvOBJECT(sstr)
14187      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14188     {
14189         SvFLAGS(dstr) = 0;
14190         return dstr;
14191     }
14192
14193     switch (SvTYPE(sstr)) {
14194     case SVt_NULL:
14195         SvANY(dstr)     = NULL;
14196         break;
14197     case SVt_IV:
14198         SET_SVANY_FOR_BODYLESS_IV(dstr);
14199         if(SvROK(sstr)) {
14200             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14201         } else {
14202             SvIV_set(dstr, SvIVX(sstr));
14203         }
14204         break;
14205     case SVt_NV:
14206 #if NVSIZE <= IVSIZE
14207         SET_SVANY_FOR_BODYLESS_NV(dstr);
14208 #else
14209         SvANY(dstr)     = new_XNV();
14210 #endif
14211         SvNV_set(dstr, SvNVX(sstr));
14212         break;
14213     default:
14214         {
14215             /* These are all the types that need complex bodies allocating.  */
14216             void *new_body;
14217             const svtype sv_type = SvTYPE(sstr);
14218             const struct body_details *const sv_type_details
14219                 = bodies_by_type + sv_type;
14220
14221             switch (sv_type) {
14222             default:
14223                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14224                 NOT_REACHED; /* NOTREACHED */
14225                 break;
14226
14227             case SVt_PVGV:
14228             case SVt_PVIO:
14229             case SVt_PVFM:
14230             case SVt_PVHV:
14231             case SVt_PVAV:
14232             case SVt_PVCV:
14233             case SVt_PVLV:
14234             case SVt_REGEXP:
14235             case SVt_PVMG:
14236             case SVt_PVNV:
14237             case SVt_PVIV:
14238             case SVt_INVLIST:
14239             case SVt_PV:
14240                 assert(sv_type_details->body_size);
14241                 if (sv_type_details->arena) {
14242                     new_body_inline(new_body, sv_type);
14243                     new_body
14244                         = (void*)((char*)new_body - sv_type_details->offset);
14245                 } else {
14246                     new_body = new_NOARENA(sv_type_details);
14247                 }
14248             }
14249             assert(new_body);
14250             SvANY(dstr) = new_body;
14251
14252 #ifndef PURIFY
14253             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14254                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14255                  sv_type_details->copy, char);
14256 #else
14257             Copy(((char*)SvANY(sstr)),
14258                  ((char*)SvANY(dstr)),
14259                  sv_type_details->body_size + sv_type_details->offset, char);
14260 #endif
14261
14262             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14263                 && !isGV_with_GP(dstr)
14264                 && !isREGEXP(dstr)
14265                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14266                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14267
14268             /* The Copy above means that all the source (unduplicated) pointers
14269                are now in the destination.  We can check the flags and the
14270                pointers in either, but it's possible that there's less cache
14271                missing by always going for the destination.
14272                FIXME - instrument and check that assumption  */
14273             if (sv_type >= SVt_PVMG) {
14274                 if (SvMAGIC(dstr))
14275                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14276                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14277                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14278                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14279             }
14280
14281             /* The cast silences a GCC warning about unhandled types.  */
14282             switch ((int)sv_type) {
14283             case SVt_PV:
14284                 break;
14285             case SVt_PVIV:
14286                 break;
14287             case SVt_PVNV:
14288                 break;
14289             case SVt_PVMG:
14290                 break;
14291             case SVt_REGEXP:
14292               duprex:
14293                 /* FIXME for plugins */
14294                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14295                 break;
14296             case SVt_PVLV:
14297                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14298                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14299                     LvTARG(dstr) = dstr;
14300                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14301                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14302                 else
14303                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14304                 if (isREGEXP(sstr)) goto duprex;
14305                 /* FALLTHROUGH */
14306             case SVt_PVGV:
14307                 /* non-GP case already handled above */
14308                 if(isGV_with_GP(sstr)) {
14309                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14310                     /* Don't call sv_add_backref here as it's going to be
14311                        created as part of the magic cloning of the symbol
14312                        table--unless this is during a join and the stash
14313                        is not actually being cloned.  */
14314                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14315                        at the point of this comment.  */
14316                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14317                     if (param->flags & CLONEf_JOIN_IN)
14318                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14319                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14320                     (void)GpREFCNT_inc(GvGP(dstr));
14321                 }
14322                 break;
14323             case SVt_PVIO:
14324                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14325                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14326                     /* I have no idea why fake dirp (rsfps)
14327                        should be treated differently but otherwise
14328                        we end up with leaks -- sky*/
14329                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14330                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14331                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14332                 } else {
14333                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14334                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14335                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14336                     if (IoDIRP(dstr)) {
14337                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14338                     } else {
14339                         NOOP;
14340                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14341                     }
14342                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14343                 }
14344                 if (IoOFP(dstr) == IoIFP(sstr))
14345                     IoOFP(dstr) = IoIFP(dstr);
14346                 else
14347                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14348                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14349                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14350                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14351                 break;
14352             case SVt_PVAV:
14353                 /* avoid cloning an empty array */
14354                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14355                     SV **dst_ary, **src_ary;
14356                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14357
14358                     src_ary = AvARRAY((const AV *)sstr);
14359                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14360                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14361                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14362                     AvALLOC((const AV *)dstr) = dst_ary;
14363                     if (AvREAL((const AV *)sstr)) {
14364                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14365                                                       param);
14366                     }
14367                     else {
14368                         while (items-- > 0)
14369                             *dst_ary++ = sv_dup(*src_ary++, param);
14370                     }
14371                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14372                     while (items-- > 0) {
14373                         *dst_ary++ = NULL;
14374                     }
14375                 }
14376                 else {
14377                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14378                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14379                     AvMAX(  (const AV *)dstr)   = -1;
14380                     AvFILLp((const AV *)dstr)   = -1;
14381                 }
14382                 break;
14383             case SVt_PVHV:
14384                 if (HvARRAY((const HV *)sstr)) {
14385                     STRLEN i = 0;
14386                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14387                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14388                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14389                     char *darray;
14390                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14391                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14392                         char);
14393                     HvARRAY(dstr) = (HE**)darray;
14394                     while (i <= sxhv->xhv_max) {
14395                         const HE * const source = HvARRAY(sstr)[i];
14396                         HvARRAY(dstr)[i] = source
14397                             ? he_dup(source, sharekeys, param) : 0;
14398                         ++i;
14399                     }
14400                     if (SvOOK(sstr)) {
14401                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14402                         struct xpvhv_aux * const daux = HvAUX(dstr);
14403                         /* This flag isn't copied.  */
14404                         SvOOK_on(dstr);
14405
14406                         if (saux->xhv_name_count) {
14407                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14408                             const I32 count
14409                              = saux->xhv_name_count < 0
14410                                 ? -saux->xhv_name_count
14411                                 :  saux->xhv_name_count;
14412                             HEK **shekp = sname + count;
14413                             HEK **dhekp;
14414                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14415                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14416                             while (shekp-- > sname) {
14417                                 dhekp--;
14418                                 *dhekp = hek_dup(*shekp, param);
14419                             }
14420                         }
14421                         else {
14422                             daux->xhv_name_u.xhvnameu_name
14423                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14424                                           param);
14425                         }
14426                         daux->xhv_name_count = saux->xhv_name_count;
14427
14428                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14429 #ifdef PERL_HASH_RANDOMIZE_KEYS
14430                         daux->xhv_rand = saux->xhv_rand;
14431                         daux->xhv_last_rand = saux->xhv_last_rand;
14432 #endif
14433                         daux->xhv_riter = saux->xhv_riter;
14434                         daux->xhv_eiter = saux->xhv_eiter
14435                             ? he_dup(saux->xhv_eiter,
14436                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14437                         /* backref array needs refcnt=2; see sv_add_backref */
14438                         daux->xhv_backreferences =
14439                             (param->flags & CLONEf_JOIN_IN)
14440                                 /* when joining, we let the individual GVs and
14441                                  * CVs add themselves to backref as
14442                                  * needed. This avoids pulling in stuff
14443                                  * that isn't required, and simplifies the
14444                                  * case where stashes aren't cloned back
14445                                  * if they already exist in the parent
14446                                  * thread */
14447                             ? NULL
14448                             : saux->xhv_backreferences
14449                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14450                                     ? MUTABLE_AV(SvREFCNT_inc(
14451                                           sv_dup_inc((const SV *)
14452                                             saux->xhv_backreferences, param)))
14453                                     : MUTABLE_AV(sv_dup((const SV *)
14454                                             saux->xhv_backreferences, param))
14455                                 : 0;
14456
14457                         daux->xhv_mro_meta = saux->xhv_mro_meta
14458                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14459                             : 0;
14460
14461                         /* Record stashes for possible cloning in Perl_clone(). */
14462                         if (HvNAME(sstr))
14463                             av_push(param->stashes, dstr);
14464                     }
14465                 }
14466                 else
14467                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14468                 break;
14469             case SVt_PVCV:
14470                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14471                     CvDEPTH(dstr) = 0;
14472                 }
14473                 /* FALLTHROUGH */
14474             case SVt_PVFM:
14475                 /* NOTE: not refcounted */
14476                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14477                     hv_dup(CvSTASH(dstr), param);
14478                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14479                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14480                 if (!CvISXSUB(dstr)) {
14481                     OP_REFCNT_LOCK;
14482                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14483                     OP_REFCNT_UNLOCK;
14484                     CvSLABBED_off(dstr);
14485                 } else if (CvCONST(dstr)) {
14486                     CvXSUBANY(dstr).any_ptr =
14487                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14488                 }
14489                 assert(!CvSLABBED(dstr));
14490                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14491                 if (CvNAMED(dstr))
14492                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14493                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14494                 /* don't dup if copying back - CvGV isn't refcounted, so the
14495                  * duped GV may never be freed. A bit of a hack! DAPM */
14496                 else
14497                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14498                     CvCVGV_RC(dstr)
14499                     ? gv_dup_inc(CvGV(sstr), param)
14500                     : (param->flags & CLONEf_JOIN_IN)
14501                         ? NULL
14502                         : gv_dup(CvGV(sstr), param);
14503
14504                 if (!CvISXSUB(sstr)) {
14505                     PADLIST * padlist = CvPADLIST(sstr);
14506                     if(padlist)
14507                         padlist = padlist_dup(padlist, param);
14508                     CvPADLIST_set(dstr, padlist);
14509                 } else
14510 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14511                     PoisonPADLIST(dstr);
14512
14513                 CvOUTSIDE(dstr) =
14514                     CvWEAKOUTSIDE(sstr)
14515                     ? cv_dup(    CvOUTSIDE(dstr), param)
14516                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14517                 break;
14518             }
14519         }
14520     }
14521
14522     return dstr;
14523  }
14524
14525 SV *
14526 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14527 {
14528     PERL_ARGS_ASSERT_SV_DUP_INC;
14529     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14530 }
14531
14532 SV *
14533 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14534 {
14535     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14536     PERL_ARGS_ASSERT_SV_DUP;
14537
14538     /* Track every SV that (at least initially) had a reference count of 0.
14539        We need to do this by holding an actual reference to it in this array.
14540        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14541        (akin to the stashes hash, and the perl stack), we come unstuck if
14542        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14543        thread) is manipulated in a CLONE method, because CLONE runs before the
14544        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14545        (and fix things up by giving each a reference via the temps stack).
14546        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14547        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14548        before the walk of unreferenced happens and a reference to that is SV
14549        added to the temps stack. At which point we have the same SV considered
14550        to be in use, and free to be re-used. Not good.
14551     */
14552     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14553         assert(param->unreferenced);
14554         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14555     }
14556
14557     return dstr;
14558 }
14559
14560 /* duplicate a context */
14561
14562 PERL_CONTEXT *
14563 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14564 {
14565     PERL_CONTEXT *ncxs;
14566
14567     PERL_ARGS_ASSERT_CX_DUP;
14568
14569     if (!cxs)
14570         return (PERL_CONTEXT*)NULL;
14571
14572     /* look for it in the table first */
14573     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14574     if (ncxs)
14575         return ncxs;
14576
14577     /* create anew and remember what it is */
14578     Newx(ncxs, max + 1, PERL_CONTEXT);
14579     ptr_table_store(PL_ptr_table, cxs, ncxs);
14580     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14581
14582     while (ix >= 0) {
14583         PERL_CONTEXT * const ncx = &ncxs[ix];
14584         if (CxTYPE(ncx) == CXt_SUBST) {
14585             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14586         }
14587         else {
14588             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14589             switch (CxTYPE(ncx)) {
14590             case CXt_SUB:
14591                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14592                 if(CxHASARGS(ncx)){
14593                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14594                 } else {
14595                     ncx->blk_sub.savearray = NULL;
14596                 }
14597                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14598                                            ncx->blk_sub.prevcomppad);
14599                 break;
14600             case CXt_EVAL:
14601                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14602                                                       param);
14603                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14604                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14605                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14606                 /* XXX what do do with cur_top_env ???? */
14607                 break;
14608             case CXt_LOOP_LAZYSV:
14609                 ncx->blk_loop.state_u.lazysv.end
14610                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14611                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14612                    duplication code instead.
14613                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14614                    actually being the same function, and (2) order
14615                    equivalence of the two unions.
14616                    We can assert the later [but only at run time :-(]  */
14617                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14618                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14619                 /* FALLTHROUGH */
14620             case CXt_LOOP_ARY:
14621                 ncx->blk_loop.state_u.ary.ary
14622                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14623                 /* FALLTHROUGH */
14624             case CXt_LOOP_LIST:
14625             case CXt_LOOP_LAZYIV:
14626                 /* code common to all 'for' CXt_LOOP_* types */
14627                 ncx->blk_loop.itersave =
14628                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14629                 if (CxPADLOOP(ncx)) {
14630                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14631                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14632                     ncx->blk_loop.oldcomppad =
14633                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14634                                                 ncx->blk_loop.oldcomppad);
14635                     ncx->blk_loop.itervar_u.svp =
14636                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14637                 }
14638                 else {
14639                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14640                      * alias (for \$x (...)) - relies on gv_dup being the
14641                      * same as sv_dup */
14642                     ncx->blk_loop.itervar_u.gv
14643                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14644                                     param);
14645                 }
14646                 break;
14647             case CXt_LOOP_PLAIN:
14648                 break;
14649             case CXt_FORMAT:
14650                 ncx->blk_format.prevcomppad =
14651                         (PAD*)ptr_table_fetch(PL_ptr_table,
14652                                            ncx->blk_format.prevcomppad);
14653                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14654                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14655                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14656                                                      param);
14657                 break;
14658             case CXt_GIVEN:
14659                 ncx->blk_givwhen.defsv_save =
14660                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14661                 break;
14662             case CXt_BLOCK:
14663             case CXt_NULL:
14664             case CXt_WHEN:
14665                 break;
14666             }
14667         }
14668         --ix;
14669     }
14670     return ncxs;
14671 }
14672
14673 /* duplicate a stack info structure */
14674
14675 PERL_SI *
14676 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14677 {
14678     PERL_SI *nsi;
14679
14680     PERL_ARGS_ASSERT_SI_DUP;
14681
14682     if (!si)
14683         return (PERL_SI*)NULL;
14684
14685     /* look for it in the table first */
14686     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14687     if (nsi)
14688         return nsi;
14689
14690     /* create anew and remember what it is */
14691     Newx(nsi, 1, PERL_SI);
14692     ptr_table_store(PL_ptr_table, si, nsi);
14693
14694     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14695     nsi->si_cxix        = si->si_cxix;
14696     nsi->si_cxsubix     = si->si_cxsubix;
14697     nsi->si_cxmax       = si->si_cxmax;
14698     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14699     nsi->si_type        = si->si_type;
14700     nsi->si_prev        = si_dup(si->si_prev, param);
14701     nsi->si_next        = si_dup(si->si_next, param);
14702     nsi->si_markoff     = si->si_markoff;
14703 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14704     nsi->si_stack_hwm   = 0;
14705 #endif
14706
14707     return nsi;
14708 }
14709
14710 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14711 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14712 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14713 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14714 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14715 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14716 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14717 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14718 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14719 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14720 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14721 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14722 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14723 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14724 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14725 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14726
14727 /* XXXXX todo */
14728 #define pv_dup_inc(p)   SAVEPV(p)
14729 #define pv_dup(p)       SAVEPV(p)
14730 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14731
14732 /* map any object to the new equivent - either something in the
14733  * ptr table, or something in the interpreter structure
14734  */
14735
14736 void *
14737 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14738 {
14739     void *ret;
14740
14741     PERL_ARGS_ASSERT_ANY_DUP;
14742
14743     if (!v)
14744         return (void*)NULL;
14745
14746     /* look for it in the table first */
14747     ret = ptr_table_fetch(PL_ptr_table, v);
14748     if (ret)
14749         return ret;
14750
14751     /* see if it is part of the interpreter structure */
14752     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14753         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14754     else {
14755         ret = v;
14756     }
14757
14758     return ret;
14759 }
14760
14761 /* duplicate the save stack */
14762
14763 ANY *
14764 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14765 {
14766     dVAR;
14767     ANY * const ss      = proto_perl->Isavestack;
14768     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14769     I32 ix              = proto_perl->Isavestack_ix;
14770     ANY *nss;
14771     const SV *sv;
14772     const GV *gv;
14773     const AV *av;
14774     const HV *hv;
14775     void* ptr;
14776     int intval;
14777     long longval;
14778     GP *gp;
14779     IV iv;
14780     I32 i;
14781     char *c = NULL;
14782     void (*dptr) (void*);
14783     void (*dxptr) (pTHX_ void*);
14784
14785     PERL_ARGS_ASSERT_SS_DUP;
14786
14787     Newx(nss, max, ANY);
14788
14789     while (ix > 0) {
14790         const UV uv = POPUV(ss,ix);
14791         const U8 type = (U8)uv & SAVE_MASK;
14792
14793         TOPUV(nss,ix) = uv;
14794         switch (type) {
14795         case SAVEt_CLEARSV:
14796         case SAVEt_CLEARPADRANGE:
14797             break;
14798         case SAVEt_HELEM:               /* hash element */
14799         case SAVEt_SV:                  /* scalar reference */
14800             sv = (const SV *)POPPTR(ss,ix);
14801             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14802             /* FALLTHROUGH */
14803         case SAVEt_ITEM:                        /* normal string */
14804         case SAVEt_GVSV:                        /* scalar slot in GV */
14805             sv = (const SV *)POPPTR(ss,ix);
14806             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14807             if (type == SAVEt_SV)
14808                 break;
14809             /* FALLTHROUGH */
14810         case SAVEt_FREESV:
14811         case SAVEt_MORTALIZESV:
14812         case SAVEt_READONLY_OFF:
14813             sv = (const SV *)POPPTR(ss,ix);
14814             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14815             break;
14816         case SAVEt_FREEPADNAME:
14817             ptr = POPPTR(ss,ix);
14818             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14819             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14820             break;
14821         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14822             c = (char*)POPPTR(ss,ix);
14823             TOPPTR(nss,ix) = savesharedpv(c);
14824             ptr = POPPTR(ss,ix);
14825             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14826             break;
14827         case SAVEt_GENERIC_SVREF:               /* generic sv */
14828         case SAVEt_SVREF:                       /* scalar reference */
14829             sv = (const SV *)POPPTR(ss,ix);
14830             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14831             if (type == SAVEt_SVREF)
14832                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14833             ptr = POPPTR(ss,ix);
14834             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14835             break;
14836         case SAVEt_GVSLOT:              /* any slot in GV */
14837             sv = (const SV *)POPPTR(ss,ix);
14838             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14839             ptr = POPPTR(ss,ix);
14840             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14841             sv = (const SV *)POPPTR(ss,ix);
14842             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14843             break;
14844         case SAVEt_HV:                          /* hash reference */
14845         case SAVEt_AV:                          /* array reference */
14846             sv = (const SV *) POPPTR(ss,ix);
14847             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14848             /* FALLTHROUGH */
14849         case SAVEt_COMPPAD:
14850         case SAVEt_NSTAB:
14851             sv = (const SV *) POPPTR(ss,ix);
14852             TOPPTR(nss,ix) = sv_dup(sv, param);
14853             break;
14854         case SAVEt_INT:                         /* int reference */
14855             ptr = POPPTR(ss,ix);
14856             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14857             intval = (int)POPINT(ss,ix);
14858             TOPINT(nss,ix) = intval;
14859             break;
14860         case SAVEt_LONG:                        /* long reference */
14861             ptr = POPPTR(ss,ix);
14862             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14863             longval = (long)POPLONG(ss,ix);
14864             TOPLONG(nss,ix) = longval;
14865             break;
14866         case SAVEt_I32:                         /* I32 reference */
14867             ptr = POPPTR(ss,ix);
14868             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14869             i = POPINT(ss,ix);
14870             TOPINT(nss,ix) = i;
14871             break;
14872         case SAVEt_IV:                          /* IV reference */
14873         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14874             ptr = POPPTR(ss,ix);
14875             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14876             iv = POPIV(ss,ix);
14877             TOPIV(nss,ix) = iv;
14878             break;
14879         case SAVEt_TMPSFLOOR:
14880             iv = POPIV(ss,ix);
14881             TOPIV(nss,ix) = iv;
14882             break;
14883         case SAVEt_HPTR:                        /* HV* reference */
14884         case SAVEt_APTR:                        /* AV* reference */
14885         case SAVEt_SPTR:                        /* SV* reference */
14886             ptr = POPPTR(ss,ix);
14887             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14888             sv = (const SV *)POPPTR(ss,ix);
14889             TOPPTR(nss,ix) = sv_dup(sv, param);
14890             break;
14891         case SAVEt_VPTR:                        /* random* reference */
14892             ptr = POPPTR(ss,ix);
14893             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14894             /* FALLTHROUGH */
14895         case SAVEt_INT_SMALL:
14896         case SAVEt_I32_SMALL:
14897         case SAVEt_I16:                         /* I16 reference */
14898         case SAVEt_I8:                          /* I8 reference */
14899         case SAVEt_BOOL:
14900             ptr = POPPTR(ss,ix);
14901             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14902             break;
14903         case SAVEt_GENERIC_PVREF:               /* generic char* */
14904         case SAVEt_PPTR:                        /* char* reference */
14905             ptr = POPPTR(ss,ix);
14906             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14907             c = (char*)POPPTR(ss,ix);
14908             TOPPTR(nss,ix) = pv_dup(c);
14909             break;
14910         case SAVEt_GP:                          /* scalar reference */
14911             gp = (GP*)POPPTR(ss,ix);
14912             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14913             (void)GpREFCNT_inc(gp);
14914             gv = (const GV *)POPPTR(ss,ix);
14915             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14916             break;
14917         case SAVEt_FREEOP:
14918             ptr = POPPTR(ss,ix);
14919             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14920                 /* these are assumed to be refcounted properly */
14921                 OP *o;
14922                 switch (((OP*)ptr)->op_type) {
14923                 case OP_LEAVESUB:
14924                 case OP_LEAVESUBLV:
14925                 case OP_LEAVEEVAL:
14926                 case OP_LEAVE:
14927                 case OP_SCOPE:
14928                 case OP_LEAVEWRITE:
14929                     TOPPTR(nss,ix) = ptr;
14930                     o = (OP*)ptr;
14931                     OP_REFCNT_LOCK;
14932                     (void) OpREFCNT_inc(o);
14933                     OP_REFCNT_UNLOCK;
14934                     break;
14935                 default:
14936                     TOPPTR(nss,ix) = NULL;
14937                     break;
14938                 }
14939             }
14940             else
14941                 TOPPTR(nss,ix) = NULL;
14942             break;
14943         case SAVEt_FREECOPHH:
14944             ptr = POPPTR(ss,ix);
14945             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14946             break;
14947         case SAVEt_ADELETE:
14948             av = (const AV *)POPPTR(ss,ix);
14949             TOPPTR(nss,ix) = av_dup_inc(av, param);
14950             i = POPINT(ss,ix);
14951             TOPINT(nss,ix) = i;
14952             break;
14953         case SAVEt_DELETE:
14954             hv = (const HV *)POPPTR(ss,ix);
14955             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14956             i = POPINT(ss,ix);
14957             TOPINT(nss,ix) = i;
14958             /* FALLTHROUGH */
14959         case SAVEt_FREEPV:
14960             c = (char*)POPPTR(ss,ix);
14961             TOPPTR(nss,ix) = pv_dup_inc(c);
14962             break;
14963         case SAVEt_STACK_POS:           /* Position on Perl stack */
14964             i = POPINT(ss,ix);
14965             TOPINT(nss,ix) = i;
14966             break;
14967         case SAVEt_DESTRUCTOR:
14968             ptr = POPPTR(ss,ix);
14969             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14970             dptr = POPDPTR(ss,ix);
14971             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14972                                         any_dup(FPTR2DPTR(void *, dptr),
14973                                                 proto_perl));
14974             break;
14975         case SAVEt_DESTRUCTOR_X:
14976             ptr = POPPTR(ss,ix);
14977             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14978             dxptr = POPDXPTR(ss,ix);
14979             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14980                                          any_dup(FPTR2DPTR(void *, dxptr),
14981                                                  proto_perl));
14982             break;
14983         case SAVEt_REGCONTEXT:
14984         case SAVEt_ALLOC:
14985             ix -= uv >> SAVE_TIGHT_SHIFT;
14986             break;
14987         case SAVEt_AELEM:               /* array element */
14988             sv = (const SV *)POPPTR(ss,ix);
14989             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14990             iv = POPIV(ss,ix);
14991             TOPIV(nss,ix) = iv;
14992             av = (const AV *)POPPTR(ss,ix);
14993             TOPPTR(nss,ix) = av_dup_inc(av, param);
14994             break;
14995         case SAVEt_OP:
14996             ptr = POPPTR(ss,ix);
14997             TOPPTR(nss,ix) = ptr;
14998             break;
14999         case SAVEt_HINTS:
15000             ptr = POPPTR(ss,ix);
15001             ptr = cophh_copy((COPHH*)ptr);
15002             TOPPTR(nss,ix) = ptr;
15003             i = POPINT(ss,ix);
15004             TOPINT(nss,ix) = i;
15005             if (i & HINT_LOCALIZE_HH) {
15006                 hv = (const HV *)POPPTR(ss,ix);
15007                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
15008             }
15009             break;
15010         case SAVEt_PADSV_AND_MORTALIZE:
15011             longval = (long)POPLONG(ss,ix);
15012             TOPLONG(nss,ix) = longval;
15013             ptr = POPPTR(ss,ix);
15014             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15015             sv = (const SV *)POPPTR(ss,ix);
15016             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15017             break;
15018         case SAVEt_SET_SVFLAGS:
15019             i = POPINT(ss,ix);
15020             TOPINT(nss,ix) = i;
15021             i = POPINT(ss,ix);
15022             TOPINT(nss,ix) = i;
15023             sv = (const SV *)POPPTR(ss,ix);
15024             TOPPTR(nss,ix) = sv_dup(sv, param);
15025             break;
15026         case SAVEt_COMPILE_WARNINGS:
15027             ptr = POPPTR(ss,ix);
15028             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
15029             break;
15030         case SAVEt_PARSER:
15031             ptr = POPPTR(ss,ix);
15032             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
15033             break;
15034         default:
15035             Perl_croak(aTHX_
15036                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
15037         }
15038     }
15039
15040     return nss;
15041 }
15042
15043
15044 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
15045  * flag to the result. This is done for each stash before cloning starts,
15046  * so we know which stashes want their objects cloned */
15047
15048 static void
15049 do_mark_cloneable_stash(pTHX_ SV *const sv)
15050 {
15051     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
15052     if (hvname) {
15053         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
15054         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
15055         if (cloner && GvCV(cloner)) {
15056             dSP;
15057             UV status;
15058
15059             ENTER;
15060             SAVETMPS;
15061             PUSHMARK(SP);
15062             mXPUSHs(newSVhek(hvname));
15063             PUTBACK;
15064             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15065             SPAGAIN;
15066             status = POPu;
15067             PUTBACK;
15068             FREETMPS;
15069             LEAVE;
15070             if (status)
15071                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15072         }
15073     }
15074 }
15075
15076
15077
15078 /*
15079 =for apidoc perl_clone
15080
15081 Create and return a new interpreter by cloning the current one.
15082
15083 C<perl_clone> takes these flags as parameters:
15084
15085 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15086 without it we only clone the data and zero the stacks,
15087 with it we copy the stacks and the new perl interpreter is
15088 ready to run at the exact same point as the previous one.
15089 The pseudo-fork code uses C<COPY_STACKS> while the
15090 threads->create doesn't.
15091
15092 C<CLONEf_KEEP_PTR_TABLE> -
15093 C<perl_clone> keeps a ptr_table with the pointer of the old
15094 variable as a key and the new variable as a value,
15095 this allows it to check if something has been cloned and not
15096 clone it again, but rather just use the value and increase the
15097 refcount.
15098 If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
15099 using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
15100 A reason to keep it around is if you want to dup some of your own
15101 variables which are outside the graph that perl scans.
15102
15103 C<CLONEf_CLONE_HOST> -
15104 This is a win32 thing, it is ignored on unix, it tells perl's
15105 win32host code (which is c++) to clone itself, this is needed on
15106 win32 if you want to run two threads at the same time,
15107 if you just want to do some stuff in a separate perl interpreter
15108 and then throw it away and return to the original one,
15109 you don't need to do anything.
15110
15111 =cut
15112 */
15113
15114 /* XXX the above needs expanding by someone who actually understands it ! */
15115 EXTERN_C PerlInterpreter *
15116 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15117
15118 PerlInterpreter *
15119 perl_clone(PerlInterpreter *proto_perl, UV flags)
15120 {
15121    dVAR;
15122 #ifdef PERL_IMPLICIT_SYS
15123
15124     PERL_ARGS_ASSERT_PERL_CLONE;
15125
15126    /* perlhost.h so we need to call into it
15127    to clone the host, CPerlHost should have a c interface, sky */
15128
15129 #ifndef __amigaos4__
15130    if (flags & CLONEf_CLONE_HOST) {
15131        return perl_clone_host(proto_perl,flags);
15132    }
15133 #endif
15134    return perl_clone_using(proto_perl, flags,
15135                             proto_perl->IMem,
15136                             proto_perl->IMemShared,
15137                             proto_perl->IMemParse,
15138                             proto_perl->IEnv,
15139                             proto_perl->IStdIO,
15140                             proto_perl->ILIO,
15141                             proto_perl->IDir,
15142                             proto_perl->ISock,
15143                             proto_perl->IProc);
15144 }
15145
15146 PerlInterpreter *
15147 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15148                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15149                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15150                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15151                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15152                  struct IPerlProc* ipP)
15153 {
15154     /* XXX many of the string copies here can be optimized if they're
15155      * constants; they need to be allocated as common memory and just
15156      * their pointers copied. */
15157
15158     IV i;
15159     CLONE_PARAMS clone_params;
15160     CLONE_PARAMS* const param = &clone_params;
15161
15162     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15163
15164     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15165 #else           /* !PERL_IMPLICIT_SYS */
15166     IV i;
15167     CLONE_PARAMS clone_params;
15168     CLONE_PARAMS* param = &clone_params;
15169     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15170
15171     PERL_ARGS_ASSERT_PERL_CLONE;
15172 #endif          /* PERL_IMPLICIT_SYS */
15173
15174     /* for each stash, determine whether its objects should be cloned */
15175     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15176     PERL_SET_THX(my_perl);
15177
15178 #ifdef DEBUGGING
15179     PoisonNew(my_perl, 1, PerlInterpreter);
15180     PL_op = NULL;
15181     PL_curcop = NULL;
15182     PL_defstash = NULL; /* may be used by perl malloc() */
15183     PL_markstack = 0;
15184     PL_scopestack = 0;
15185     PL_scopestack_name = 0;
15186     PL_savestack = 0;
15187     PL_savestack_ix = 0;
15188     PL_savestack_max = -1;
15189     PL_sig_pending = 0;
15190     PL_parser = NULL;
15191     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15192     Zero(&PL_padname_undef, 1, PADNAME);
15193     Zero(&PL_padname_const, 1, PADNAME);
15194 #  ifdef DEBUG_LEAKING_SCALARS
15195     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15196 #  endif
15197 #  ifdef PERL_TRACE_OPS
15198     Zero(PL_op_exec_cnt, OP_max+2, UV);
15199 #  endif
15200 #else   /* !DEBUGGING */
15201     Zero(my_perl, 1, PerlInterpreter);
15202 #endif  /* DEBUGGING */
15203
15204 #ifdef PERL_IMPLICIT_SYS
15205     /* host pointers */
15206     PL_Mem              = ipM;
15207     PL_MemShared        = ipMS;
15208     PL_MemParse         = ipMP;
15209     PL_Env              = ipE;
15210     PL_StdIO            = ipStd;
15211     PL_LIO              = ipLIO;
15212     PL_Dir              = ipD;
15213     PL_Sock             = ipS;
15214     PL_Proc             = ipP;
15215 #endif          /* PERL_IMPLICIT_SYS */
15216
15217
15218     param->flags = flags;
15219     /* Nothing in the core code uses this, but we make it available to
15220        extensions (using mg_dup).  */
15221     param->proto_perl = proto_perl;
15222     /* Likely nothing will use this, but it is initialised to be consistent
15223        with Perl_clone_params_new().  */
15224     param->new_perl = my_perl;
15225     param->unreferenced = NULL;
15226
15227
15228     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15229
15230     PL_body_arenas = NULL;
15231     Zero(&PL_body_roots, 1, PL_body_roots);
15232     
15233     PL_sv_count         = 0;
15234     PL_sv_root          = NULL;
15235     PL_sv_arenaroot     = NULL;
15236
15237     PL_debug            = proto_perl->Idebug;
15238
15239     /* dbargs array probably holds garbage */
15240     PL_dbargs           = NULL;
15241
15242     PL_compiling = proto_perl->Icompiling;
15243
15244     /* pseudo environmental stuff */
15245     PL_origargc         = proto_perl->Iorigargc;
15246     PL_origargv         = proto_perl->Iorigargv;
15247
15248 #ifndef NO_TAINT_SUPPORT
15249     /* Set tainting stuff before PerlIO_debug can possibly get called */
15250     PL_tainting         = proto_perl->Itainting;
15251     PL_taint_warn       = proto_perl->Itaint_warn;
15252 #else
15253     PL_tainting         = FALSE;
15254     PL_taint_warn       = FALSE;
15255 #endif
15256
15257     PL_minus_c          = proto_perl->Iminus_c;
15258
15259     PL_localpatches     = proto_perl->Ilocalpatches;
15260     PL_splitstr         = proto_perl->Isplitstr;
15261     PL_minus_n          = proto_perl->Iminus_n;
15262     PL_minus_p          = proto_perl->Iminus_p;
15263     PL_minus_l          = proto_perl->Iminus_l;
15264     PL_minus_a          = proto_perl->Iminus_a;
15265     PL_minus_E          = proto_perl->Iminus_E;
15266     PL_minus_F          = proto_perl->Iminus_F;
15267     PL_doswitches       = proto_perl->Idoswitches;
15268     PL_dowarn           = proto_perl->Idowarn;
15269 #ifdef PERL_SAWAMPERSAND
15270     PL_sawampersand     = proto_perl->Isawampersand;
15271 #endif
15272     PL_unsafe           = proto_perl->Iunsafe;
15273     PL_perldb           = proto_perl->Iperldb;
15274     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15275     PL_exit_flags       = proto_perl->Iexit_flags;
15276
15277     /* XXX time(&PL_basetime) when asked for? */
15278     PL_basetime         = proto_perl->Ibasetime;
15279
15280     PL_maxsysfd         = proto_perl->Imaxsysfd;
15281     PL_statusvalue      = proto_perl->Istatusvalue;
15282 #ifdef __VMS
15283     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15284 #else
15285     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15286 #endif
15287
15288     /* RE engine related */
15289     PL_regmatch_slab    = NULL;
15290     PL_reg_curpm        = NULL;
15291
15292     PL_sub_generation   = proto_perl->Isub_generation;
15293
15294     /* funky return mechanisms */
15295     PL_forkprocess      = proto_perl->Iforkprocess;
15296
15297     /* internal state */
15298     PL_main_start       = proto_perl->Imain_start;
15299     PL_eval_root        = proto_perl->Ieval_root;
15300     PL_eval_start       = proto_perl->Ieval_start;
15301
15302     PL_filemode         = proto_perl->Ifilemode;
15303     PL_lastfd           = proto_perl->Ilastfd;
15304     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15305     PL_gensym           = proto_perl->Igensym;
15306
15307     PL_laststatval      = proto_perl->Ilaststatval;
15308     PL_laststype        = proto_perl->Ilaststype;
15309     PL_mess_sv          = NULL;
15310
15311     PL_profiledata      = NULL;
15312
15313     PL_generation       = proto_perl->Igeneration;
15314
15315     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15316     PL_in_clean_all     = proto_perl->Iin_clean_all;
15317
15318     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15319     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15320     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15321     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15322     PL_nomemok          = proto_perl->Inomemok;
15323     PL_an               = proto_perl->Ian;
15324     PL_evalseq          = proto_perl->Ievalseq;
15325     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15326     PL_origalen         = proto_perl->Iorigalen;
15327
15328     PL_sighandlerp      = proto_perl->Isighandlerp;
15329     PL_sighandler1p     = proto_perl->Isighandler1p;
15330     PL_sighandler3p     = proto_perl->Isighandler3p;
15331
15332     PL_runops           = proto_perl->Irunops;
15333
15334     PL_subline          = proto_perl->Isubline;
15335
15336     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15337
15338 #ifdef FCRYPT
15339     PL_cryptseen        = proto_perl->Icryptseen;
15340 #endif
15341
15342 #ifdef USE_LOCALE_COLLATE
15343     PL_collation_ix     = proto_perl->Icollation_ix;
15344     PL_collation_standard       = proto_perl->Icollation_standard;
15345     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15346     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15347     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15348 #endif /* USE_LOCALE_COLLATE */
15349
15350 #ifdef USE_LOCALE_NUMERIC
15351     PL_numeric_standard = proto_perl->Inumeric_standard;
15352     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15353     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15354 #endif /* !USE_LOCALE_NUMERIC */
15355
15356     /* Did the locale setup indicate UTF-8? */
15357     PL_utf8locale       = proto_perl->Iutf8locale;
15358     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15359     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15360     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15361 #if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
15362     PL_lc_numeric_mutex_depth = 0;
15363 #endif
15364     /* Unicode features (see perlrun/-C) */
15365     PL_unicode          = proto_perl->Iunicode;
15366
15367     /* Pre-5.8 signals control */
15368     PL_signals          = proto_perl->Isignals;
15369
15370     /* times() ticks per second */
15371     PL_clocktick        = proto_perl->Iclocktick;
15372
15373     /* Recursion stopper for PerlIO_find_layer */
15374     PL_in_load_module   = proto_perl->Iin_load_module;
15375
15376     /* sort() routine */
15377     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15378
15379     /* Not really needed/useful since the reenrant_retint is "volatile",
15380      * but do it for consistency's sake. */
15381     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15382
15383     /* Hooks to shared SVs and locks. */
15384     PL_sharehook        = proto_perl->Isharehook;
15385     PL_lockhook         = proto_perl->Ilockhook;
15386     PL_unlockhook       = proto_perl->Iunlockhook;
15387     PL_threadhook       = proto_perl->Ithreadhook;
15388     PL_destroyhook      = proto_perl->Idestroyhook;
15389     PL_signalhook       = proto_perl->Isignalhook;
15390
15391     PL_globhook         = proto_perl->Iglobhook;
15392
15393     PL_srand_called     = proto_perl->Isrand_called;
15394     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15395
15396     if (flags & CLONEf_COPY_STACKS) {
15397         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15398         PL_tmps_ix              = proto_perl->Itmps_ix;
15399         PL_tmps_max             = proto_perl->Itmps_max;
15400         PL_tmps_floor           = proto_perl->Itmps_floor;
15401
15402         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15403          * NOTE: unlike the others! */
15404         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15405         PL_scopestack_max       = proto_perl->Iscopestack_max;
15406
15407         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15408          * NOTE: unlike the others! */
15409         PL_savestack_ix         = proto_perl->Isavestack_ix;
15410         PL_savestack_max        = proto_perl->Isavestack_max;
15411     }
15412
15413     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15414     PL_top_env          = &PL_start_env;
15415
15416     PL_op               = proto_perl->Iop;
15417
15418     PL_Sv               = NULL;
15419     PL_Xpv              = (XPV*)NULL;
15420     my_perl->Ina        = proto_perl->Ina;
15421
15422     PL_statcache        = proto_perl->Istatcache;
15423
15424 #ifndef NO_TAINT_SUPPORT
15425     PL_tainted          = proto_perl->Itainted;
15426 #else
15427     PL_tainted          = FALSE;
15428 #endif
15429     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15430
15431     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15432
15433     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15434     PL_restartop        = proto_perl->Irestartop;
15435     PL_in_eval          = proto_perl->Iin_eval;
15436     PL_delaymagic       = proto_perl->Idelaymagic;
15437     PL_phase            = proto_perl->Iphase;
15438     PL_localizing       = proto_perl->Ilocalizing;
15439
15440     PL_hv_fetch_ent_mh  = NULL;
15441     PL_modcount         = proto_perl->Imodcount;
15442     PL_lastgotoprobe    = NULL;
15443     PL_dumpindent       = proto_perl->Idumpindent;
15444
15445     PL_efloatbuf        = NULL;         /* reinits on demand */
15446     PL_efloatsize       = 0;                    /* reinits on demand */
15447
15448     /* regex stuff */
15449
15450     PL_colorset         = 0;            /* reinits PL_colors[] */
15451     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15452
15453     /* Pluggable optimizer */
15454     PL_peepp            = proto_perl->Ipeepp;
15455     PL_rpeepp           = proto_perl->Irpeepp;
15456     /* op_free() hook */
15457     PL_opfreehook       = proto_perl->Iopfreehook;
15458
15459 #ifdef USE_REENTRANT_API
15460     /* XXX: things like -Dm will segfault here in perlio, but doing
15461      *  PERL_SET_CONTEXT(proto_perl);
15462      * breaks too many other things
15463      */
15464     Perl_reentrant_init(aTHX);
15465 #endif
15466
15467     /* create SV map for pointer relocation */
15468     PL_ptr_table = ptr_table_new();
15469
15470     /* initialize these special pointers as early as possible */
15471     init_constants();
15472     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15473     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15474     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15475     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15476     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15477                     &PL_padname_const);
15478
15479     /* create (a non-shared!) shared string table */
15480     PL_strtab           = newHV();
15481     HvSHAREKEYS_off(PL_strtab);
15482     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15483     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15484
15485     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15486
15487     /* This PV will be free'd special way so must set it same way op.c does */
15488     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15489     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15490
15491     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15492     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15493     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15494     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15495
15496     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15497     /* This makes no difference to the implementation, as it always pushes
15498        and shifts pointers to other SVs without changing their reference
15499        count, with the array becoming empty before it is freed. However, it
15500        makes it conceptually clear what is going on, and will avoid some
15501        work inside av.c, filling slots between AvFILL() and AvMAX() with
15502        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15503     AvREAL_off(param->stashes);
15504
15505     if (!(flags & CLONEf_COPY_STACKS)) {
15506         param->unreferenced = newAV();
15507     }
15508
15509 #ifdef PERLIO_LAYERS
15510     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15511     PerlIO_clone(aTHX_ proto_perl, param);
15512 #endif
15513
15514     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15515     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15516     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15517     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15518     PL_xsubfilename     = proto_perl->Ixsubfilename;
15519     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15520     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15521
15522     /* switches */
15523     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15524     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15525     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15526
15527     /* magical thingies */
15528
15529     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15530     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15531     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15532
15533    
15534     /* Clone the regex array */
15535     /* ORANGE FIXME for plugins, probably in the SV dup code.
15536        newSViv(PTR2IV(CALLREGDUPE(
15537        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15538     */
15539     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15540     PL_regex_pad = AvARRAY(PL_regex_padav);
15541
15542     PL_stashpadmax      = proto_perl->Istashpadmax;
15543     PL_stashpadix       = proto_perl->Istashpadix ;
15544     Newx(PL_stashpad, PL_stashpadmax, HV *);
15545     {
15546         PADOFFSET o = 0;
15547         for (; o < PL_stashpadmax; ++o)
15548             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15549     }
15550
15551     /* shortcuts to various I/O objects */
15552     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15553     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15554     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15555     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15556     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15557     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15558     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15559
15560     /* shortcuts to regexp stuff */
15561     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15562
15563     /* shortcuts to misc objects */
15564     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15565
15566     /* shortcuts to debugging objects */
15567     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15568     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15569     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15570     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15571     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15572     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15573     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15574
15575     /* symbol tables */
15576     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15577     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15578     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15579     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15580     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15581
15582     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15583     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15584     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15585     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15586     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15587     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15588     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15589     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15590     PL_savebegin        = proto_perl->Isavebegin;
15591
15592     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15593
15594     /* subprocess state */
15595     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15596
15597     if (proto_perl->Iop_mask)
15598         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15599     else
15600         PL_op_mask      = NULL;
15601     /* PL_asserting        = proto_perl->Iasserting; */
15602
15603     /* current interpreter roots */
15604     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15605     OP_REFCNT_LOCK;
15606     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15607     OP_REFCNT_UNLOCK;
15608
15609     /* runtime control stuff */
15610     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15611
15612     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15613
15614     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15615
15616     /* interpreter atexit processing */
15617     PL_exitlistlen      = proto_perl->Iexitlistlen;
15618     if (PL_exitlistlen) {
15619         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15620         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15621     }
15622     else
15623         PL_exitlist     = (PerlExitListEntry*)NULL;
15624
15625     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15626     if (PL_my_cxt_size) {
15627         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15628         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15629     }
15630     else {
15631         PL_my_cxt_list  = (void**)NULL;
15632     }
15633     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15634     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15635     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15636     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15637
15638     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15639
15640     PAD_CLONE_VARS(proto_perl, param);
15641
15642 #ifdef HAVE_INTERP_INTERN
15643     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15644 #endif
15645
15646     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15647
15648 #ifdef PERL_USES_PL_PIDSTATUS
15649     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15650 #endif
15651     PL_osname           = SAVEPV(proto_perl->Iosname);
15652     PL_parser           = parser_dup(proto_perl->Iparser, param);
15653
15654     /* XXX this only works if the saved cop has already been cloned */
15655     if (proto_perl->Iparser) {
15656         PL_parser->saved_curcop = (COP*)any_dup(
15657                                     proto_perl->Iparser->saved_curcop,
15658                                     proto_perl);
15659     }
15660
15661     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15662
15663 #if   defined(USE_POSIX_2008_LOCALE)      \
15664  &&   defined(USE_THREAD_SAFE_LOCALE)     \
15665  && ! defined(HAS_QUERYLOCALE)
15666     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
15667         PL_curlocales[i] = savepv("."); /* An illegal value */
15668     }
15669 #endif
15670 #ifdef USE_LOCALE_CTYPE
15671     /* Should we warn if uses locale? */
15672     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15673 #endif
15674
15675 #ifdef USE_LOCALE_COLLATE
15676     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15677 #endif /* USE_LOCALE_COLLATE */
15678
15679 #ifdef USE_LOCALE_NUMERIC
15680     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15681     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15682
15683 #  if defined(HAS_POSIX_2008_LOCALE)
15684     PL_underlying_numeric_obj = NULL;
15685 #  endif
15686 #endif /* !USE_LOCALE_NUMERIC */
15687
15688     PL_langinfo_buf = NULL;
15689     PL_langinfo_bufsize = 0;
15690
15691     PL_setlocale_buf = NULL;
15692     PL_setlocale_bufsize = 0;
15693
15694     /* Unicode inversion lists */
15695
15696     PL_AboveLatin1            = sv_dup_inc(proto_perl->IAboveLatin1, param);
15697     PL_Assigned_invlist       = sv_dup_inc(proto_perl->IAssigned_invlist, param);
15698     PL_GCB_invlist            = sv_dup_inc(proto_perl->IGCB_invlist, param);
15699     PL_HasMultiCharFold       = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15700     PL_InMultiCharFold        = sv_dup_inc(proto_perl->IInMultiCharFold, param);
15701     PL_Latin1                 = sv_dup_inc(proto_perl->ILatin1, param);
15702     PL_LB_invlist             = sv_dup_inc(proto_perl->ILB_invlist, param);
15703     PL_SB_invlist             = sv_dup_inc(proto_perl->ISB_invlist, param);
15704     PL_SCX_invlist            = sv_dup_inc(proto_perl->ISCX_invlist, param);
15705     PL_UpperLatin1            = sv_dup_inc(proto_perl->IUpperLatin1, param);
15706     PL_in_some_fold           = sv_dup_inc(proto_perl->Iin_some_fold, param);
15707     PL_utf8_idcont            = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15708     PL_utf8_idstart           = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15709     PL_utf8_perl_idcont       = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15710     PL_utf8_perl_idstart      = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15711     PL_utf8_xidcont           = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15712     PL_utf8_xidstart          = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15713     PL_WB_invlist             = sv_dup_inc(proto_perl->IWB_invlist, param);
15714     for (i = 0; i < POSIX_CC_COUNT; i++) {
15715         PL_XPosix_ptrs[i]     = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15716         if (i != _CC_CASED && i != _CC_VERTSPACE) {
15717             PL_Posix_ptrs[i]  = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
15718         }
15719     }
15720     PL_Posix_ptrs[_CC_CASED]  = PL_Posix_ptrs[_CC_ALPHA];
15721     PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
15722
15723     PL_utf8_toupper           = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15724     PL_utf8_totitle           = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15725     PL_utf8_tolower           = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15726     PL_utf8_tofold            = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15727     PL_utf8_tosimplefold      = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
15728     PL_utf8_charname_begin    = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15729     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15730     PL_utf8_mark              = sv_dup_inc(proto_perl->Iutf8_mark, param);
15731     PL_InBitmap               = sv_dup_inc(proto_perl->IInBitmap, param);
15732     PL_CCC_non0_non230        = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
15733     PL_Private_Use            = sv_dup_inc(proto_perl->IPrivate_Use, param);
15734
15735 #if 0
15736     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15737 #endif
15738
15739     if (proto_perl->Ipsig_pend) {
15740         Newxz(PL_psig_pend, SIG_SIZE, int);
15741     }
15742     else {
15743         PL_psig_pend    = (int*)NULL;
15744     }
15745
15746     if (proto_perl->Ipsig_name) {
15747         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15748         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15749                             param);
15750         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15751     }
15752     else {
15753         PL_psig_ptr     = (SV**)NULL;
15754         PL_psig_name    = (SV**)NULL;
15755     }
15756
15757     if (flags & CLONEf_COPY_STACKS) {
15758         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15759         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15760                             PL_tmps_ix+1, param);
15761
15762         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15763         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15764         Newx(PL_markstack, i, I32);
15765         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15766                                                   - proto_perl->Imarkstack);
15767         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15768                                                   - proto_perl->Imarkstack);
15769         Copy(proto_perl->Imarkstack, PL_markstack,
15770              PL_markstack_ptr - PL_markstack + 1, I32);
15771
15772         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15773          * NOTE: unlike the others! */
15774         Newx(PL_scopestack, PL_scopestack_max, I32);
15775         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15776
15777 #ifdef DEBUGGING
15778         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15779         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15780 #endif
15781         /* reset stack AV to correct length before its duped via
15782          * PL_curstackinfo */
15783         AvFILLp(proto_perl->Icurstack) =
15784                             proto_perl->Istack_sp - proto_perl->Istack_base;
15785
15786         /* NOTE: si_dup() looks at PL_markstack */
15787         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15788
15789         /* PL_curstack          = PL_curstackinfo->si_stack; */
15790         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15791         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15792
15793         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15794         PL_stack_base           = AvARRAY(PL_curstack);
15795         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15796                                                    - proto_perl->Istack_base);
15797         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15798
15799         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15800         PL_savestack            = ss_dup(proto_perl, param);
15801     }
15802     else {
15803         init_stacks();
15804         ENTER;                  /* perl_destruct() wants to LEAVE; */
15805     }
15806
15807     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15808     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15809
15810     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15811     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15812     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15813     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15814     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15815     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15816
15817     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15818
15819     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15820     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15821     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15822
15823     PL_stashcache       = newHV();
15824
15825     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15826                                             proto_perl->Iwatchaddr);
15827     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15828     if (PL_debug && PL_watchaddr) {
15829         PerlIO_printf(Perl_debug_log,
15830           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15831           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15832           PTR2UV(PL_watchok));
15833     }
15834
15835     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15836     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15837
15838     /* Call the ->CLONE method, if it exists, for each of the stashes
15839        identified by sv_dup() above.
15840     */
15841     while(av_tindex(param->stashes) != -1) {
15842         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15843         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15844         if (cloner && GvCV(cloner)) {
15845             dSP;
15846             ENTER;
15847             SAVETMPS;
15848             PUSHMARK(SP);
15849             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15850             PUTBACK;
15851             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15852             FREETMPS;
15853             LEAVE;
15854         }
15855     }
15856
15857     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15858         ptr_table_free(PL_ptr_table);
15859         PL_ptr_table = NULL;
15860     }
15861
15862     if (!(flags & CLONEf_COPY_STACKS)) {
15863         unreferenced_to_tmp_stack(param->unreferenced);
15864     }
15865
15866     SvREFCNT_dec(param->stashes);
15867
15868     /* orphaned? eg threads->new inside BEGIN or use */
15869     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15870         SvREFCNT_inc_simple_void(PL_compcv);
15871         SAVEFREESV(PL_compcv);
15872     }
15873
15874     return my_perl;
15875 }
15876
15877 static void
15878 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15879 {
15880     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15881     
15882     if (AvFILLp(unreferenced) > -1) {
15883         SV **svp = AvARRAY(unreferenced);
15884         SV **const last = svp + AvFILLp(unreferenced);
15885         SSize_t count = 0;
15886
15887         do {
15888             if (SvREFCNT(*svp) == 1)
15889                 ++count;
15890         } while (++svp <= last);
15891
15892         EXTEND_MORTAL(count);
15893         svp = AvARRAY(unreferenced);
15894
15895         do {
15896             if (SvREFCNT(*svp) == 1) {
15897                 /* Our reference is the only one to this SV. This means that
15898                    in this thread, the scalar effectively has a 0 reference.
15899                    That doesn't work (cleanup never happens), so donate our
15900                    reference to it onto the save stack. */
15901                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15902             } else {
15903                 /* As an optimisation, because we are already walking the
15904                    entire array, instead of above doing either
15905                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15906                    release our reference to the scalar, so that at the end of
15907                    the array owns zero references to the scalars it happens to
15908                    point to. We are effectively converting the array from
15909                    AvREAL() on to AvREAL() off. This saves the av_clear()
15910                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15911                    walking the array a second time.  */
15912                 SvREFCNT_dec(*svp);
15913             }
15914
15915         } while (++svp <= last);
15916         AvREAL_off(unreferenced);
15917     }
15918     SvREFCNT_dec_NN(unreferenced);
15919 }
15920
15921 void
15922 Perl_clone_params_del(CLONE_PARAMS *param)
15923 {
15924     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15925        happy: */
15926     PerlInterpreter *const to = param->new_perl;
15927     dTHXa(to);
15928     PerlInterpreter *const was = PERL_GET_THX;
15929
15930     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15931
15932     if (was != to) {
15933         PERL_SET_THX(to);
15934     }
15935
15936     SvREFCNT_dec(param->stashes);
15937     if (param->unreferenced)
15938         unreferenced_to_tmp_stack(param->unreferenced);
15939
15940     Safefree(param);
15941
15942     if (was != to) {
15943         PERL_SET_THX(was);
15944     }
15945 }
15946
15947 CLONE_PARAMS *
15948 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15949 {
15950     dVAR;
15951     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15952        does a dTHX; to get the context from thread local storage.
15953        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15954        a version that passes in my_perl.  */
15955     PerlInterpreter *const was = PERL_GET_THX;
15956     CLONE_PARAMS *param;
15957
15958     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15959
15960     if (was != to) {
15961         PERL_SET_THX(to);
15962     }
15963
15964     /* Given that we've set the context, we can do this unshared.  */
15965     Newx(param, 1, CLONE_PARAMS);
15966
15967     param->flags = 0;
15968     param->proto_perl = from;
15969     param->new_perl = to;
15970     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15971     AvREAL_off(param->stashes);
15972     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15973
15974     if (was != to) {
15975         PERL_SET_THX(was);
15976     }
15977     return param;
15978 }
15979
15980 #endif /* USE_ITHREADS */
15981
15982 void
15983 Perl_init_constants(pTHX)
15984 {
15985     dVAR;
15986
15987     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15988     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15989     SvANY(&PL_sv_undef)         = NULL;
15990
15991     SvANY(&PL_sv_no)            = new_XPVNV();
15992     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15993     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15994                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15995                                   |SVp_POK|SVf_POK;
15996
15997     SvANY(&PL_sv_yes)           = new_XPVNV();
15998     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15999     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16000                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16001                                   |SVp_POK|SVf_POK;
16002
16003     SvANY(&PL_sv_zero)          = new_XPVNV();
16004     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
16005     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16006                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16007                                   |SVp_POK|SVf_POK
16008                                   |SVs_PADTMP;
16009
16010     SvPV_set(&PL_sv_no, (char*)PL_No);
16011     SvCUR_set(&PL_sv_no, 0);
16012     SvLEN_set(&PL_sv_no, 0);
16013     SvIV_set(&PL_sv_no, 0);
16014     SvNV_set(&PL_sv_no, 0);
16015
16016     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
16017     SvCUR_set(&PL_sv_yes, 1);
16018     SvLEN_set(&PL_sv_yes, 0);
16019     SvIV_set(&PL_sv_yes, 1);
16020     SvNV_set(&PL_sv_yes, 1);
16021
16022     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
16023     SvCUR_set(&PL_sv_zero, 1);
16024     SvLEN_set(&PL_sv_zero, 0);
16025     SvIV_set(&PL_sv_zero, 0);
16026     SvNV_set(&PL_sv_zero, 0);
16027
16028     PadnamePV(&PL_padname_const) = (char *)PL_No;
16029
16030     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
16031     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
16032     assert(SvIMMORTAL_INTERP(&PL_sv_no));
16033     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
16034
16035     assert(SvIMMORTAL(&PL_sv_yes));
16036     assert(SvIMMORTAL(&PL_sv_undef));
16037     assert(SvIMMORTAL(&PL_sv_no));
16038     assert(SvIMMORTAL(&PL_sv_zero));
16039
16040     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
16041     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
16042     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
16043     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
16044
16045     assert( SvTRUE_nomg_NN(&PL_sv_yes));
16046     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
16047     assert(!SvTRUE_nomg_NN(&PL_sv_no));
16048     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
16049 }
16050
16051 /*
16052 =head1 Unicode Support
16053
16054 =for apidoc sv_recode_to_utf8
16055
16056 C<encoding> is assumed to be an C<Encode> object, on entry the PV
16057 of C<sv> is assumed to be octets in that encoding, and C<sv>
16058 will be converted into Unicode (and UTF-8).
16059
16060 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
16061 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
16062 an C<Encode::XS> Encoding object, bad things will happen.
16063 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
16064
16065 The PV of C<sv> is returned.
16066
16067 =cut */
16068
16069 char *
16070 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
16071 {
16072     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
16073
16074     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
16075         SV *uni;
16076         STRLEN len;
16077         const char *s;
16078         dSP;
16079         SV *nsv = sv;
16080         ENTER;
16081         PUSHSTACK;
16082         SAVETMPS;
16083         if (SvPADTMP(nsv)) {
16084             nsv = sv_newmortal();
16085             SvSetSV_nosteal(nsv, sv);
16086         }
16087         save_re_context();
16088         PUSHMARK(sp);
16089         EXTEND(SP, 3);
16090         PUSHs(encoding);
16091         PUSHs(nsv);
16092 /*
16093   NI-S 2002/07/09
16094   Passing sv_yes is wrong - it needs to be or'ed set of constants
16095   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16096   remove converted chars from source.
16097
16098   Both will default the value - let them.
16099
16100         XPUSHs(&PL_sv_yes);
16101 */
16102         PUTBACK;
16103         call_method("decode", G_SCALAR);
16104         SPAGAIN;
16105         uni = POPs;
16106         PUTBACK;
16107         s = SvPV_const(uni, len);
16108         if (s != SvPVX_const(sv)) {
16109             SvGROW(sv, len + 1);
16110             Move(s, SvPVX(sv), len + 1, char);
16111             SvCUR_set(sv, len);
16112         }
16113         FREETMPS;
16114         POPSTACK;
16115         LEAVE;
16116         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16117             /* clear pos and any utf8 cache */
16118             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16119             if (mg)
16120                 mg->mg_len = -1;
16121             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16122                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16123         }
16124         SvUTF8_on(sv);
16125         return SvPVX(sv);
16126     }
16127     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16128 }
16129
16130 /*
16131 =for apidoc sv_cat_decode
16132
16133 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16134 assumed to be octets in that encoding and decoding the input starts
16135 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16136 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16137 when the string C<tstr> appears in decoding output or the input ends on
16138 the PV of C<ssv>.  The value which C<offset> points will be modified
16139 to the last input position on C<ssv>.
16140
16141 Returns TRUE if the terminator was found, else returns FALSE.
16142
16143 =cut */
16144
16145 bool
16146 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16147                    SV *ssv, int *offset, char *tstr, int tlen)
16148 {
16149     bool ret = FALSE;
16150
16151     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16152
16153     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16154         SV *offsv;
16155         dSP;
16156         ENTER;
16157         SAVETMPS;
16158         save_re_context();
16159         PUSHMARK(sp);
16160         EXTEND(SP, 6);
16161         PUSHs(encoding);
16162         PUSHs(dsv);
16163         PUSHs(ssv);
16164         offsv = newSViv(*offset);
16165         mPUSHs(offsv);
16166         mPUSHp(tstr, tlen);
16167         PUTBACK;
16168         call_method("cat_decode", G_SCALAR);
16169         SPAGAIN;
16170         ret = SvTRUE(TOPs);
16171         *offset = SvIV(offsv);
16172         PUTBACK;
16173         FREETMPS;
16174         LEAVE;
16175     }
16176     else
16177         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16178     return ret;
16179
16180 }
16181
16182 /* ---------------------------------------------------------------------
16183  *
16184  * support functions for report_uninit()
16185  */
16186
16187 /* the maxiumum size of array or hash where we will scan looking
16188  * for the undefined element that triggered the warning */
16189
16190 #define FUV_MAX_SEARCH_SIZE 1000
16191
16192 /* Look for an entry in the hash whose value has the same SV as val;
16193  * If so, return a mortal copy of the key. */
16194
16195 STATIC SV*
16196 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16197 {
16198     dVAR;
16199     HE **array;
16200     I32 i;
16201
16202     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16203
16204     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16205                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16206         return NULL;
16207
16208     array = HvARRAY(hv);
16209
16210     for (i=HvMAX(hv); i>=0; i--) {
16211         HE *entry;
16212         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16213             if (HeVAL(entry) != val)
16214                 continue;
16215             if (    HeVAL(entry) == &PL_sv_undef ||
16216                     HeVAL(entry) == &PL_sv_placeholder)
16217                 continue;
16218             if (!HeKEY(entry))
16219                 return NULL;
16220             if (HeKLEN(entry) == HEf_SVKEY)
16221                 return sv_mortalcopy(HeKEY_sv(entry));
16222             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16223         }
16224     }
16225     return NULL;
16226 }
16227
16228 /* Look for an entry in the array whose value has the same SV as val;
16229  * If so, return the index, otherwise return -1. */
16230
16231 STATIC SSize_t
16232 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16233 {
16234     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16235
16236     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16237                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16238         return -1;
16239
16240     if (val != &PL_sv_undef) {
16241         SV ** const svp = AvARRAY(av);
16242         SSize_t i;
16243
16244         for (i=AvFILLp(av); i>=0; i--)
16245             if (svp[i] == val)
16246                 return i;
16247     }
16248     return -1;
16249 }
16250
16251 /* varname(): return the name of a variable, optionally with a subscript.
16252  * If gv is non-zero, use the name of that global, along with gvtype (one
16253  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16254  * targ.  Depending on the value of the subscript_type flag, return:
16255  */
16256
16257 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16258 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16259 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16260 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16261
16262 SV*
16263 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16264         const SV *const keyname, SSize_t aindex, int subscript_type)
16265 {
16266
16267     SV * const name = sv_newmortal();
16268     if (gv && isGV(gv)) {
16269         char buffer[2];
16270         buffer[0] = gvtype;
16271         buffer[1] = 0;
16272
16273         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16274
16275         gv_fullname4(name, gv, buffer, 0);
16276
16277         if ((unsigned int)SvPVX(name)[1] <= 26) {
16278             buffer[0] = '^';
16279             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16280
16281             /* Swap the 1 unprintable control character for the 2 byte pretty
16282                version - ie substr($name, 1, 1) = $buffer; */
16283             sv_insert(name, 1, 1, buffer, 2);
16284         }
16285     }
16286     else {
16287         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16288         PADNAME *sv;
16289
16290         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16291
16292         if (!cv || !CvPADLIST(cv))
16293             return NULL;
16294         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16295         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16296         SvUTF8_on(name);
16297     }
16298
16299     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16300         SV * const sv = newSV(0);
16301         STRLEN len;
16302         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16303
16304         *SvPVX(name) = '$';
16305         Perl_sv_catpvf(aTHX_ name, "{%s}",
16306             pv_pretty(sv, pv, len, 32, NULL, NULL,
16307                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16308         SvREFCNT_dec_NN(sv);
16309     }
16310     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16311         *SvPVX(name) = '$';
16312         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16313     }
16314     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16315         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16316         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16317     }
16318
16319     return name;
16320 }
16321
16322
16323 /*
16324 =for apidoc find_uninit_var
16325
16326 Find the name of the undefined variable (if any) that caused the operator
16327 to issue a "Use of uninitialized value" warning.
16328 If match is true, only return a name if its value matches C<uninit_sv>.
16329 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16330 warning, then following the direct child of the op may yield an
16331 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16332 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16333 the variable name if we get an exact match.
16334 C<desc_p> points to a string pointer holding the description of the op.
16335 This may be updated if needed.
16336
16337 The name is returned as a mortal SV.
16338
16339 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16340 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16341
16342 =cut
16343 */
16344
16345 STATIC SV *
16346 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16347                   bool match, const char **desc_p)
16348 {
16349     dVAR;
16350     SV *sv;
16351     const GV *gv;
16352     const OP *o, *o2, *kid;
16353
16354     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16355
16356     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16357                             uninit_sv == &PL_sv_placeholder)))
16358         return NULL;
16359
16360     switch (obase->op_type) {
16361
16362     case OP_UNDEF:
16363         /* undef should care if its args are undef - any warnings
16364          * will be from tied/magic vars */
16365         break;
16366
16367     case OP_RV2AV:
16368     case OP_RV2HV:
16369     case OP_PADAV:
16370     case OP_PADHV:
16371       {
16372         const bool pad  = (    obase->op_type == OP_PADAV
16373                             || obase->op_type == OP_PADHV
16374                             || obase->op_type == OP_PADRANGE
16375                           );
16376
16377         const bool hash = (    obase->op_type == OP_PADHV
16378                             || obase->op_type == OP_RV2HV
16379                             || (obase->op_type == OP_PADRANGE
16380                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16381                           );
16382         SSize_t index = 0;
16383         SV *keysv = NULL;
16384         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16385
16386         if (pad) { /* @lex, %lex */
16387             sv = PAD_SVl(obase->op_targ);
16388             gv = NULL;
16389         }
16390         else {
16391             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16392             /* @global, %global */
16393                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16394                 if (!gv)
16395                     break;
16396                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16397             }
16398             else if (obase == PL_op) /* @{expr}, %{expr} */
16399                 return find_uninit_var(cUNOPx(obase)->op_first,
16400                                                 uninit_sv, match, desc_p);
16401             else /* @{expr}, %{expr} as a sub-expression */
16402                 return NULL;
16403         }
16404
16405         /* attempt to find a match within the aggregate */
16406         if (hash) {
16407             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16408             if (keysv)
16409                 subscript_type = FUV_SUBSCRIPT_HASH;
16410         }
16411         else {
16412             index = find_array_subscript((const AV *)sv, uninit_sv);
16413             if (index >= 0)
16414                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16415         }
16416
16417         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16418             break;
16419
16420         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16421                                     keysv, index, subscript_type);
16422       }
16423
16424     case OP_RV2SV:
16425         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16426             /* $global */
16427             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16428             if (!gv || !GvSTASH(gv))
16429                 break;
16430             if (match && (GvSV(gv) != uninit_sv))
16431                 break;
16432             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16433         }
16434         /* ${expr} */
16435         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16436
16437     case OP_PADSV:
16438         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16439             break;
16440         return varname(NULL, '$', obase->op_targ,
16441                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16442
16443     case OP_GVSV:
16444         gv = cGVOPx_gv(obase);
16445         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16446             break;
16447         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16448
16449     case OP_AELEMFAST_LEX:
16450         if (match) {
16451             SV **svp;
16452             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16453             if (!av || SvRMAGICAL(av))
16454                 break;
16455             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16456             if (!svp || *svp != uninit_sv)
16457                 break;
16458         }
16459         return varname(NULL, '$', obase->op_targ,
16460                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16461     case OP_AELEMFAST:
16462         {
16463             gv = cGVOPx_gv(obase);
16464             if (!gv)
16465                 break;
16466             if (match) {
16467                 SV **svp;
16468                 AV *const av = GvAV(gv);
16469                 if (!av || SvRMAGICAL(av))
16470                     break;
16471                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16472                 if (!svp || *svp != uninit_sv)
16473                     break;
16474             }
16475             return varname(gv, '$', 0,
16476                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16477         }
16478         NOT_REACHED; /* NOTREACHED */
16479
16480     case OP_EXISTS:
16481         o = cUNOPx(obase)->op_first;
16482         if (!o || o->op_type != OP_NULL ||
16483                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16484             break;
16485         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16486
16487     case OP_AELEM:
16488     case OP_HELEM:
16489     {
16490         bool negate = FALSE;
16491
16492         if (PL_op == obase)
16493             /* $a[uninit_expr] or $h{uninit_expr} */
16494             return find_uninit_var(cBINOPx(obase)->op_last,
16495                                                 uninit_sv, match, desc_p);
16496
16497         gv = NULL;
16498         o = cBINOPx(obase)->op_first;
16499         kid = cBINOPx(obase)->op_last;
16500
16501         /* get the av or hv, and optionally the gv */
16502         sv = NULL;
16503         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16504             sv = PAD_SV(o->op_targ);
16505         }
16506         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16507                 && cUNOPo->op_first->op_type == OP_GV)
16508         {
16509             gv = cGVOPx_gv(cUNOPo->op_first);
16510             if (!gv)
16511                 break;
16512             sv = o->op_type
16513                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16514         }
16515         if (!sv)
16516             break;
16517
16518         if (kid && kid->op_type == OP_NEGATE) {
16519             negate = TRUE;
16520             kid = cUNOPx(kid)->op_first;
16521         }
16522
16523         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16524             /* index is constant */
16525             SV* kidsv;
16526             if (negate) {
16527                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16528                 sv_catsv(kidsv, cSVOPx_sv(kid));
16529             }
16530             else
16531                 kidsv = cSVOPx_sv(kid);
16532             if (match) {
16533                 if (SvMAGICAL(sv))
16534                     break;
16535                 if (obase->op_type == OP_HELEM) {
16536                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16537                     if (!he || HeVAL(he) != uninit_sv)
16538                         break;
16539                 }
16540                 else {
16541                     SV * const  opsv = cSVOPx_sv(kid);
16542                     const IV  opsviv = SvIV(opsv);
16543                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16544                         negate ? - opsviv : opsviv,
16545                         FALSE);
16546                     if (!svp || *svp != uninit_sv)
16547                         break;
16548                 }
16549             }
16550             if (obase->op_type == OP_HELEM)
16551                 return varname(gv, '%', o->op_targ,
16552                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16553             else
16554                 return varname(gv, '@', o->op_targ, NULL,
16555                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16556                     FUV_SUBSCRIPT_ARRAY);
16557         }
16558         else  {
16559             /* index is an expression;
16560              * attempt to find a match within the aggregate */
16561             if (obase->op_type == OP_HELEM) {
16562                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16563                 if (keysv)
16564                     return varname(gv, '%', o->op_targ,
16565                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16566             }
16567             else {
16568                 const SSize_t index
16569                     = find_array_subscript((const AV *)sv, uninit_sv);
16570                 if (index >= 0)
16571                     return varname(gv, '@', o->op_targ,
16572                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16573             }
16574             if (match)
16575                 break;
16576             return varname(gv,
16577                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16578                 ? '@' : '%'),
16579                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16580         }
16581         NOT_REACHED; /* NOTREACHED */
16582     }
16583
16584     case OP_MULTIDEREF: {
16585         /* If we were executing OP_MULTIDEREF when the undef warning
16586          * triggered, then it must be one of the index values within
16587          * that triggered it. If not, then the only possibility is that
16588          * the value retrieved by the last aggregate index might be the
16589          * culprit. For the former, we set PL_multideref_pc each time before
16590          * using an index, so work though the item list until we reach
16591          * that point. For the latter, just work through the entire item
16592          * list; the last aggregate retrieved will be the candidate.
16593          * There is a third rare possibility: something triggered
16594          * magic while fetching an array/hash element. Just display
16595          * nothing in this case.
16596          */
16597
16598         /* the named aggregate, if any */
16599         PADOFFSET agg_targ = 0;
16600         GV       *agg_gv   = NULL;
16601         /* the last-seen index */
16602         UV        index_type;
16603         PADOFFSET index_targ;
16604         GV       *index_gv;
16605         IV        index_const_iv = 0; /* init for spurious compiler warn */
16606         SV       *index_const_sv;
16607         int       depth = 0;  /* how many array/hash lookups we've done */
16608
16609         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16610         UNOP_AUX_item *last = NULL;
16611         UV actions = items->uv;
16612         bool is_hv;
16613
16614         if (PL_op == obase) {
16615             last = PL_multideref_pc;
16616             assert(last >= items && last <= items + items[-1].uv);
16617         }
16618
16619         assert(actions);
16620
16621         while (1) {
16622             is_hv = FALSE;
16623             switch (actions & MDEREF_ACTION_MASK) {
16624
16625             case MDEREF_reload:
16626                 actions = (++items)->uv;
16627                 continue;
16628
16629             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16630                 is_hv = TRUE;
16631                 /* FALLTHROUGH */
16632             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16633                 agg_targ = (++items)->pad_offset;
16634                 agg_gv = NULL;
16635                 break;
16636
16637             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16638                 is_hv = TRUE;
16639                 /* FALLTHROUGH */
16640             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16641                 agg_targ = 0;
16642                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16643                 assert(isGV_with_GP(agg_gv));
16644                 break;
16645
16646             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16647             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16648                 ++items;
16649                 /* FALLTHROUGH */
16650             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16651             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16652                 agg_targ = 0;
16653                 agg_gv   = NULL;
16654                 is_hv    = TRUE;
16655                 break;
16656
16657             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16658             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16659                 ++items;
16660                 /* FALLTHROUGH */
16661             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16662             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16663                 agg_targ = 0;
16664                 agg_gv   = NULL;
16665             } /* switch */
16666
16667             index_targ     = 0;
16668             index_gv       = NULL;
16669             index_const_sv = NULL;
16670
16671             index_type = (actions & MDEREF_INDEX_MASK);
16672             switch (index_type) {
16673             case MDEREF_INDEX_none:
16674                 break;
16675             case MDEREF_INDEX_const:
16676                 if (is_hv)
16677                     index_const_sv = UNOP_AUX_item_sv(++items)
16678                 else
16679                     index_const_iv = (++items)->iv;
16680                 break;
16681             case MDEREF_INDEX_padsv:
16682                 index_targ = (++items)->pad_offset;
16683                 break;
16684             case MDEREF_INDEX_gvsv:
16685                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16686                 assert(isGV_with_GP(index_gv));
16687                 break;
16688             }
16689
16690             if (index_type != MDEREF_INDEX_none)
16691                 depth++;
16692
16693             if (   index_type == MDEREF_INDEX_none
16694                 || (actions & MDEREF_FLAG_last)
16695                 || (last && items >= last)
16696             )
16697                 break;
16698
16699             actions >>= MDEREF_SHIFT;
16700         } /* while */
16701
16702         if (PL_op == obase) {
16703             /* most likely index was undef */
16704
16705             *desc_p = (    (actions & MDEREF_FLAG_last)
16706                         && (obase->op_private
16707                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16708                         ?
16709                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16710                                 ? "exists"
16711                                 : "delete"
16712                         : is_hv ? "hash element" : "array element";
16713             assert(index_type != MDEREF_INDEX_none);
16714             if (index_gv) {
16715                 if (GvSV(index_gv) == uninit_sv)
16716                     return varname(index_gv, '$', 0, NULL, 0,
16717                                                     FUV_SUBSCRIPT_NONE);
16718                 else
16719                     return NULL;
16720             }
16721             if (index_targ) {
16722                 if (PL_curpad[index_targ] == uninit_sv)
16723                     return varname(NULL, '$', index_targ,
16724                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16725                 else
16726                     return NULL;
16727             }
16728             /* If we got to this point it was undef on a const subscript,
16729              * so magic probably involved, e.g. $ISA[0]. Give up. */
16730             return NULL;
16731         }
16732
16733         /* the SV returned by pp_multideref() was undef, if anything was */
16734
16735         if (depth != 1)
16736             break;
16737
16738         if (agg_targ)
16739             sv = PAD_SV(agg_targ);
16740         else if (agg_gv) {
16741             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16742             if (!sv)
16743                 break;
16744             }
16745         else
16746             break;
16747
16748         if (index_type == MDEREF_INDEX_const) {
16749             if (match) {
16750                 if (SvMAGICAL(sv))
16751                     break;
16752                 if (is_hv) {
16753                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16754                     if (!he || HeVAL(he) != uninit_sv)
16755                         break;
16756                 }
16757                 else {
16758                     SV * const * const svp =
16759                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16760                     if (!svp || *svp != uninit_sv)
16761                         break;
16762                 }
16763             }
16764             return is_hv
16765                 ? varname(agg_gv, '%', agg_targ,
16766                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16767                 : varname(agg_gv, '@', agg_targ,
16768                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16769         }
16770         else  {
16771             /* index is an var */
16772             if (is_hv) {
16773                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16774                 if (keysv)
16775                     return varname(agg_gv, '%', agg_targ,
16776                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16777             }
16778             else {
16779                 const SSize_t index
16780                     = find_array_subscript((const AV *)sv, uninit_sv);
16781                 if (index >= 0)
16782                     return varname(agg_gv, '@', agg_targ,
16783                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16784             }
16785             if (match)
16786                 break;
16787             return varname(agg_gv,
16788                 is_hv ? '%' : '@',
16789                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16790         }
16791         NOT_REACHED; /* NOTREACHED */
16792     }
16793
16794     case OP_AASSIGN:
16795         /* only examine RHS */
16796         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16797                                                                 match, desc_p);
16798
16799     case OP_OPEN:
16800         o = cUNOPx(obase)->op_first;
16801         if (   o->op_type == OP_PUSHMARK
16802            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16803         )
16804             o = OpSIBLING(o);
16805
16806         if (!OpHAS_SIBLING(o)) {
16807             /* one-arg version of open is highly magical */
16808
16809             if (o->op_type == OP_GV) { /* open FOO; */
16810                 gv = cGVOPx_gv(o);
16811                 if (match && GvSV(gv) != uninit_sv)
16812                     break;
16813                 return varname(gv, '$', 0,
16814                             NULL, 0, FUV_SUBSCRIPT_NONE);
16815             }
16816             /* other possibilities not handled are:
16817              * open $x; or open my $x;  should return '${*$x}'
16818              * open expr;               should return '$'.expr ideally
16819              */
16820              break;
16821         }
16822         match = 1;
16823         goto do_op;
16824
16825     /* ops where $_ may be an implicit arg */
16826     case OP_TRANS:
16827     case OP_TRANSR:
16828     case OP_SUBST:
16829     case OP_MATCH:
16830         if ( !(obase->op_flags & OPf_STACKED)) {
16831             if (uninit_sv == DEFSV)
16832                 return newSVpvs_flags("$_", SVs_TEMP);
16833             else if (obase->op_targ
16834                   && uninit_sv == PAD_SVl(obase->op_targ))
16835                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16836                                FUV_SUBSCRIPT_NONE);
16837         }
16838         goto do_op;
16839
16840     case OP_PRTF:
16841     case OP_PRINT:
16842     case OP_SAY:
16843         match = 1; /* print etc can return undef on defined args */
16844         /* skip filehandle as it can't produce 'undef' warning  */
16845         o = cUNOPx(obase)->op_first;
16846         if ((obase->op_flags & OPf_STACKED)
16847             &&
16848                (   o->op_type == OP_PUSHMARK
16849                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16850             o = OpSIBLING(OpSIBLING(o));
16851         goto do_op2;
16852
16853
16854     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16855     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16856
16857         /* the following ops are capable of returning PL_sv_undef even for
16858          * defined arg(s) */
16859
16860     case OP_BACKTICK:
16861     case OP_PIPE_OP:
16862     case OP_FILENO:
16863     case OP_BINMODE:
16864     case OP_TIED:
16865     case OP_GETC:
16866     case OP_SYSREAD:
16867     case OP_SEND:
16868     case OP_IOCTL:
16869     case OP_SOCKET:
16870     case OP_SOCKPAIR:
16871     case OP_BIND:
16872     case OP_CONNECT:
16873     case OP_LISTEN:
16874     case OP_ACCEPT:
16875     case OP_SHUTDOWN:
16876     case OP_SSOCKOPT:
16877     case OP_GETPEERNAME:
16878     case OP_FTRREAD:
16879     case OP_FTRWRITE:
16880     case OP_FTREXEC:
16881     case OP_FTROWNED:
16882     case OP_FTEREAD:
16883     case OP_FTEWRITE:
16884     case OP_FTEEXEC:
16885     case OP_FTEOWNED:
16886     case OP_FTIS:
16887     case OP_FTZERO:
16888     case OP_FTSIZE:
16889     case OP_FTFILE:
16890     case OP_FTDIR:
16891     case OP_FTLINK:
16892     case OP_FTPIPE:
16893     case OP_FTSOCK:
16894     case OP_FTBLK:
16895     case OP_FTCHR:
16896     case OP_FTTTY:
16897     case OP_FTSUID:
16898     case OP_FTSGID:
16899     case OP_FTSVTX:
16900     case OP_FTTEXT:
16901     case OP_FTBINARY:
16902     case OP_FTMTIME:
16903     case OP_FTATIME:
16904     case OP_FTCTIME:
16905     case OP_READLINK:
16906     case OP_OPEN_DIR:
16907     case OP_READDIR:
16908     case OP_TELLDIR:
16909     case OP_SEEKDIR:
16910     case OP_REWINDDIR:
16911     case OP_CLOSEDIR:
16912     case OP_GMTIME:
16913     case OP_ALARM:
16914     case OP_SEMGET:
16915     case OP_GETLOGIN:
16916     case OP_SUBSTR:
16917     case OP_AEACH:
16918     case OP_EACH:
16919     case OP_SORT:
16920     case OP_CALLER:
16921     case OP_DOFILE:
16922     case OP_PROTOTYPE:
16923     case OP_NCMP:
16924     case OP_SMARTMATCH:
16925     case OP_UNPACK:
16926     case OP_SYSOPEN:
16927     case OP_SYSSEEK:
16928         match = 1;
16929         goto do_op;
16930
16931     case OP_ENTERSUB:
16932     case OP_GOTO:
16933         /* XXX tmp hack: these two may call an XS sub, and currently
16934           XS subs don't have a SUB entry on the context stack, so CV and
16935           pad determination goes wrong, and BAD things happen. So, just
16936           don't try to determine the value under those circumstances.
16937           Need a better fix at dome point. DAPM 11/2007 */
16938         break;
16939
16940     case OP_FLIP:
16941     case OP_FLOP:
16942     {
16943         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16944         if (gv && GvSV(gv) == uninit_sv)
16945             return newSVpvs_flags("$.", SVs_TEMP);
16946         goto do_op;
16947     }
16948
16949     case OP_POS:
16950         /* def-ness of rval pos() is independent of the def-ness of its arg */
16951         if ( !(obase->op_flags & OPf_MOD))
16952             break;
16953         /* FALLTHROUGH */
16954
16955     case OP_SCHOMP:
16956     case OP_CHOMP:
16957         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16958             return newSVpvs_flags("${$/}", SVs_TEMP);
16959         /* FALLTHROUGH */
16960
16961     default:
16962     do_op:
16963         if (!(obase->op_flags & OPf_KIDS))
16964             break;
16965         o = cUNOPx(obase)->op_first;
16966         
16967     do_op2:
16968         if (!o)
16969             break;
16970
16971         /* This loop checks all the kid ops, skipping any that cannot pos-
16972          * sibly be responsible for the uninitialized value; i.e., defined
16973          * constants and ops that return nothing.  If there is only one op
16974          * left that is not skipped, then we *know* it is responsible for
16975          * the uninitialized value.  If there is more than one op left, we
16976          * have to look for an exact match in the while() loop below.
16977          * Note that we skip padrange, because the individual pad ops that
16978          * it replaced are still in the tree, so we work on them instead.
16979          */
16980         o2 = NULL;
16981         for (kid=o; kid; kid = OpSIBLING(kid)) {
16982             const OPCODE type = kid->op_type;
16983             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16984               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16985               || (type == OP_PUSHMARK)
16986               || (type == OP_PADRANGE)
16987             )
16988             continue;
16989
16990             if (o2) { /* more than one found */
16991                 o2 = NULL;
16992                 break;
16993             }
16994             o2 = kid;
16995         }
16996         if (o2)
16997             return find_uninit_var(o2, uninit_sv, match, desc_p);
16998
16999         /* scan all args */
17000         while (o) {
17001             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
17002             if (sv)
17003                 return sv;
17004             o = OpSIBLING(o);
17005         }
17006         break;
17007     }
17008     return NULL;
17009 }
17010
17011
17012 /*
17013 =for apidoc report_uninit
17014
17015 Print appropriate "Use of uninitialized variable" warning.
17016
17017 =cut
17018 */
17019
17020 void
17021 Perl_report_uninit(pTHX_ const SV *uninit_sv)
17022 {
17023     const char *desc = NULL;
17024     SV* varname = NULL;
17025
17026     if (PL_op) {
17027         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
17028                 ? "join or string"
17029                 : PL_op->op_type == OP_MULTICONCAT
17030                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
17031                 ? "sprintf"
17032                 : OP_DESC(PL_op);
17033         if (uninit_sv && PL_curpad) {
17034             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
17035             if (varname)
17036                 sv_insert(varname, 0, 0, " ", 1);
17037         }
17038     }
17039     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
17040         /* we've reached the end of a sort block or sub,
17041          * and the uninit value is probably what that code returned */
17042         desc = "sort";
17043
17044     /* PL_warn_uninit_sv is constant */
17045     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
17046     if (desc)
17047         /* diag_listed_as: Use of uninitialized value%s */
17048         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
17049                 SVfARG(varname ? varname : &PL_sv_no),
17050                 " in ", desc);
17051     else
17052         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
17053                 "", "", "");
17054     GCC_DIAG_RESTORE_STMT;
17055 }
17056
17057 /*
17058  * ex: set ts=8 sts=4 sw=4 et:
17059  */