This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
test cv_[gs]et_call_checker_flags()
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =head1 Allocation and deallocation of SVs.
134 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135 sv, av, hv...) contains type and reference count information, and for
136 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137 contains fields specific to each type.  Some types store all they need
138 in the head, so don't have a body.
139
140 In all but the most memory-paranoid configurations (ex: PURIFY), heads
141 and bodies are allocated out of arenas, which by default are
142 approximately 4K chunks of memory parcelled up into N heads or bodies.
143 Sv-bodies are allocated by their sv-type, guaranteeing size
144 consistency needed to allocate safely from arrays.
145
146 For SV-heads, the first slot in each arena is reserved, and holds a
147 link to the next arena, some flags, and a note of the number of slots.
148 Snaked through each arena chain is a linked list of free items; when
149 this becomes empty, an extra arena is allocated and divided up into N
150 items which are threaded into the free list.
151
152 SV-bodies are similar, but they use arena-sets by default, which
153 separate the link and info from the arena itself, and reclaim the 1st
154 slot in the arena.  SV-bodies are further described later.
155
156 The following global variables are associated with arenas:
157
158  PL_sv_arenaroot     pointer to list of SV arenas
159  PL_sv_root          pointer to list of free SV structures
160
161  PL_body_arenas      head of linked-list of body arenas
162  PL_body_roots[]     array of pointers to list of free bodies of svtype
163                      arrays are indexed by the svtype needed
164
165 A few special SV heads are not allocated from an arena, but are
166 instead directly created in the interpreter structure, eg PL_sv_undef.
167 The size of arenas can be changed from the default by setting
168 PERL_ARENA_SIZE appropriately at compile time.
169
170 The SV arena serves the secondary purpose of allowing still-live SVs
171 to be located and destroyed during final cleanup.
172
173 At the lowest level, the macros new_SV() and del_SV() grab and free
174 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
175 to return the SV to the free list with error checking.) new_SV() calls
176 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177 SVs in the free list have their SvTYPE field set to all ones.
178
179 At the time of very final cleanup, sv_free_arenas() is called from
180 perl_destruct() to physically free all the arenas allocated since the
181 start of the interpreter.
182
183 The function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live - ie which has an SvTYPE
185 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186 following functions (specified as [function that calls visit()] / [function
187 called by visit() for each SV]):
188
189     sv_report_used() / do_report_used()
190                         dump all remaining SVs (debugging aid)
191
192     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193                       do_clean_named_io_objs(),do_curse()
194                         Attempt to free all objects pointed to by RVs,
195                         try to do the same for all objects indir-
196                         ectly referenced by typeglobs too, and
197                         then do a final sweep, cursing any
198                         objects that remain.  Called once from
199                         perl_destruct(), prior to calling sv_clean_all()
200                         below.
201
202     sv_clean_all() / do_clean_all()
203                         SvREFCNT_dec(sv) each remaining SV, possibly
204                         triggering an sv_free(). It also sets the
205                         SVf_BREAK flag on the SV to indicate that the
206                         refcnt has been artificially lowered, and thus
207                         stopping sv_free() from giving spurious warnings
208                         about SVs which unexpectedly have a refcnt
209                         of zero.  called repeatedly from perl_destruct()
210                         until there are no SVs left.
211
212 =head2 Arena allocator API Summary
213
214 Private API to rest of sv.c
215
216     new_SV(),  del_SV(),
217
218     new_XPVNV(), del_XPVGV(),
219     etc
220
221 Public API:
222
223     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225 =cut
226
227  * ========================================================================= */
228
229 /*
230  * "A time to plant, and a time to uproot what was planted..."
231  */
232
233 #ifdef PERL_MEM_LOG
234 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
235             Perl_mem_log_new_sv(sv, file, line, func)
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
237             Perl_mem_log_del_sv(sv, file, line, func)
238 #else
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
240 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
241 #endif
242
243 #ifdef DEBUG_LEAKING_SCALARS
244 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246     } STMT_END
247 #  define DEBUG_SV_SERIAL(sv)                                               \
248     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
249             PTR2UV(sv), (long)(sv)->sv_debug_serial))
250 #else
251 #  define FREE_SV_DEBUG_FILE(sv)
252 #  define DEBUG_SV_SERIAL(sv)   NOOP
253 #endif
254
255 #ifdef PERL_POISON
256 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
257 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258 /* Whilst I'd love to do this, it seems that things like to check on
259    unreferenced scalars
260 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
261 */
262 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
263                                 PoisonNew(&SvREFCNT(sv), 1, U32)
264 #else
265 #  define SvARENA_CHAIN(sv)     SvANY(sv)
266 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
267 #  define POISON_SV_HEAD(sv)
268 #endif
269
270 /* Mark an SV head as unused, and add to free list.
271  *
272  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273  * its refcount artificially decremented during global destruction, so
274  * there may be dangling pointers to it. The last thing we want in that
275  * case is for it to be reused. */
276
277 #define plant_SV(p) \
278     STMT_START {                                        \
279         const U32 old_flags = SvFLAGS(p);                       \
280         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
281         DEBUG_SV_SERIAL(p);                             \
282         FREE_SV_DEBUG_FILE(p);                          \
283         POISON_SV_HEAD(p);                              \
284         SvFLAGS(p) = SVTYPEMASK;                        \
285         if (!(old_flags & SVf_BREAK)) {         \
286             SvARENA_CHAIN_SET(p, PL_sv_root);   \
287             PL_sv_root = (p);                           \
288         }                                               \
289         --PL_sv_count;                                  \
290     } STMT_END
291
292 #define uproot_SV(p) \
293     STMT_START {                                        \
294         (p) = PL_sv_root;                               \
295         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
296         ++PL_sv_count;                                  \
297     } STMT_END
298
299
300 /* make some more SVs by adding another arena */
301
302 STATIC SV*
303 S_more_sv(pTHX)
304 {
305     SV* sv;
306     char *chunk;                /* must use New here to match call to */
307     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
308     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309     uproot_SV(sv);
310     return sv;
311 }
312
313 /* new_SV(): return a new, empty SV head */
314
315 #ifdef DEBUG_LEAKING_SCALARS
316 /* provide a real function for a debugger to play with */
317 STATIC SV*
318 S_new_SV(pTHX_ const char *file, int line, const char *func)
319 {
320     SV* sv;
321
322     if (PL_sv_root)
323         uproot_SV(sv);
324     else
325         sv = S_more_sv(aTHX);
326     SvANY(sv) = 0;
327     SvREFCNT(sv) = 1;
328     SvFLAGS(sv) = 0;
329     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331                 ? PL_parser->copline
332                 :  PL_curcop
333                     ? CopLINE(PL_curcop)
334                     : 0
335             );
336     sv->sv_debug_inpad = 0;
337     sv->sv_debug_parent = NULL;
338     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340     sv->sv_debug_serial = PL_sv_serial++;
341
342     MEM_LOG_NEW_SV(sv, file, line, func);
343     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
344             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346     return sv;
347 }
348 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350 #else
351 #  define new_SV(p) \
352     STMT_START {                                        \
353         if (PL_sv_root)                                 \
354             uproot_SV(p);                               \
355         else                                            \
356             (p) = S_more_sv(aTHX);                      \
357         SvANY(p) = 0;                                   \
358         SvREFCNT(p) = 1;                                \
359         SvFLAGS(p) = 0;                                 \
360         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
361     } STMT_END
362 #endif
363
364
365 /* del_SV(): return an empty SV head to the free list */
366
367 #ifdef DEBUGGING
368
369 #define del_SV(p) \
370     STMT_START {                                        \
371         if (DEBUG_D_TEST)                               \
372             del_sv(p);                                  \
373         else                                            \
374             plant_SV(p);                                \
375     } STMT_END
376
377 STATIC void
378 S_del_sv(pTHX_ SV *p)
379 {
380     PERL_ARGS_ASSERT_DEL_SV;
381
382     if (DEBUG_D_TEST) {
383         SV* sva;
384         bool ok = 0;
385         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386             const SV * const sv = sva + 1;
387             const SV * const svend = &sva[SvREFCNT(sva)];
388             if (p >= sv && p < svend) {
389                 ok = 1;
390                 break;
391             }
392         }
393         if (!ok) {
394             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395                              "Attempt to free non-arena SV: 0x%" UVxf
396                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397             return;
398         }
399     }
400     plant_SV(p);
401 }
402
403 #else /* ! DEBUGGING */
404
405 #define del_SV(p)   plant_SV(p)
406
407 #endif /* DEBUGGING */
408
409
410 /*
411 =head1 SV Manipulation Functions
412
413 =for apidoc sv_add_arena
414
415 Given a chunk of memory, link it to the head of the list of arenas,
416 and split it into a list of free SVs.
417
418 =cut
419 */
420
421 static void
422 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423 {
424     SV *const sva = MUTABLE_SV(ptr);
425     SV* sv;
426     SV* svend;
427
428     PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430     /* The first SV in an arena isn't an SV. */
431     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
432     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
433     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
434
435     PL_sv_arenaroot = sva;
436     PL_sv_root = sva + 1;
437
438     svend = &sva[SvREFCNT(sva) - 1];
439     sv = sva + 1;
440     while (sv < svend) {
441         SvARENA_CHAIN_SET(sv, (sv + 1));
442 #ifdef DEBUGGING
443         SvREFCNT(sv) = 0;
444 #endif
445         /* Must always set typemask because it's always checked in on cleanup
446            when the arenas are walked looking for objects.  */
447         SvFLAGS(sv) = SVTYPEMASK;
448         sv++;
449     }
450     SvARENA_CHAIN_SET(sv, 0);
451 #ifdef DEBUGGING
452     SvREFCNT(sv) = 0;
453 #endif
454     SvFLAGS(sv) = SVTYPEMASK;
455 }
456
457 /* visit(): call the named function for each non-free SV in the arenas
458  * whose flags field matches the flags/mask args. */
459
460 STATIC I32
461 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462 {
463     SV* sva;
464     I32 visited = 0;
465
466     PERL_ARGS_ASSERT_VISIT;
467
468     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469         const SV * const svend = &sva[SvREFCNT(sva)];
470         SV* sv;
471         for (sv = sva + 1; sv < svend; ++sv) {
472             if (SvTYPE(sv) != (svtype)SVTYPEMASK
473                     && (sv->sv_flags & mask) == flags
474                     && SvREFCNT(sv))
475             {
476                 (*f)(aTHX_ sv);
477                 ++visited;
478             }
479         }
480     }
481     return visited;
482 }
483
484 #ifdef DEBUGGING
485
486 /* called by sv_report_used() for each live SV */
487
488 static void
489 do_report_used(pTHX_ SV *const sv)
490 {
491     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492         PerlIO_printf(Perl_debug_log, "****\n");
493         sv_dump(sv);
494     }
495 }
496 #endif
497
498 /*
499 =for apidoc sv_report_used
500
501 Dump the contents of all SVs not yet freed (debugging aid).
502
503 =cut
504 */
505
506 void
507 Perl_sv_report_used(pTHX)
508 {
509 #ifdef DEBUGGING
510     visit(do_report_used, 0, 0);
511 #else
512     PERL_UNUSED_CONTEXT;
513 #endif
514 }
515
516 /* called by sv_clean_objs() for each live SV */
517
518 static void
519 do_clean_objs(pTHX_ SV *const ref)
520 {
521     assert (SvROK(ref));
522     {
523         SV * const target = SvRV(ref);
524         if (SvOBJECT(target)) {
525             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526             if (SvWEAKREF(ref)) {
527                 sv_del_backref(target, ref);
528                 SvWEAKREF_off(ref);
529                 SvRV_set(ref, NULL);
530             } else {
531                 SvROK_off(ref);
532                 SvRV_set(ref, NULL);
533                 SvREFCNT_dec_NN(target);
534             }
535         }
536     }
537 }
538
539
540 /* clear any slots in a GV which hold objects - except IO;
541  * called by sv_clean_objs() for each live GV */
542
543 static void
544 do_clean_named_objs(pTHX_ SV *const sv)
545 {
546     SV *obj;
547     assert(SvTYPE(sv) == SVt_PVGV);
548     assert(isGV_with_GP(sv));
549     if (!GvGP(sv))
550         return;
551
552     /* freeing GP entries may indirectly free the current GV;
553      * hold onto it while we mess with the GP slots */
554     SvREFCNT_inc(sv);
555
556     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557         DEBUG_D((PerlIO_printf(Perl_debug_log,
558                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559         GvSV(sv) = NULL;
560         SvREFCNT_dec_NN(obj);
561     }
562     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563         DEBUG_D((PerlIO_printf(Perl_debug_log,
564                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565         GvAV(sv) = NULL;
566         SvREFCNT_dec_NN(obj);
567     }
568     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569         DEBUG_D((PerlIO_printf(Perl_debug_log,
570                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571         GvHV(sv) = NULL;
572         SvREFCNT_dec_NN(obj);
573     }
574     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575         DEBUG_D((PerlIO_printf(Perl_debug_log,
576                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577         GvCV_set(sv, NULL);
578         SvREFCNT_dec_NN(obj);
579     }
580     SvREFCNT_dec_NN(sv); /* undo the inc above */
581 }
582
583 /* clear any IO slots in a GV which hold objects (except stderr, defout);
584  * called by sv_clean_objs() for each live GV */
585
586 static void
587 do_clean_named_io_objs(pTHX_ SV *const sv)
588 {
589     SV *obj;
590     assert(SvTYPE(sv) == SVt_PVGV);
591     assert(isGV_with_GP(sv));
592     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593         return;
594
595     SvREFCNT_inc(sv);
596     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597         DEBUG_D((PerlIO_printf(Perl_debug_log,
598                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599         GvIOp(sv) = NULL;
600         SvREFCNT_dec_NN(obj);
601     }
602     SvREFCNT_dec_NN(sv); /* undo the inc above */
603 }
604
605 /* Void wrapper to pass to visit() */
606 static void
607 do_curse(pTHX_ SV * const sv) {
608     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610         return;
611     (void)curse(sv, 0);
612 }
613
614 /*
615 =for apidoc sv_clean_objs
616
617 Attempt to destroy all objects not yet freed.
618
619 =cut
620 */
621
622 void
623 Perl_sv_clean_objs(pTHX)
624 {
625     GV *olddef, *olderr;
626     PL_in_clean_objs = TRUE;
627     visit(do_clean_objs, SVf_ROK, SVf_ROK);
628     /* Some barnacles may yet remain, clinging to typeglobs.
629      * Run the non-IO destructors first: they may want to output
630      * error messages, close files etc */
631     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     /* And if there are some very tenacious barnacles clinging to arrays,
634        closures, or what have you.... */
635     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636     olddef = PL_defoutgv;
637     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638     if (olddef && isGV_with_GP(olddef))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640     olderr = PL_stderrgv;
641     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642     if (olderr && isGV_with_GP(olderr))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644     SvREFCNT_dec(olddef);
645     PL_in_clean_objs = FALSE;
646 }
647
648 /* called by sv_clean_all() for each live SV */
649
650 static void
651 do_clean_all(pTHX_ SV *const sv)
652 {
653     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654         /* don't clean pid table and strtab */
655         return;
656     }
657     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
658     SvFLAGS(sv) |= SVf_BREAK;
659     SvREFCNT_dec_NN(sv);
660 }
661
662 /*
663 =for apidoc sv_clean_all
664
665 Decrement the refcnt of each remaining SV, possibly triggering a
666 cleanup.  This function may have to be called multiple times to free
667 SVs which are in complex self-referential hierarchies.
668
669 =cut
670 */
671
672 I32
673 Perl_sv_clean_all(pTHX)
674 {
675     I32 cleaned;
676     PL_in_clean_all = TRUE;
677     cleaned = visit(do_clean_all, 0,0);
678     return cleaned;
679 }
680
681 /*
682   ARENASETS: a meta-arena implementation which separates arena-info
683   into struct arena_set, which contains an array of struct
684   arena_descs, each holding info for a single arena.  By separating
685   the meta-info from the arena, we recover the 1st slot, formerly
686   borrowed for list management.  The arena_set is about the size of an
687   arena, avoiding the needless malloc overhead of a naive linked-list.
688
689   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690   memory in the last arena-set (1/2 on average).  In trade, we get
691   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692   smaller types).  The recovery of the wasted space allows use of
693   small arenas for large, rare body types, by changing array* fields
694   in body_details_by_type[] below.
695 */
696 struct arena_desc {
697     char       *arena;          /* the raw storage, allocated aligned */
698     size_t      size;           /* its size ~4k typ */
699     svtype      utype;          /* bodytype stored in arena */
700 };
701
702 struct arena_set;
703
704 /* Get the maximum number of elements in set[] such that struct arena_set
705    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706    therefore likely to be 1 aligned memory page.  */
707
708 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711 struct arena_set {
712     struct arena_set* next;
713     unsigned int   set_size;    /* ie ARENAS_PER_SET */
714     unsigned int   curr;        /* index of next available arena-desc */
715     struct arena_desc set[ARENAS_PER_SET];
716 };
717
718 /*
719 =for apidoc sv_free_arenas
720
721 Deallocate the memory used by all arenas.  Note that all the individual SV
722 heads and bodies within the arenas must already have been freed.
723
724 =cut
725
726 */
727 void
728 Perl_sv_free_arenas(pTHX)
729 {
730     SV* sva;
731     SV* svanext;
732     unsigned int i;
733
734     /* Free arenas here, but be careful about fake ones.  (We assume
735        contiguity of the fake ones with the corresponding real ones.) */
736
737     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738         svanext = MUTABLE_SV(SvANY(sva));
739         while (svanext && SvFAKE(svanext))
740             svanext = MUTABLE_SV(SvANY(svanext));
741
742         if (!SvFAKE(sva))
743             Safefree(sva);
744     }
745
746     {
747         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749         while (aroot) {
750             struct arena_set *current = aroot;
751             i = aroot->curr;
752             while (i--) {
753                 assert(aroot->set[i].arena);
754                 Safefree(aroot->set[i].arena);
755             }
756             aroot = aroot->next;
757             Safefree(current);
758         }
759     }
760     PL_body_arenas = 0;
761
762     i = PERL_ARENA_ROOTS_SIZE;
763     while (i--)
764         PL_body_roots[i] = 0;
765
766     PL_sv_arenaroot = 0;
767     PL_sv_root = 0;
768 }
769
770 /*
771   Here are mid-level routines that manage the allocation of bodies out
772   of the various arenas.  There are 5 kinds of arenas:
773
774   1. SV-head arenas, which are discussed and handled above
775   2. regular body arenas
776   3. arenas for reduced-size bodies
777   4. Hash-Entry arenas
778
779   Arena types 2 & 3 are chained by body-type off an array of
780   arena-root pointers, which is indexed by svtype.  Some of the
781   larger/less used body types are malloced singly, since a large
782   unused block of them is wasteful.  Also, several svtypes dont have
783   bodies; the data fits into the sv-head itself.  The arena-root
784   pointer thus has a few unused root-pointers (which may be hijacked
785   later for arena types 4,5)
786
787   3 differs from 2 as an optimization; some body types have several
788   unused fields in the front of the structure (which are kept in-place
789   for consistency).  These bodies can be allocated in smaller chunks,
790   because the leading fields arent accessed.  Pointers to such bodies
791   are decremented to point at the unused 'ghost' memory, knowing that
792   the pointers are used with offsets to the real memory.
793
794
795 =head1 SV-Body Allocation
796
797 =cut
798
799 Allocation of SV-bodies is similar to SV-heads, differing as follows;
800 the allocation mechanism is used for many body types, so is somewhat
801 more complicated, it uses arena-sets, and has no need for still-live
802 SV detection.
803
804 At the outermost level, (new|del)_X*V macros return bodies of the
805 appropriate type.  These macros call either (new|del)_body_type or
806 (new|del)_body_allocated macro pairs, depending on specifics of the
807 type.  Most body types use the former pair, the latter pair is used to
808 allocate body types with "ghost fields".
809
810 "ghost fields" are fields that are unused in certain types, and
811 consequently don't need to actually exist.  They are declared because
812 they're part of a "base type", which allows use of functions as
813 methods.  The simplest examples are AVs and HVs, 2 aggregate types
814 which don't use the fields which support SCALAR semantics.
815
816 For these types, the arenas are carved up into appropriately sized
817 chunks, we thus avoid wasted memory for those unaccessed members.
818 When bodies are allocated, we adjust the pointer back in memory by the
819 size of the part not allocated, so it's as if we allocated the full
820 structure.  (But things will all go boom if you write to the part that
821 is "not there", because you'll be overwriting the last members of the
822 preceding structure in memory.)
823
824 We calculate the correction using the STRUCT_OFFSET macro on the first
825 member present.  If the allocated structure is smaller (no initial NV
826 actually allocated) then the net effect is to subtract the size of the NV
827 from the pointer, to return a new pointer as if an initial NV were actually
828 allocated.  (We were using structures named *_allocated for this, but
829 this turned out to be a subtle bug, because a structure without an NV
830 could have a lower alignment constraint, but the compiler is allowed to
831 optimised accesses based on the alignment constraint of the actual pointer
832 to the full structure, for example, using a single 64 bit load instruction
833 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
834
835 This is the same trick as was used for NV and IV bodies.  Ironically it
836 doesn't need to be used for NV bodies any more, because NV is now at
837 the start of the structure.  IV bodies, and also in some builds NV bodies,
838 don't need it either, because they are no longer allocated.
839
840 In turn, the new_body_* allocators call S_new_body(), which invokes
841 new_body_inline macro, which takes a lock, and takes a body off the
842 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
843 necessary to refresh an empty list.  Then the lock is released, and
844 the body is returned.
845
846 Perl_more_bodies allocates a new arena, and carves it up into an array of N
847 bodies, which it strings into a linked list.  It looks up arena-size
848 and body-size from the body_details table described below, thus
849 supporting the multiple body-types.
850
851 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
852 the (new|del)_X*V macros are mapped directly to malloc/free.
853
854 For each sv-type, struct body_details bodies_by_type[] carries
855 parameters which control these aspects of SV handling:
856
857 Arena_size determines whether arenas are used for this body type, and if
858 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
859 zero, forcing individual mallocs and frees.
860
861 Body_size determines how big a body is, and therefore how many fit into
862 each arena.  Offset carries the body-pointer adjustment needed for
863 "ghost fields", and is used in *_allocated macros.
864
865 But its main purpose is to parameterize info needed in
866 Perl_sv_upgrade().  The info here dramatically simplifies the function
867 vs the implementation in 5.8.8, making it table-driven.  All fields
868 are used for this, except for arena_size.
869
870 For the sv-types that have no bodies, arenas are not used, so those
871 PL_body_roots[sv_type] are unused, and can be overloaded.  In
872 something of a special case, SVt_NULL is borrowed for HE arenas;
873 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
874 bodies_by_type[SVt_NULL] slot is not used, as the table is not
875 available in hv.c.
876
877 */
878
879 struct body_details {
880     U8 body_size;       /* Size to allocate  */
881     U8 copy;            /* Size of structure to copy (may be shorter)  */
882     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
883     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
884     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
885     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
886     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
887     U32 arena_size;                 /* Size of arena to allocate */
888 };
889
890 #define HADNV FALSE
891 #define NONV TRUE
892
893
894 #ifdef PURIFY
895 /* With -DPURFIY we allocate everything directly, and don't use arenas.
896    This seems a rather elegant way to simplify some of the code below.  */
897 #define HASARENA FALSE
898 #else
899 #define HASARENA TRUE
900 #endif
901 #define NOARENA FALSE
902
903 /* Size the arenas to exactly fit a given number of bodies.  A count
904    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
905    simplifying the default.  If count > 0, the arena is sized to fit
906    only that many bodies, allowing arenas to be used for large, rare
907    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
908    limited by PERL_ARENA_SIZE, so we can safely oversize the
909    declarations.
910  */
911 #define FIT_ARENA0(body_size)                           \
912     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
913 #define FIT_ARENAn(count,body_size)                     \
914     ( count * body_size <= PERL_ARENA_SIZE)             \
915     ? count * body_size                                 \
916     : FIT_ARENA0 (body_size)
917 #define FIT_ARENA(count,body_size)                      \
918    (U32)(count                                          \
919     ? FIT_ARENAn (count, body_size)                     \
920     : FIT_ARENA0 (body_size))
921
922 /* Calculate the length to copy. Specifically work out the length less any
923    final padding the compiler needed to add.  See the comment in sv_upgrade
924    for why copying the padding proved to be a bug.  */
925
926 #define copy_length(type, last_member) \
927         STRUCT_OFFSET(type, last_member) \
928         + sizeof (((type*)SvANY((const SV *)0))->last_member)
929
930 static const struct body_details bodies_by_type[] = {
931     /* HEs use this offset for their arena.  */
932     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
933
934     /* IVs are in the head, so the allocation size is 0.  */
935     { 0,
936       sizeof(IV), /* This is used to copy out the IV body.  */
937       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
938       NOARENA /* IVS don't need an arena  */, 0
939     },
940
941 #if NVSIZE <= IVSIZE
942     { 0, sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, NOARENA, 0 },
945 #else
946     { sizeof(NV), sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949 #endif
950
951     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
952       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
953       + STRUCT_OFFSET(XPV, xpv_cur),
954       SVt_PV, FALSE, NONV, HASARENA,
955       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
956
957     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
958       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
959       + STRUCT_OFFSET(XPV, xpv_cur),
960       SVt_INVLIST, TRUE, NONV, HASARENA,
961       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
962
963     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PVIV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_PVNV, FALSE, HADNV, HASARENA,
973       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
976       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
977
978     { sizeof(regexp),
979       sizeof(regexp),
980       0,
981       SVt_REGEXP, TRUE, NONV, HASARENA,
982       FIT_ARENA(0, sizeof(regexp))
983     },
984
985     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
986       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
987     
988     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
989       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
990
991     { sizeof(XPVAV),
992       copy_length(XPVAV, xav_alloc),
993       0,
994       SVt_PVAV, TRUE, NONV, HASARENA,
995       FIT_ARENA(0, sizeof(XPVAV)) },
996
997     { sizeof(XPVHV),
998       copy_length(XPVHV, xhv_max),
999       0,
1000       SVt_PVHV, TRUE, NONV, HASARENA,
1001       FIT_ARENA(0, sizeof(XPVHV)) },
1002
1003     { sizeof(XPVCV),
1004       sizeof(XPVCV),
1005       0,
1006       SVt_PVCV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(XPVCV)) },
1008
1009     { sizeof(XPVFM),
1010       sizeof(XPVFM),
1011       0,
1012       SVt_PVFM, TRUE, NONV, NOARENA,
1013       FIT_ARENA(20, sizeof(XPVFM)) },
1014
1015     { sizeof(XPVIO),
1016       sizeof(XPVIO),
1017       0,
1018       SVt_PVIO, TRUE, NONV, HASARENA,
1019       FIT_ARENA(24, sizeof(XPVIO)) },
1020 };
1021
1022 #define new_body_allocated(sv_type)             \
1023     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1024              - bodies_by_type[sv_type].offset)
1025
1026 /* return a thing to the free list */
1027
1028 #define del_body(thing, root)                           \
1029     STMT_START {                                        \
1030         void ** const thing_copy = (void **)thing;      \
1031         *thing_copy = *root;                            \
1032         *root = (void*)thing_copy;                      \
1033     } STMT_END
1034
1035 #ifdef PURIFY
1036 #if !(NVSIZE <= IVSIZE)
1037 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1038 #endif
1039 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1040 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1041
1042 #define del_XPVGV(p)    safefree(p)
1043
1044 #else /* !PURIFY */
1045
1046 #if !(NVSIZE <= IVSIZE)
1047 #  define new_XNV()     new_body_allocated(SVt_NV)
1048 #endif
1049 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1050 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1051
1052 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1053                                  &PL_body_roots[SVt_PVGV])
1054
1055 #endif /* PURIFY */
1056
1057 /* no arena for you! */
1058
1059 #define new_NOARENA(details) \
1060         safemalloc((details)->body_size + (details)->offset)
1061 #define new_NOARENAZ(details) \
1062         safecalloc((details)->body_size + (details)->offset, 1)
1063
1064 void *
1065 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1066                   const size_t arena_size)
1067 {
1068     void ** const root = &PL_body_roots[sv_type];
1069     struct arena_desc *adesc;
1070     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1071     unsigned int curr;
1072     char *start;
1073     const char *end;
1074     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1075 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1076     dVAR;
1077 #endif
1078 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1079     static bool done_sanity_check;
1080
1081     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1082      * variables like done_sanity_check. */
1083     if (!done_sanity_check) {
1084         unsigned int i = SVt_LAST;
1085
1086         done_sanity_check = TRUE;
1087
1088         while (i--)
1089             assert (bodies_by_type[i].type == i);
1090     }
1091 #endif
1092
1093     assert(arena_size);
1094
1095     /* may need new arena-set to hold new arena */
1096     if (!aroot || aroot->curr >= aroot->set_size) {
1097         struct arena_set *newroot;
1098         Newxz(newroot, 1, struct arena_set);
1099         newroot->set_size = ARENAS_PER_SET;
1100         newroot->next = aroot;
1101         aroot = newroot;
1102         PL_body_arenas = (void *) newroot;
1103         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1104     }
1105
1106     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1107     curr = aroot->curr++;
1108     adesc = &(aroot->set[curr]);
1109     assert(!adesc->arena);
1110     
1111     Newx(adesc->arena, good_arena_size, char);
1112     adesc->size = good_arena_size;
1113     adesc->utype = sv_type;
1114     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1115                           curr, (void*)adesc->arena, (UV)good_arena_size));
1116
1117     start = (char *) adesc->arena;
1118
1119     /* Get the address of the byte after the end of the last body we can fit.
1120        Remember, this is integer division:  */
1121     end = start + good_arena_size / body_size * body_size;
1122
1123     /* computed count doesn't reflect the 1st slot reservation */
1124 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1125     DEBUG_m(PerlIO_printf(Perl_debug_log,
1126                           "arena %p end %p arena-size %d (from %d) type %d "
1127                           "size %d ct %d\n",
1128                           (void*)start, (void*)end, (int)good_arena_size,
1129                           (int)arena_size, sv_type, (int)body_size,
1130                           (int)good_arena_size / (int)body_size));
1131 #else
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1134                           (void*)start, (void*)end,
1135                           (int)arena_size, sv_type, (int)body_size,
1136                           (int)good_arena_size / (int)body_size));
1137 #endif
1138     *root = (void *)start;
1139
1140     while (1) {
1141         /* Where the next body would start:  */
1142         char * const next = start + body_size;
1143
1144         if (next >= end) {
1145             /* This is the last body:  */
1146             assert(next == end);
1147
1148             *(void **)start = 0;
1149             return *root;
1150         }
1151
1152         *(void**) start = (void *)next;
1153         start = next;
1154     }
1155 }
1156
1157 /* grab a new thing from the free list, allocating more if necessary.
1158    The inline version is used for speed in hot routines, and the
1159    function using it serves the rest (unless PURIFY).
1160 */
1161 #define new_body_inline(xpv, sv_type) \
1162     STMT_START { \
1163         void ** const r3wt = &PL_body_roots[sv_type]; \
1164         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1165           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1166                                              bodies_by_type[sv_type].body_size,\
1167                                              bodies_by_type[sv_type].arena_size)); \
1168         *(r3wt) = *(void**)(xpv); \
1169     } STMT_END
1170
1171 #ifndef PURIFY
1172
1173 STATIC void *
1174 S_new_body(pTHX_ const svtype sv_type)
1175 {
1176     void *xpv;
1177     new_body_inline(xpv, sv_type);
1178     return xpv;
1179 }
1180
1181 #endif
1182
1183 static const struct body_details fake_rv =
1184     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1185
1186 /*
1187 =for apidoc sv_upgrade
1188
1189 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1190 SV, then copies across as much information as possible from the old body.
1191 It croaks if the SV is already in a more complex form than requested.  You
1192 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1193 before calling C<sv_upgrade>, and hence does not croak.  See also
1194 C<L</svtype>>.
1195
1196 =cut
1197 */
1198
1199 void
1200 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1201 {
1202     void*       old_body;
1203     void*       new_body;
1204     const svtype old_type = SvTYPE(sv);
1205     const struct body_details *new_type_details;
1206     const struct body_details *old_type_details
1207         = bodies_by_type + old_type;
1208     SV *referent = NULL;
1209
1210     PERL_ARGS_ASSERT_SV_UPGRADE;
1211
1212     if (old_type == new_type)
1213         return;
1214
1215     /* This clause was purposefully added ahead of the early return above to
1216        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1217        inference by Nick I-S that it would fix other troublesome cases. See
1218        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1219
1220        Given that shared hash key scalars are no longer PVIV, but PV, there is
1221        no longer need to unshare so as to free up the IVX slot for its proper
1222        purpose. So it's safe to move the early return earlier.  */
1223
1224     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1225         sv_force_normal_flags(sv, 0);
1226     }
1227
1228     old_body = SvANY(sv);
1229
1230     /* Copying structures onto other structures that have been neatly zeroed
1231        has a subtle gotcha. Consider XPVMG
1232
1233        +------+------+------+------+------+-------+-------+
1234        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1235        +------+------+------+------+------+-------+-------+
1236        0      4      8     12     16     20      24      28
1237
1238        where NVs are aligned to 8 bytes, so that sizeof that structure is
1239        actually 32 bytes long, with 4 bytes of padding at the end:
1240
1241        +------+------+------+------+------+-------+-------+------+
1242        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1243        +------+------+------+------+------+-------+-------+------+
1244        0      4      8     12     16     20      24      28     32
1245
1246        so what happens if you allocate memory for this structure:
1247
1248        +------+------+------+------+------+-------+-------+------+------+...
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1250        +------+------+------+------+------+-------+-------+------+------+...
1251        0      4      8     12     16     20      24      28     32     36
1252
1253        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1254        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1255        started out as zero once, but it's quite possible that it isn't. So now,
1256        rather than a nicely zeroed GP, you have it pointing somewhere random.
1257        Bugs ensue.
1258
1259        (In fact, GP ends up pointing at a previous GP structure, because the
1260        principle cause of the padding in XPVMG getting garbage is a copy of
1261        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1262        this happens to be moot because XPVGV has been re-ordered, with GP
1263        no longer after STASH)
1264
1265        So we are careful and work out the size of used parts of all the
1266        structures.  */
1267
1268     switch (old_type) {
1269     case SVt_NULL:
1270         break;
1271     case SVt_IV:
1272         if (SvROK(sv)) {
1273             referent = SvRV(sv);
1274             old_type_details = &fake_rv;
1275             if (new_type == SVt_NV)
1276                 new_type = SVt_PVNV;
1277         } else {
1278             if (new_type < SVt_PVIV) {
1279                 new_type = (new_type == SVt_NV)
1280                     ? SVt_PVNV : SVt_PVIV;
1281             }
1282         }
1283         break;
1284     case SVt_NV:
1285         if (new_type < SVt_PVNV) {
1286             new_type = SVt_PVNV;
1287         }
1288         break;
1289     case SVt_PV:
1290         assert(new_type > SVt_PV);
1291         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1292         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1293         break;
1294     case SVt_PVIV:
1295         break;
1296     case SVt_PVNV:
1297         break;
1298     case SVt_PVMG:
1299         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1300            there's no way that it can be safely upgraded, because perl.c
1301            expects to Safefree(SvANY(PL_mess_sv))  */
1302         assert(sv != PL_mess_sv);
1303         break;
1304     default:
1305         if (UNLIKELY(old_type_details->cant_upgrade))
1306             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308     }
1309
1310     if (UNLIKELY(old_type > new_type))
1311         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312                 (int)old_type, (int)new_type);
1313
1314     new_type_details = bodies_by_type + new_type;
1315
1316     SvFLAGS(sv) &= ~SVTYPEMASK;
1317     SvFLAGS(sv) |= new_type;
1318
1319     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320        the return statements above will have triggered.  */
1321     assert (new_type != SVt_NULL);
1322     switch (new_type) {
1323     case SVt_IV:
1324         assert(old_type == SVt_NULL);
1325         SET_SVANY_FOR_BODYLESS_IV(sv);
1326         SvIV_set(sv, 0);
1327         return;
1328     case SVt_NV:
1329         assert(old_type == SVt_NULL);
1330 #if NVSIZE <= IVSIZE
1331         SET_SVANY_FOR_BODYLESS_NV(sv);
1332 #else
1333         SvANY(sv) = new_XNV();
1334 #endif
1335         SvNV_set(sv, 0);
1336         return;
1337     case SVt_PVHV:
1338     case SVt_PVAV:
1339         assert(new_type_details->body_size);
1340
1341 #ifndef PURIFY  
1342         assert(new_type_details->arena);
1343         assert(new_type_details->arena_size);
1344         /* This points to the start of the allocated area.  */
1345         new_body_inline(new_body, new_type);
1346         Zero(new_body, new_type_details->body_size, char);
1347         new_body = ((char *)new_body) - new_type_details->offset;
1348 #else
1349         /* We always allocated the full length item with PURIFY. To do this
1350            we fake things so that arena is false for all 16 types..  */
1351         new_body = new_NOARENAZ(new_type_details);
1352 #endif
1353         SvANY(sv) = new_body;
1354         if (new_type == SVt_PVAV) {
1355             AvMAX(sv)   = -1;
1356             AvFILLp(sv) = -1;
1357             AvREAL_only(sv);
1358             if (old_type_details->body_size) {
1359                 AvALLOC(sv) = 0;
1360             } else {
1361                 /* It will have been zeroed when the new body was allocated.
1362                    Lets not write to it, in case it confuses a write-back
1363                    cache.  */
1364             }
1365         } else {
1366             assert(!SvOK(sv));
1367             SvOK_off(sv);
1368 #ifndef NODEFAULT_SHAREKEYS
1369             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1370 #endif
1371             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1372             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1373         }
1374
1375         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1376            The target created by newSVrv also is, and it can have magic.
1377            However, it never has SvPVX set.
1378         */
1379         if (old_type == SVt_IV) {
1380             assert(!SvROK(sv));
1381         } else if (old_type >= SVt_PV) {
1382             assert(SvPVX_const(sv) == 0);
1383         }
1384
1385         if (old_type >= SVt_PVMG) {
1386             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1387             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1388         } else {
1389             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1390         }
1391         break;
1392
1393     case SVt_PVIV:
1394         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1395            no route from NV to PVIV, NOK can never be true  */
1396         assert(!SvNOKp(sv));
1397         assert(!SvNOK(sv));
1398         /* FALLTHROUGH */
1399     case SVt_PVIO:
1400     case SVt_PVFM:
1401     case SVt_PVGV:
1402     case SVt_PVCV:
1403     case SVt_PVLV:
1404     case SVt_INVLIST:
1405     case SVt_REGEXP:
1406     case SVt_PVMG:
1407     case SVt_PVNV:
1408     case SVt_PV:
1409
1410         assert(new_type_details->body_size);
1411         /* We always allocated the full length item with PURIFY. To do this
1412            we fake things so that arena is false for all 16 types..  */
1413         if(new_type_details->arena) {
1414             /* This points to the start of the allocated area.  */
1415             new_body_inline(new_body, new_type);
1416             Zero(new_body, new_type_details->body_size, char);
1417             new_body = ((char *)new_body) - new_type_details->offset;
1418         } else {
1419             new_body = new_NOARENAZ(new_type_details);
1420         }
1421         SvANY(sv) = new_body;
1422
1423         if (old_type_details->copy) {
1424             /* There is now the potential for an upgrade from something without
1425                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1426             int offset = old_type_details->offset;
1427             int length = old_type_details->copy;
1428
1429             if (new_type_details->offset > old_type_details->offset) {
1430                 const int difference
1431                     = new_type_details->offset - old_type_details->offset;
1432                 offset += difference;
1433                 length -= difference;
1434             }
1435             assert (length >= 0);
1436                 
1437             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438                  char);
1439         }
1440
1441 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1442         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1444          * NV slot, but the new one does, then we need to initialise the
1445          * freshly created NV slot with whatever the correct bit pattern is
1446          * for 0.0  */
1447         if (old_type_details->zero_nv && !new_type_details->zero_nv
1448             && !isGV_with_GP(sv))
1449             SvNV_set(sv, 0);
1450 #endif
1451
1452         if (UNLIKELY(new_type == SVt_PVIO)) {
1453             IO * const io = MUTABLE_IO(sv);
1454             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456             SvOBJECT_on(io);
1457             /* Clear the stashcache because a new IO could overrule a package
1458                name */
1459             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460             hv_clear(PL_stashcache);
1461
1462             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463             IoPAGE_LEN(sv) = 60;
1464         }
1465         if (old_type < SVt_PV) {
1466             /* referent will be NULL unless the old type was SVt_IV emulating
1467                SVt_RV */
1468             sv->sv_u.svu_rv = referent;
1469         }
1470         break;
1471     default:
1472         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1473                    (unsigned long)new_type);
1474     }
1475
1476     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1477        and sometimes SVt_NV */
1478     if (old_type_details->body_size) {
1479 #ifdef PURIFY
1480         safefree(old_body);
1481 #else
1482         /* Note that there is an assumption that all bodies of types that
1483            can be upgraded came from arenas. Only the more complex non-
1484            upgradable types are allowed to be directly malloc()ed.  */
1485         assert(old_type_details->arena);
1486         del_body((void*)((char*)old_body + old_type_details->offset),
1487                  &PL_body_roots[old_type]);
1488 #endif
1489     }
1490 }
1491
1492 /*
1493 =for apidoc sv_backoff
1494
1495 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1496 wrapper instead.
1497
1498 =cut
1499 */
1500
1501 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1502    prior to 5.23.4 this function always returned 0
1503 */
1504
1505 void
1506 Perl_sv_backoff(SV *const sv)
1507 {
1508     STRLEN delta;
1509     const char * const s = SvPVX_const(sv);
1510
1511     PERL_ARGS_ASSERT_SV_BACKOFF;
1512
1513     assert(SvOOK(sv));
1514     assert(SvTYPE(sv) != SVt_PVHV);
1515     assert(SvTYPE(sv) != SVt_PVAV);
1516
1517     SvOOK_offset(sv, delta);
1518     
1519     SvLEN_set(sv, SvLEN(sv) + delta);
1520     SvPV_set(sv, SvPVX(sv) - delta);
1521     SvFLAGS(sv) &= ~SVf_OOK;
1522     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1523     return;
1524 }
1525
1526
1527 /* forward declaration */
1528 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1529
1530
1531 /*
1532 =for apidoc sv_grow
1533
1534 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1535 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1536 Use the C<SvGROW> wrapper instead.
1537
1538 =cut
1539 */
1540
1541
1542 char *
1543 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1544 {
1545     char *s;
1546
1547     PERL_ARGS_ASSERT_SV_GROW;
1548
1549     if (SvROK(sv))
1550         sv_unref(sv);
1551     if (SvTYPE(sv) < SVt_PV) {
1552         sv_upgrade(sv, SVt_PV);
1553         s = SvPVX_mutable(sv);
1554     }
1555     else if (SvOOK(sv)) {       /* pv is offset? */
1556         sv_backoff(sv);
1557         s = SvPVX_mutable(sv);
1558         if (newlen > SvLEN(sv))
1559             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1560     }
1561     else
1562     {
1563         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1564         s = SvPVX_mutable(sv);
1565     }
1566
1567 #ifdef PERL_COPY_ON_WRITE
1568     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1569      * to store the COW count. So in general, allocate one more byte than
1570      * asked for, to make it likely this byte is always spare: and thus
1571      * make more strings COW-able.
1572      *
1573      * Only increment if the allocation isn't MEM_SIZE_MAX,
1574      * otherwise it will wrap to 0.
1575      */
1576     if ( newlen != MEM_SIZE_MAX )
1577         newlen++;
1578 #endif
1579
1580 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1581 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1582 #endif
1583
1584     if (newlen > SvLEN(sv)) {           /* need more room? */
1585         STRLEN minlen = SvCUR(sv);
1586         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1587         if (newlen < minlen)
1588             newlen = minlen;
1589 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1590
1591         /* Don't round up on the first allocation, as odds are pretty good that
1592          * the initial request is accurate as to what is really needed */
1593         if (SvLEN(sv)) {
1594             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1595             if (rounded > newlen)
1596                 newlen = rounded;
1597         }
1598 #endif
1599         if (SvLEN(sv) && s) {
1600             s = (char*)saferealloc(s, newlen);
1601         }
1602         else {
1603             s = (char*)safemalloc(newlen);
1604             if (SvPVX_const(sv) && SvCUR(sv)) {
1605                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1606             }
1607         }
1608         SvPV_set(sv, s);
1609 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1610         /* Do this here, do it once, do it right, and then we will never get
1611            called back into sv_grow() unless there really is some growing
1612            needed.  */
1613         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1614 #else
1615         SvLEN_set(sv, newlen);
1616 #endif
1617     }
1618     return s;
1619 }
1620
1621 /*
1622 =for apidoc sv_setiv
1623
1624 Copies an integer into the given SV, upgrading first if necessary.
1625 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1626
1627 =cut
1628 */
1629
1630 void
1631 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1632 {
1633     PERL_ARGS_ASSERT_SV_SETIV;
1634
1635     SV_CHECK_THINKFIRST_COW_DROP(sv);
1636     switch (SvTYPE(sv)) {
1637     case SVt_NULL:
1638     case SVt_NV:
1639         sv_upgrade(sv, SVt_IV);
1640         break;
1641     case SVt_PV:
1642         sv_upgrade(sv, SVt_PVIV);
1643         break;
1644
1645     case SVt_PVGV:
1646         if (!isGV_with_GP(sv))
1647             break;
1648     case SVt_PVAV:
1649     case SVt_PVHV:
1650     case SVt_PVCV:
1651     case SVt_PVFM:
1652     case SVt_PVIO:
1653         /* diag_listed_as: Can't coerce %s to %s in %s */
1654         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1655                    OP_DESC(PL_op));
1656         NOT_REACHED; /* NOTREACHED */
1657         break;
1658     default: NOOP;
1659     }
1660     (void)SvIOK_only(sv);                       /* validate number */
1661     SvIV_set(sv, i);
1662     SvTAINT(sv);
1663 }
1664
1665 /*
1666 =for apidoc sv_setiv_mg
1667
1668 Like C<sv_setiv>, but also handles 'set' magic.
1669
1670 =cut
1671 */
1672
1673 void
1674 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1675 {
1676     PERL_ARGS_ASSERT_SV_SETIV_MG;
1677
1678     sv_setiv(sv,i);
1679     SvSETMAGIC(sv);
1680 }
1681
1682 /*
1683 =for apidoc sv_setuv
1684
1685 Copies an unsigned integer into the given SV, upgrading first if necessary.
1686 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1687
1688 =cut
1689 */
1690
1691 void
1692 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1693 {
1694     PERL_ARGS_ASSERT_SV_SETUV;
1695
1696     /* With the if statement to ensure that integers are stored as IVs whenever
1697        possible:
1698        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1699
1700        without
1701        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1702
1703        If you wish to remove the following if statement, so that this routine
1704        (and its callers) always return UVs, please benchmark to see what the
1705        effect is. Modern CPUs may be different. Or may not :-)
1706     */
1707     if (u <= (UV)IV_MAX) {
1708        sv_setiv(sv, (IV)u);
1709        return;
1710     }
1711     sv_setiv(sv, 0);
1712     SvIsUV_on(sv);
1713     SvUV_set(sv, u);
1714 }
1715
1716 /*
1717 =for apidoc sv_setuv_mg
1718
1719 Like C<sv_setuv>, but also handles 'set' magic.
1720
1721 =cut
1722 */
1723
1724 void
1725 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1726 {
1727     PERL_ARGS_ASSERT_SV_SETUV_MG;
1728
1729     sv_setuv(sv,u);
1730     SvSETMAGIC(sv);
1731 }
1732
1733 /*
1734 =for apidoc sv_setnv
1735
1736 Copies a double into the given SV, upgrading first if necessary.
1737 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1738
1739 =cut
1740 */
1741
1742 void
1743 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1744 {
1745     PERL_ARGS_ASSERT_SV_SETNV;
1746
1747     SV_CHECK_THINKFIRST_COW_DROP(sv);
1748     switch (SvTYPE(sv)) {
1749     case SVt_NULL:
1750     case SVt_IV:
1751         sv_upgrade(sv, SVt_NV);
1752         break;
1753     case SVt_PV:
1754     case SVt_PVIV:
1755         sv_upgrade(sv, SVt_PVNV);
1756         break;
1757
1758     case SVt_PVGV:
1759         if (!isGV_with_GP(sv))
1760             break;
1761     case SVt_PVAV:
1762     case SVt_PVHV:
1763     case SVt_PVCV:
1764     case SVt_PVFM:
1765     case SVt_PVIO:
1766         /* diag_listed_as: Can't coerce %s to %s in %s */
1767         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1768                    OP_DESC(PL_op));
1769         NOT_REACHED; /* NOTREACHED */
1770         break;
1771     default: NOOP;
1772     }
1773     SvNV_set(sv, num);
1774     (void)SvNOK_only(sv);                       /* validate number */
1775     SvTAINT(sv);
1776 }
1777
1778 /*
1779 =for apidoc sv_setnv_mg
1780
1781 Like C<sv_setnv>, but also handles 'set' magic.
1782
1783 =cut
1784 */
1785
1786 void
1787 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1788 {
1789     PERL_ARGS_ASSERT_SV_SETNV_MG;
1790
1791     sv_setnv(sv,num);
1792     SvSETMAGIC(sv);
1793 }
1794
1795 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1796  * not incrementable warning display.
1797  * Originally part of S_not_a_number().
1798  * The return value may be != tmpbuf.
1799  */
1800
1801 STATIC const char *
1802 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1803     const char *pv;
1804
1805      PERL_ARGS_ASSERT_SV_DISPLAY;
1806
1807      if (DO_UTF8(sv)) {
1808           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1809           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1810      } else {
1811           char *d = tmpbuf;
1812           const char * const limit = tmpbuf + tmpbuf_size - 8;
1813           /* each *s can expand to 4 chars + "...\0",
1814              i.e. need room for 8 chars */
1815         
1816           const char *s = SvPVX_const(sv);
1817           const char * const end = s + SvCUR(sv);
1818           for ( ; s < end && d < limit; s++ ) {
1819                int ch = *s & 0xFF;
1820                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1821                     *d++ = 'M';
1822                     *d++ = '-';
1823
1824                     /* Map to ASCII "equivalent" of Latin1 */
1825                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1826                }
1827                if (ch == '\n') {
1828                     *d++ = '\\';
1829                     *d++ = 'n';
1830                }
1831                else if (ch == '\r') {
1832                     *d++ = '\\';
1833                     *d++ = 'r';
1834                }
1835                else if (ch == '\f') {
1836                     *d++ = '\\';
1837                     *d++ = 'f';
1838                }
1839                else if (ch == '\\') {
1840                     *d++ = '\\';
1841                     *d++ = '\\';
1842                }
1843                else if (ch == '\0') {
1844                     *d++ = '\\';
1845                     *d++ = '0';
1846                }
1847                else if (isPRINT_LC(ch))
1848                     *d++ = ch;
1849                else {
1850                     *d++ = '^';
1851                     *d++ = toCTRL(ch);
1852                }
1853           }
1854           if (s < end) {
1855                *d++ = '.';
1856                *d++ = '.';
1857                *d++ = '.';
1858           }
1859           *d = '\0';
1860           pv = tmpbuf;
1861     }
1862
1863     return pv;
1864 }
1865
1866 /* Print an "isn't numeric" warning, using a cleaned-up,
1867  * printable version of the offending string
1868  */
1869
1870 STATIC void
1871 S_not_a_number(pTHX_ SV *const sv)
1872 {
1873      char tmpbuf[64];
1874      const char *pv;
1875
1876      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1877
1878      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1879
1880     if (PL_op)
1881         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1882                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1883                     "Argument \"%s\" isn't numeric in %s", pv,
1884                     OP_DESC(PL_op));
1885     else
1886         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1887                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1888                     "Argument \"%s\" isn't numeric", pv);
1889 }
1890
1891 STATIC void
1892 S_not_incrementable(pTHX_ SV *const sv) {
1893      char tmpbuf[64];
1894      const char *pv;
1895
1896      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1897
1898      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1899
1900      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1901                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1902 }
1903
1904 /*
1905 =for apidoc looks_like_number
1906
1907 Test if the content of an SV looks like a number (or is a number).
1908 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1909 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1910 ignored.
1911
1912 =cut
1913 */
1914
1915 I32
1916 Perl_looks_like_number(pTHX_ SV *const sv)
1917 {
1918     const char *sbegin;
1919     STRLEN len;
1920     int numtype;
1921
1922     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1923
1924     if (SvPOK(sv) || SvPOKp(sv)) {
1925         sbegin = SvPV_nomg_const(sv, len);
1926     }
1927     else
1928         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1929     numtype = grok_number(sbegin, len, NULL);
1930     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1931 }
1932
1933 STATIC bool
1934 S_glob_2number(pTHX_ GV * const gv)
1935 {
1936     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1937
1938     /* We know that all GVs stringify to something that is not-a-number,
1939         so no need to test that.  */
1940     if (ckWARN(WARN_NUMERIC))
1941     {
1942         SV *const buffer = sv_newmortal();
1943         gv_efullname3(buffer, gv, "*");
1944         not_a_number(buffer);
1945     }
1946     /* We just want something true to return, so that S_sv_2iuv_common
1947         can tail call us and return true.  */
1948     return TRUE;
1949 }
1950
1951 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1952    until proven guilty, assume that things are not that bad... */
1953
1954 /*
1955    NV_PRESERVES_UV:
1956
1957    As 64 bit platforms often have an NV that doesn't preserve all bits of
1958    an IV (an assumption perl has been based on to date) it becomes necessary
1959    to remove the assumption that the NV always carries enough precision to
1960    recreate the IV whenever needed, and that the NV is the canonical form.
1961    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1962    precision as a side effect of conversion (which would lead to insanity
1963    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1964    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1965       where precision was lost, and IV/UV/NV slots that have a valid conversion
1966       which has lost no precision
1967    2) to ensure that if a numeric conversion to one form is requested that
1968       would lose precision, the precise conversion (or differently
1969       imprecise conversion) is also performed and cached, to prevent
1970       requests for different numeric formats on the same SV causing
1971       lossy conversion chains. (lossless conversion chains are perfectly
1972       acceptable (still))
1973
1974
1975    flags are used:
1976    SvIOKp is true if the IV slot contains a valid value
1977    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1978    SvNOKp is true if the NV slot contains a valid value
1979    SvNOK  is true only if the NV value is accurate
1980
1981    so
1982    while converting from PV to NV, check to see if converting that NV to an
1983    IV(or UV) would lose accuracy over a direct conversion from PV to
1984    IV(or UV). If it would, cache both conversions, return NV, but mark
1985    SV as IOK NOKp (ie not NOK).
1986
1987    While converting from PV to IV, check to see if converting that IV to an
1988    NV would lose accuracy over a direct conversion from PV to NV. If it
1989    would, cache both conversions, flag similarly.
1990
1991    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1992    correctly because if IV & NV were set NV *always* overruled.
1993    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1994    changes - now IV and NV together means that the two are interchangeable:
1995    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1996
1997    The benefit of this is that operations such as pp_add know that if
1998    SvIOK is true for both left and right operands, then integer addition
1999    can be used instead of floating point (for cases where the result won't
2000    overflow). Before, floating point was always used, which could lead to
2001    loss of precision compared with integer addition.
2002
2003    * making IV and NV equal status should make maths accurate on 64 bit
2004      platforms
2005    * may speed up maths somewhat if pp_add and friends start to use
2006      integers when possible instead of fp. (Hopefully the overhead in
2007      looking for SvIOK and checking for overflow will not outweigh the
2008      fp to integer speedup)
2009    * will slow down integer operations (callers of SvIV) on "inaccurate"
2010      values, as the change from SvIOK to SvIOKp will cause a call into
2011      sv_2iv each time rather than a macro access direct to the IV slot
2012    * should speed up number->string conversion on integers as IV is
2013      favoured when IV and NV are equally accurate
2014
2015    ####################################################################
2016    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2017    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2018    On the other hand, SvUOK is true iff UV.
2019    ####################################################################
2020
2021    Your mileage will vary depending your CPU's relative fp to integer
2022    performance ratio.
2023 */
2024
2025 #ifndef NV_PRESERVES_UV
2026 #  define IS_NUMBER_UNDERFLOW_IV 1
2027 #  define IS_NUMBER_UNDERFLOW_UV 2
2028 #  define IS_NUMBER_IV_AND_UV    2
2029 #  define IS_NUMBER_OVERFLOW_IV  4
2030 #  define IS_NUMBER_OVERFLOW_UV  5
2031
2032 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2033
2034 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2035 STATIC int
2036 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2037 #  ifdef DEBUGGING
2038                        , I32 numtype
2039 #  endif
2040                        )
2041 {
2042     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2043     PERL_UNUSED_CONTEXT;
2044
2045     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));
2046     if (SvNVX(sv) < (NV)IV_MIN) {
2047         (void)SvIOKp_on(sv);
2048         (void)SvNOK_on(sv);
2049         SvIV_set(sv, IV_MIN);
2050         return IS_NUMBER_UNDERFLOW_IV;
2051     }
2052     if (SvNVX(sv) > (NV)UV_MAX) {
2053         (void)SvIOKp_on(sv);
2054         (void)SvNOK_on(sv);
2055         SvIsUV_on(sv);
2056         SvUV_set(sv, UV_MAX);
2057         return IS_NUMBER_OVERFLOW_UV;
2058     }
2059     (void)SvIOKp_on(sv);
2060     (void)SvNOK_on(sv);
2061     /* Can't use strtol etc to convert this string.  (See truth table in
2062        sv_2iv  */
2063     if (SvNVX(sv) <= (UV)IV_MAX) {
2064         SvIV_set(sv, I_V(SvNVX(sv)));
2065         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2066             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2067         } else {
2068             /* Integer is imprecise. NOK, IOKp */
2069         }
2070         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2071     }
2072     SvIsUV_on(sv);
2073     SvUV_set(sv, U_V(SvNVX(sv)));
2074     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2075         if (SvUVX(sv) == UV_MAX) {
2076             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2077                possibly be preserved by NV. Hence, it must be overflow.
2078                NOK, IOKp */
2079             return IS_NUMBER_OVERFLOW_UV;
2080         }
2081         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2082     } else {
2083         /* Integer is imprecise. NOK, IOKp */
2084     }
2085     return IS_NUMBER_OVERFLOW_IV;
2086 }
2087 #endif /* !NV_PRESERVES_UV*/
2088
2089 /* If numtype is infnan, set the NV of the sv accordingly.
2090  * If numtype is anything else, try setting the NV using Atof(PV). */
2091 #ifdef USING_MSVC6
2092 #  pragma warning(push)
2093 #  pragma warning(disable:4756;disable:4056)
2094 #endif
2095 static void
2096 S_sv_setnv(pTHX_ SV* sv, int numtype)
2097 {
2098     bool pok = cBOOL(SvPOK(sv));
2099     bool nok = FALSE;
2100 #ifdef NV_INF
2101     if ((numtype & IS_NUMBER_INFINITY)) {
2102         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2103         nok = TRUE;
2104     } else
2105 #endif
2106 #ifdef NV_NAN
2107     if ((numtype & IS_NUMBER_NAN)) {
2108         SvNV_set(sv, NV_NAN);
2109         nok = TRUE;
2110     } else
2111 #endif
2112     if (pok) {
2113         SvNV_set(sv, Atof(SvPVX_const(sv)));
2114         /* Purposefully no true nok here, since we don't want to blow
2115          * away the possible IOK/UV of an existing sv. */
2116     }
2117     if (nok) {
2118         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2119         if (pok)
2120             SvPOK_on(sv); /* PV is okay, though. */
2121     }
2122 }
2123 #ifdef USING_MSVC6
2124 #  pragma warning(pop)
2125 #endif
2126
2127 STATIC bool
2128 S_sv_2iuv_common(pTHX_ SV *const sv)
2129 {
2130     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2131
2132     if (SvNOKp(sv)) {
2133         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2134          * without also getting a cached IV/UV from it at the same time
2135          * (ie PV->NV conversion should detect loss of accuracy and cache
2136          * IV or UV at same time to avoid this. */
2137         /* IV-over-UV optimisation - choose to cache IV if possible */
2138
2139         if (SvTYPE(sv) == SVt_NV)
2140             sv_upgrade(sv, SVt_PVNV);
2141
2142         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2143         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2144            certainly cast into the IV range at IV_MAX, whereas the correct
2145            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2146            cases go to UV */
2147 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2148         if (Perl_isnan(SvNVX(sv))) {
2149             SvUV_set(sv, 0);
2150             SvIsUV_on(sv);
2151             return FALSE;
2152         }
2153 #endif
2154         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2155             SvIV_set(sv, I_V(SvNVX(sv)));
2156             if (SvNVX(sv) == (NV) SvIVX(sv)
2157 #ifndef NV_PRESERVES_UV
2158                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2159                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2160                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2161                 /* Don't flag it as "accurately an integer" if the number
2162                    came from a (by definition imprecise) NV operation, and
2163                    we're outside the range of NV integer precision */
2164 #endif
2165                 ) {
2166                 if (SvNOK(sv))
2167                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2168                 else {
2169                     /* scalar has trailing garbage, eg "42a" */
2170                 }
2171                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2172                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2173                                       PTR2UV(sv),
2174                                       SvNVX(sv),
2175                                       SvIVX(sv)));
2176
2177             } else {
2178                 /* IV not precise.  No need to convert from PV, as NV
2179                    conversion would already have cached IV if it detected
2180                    that PV->IV would be better than PV->NV->IV
2181                    flags already correct - don't set public IOK.  */
2182                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2183                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2184                                       PTR2UV(sv),
2185                                       SvNVX(sv),
2186                                       SvIVX(sv)));
2187             }
2188             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2189                but the cast (NV)IV_MIN rounds to a the value less (more
2190                negative) than IV_MIN which happens to be equal to SvNVX ??
2191                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2192                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2193                (NV)UVX == NVX are both true, but the values differ. :-(
2194                Hopefully for 2s complement IV_MIN is something like
2195                0x8000000000000000 which will be exact. NWC */
2196         }
2197         else {
2198             SvUV_set(sv, U_V(SvNVX(sv)));
2199             if (
2200                 (SvNVX(sv) == (NV) SvUVX(sv))
2201 #ifndef  NV_PRESERVES_UV
2202                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2203                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2204                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2205                 /* Don't flag it as "accurately an integer" if the number
2206                    came from a (by definition imprecise) NV operation, and
2207                    we're outside the range of NV integer precision */
2208 #endif
2209                 && SvNOK(sv)
2210                 )
2211                 SvIOK_on(sv);
2212             SvIsUV_on(sv);
2213             DEBUG_c(PerlIO_printf(Perl_debug_log,
2214                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2215                                   PTR2UV(sv),
2216                                   SvUVX(sv),
2217                                   SvUVX(sv)));
2218         }
2219     }
2220     else if (SvPOKp(sv)) {
2221         UV value;
2222         int numtype;
2223         const char *s = SvPVX_const(sv);
2224         const STRLEN cur = SvCUR(sv);
2225
2226         /* short-cut for a single digit string like "1" */
2227
2228         if (cur == 1) {
2229             char c = *s;
2230             if (isDIGIT(c)) {
2231                 if (SvTYPE(sv) < SVt_PVIV)
2232                     sv_upgrade(sv, SVt_PVIV);
2233                 (void)SvIOK_on(sv);
2234                 SvIV_set(sv, (IV)(c - '0'));
2235                 return FALSE;
2236             }
2237         }
2238
2239         numtype = grok_number(s, cur, &value);
2240         /* We want to avoid a possible problem when we cache an IV/ a UV which
2241            may be later translated to an NV, and the resulting NV is not
2242            the same as the direct translation of the initial string
2243            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2244            be careful to ensure that the value with the .456 is around if the
2245            NV value is requested in the future).
2246         
2247            This means that if we cache such an IV/a UV, we need to cache the
2248            NV as well.  Moreover, we trade speed for space, and do not
2249            cache the NV if we are sure it's not needed.
2250          */
2251
2252         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2253         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2254              == IS_NUMBER_IN_UV) {
2255             /* It's definitely an integer, only upgrade to PVIV */
2256             if (SvTYPE(sv) < SVt_PVIV)
2257                 sv_upgrade(sv, SVt_PVIV);
2258             (void)SvIOK_on(sv);
2259         } else if (SvTYPE(sv) < SVt_PVNV)
2260             sv_upgrade(sv, SVt_PVNV);
2261
2262         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2263             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2264                 not_a_number(sv);
2265             S_sv_setnv(aTHX_ sv, numtype);
2266             return FALSE;
2267         }
2268
2269         /* If NVs preserve UVs then we only use the UV value if we know that
2270            we aren't going to call atof() below. If NVs don't preserve UVs
2271            then the value returned may have more precision than atof() will
2272            return, even though value isn't perfectly accurate.  */
2273         if ((numtype & (IS_NUMBER_IN_UV
2274 #ifdef NV_PRESERVES_UV
2275                         | IS_NUMBER_NOT_INT
2276 #endif
2277             )) == IS_NUMBER_IN_UV) {
2278             /* This won't turn off the public IOK flag if it was set above  */
2279             (void)SvIOKp_on(sv);
2280
2281             if (!(numtype & IS_NUMBER_NEG)) {
2282                 /* positive */;
2283                 if (value <= (UV)IV_MAX) {
2284                     SvIV_set(sv, (IV)value);
2285                 } else {
2286                     /* it didn't overflow, and it was positive. */
2287                     SvUV_set(sv, value);
2288                     SvIsUV_on(sv);
2289                 }
2290             } else {
2291                 /* 2s complement assumption  */
2292                 if (value <= (UV)IV_MIN) {
2293                     SvIV_set(sv, value == (UV)IV_MIN
2294                                     ? IV_MIN : -(IV)value);
2295                 } else {
2296                     /* Too negative for an IV.  This is a double upgrade, but
2297                        I'm assuming it will be rare.  */
2298                     if (SvTYPE(sv) < SVt_PVNV)
2299                         sv_upgrade(sv, SVt_PVNV);
2300                     SvNOK_on(sv);
2301                     SvIOK_off(sv);
2302                     SvIOKp_on(sv);
2303                     SvNV_set(sv, -(NV)value);
2304                     SvIV_set(sv, IV_MIN);
2305                 }
2306             }
2307         }
2308         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2309            will be in the previous block to set the IV slot, and the next
2310            block to set the NV slot.  So no else here.  */
2311         
2312         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2313             != IS_NUMBER_IN_UV) {
2314             /* It wasn't an (integer that doesn't overflow the UV). */
2315             S_sv_setnv(aTHX_ sv, numtype);
2316
2317             if (! numtype && ckWARN(WARN_NUMERIC))
2318                 not_a_number(sv);
2319
2320             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2321                                   PTR2UV(sv), SvNVX(sv)));
2322
2323 #ifdef NV_PRESERVES_UV
2324             (void)SvIOKp_on(sv);
2325             (void)SvNOK_on(sv);
2326 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2327             if (Perl_isnan(SvNVX(sv))) {
2328                 SvUV_set(sv, 0);
2329                 SvIsUV_on(sv);
2330                 return FALSE;
2331             }
2332 #endif
2333             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2334                 SvIV_set(sv, I_V(SvNVX(sv)));
2335                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2336                     SvIOK_on(sv);
2337                 } else {
2338                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2339                 }
2340                 /* UV will not work better than IV */
2341             } else {
2342                 if (SvNVX(sv) > (NV)UV_MAX) {
2343                     SvIsUV_on(sv);
2344                     /* Integer is inaccurate. NOK, IOKp, is UV */
2345                     SvUV_set(sv, UV_MAX);
2346                 } else {
2347                     SvUV_set(sv, U_V(SvNVX(sv)));
2348                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2349                        NV preservse UV so can do correct comparison.  */
2350                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2351                         SvIOK_on(sv);
2352                     } else {
2353                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2354                     }
2355                 }
2356                 SvIsUV_on(sv);
2357             }
2358 #else /* NV_PRESERVES_UV */
2359             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2360                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2361                 /* The IV/UV slot will have been set from value returned by
2362                    grok_number above.  The NV slot has just been set using
2363                    Atof.  */
2364                 SvNOK_on(sv);
2365                 assert (SvIOKp(sv));
2366             } else {
2367                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2368                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2369                     /* Small enough to preserve all bits. */
2370                     (void)SvIOKp_on(sv);
2371                     SvNOK_on(sv);
2372                     SvIV_set(sv, I_V(SvNVX(sv)));
2373                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2374                         SvIOK_on(sv);
2375                     /* Assumption: first non-preserved integer is < IV_MAX,
2376                        this NV is in the preserved range, therefore: */
2377                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2378                           < (UV)IV_MAX)) {
2379                         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);
2380                     }
2381                 } else {
2382                     /* IN_UV NOT_INT
2383                          0      0       already failed to read UV.
2384                          0      1       already failed to read UV.
2385                          1      0       you won't get here in this case. IV/UV
2386                                         slot set, public IOK, Atof() unneeded.
2387                          1      1       already read UV.
2388                        so there's no point in sv_2iuv_non_preserve() attempting
2389                        to use atol, strtol, strtoul etc.  */
2390 #  ifdef DEBUGGING
2391                     sv_2iuv_non_preserve (sv, numtype);
2392 #  else
2393                     sv_2iuv_non_preserve (sv);
2394 #  endif
2395                 }
2396             }
2397 #endif /* NV_PRESERVES_UV */
2398         /* It might be more code efficient to go through the entire logic above
2399            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2400            gets complex and potentially buggy, so more programmer efficient
2401            to do it this way, by turning off the public flags:  */
2402         if (!numtype)
2403             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2404         }
2405     }
2406     else  {
2407         if (isGV_with_GP(sv))
2408             return glob_2number(MUTABLE_GV(sv));
2409
2410         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2411                 report_uninit(sv);
2412         if (SvTYPE(sv) < SVt_IV)
2413             /* Typically the caller expects that sv_any is not NULL now.  */
2414             sv_upgrade(sv, SVt_IV);
2415         /* Return 0 from the caller.  */
2416         return TRUE;
2417     }
2418     return FALSE;
2419 }
2420
2421 /*
2422 =for apidoc sv_2iv_flags
2423
2424 Return the integer value of an SV, doing any necessary string
2425 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2426 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2427
2428 =cut
2429 */
2430
2431 IV
2432 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2433 {
2434     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2435
2436     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2437          && SvTYPE(sv) != SVt_PVFM);
2438
2439     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2440         mg_get(sv);
2441
2442     if (SvROK(sv)) {
2443         if (SvAMAGIC(sv)) {
2444             SV * tmpstr;
2445             if (flags & SV_SKIP_OVERLOAD)
2446                 return 0;
2447             tmpstr = AMG_CALLunary(sv, numer_amg);
2448             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2449                 return SvIV(tmpstr);
2450             }
2451         }
2452         return PTR2IV(SvRV(sv));
2453     }
2454
2455     if (SvVALID(sv) || isREGEXP(sv)) {
2456         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2457            must not let them cache IVs.
2458            In practice they are extremely unlikely to actually get anywhere
2459            accessible by user Perl code - the only way that I'm aware of is when
2460            a constant subroutine which is used as the second argument to index.
2461
2462            Regexps have no SvIVX and SvNVX fields.
2463         */
2464         assert(SvPOKp(sv));
2465         {
2466             UV value;
2467             const char * const ptr =
2468                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2469             const int numtype
2470                 = grok_number(ptr, SvCUR(sv), &value);
2471
2472             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2473                 == IS_NUMBER_IN_UV) {
2474                 /* It's definitely an integer */
2475                 if (numtype & IS_NUMBER_NEG) {
2476                     if (value < (UV)IV_MIN)
2477                         return -(IV)value;
2478                 } else {
2479                     if (value < (UV)IV_MAX)
2480                         return (IV)value;
2481                 }
2482             }
2483
2484             /* Quite wrong but no good choices. */
2485             if ((numtype & IS_NUMBER_INFINITY)) {
2486                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2487             } else if ((numtype & IS_NUMBER_NAN)) {
2488                 return 0; /* So wrong. */
2489             }
2490
2491             if (!numtype) {
2492                 if (ckWARN(WARN_NUMERIC))
2493                     not_a_number(sv);
2494             }
2495             return I_V(Atof(ptr));
2496         }
2497     }
2498
2499     if (SvTHINKFIRST(sv)) {
2500         if (SvREADONLY(sv) && !SvOK(sv)) {
2501             if (ckWARN(WARN_UNINITIALIZED))
2502                 report_uninit(sv);
2503             return 0;
2504         }
2505     }
2506
2507     if (!SvIOKp(sv)) {
2508         if (S_sv_2iuv_common(aTHX_ sv))
2509             return 0;
2510     }
2511
2512     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2513         PTR2UV(sv),SvIVX(sv)));
2514     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2515 }
2516
2517 /*
2518 =for apidoc sv_2uv_flags
2519
2520 Return the unsigned integer value of an SV, doing any necessary string
2521 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2522 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2523
2524 =cut
2525 */
2526
2527 UV
2528 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2529 {
2530     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2531
2532     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2533         mg_get(sv);
2534
2535     if (SvROK(sv)) {
2536         if (SvAMAGIC(sv)) {
2537             SV *tmpstr;
2538             if (flags & SV_SKIP_OVERLOAD)
2539                 return 0;
2540             tmpstr = AMG_CALLunary(sv, numer_amg);
2541             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2542                 return SvUV(tmpstr);
2543             }
2544         }
2545         return PTR2UV(SvRV(sv));
2546     }
2547
2548     if (SvVALID(sv) || isREGEXP(sv)) {
2549         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2550            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2551            Regexps have no SvIVX and SvNVX fields. */
2552         assert(SvPOKp(sv));
2553         {
2554             UV value;
2555             const char * const ptr =
2556                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2557             const int numtype
2558                 = grok_number(ptr, SvCUR(sv), &value);
2559
2560             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2561                 == IS_NUMBER_IN_UV) {
2562                 /* It's definitely an integer */
2563                 if (!(numtype & IS_NUMBER_NEG))
2564                     return value;
2565             }
2566
2567             /* Quite wrong but no good choices. */
2568             if ((numtype & IS_NUMBER_INFINITY)) {
2569                 return UV_MAX; /* So wrong. */
2570             } else if ((numtype & IS_NUMBER_NAN)) {
2571                 return 0; /* So wrong. */
2572             }
2573
2574             if (!numtype) {
2575                 if (ckWARN(WARN_NUMERIC))
2576                     not_a_number(sv);
2577             }
2578             return U_V(Atof(ptr));
2579         }
2580     }
2581
2582     if (SvTHINKFIRST(sv)) {
2583         if (SvREADONLY(sv) && !SvOK(sv)) {
2584             if (ckWARN(WARN_UNINITIALIZED))
2585                 report_uninit(sv);
2586             return 0;
2587         }
2588     }
2589
2590     if (!SvIOKp(sv)) {
2591         if (S_sv_2iuv_common(aTHX_ sv))
2592             return 0;
2593     }
2594
2595     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2596                           PTR2UV(sv),SvUVX(sv)));
2597     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2598 }
2599
2600 /*
2601 =for apidoc sv_2nv_flags
2602
2603 Return the num value of an SV, doing any necessary string or integer
2604 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2605 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2606
2607 =cut
2608 */
2609
2610 NV
2611 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2612 {
2613     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2614
2615     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2616          && SvTYPE(sv) != SVt_PVFM);
2617     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2618         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2619            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2620            Regexps have no SvIVX and SvNVX fields.  */
2621         const char *ptr;
2622         if (flags & SV_GMAGIC)
2623             mg_get(sv);
2624         if (SvNOKp(sv))
2625             return SvNVX(sv);
2626         if (SvPOKp(sv) && !SvIOKp(sv)) {
2627             ptr = SvPVX_const(sv);
2628             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2629                 !grok_number(ptr, SvCUR(sv), NULL))
2630                 not_a_number(sv);
2631             return Atof(ptr);
2632         }
2633         if (SvIOKp(sv)) {
2634             if (SvIsUV(sv))
2635                 return (NV)SvUVX(sv);
2636             else
2637                 return (NV)SvIVX(sv);
2638         }
2639         if (SvROK(sv)) {
2640             goto return_rok;
2641         }
2642         assert(SvTYPE(sv) >= SVt_PVMG);
2643         /* This falls through to the report_uninit near the end of the
2644            function. */
2645     } else if (SvTHINKFIRST(sv)) {
2646         if (SvROK(sv)) {
2647         return_rok:
2648             if (SvAMAGIC(sv)) {
2649                 SV *tmpstr;
2650                 if (flags & SV_SKIP_OVERLOAD)
2651                     return 0;
2652                 tmpstr = AMG_CALLunary(sv, numer_amg);
2653                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2654                     return SvNV(tmpstr);
2655                 }
2656             }
2657             return PTR2NV(SvRV(sv));
2658         }
2659         if (SvREADONLY(sv) && !SvOK(sv)) {
2660             if (ckWARN(WARN_UNINITIALIZED))
2661                 report_uninit(sv);
2662             return 0.0;
2663         }
2664     }
2665     if (SvTYPE(sv) < SVt_NV) {
2666         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2667         sv_upgrade(sv, SVt_NV);
2668         DEBUG_c({
2669             STORE_NUMERIC_LOCAL_SET_STANDARD();
2670             PerlIO_printf(Perl_debug_log,
2671                           "0x%" UVxf " num(%" NVgf ")\n",
2672                           PTR2UV(sv), SvNVX(sv));
2673             RESTORE_NUMERIC_LOCAL();
2674         });
2675     }
2676     else if (SvTYPE(sv) < SVt_PVNV)
2677         sv_upgrade(sv, SVt_PVNV);
2678     if (SvNOKp(sv)) {
2679         return SvNVX(sv);
2680     }
2681     if (SvIOKp(sv)) {
2682         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2683 #ifdef NV_PRESERVES_UV
2684         if (SvIOK(sv))
2685             SvNOK_on(sv);
2686         else
2687             SvNOKp_on(sv);
2688 #else
2689         /* Only set the public NV OK flag if this NV preserves the IV  */
2690         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2691         if (SvIOK(sv) &&
2692             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2693                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2694             SvNOK_on(sv);
2695         else
2696             SvNOKp_on(sv);
2697 #endif
2698     }
2699     else if (SvPOKp(sv)) {
2700         UV value;
2701         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2702         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2703             not_a_number(sv);
2704 #ifdef NV_PRESERVES_UV
2705         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2706             == IS_NUMBER_IN_UV) {
2707             /* It's definitely an integer */
2708             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2709         } else {
2710             S_sv_setnv(aTHX_ sv, numtype);
2711         }
2712         if (numtype)
2713             SvNOK_on(sv);
2714         else
2715             SvNOKp_on(sv);
2716 #else
2717         SvNV_set(sv, Atof(SvPVX_const(sv)));
2718         /* Only set the public NV OK flag if this NV preserves the value in
2719            the PV at least as well as an IV/UV would.
2720            Not sure how to do this 100% reliably. */
2721         /* if that shift count is out of range then Configure's test is
2722            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2723            UV_BITS */
2724         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2725             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2726             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2727         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2728             /* Can't use strtol etc to convert this string, so don't try.
2729                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2730             SvNOK_on(sv);
2731         } else {
2732             /* value has been set.  It may not be precise.  */
2733             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2734                 /* 2s complement assumption for (UV)IV_MIN  */
2735                 SvNOK_on(sv); /* Integer is too negative.  */
2736             } else {
2737                 SvNOKp_on(sv);
2738                 SvIOKp_on(sv);
2739
2740                 if (numtype & IS_NUMBER_NEG) {
2741                     /* -IV_MIN is undefined, but we should never reach
2742                      * this point with both IS_NUMBER_NEG and value ==
2743                      * (UV)IV_MIN */
2744                     assert(value != (UV)IV_MIN);
2745                     SvIV_set(sv, -(IV)value);
2746                 } else if (value <= (UV)IV_MAX) {
2747                     SvIV_set(sv, (IV)value);
2748                 } else {
2749                     SvUV_set(sv, value);
2750                     SvIsUV_on(sv);
2751                 }
2752
2753                 if (numtype & IS_NUMBER_NOT_INT) {
2754                     /* I believe that even if the original PV had decimals,
2755                        they are lost beyond the limit of the FP precision.
2756                        However, neither is canonical, so both only get p
2757                        flags.  NWC, 2000/11/25 */
2758                     /* Both already have p flags, so do nothing */
2759                 } else {
2760                     const NV nv = SvNVX(sv);
2761                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2762                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2763                         if (SvIVX(sv) == I_V(nv)) {
2764                             SvNOK_on(sv);
2765                         } else {
2766                             /* It had no "." so it must be integer.  */
2767                         }
2768                         SvIOK_on(sv);
2769                     } else {
2770                         /* between IV_MAX and NV(UV_MAX).
2771                            Could be slightly > UV_MAX */
2772
2773                         if (numtype & IS_NUMBER_NOT_INT) {
2774                             /* UV and NV both imprecise.  */
2775                         } else {
2776                             const UV nv_as_uv = U_V(nv);
2777
2778                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2779                                 SvNOK_on(sv);
2780                             }
2781                             SvIOK_on(sv);
2782                         }
2783                     }
2784                 }
2785             }
2786         }
2787         /* It might be more code efficient to go through the entire logic above
2788            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2789            gets complex and potentially buggy, so more programmer efficient
2790            to do it this way, by turning off the public flags:  */
2791         if (!numtype)
2792             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2793 #endif /* NV_PRESERVES_UV */
2794     }
2795     else  {
2796         if (isGV_with_GP(sv)) {
2797             glob_2number(MUTABLE_GV(sv));
2798             return 0.0;
2799         }
2800
2801         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2802             report_uninit(sv);
2803         assert (SvTYPE(sv) >= SVt_NV);
2804         /* Typically the caller expects that sv_any is not NULL now.  */
2805         /* XXX Ilya implies that this is a bug in callers that assume this
2806            and ideally should be fixed.  */
2807         return 0.0;
2808     }
2809     DEBUG_c({
2810         STORE_NUMERIC_LOCAL_SET_STANDARD();
2811         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2812                       PTR2UV(sv), SvNVX(sv));
2813         RESTORE_NUMERIC_LOCAL();
2814     });
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 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2845  * UV as a string towards the end of buf, and return pointers to start and
2846  * end of it.
2847  *
2848  * We assume that buf is at least TYPE_CHARS(UV) long.
2849  */
2850
2851 static char *
2852 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2853 {
2854     char *ptr = buf + TYPE_CHARS(UV);
2855     char * const ebuf = ptr;
2856     int sign;
2857
2858     PERL_ARGS_ASSERT_UIV_2BUF;
2859
2860     if (is_uv)
2861         sign = 0;
2862     else if (iv >= 0) {
2863         uv = iv;
2864         sign = 0;
2865     } else {
2866         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2867         sign = 1;
2868     }
2869     do {
2870         *--ptr = '0' + (char)(uv % 10);
2871     } while (uv /= 10);
2872     if (sign)
2873         *--ptr = '-';
2874     *peob = ebuf;
2875     return ptr;
2876 }
2877
2878 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2879  * infinity or a not-a-number, writes the appropriate strings to the
2880  * buffer, including a zero byte.  On success returns the written length,
2881  * excluding the zero byte, on failure (not an infinity, not a nan)
2882  * returns zero, assert-fails on maxlen being too short.
2883  *
2884  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2885  * shared string constants we point to, instead of generating a new
2886  * string for each instance. */
2887 STATIC size_t
2888 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2889     char* s = buffer;
2890     assert(maxlen >= 4);
2891     if (Perl_isinf(nv)) {
2892         if (nv < 0) {
2893             if (maxlen < 5) /* "-Inf\0"  */
2894                 return 0;
2895             *s++ = '-';
2896         } else if (plus) {
2897             *s++ = '+';
2898         }
2899         *s++ = 'I';
2900         *s++ = 'n';
2901         *s++ = 'f';
2902     }
2903     else if (Perl_isnan(nv)) {
2904         *s++ = 'N';
2905         *s++ = 'a';
2906         *s++ = 'N';
2907         /* XXX optionally output the payload mantissa bits as
2908          * "(unsigned)" (to match the nan("...") C99 function,
2909          * or maybe as "(0xhhh...)"  would make more sense...
2910          * provide a format string so that the user can decide?
2911          * NOTE: would affect the maxlen and assert() logic.*/
2912     }
2913     else {
2914       return 0;
2915     }
2916     assert((s == buffer + 3) || (s == buffer + 4));
2917     *s = 0;
2918     return s - buffer;
2919 }
2920
2921 /*
2922 =for apidoc sv_2pv_flags
2923
2924 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2925 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2926 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2927 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2928
2929 =cut
2930 */
2931
2932 char *
2933 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2934 {
2935     char *s;
2936
2937     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2938
2939     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2940          && SvTYPE(sv) != SVt_PVFM);
2941     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2942         mg_get(sv);
2943     if (SvROK(sv)) {
2944         if (SvAMAGIC(sv)) {
2945             SV *tmpstr;
2946             if (flags & SV_SKIP_OVERLOAD)
2947                 return NULL;
2948             tmpstr = AMG_CALLunary(sv, string_amg);
2949             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2950             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2951                 /* Unwrap this:  */
2952                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2953                  */
2954
2955                 char *pv;
2956                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2957                     if (flags & SV_CONST_RETURN) {
2958                         pv = (char *) SvPVX_const(tmpstr);
2959                     } else {
2960                         pv = (flags & SV_MUTABLE_RETURN)
2961                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2962                     }
2963                     if (lp)
2964                         *lp = SvCUR(tmpstr);
2965                 } else {
2966                     pv = sv_2pv_flags(tmpstr, lp, flags);
2967                 }
2968                 if (SvUTF8(tmpstr))
2969                     SvUTF8_on(sv);
2970                 else
2971                     SvUTF8_off(sv);
2972                 return pv;
2973             }
2974         }
2975         {
2976             STRLEN len;
2977             char *retval;
2978             char *buffer;
2979             SV *const referent = SvRV(sv);
2980
2981             if (!referent) {
2982                 len = 7;
2983                 retval = buffer = savepvn("NULLREF", len);
2984             } else if (SvTYPE(referent) == SVt_REGEXP &&
2985                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2986                         amagic_is_enabled(string_amg))) {
2987                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2988
2989                 assert(re);
2990                         
2991                 /* If the regex is UTF-8 we want the containing scalar to
2992                    have an UTF-8 flag too */
2993                 if (RX_UTF8(re))
2994                     SvUTF8_on(sv);
2995                 else
2996                     SvUTF8_off(sv);     
2997
2998                 if (lp)
2999                     *lp = RX_WRAPLEN(re);
3000  
3001                 return RX_WRAPPED(re);
3002             } else {
3003                 const char *const typestr = sv_reftype(referent, 0);
3004                 const STRLEN typelen = strlen(typestr);
3005                 UV addr = PTR2UV(referent);
3006                 const char *stashname = NULL;
3007                 STRLEN stashnamelen = 0; /* hush, gcc */
3008                 const char *buffer_end;
3009
3010                 if (SvOBJECT(referent)) {
3011                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3012
3013                     if (name) {
3014                         stashname = HEK_KEY(name);
3015                         stashnamelen = HEK_LEN(name);
3016
3017                         if (HEK_UTF8(name)) {
3018                             SvUTF8_on(sv);
3019                         } else {
3020                             SvUTF8_off(sv);
3021                         }
3022                     } else {
3023                         stashname = "__ANON__";
3024                         stashnamelen = 8;
3025                     }
3026                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3027                         + 2 * sizeof(UV) + 2 /* )\0 */;
3028                 } else {
3029                     len = typelen + 3 /* (0x */
3030                         + 2 * sizeof(UV) + 2 /* )\0 */;
3031                 }
3032
3033                 Newx(buffer, len, char);
3034                 buffer_end = retval = buffer + len;
3035
3036                 /* Working backwards  */
3037                 *--retval = '\0';
3038                 *--retval = ')';
3039                 do {
3040                     *--retval = PL_hexdigit[addr & 15];
3041                 } while (addr >>= 4);
3042                 *--retval = 'x';
3043                 *--retval = '0';
3044                 *--retval = '(';
3045
3046                 retval -= typelen;
3047                 memcpy(retval, typestr, typelen);
3048
3049                 if (stashname) {
3050                     *--retval = '=';
3051                     retval -= stashnamelen;
3052                     memcpy(retval, stashname, stashnamelen);
3053                 }
3054                 /* retval may not necessarily have reached the start of the
3055                    buffer here.  */
3056                 assert (retval >= buffer);
3057
3058                 len = buffer_end - retval - 1; /* -1 for that \0  */
3059             }
3060             if (lp)
3061                 *lp = len;
3062             SAVEFREEPV(buffer);
3063             return retval;
3064         }
3065     }
3066
3067     if (SvPOKp(sv)) {
3068         if (lp)
3069             *lp = SvCUR(sv);
3070         if (flags & SV_MUTABLE_RETURN)
3071             return SvPVX_mutable(sv);
3072         if (flags & SV_CONST_RETURN)
3073             return (char *)SvPVX_const(sv);
3074         return SvPVX(sv);
3075     }
3076
3077     if (SvIOK(sv)) {
3078         /* I'm assuming that if both IV and NV are equally valid then
3079            converting the IV is going to be more efficient */
3080         const U32 isUIOK = SvIsUV(sv);
3081         char buf[TYPE_CHARS(UV)];
3082         char *ebuf, *ptr;
3083         STRLEN len;
3084
3085         if (SvTYPE(sv) < SVt_PVIV)
3086             sv_upgrade(sv, SVt_PVIV);
3087         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3088         len = ebuf - ptr;
3089         /* inlined from sv_setpvn */
3090         s = SvGROW_mutable(sv, len + 1);
3091         Move(ptr, s, len, char);
3092         s += len;
3093         *s = '\0';
3094         SvPOK_on(sv);
3095     }
3096     else if (SvNOK(sv)) {
3097         if (SvTYPE(sv) < SVt_PVNV)
3098             sv_upgrade(sv, SVt_PVNV);
3099         if (SvNVX(sv) == 0.0
3100 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3101             && !Perl_isnan(SvNVX(sv))
3102 #endif
3103         ) {
3104             s = SvGROW_mutable(sv, 2);
3105             *s++ = '0';
3106             *s = '\0';
3107         } else {
3108             STRLEN len;
3109             STRLEN size = 5; /* "-Inf\0" */
3110
3111             s = SvGROW_mutable(sv, size);
3112             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3113             if (len > 0) {
3114                 s += len;
3115                 SvPOK_on(sv);
3116             }
3117             else {
3118                 /* some Xenix systems wipe out errno here */
3119                 dSAVE_ERRNO;
3120
3121                 size =
3122                     1 + /* sign */
3123                     1 + /* "." */
3124                     NV_DIG +
3125                     1 + /* "e" */
3126                     1 + /* sign */
3127                     5 + /* exponent digits */
3128                     1 + /* \0 */
3129                     2; /* paranoia */
3130
3131                 s = SvGROW_mutable(sv, size);
3132 #ifndef USE_LOCALE_NUMERIC
3133                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3134
3135                 SvPOK_on(sv);
3136 #else
3137                 {
3138                     bool local_radix;
3139                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3140                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3141
3142                     local_radix = PL_numeric_local && PL_numeric_radix_sv;
3143                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3144                         size += SvCUR(PL_numeric_radix_sv) - 1;
3145                         s = SvGROW_mutable(sv, size);
3146                     }
3147
3148                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3149
3150                     /* If the radix character is UTF-8, and actually is in the
3151                      * output, turn on the UTF-8 flag for the scalar */
3152                     if (   local_radix
3153                         && SvUTF8(PL_numeric_radix_sv)
3154                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3155                     {
3156                         SvUTF8_on(sv);
3157                     }
3158
3159                     RESTORE_LC_NUMERIC();
3160                 }
3161
3162                 /* We don't call SvPOK_on(), because it may come to
3163                  * pass that the locale changes so that the
3164                  * stringification we just did is no longer correct.  We
3165                  * will have to re-stringify every time it is needed */
3166 #endif
3167                 RESTORE_ERRNO;
3168             }
3169             while (*s) s++;
3170         }
3171     }
3172     else if (isGV_with_GP(sv)) {
3173         GV *const gv = MUTABLE_GV(sv);
3174         SV *const buffer = sv_newmortal();
3175
3176         gv_efullname3(buffer, gv, "*");
3177
3178         assert(SvPOK(buffer));
3179         if (SvUTF8(buffer))
3180             SvUTF8_on(sv);
3181         else
3182             SvUTF8_off(sv);
3183         if (lp)
3184             *lp = SvCUR(buffer);
3185         return SvPVX(buffer);
3186     }
3187     else {
3188         if (lp)
3189             *lp = 0;
3190         if (flags & SV_UNDEF_RETURNS_NULL)
3191             return NULL;
3192         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3193             report_uninit(sv);
3194         /* Typically the caller expects that sv_any is not NULL now.  */
3195         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3196             sv_upgrade(sv, SVt_PV);
3197         return (char *)"";
3198     }
3199
3200     {
3201         const STRLEN len = s - SvPVX_const(sv);
3202         if (lp) 
3203             *lp = len;
3204         SvCUR_set(sv, len);
3205     }
3206     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3207                           PTR2UV(sv),SvPVX_const(sv)));
3208     if (flags & SV_CONST_RETURN)
3209         return (char *)SvPVX_const(sv);
3210     if (flags & SV_MUTABLE_RETURN)
3211         return SvPVX_mutable(sv);
3212     return SvPVX(sv);
3213 }
3214
3215 /*
3216 =for apidoc sv_copypv
3217
3218 Copies a stringified representation of the source SV into the
3219 destination SV.  Automatically performs any necessary C<mg_get> and
3220 coercion of numeric values into strings.  Guaranteed to preserve
3221 C<UTF8> flag even from overloaded objects.  Similar in nature to
3222 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3223 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3224 would lose the UTF-8'ness of the PV.
3225
3226 =for apidoc sv_copypv_nomg
3227
3228 Like C<sv_copypv>, but doesn't invoke get magic first.
3229
3230 =for apidoc sv_copypv_flags
3231
3232 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3233 has the C<SV_GMAGIC> bit set.
3234
3235 =cut
3236 */
3237
3238 void
3239 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3240 {
3241     STRLEN len;
3242     const char *s;
3243
3244     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3245
3246     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3247     sv_setpvn(dsv,s,len);
3248     if (SvUTF8(ssv))
3249         SvUTF8_on(dsv);
3250     else
3251         SvUTF8_off(dsv);
3252 }
3253
3254 /*
3255 =for apidoc sv_2pvbyte
3256
3257 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3258 to its length.  May cause the SV to be downgraded from UTF-8 as a
3259 side-effect.
3260
3261 Usually accessed via the C<SvPVbyte> macro.
3262
3263 =cut
3264 */
3265
3266 char *
3267 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3268 {
3269     PERL_ARGS_ASSERT_SV_2PVBYTE;
3270
3271     SvGETMAGIC(sv);
3272     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3273      || isGV_with_GP(sv) || SvROK(sv)) {
3274         SV *sv2 = sv_newmortal();
3275         sv_copypv_nomg(sv2,sv);
3276         sv = sv2;
3277     }
3278     sv_utf8_downgrade(sv,0);
3279     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3280 }
3281
3282 /*
3283 =for apidoc sv_2pvutf8
3284
3285 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3286 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3287
3288 Usually accessed via the C<SvPVutf8> macro.
3289
3290 =cut
3291 */
3292
3293 char *
3294 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3295 {
3296     PERL_ARGS_ASSERT_SV_2PVUTF8;
3297
3298     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3299      || isGV_with_GP(sv) || SvROK(sv))
3300         sv = sv_mortalcopy(sv);
3301     else
3302         SvGETMAGIC(sv);
3303     sv_utf8_upgrade_nomg(sv);
3304     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3305 }
3306
3307
3308 /*
3309 =for apidoc sv_2bool
3310
3311 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3312 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3313 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3314
3315 =for apidoc sv_2bool_flags
3316
3317 This function is only used by C<sv_true()> and friends,  and only if
3318 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3319 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3320
3321
3322 =cut
3323 */
3324
3325 bool
3326 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3327 {
3328     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3329
3330     restart:
3331     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3332
3333     if (!SvOK(sv))
3334         return 0;
3335     if (SvROK(sv)) {
3336         if (SvAMAGIC(sv)) {
3337             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3338             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3339                 bool svb;
3340                 sv = tmpsv;
3341                 if(SvGMAGICAL(sv)) {
3342                     flags = SV_GMAGIC;
3343                     goto restart; /* call sv_2bool */
3344                 }
3345                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3346                 else if(!SvOK(sv)) {
3347                     svb = 0;
3348                 }
3349                 else if(SvPOK(sv)) {
3350                     svb = SvPVXtrue(sv);
3351                 }
3352                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3353                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3354                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3355                 }
3356                 else {
3357                     flags = 0;
3358                     goto restart; /* call sv_2bool_nomg */
3359                 }
3360                 return cBOOL(svb);
3361             }
3362         }
3363         assert(SvRV(sv));
3364         return TRUE;
3365     }
3366     if (isREGEXP(sv))
3367         return
3368           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3369
3370     if (SvNOK(sv) && !SvPOK(sv))
3371         return SvNVX(sv) != 0.0;
3372
3373     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3374 }
3375
3376 /*
3377 =for apidoc sv_utf8_upgrade
3378
3379 Converts the PV of an SV to its UTF-8-encoded form.
3380 Forces the SV to string form if it is not already.
3381 Will C<mg_get> on C<sv> if appropriate.
3382 Always sets the C<SvUTF8> flag to avoid future validity checks even
3383 if the whole string is the same in UTF-8 as not.
3384 Returns the number of bytes in the converted string
3385
3386 This is not a general purpose byte encoding to Unicode interface:
3387 use the Encode extension for that.
3388
3389 =for apidoc sv_utf8_upgrade_nomg
3390
3391 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3392
3393 =for apidoc sv_utf8_upgrade_flags
3394
3395 Converts the PV of an SV to its UTF-8-encoded form.
3396 Forces the SV to string form if it is not already.
3397 Always sets the SvUTF8 flag to avoid future validity checks even
3398 if all the bytes are invariant in UTF-8.
3399 If C<flags> has C<SV_GMAGIC> bit set,
3400 will C<mg_get> on C<sv> if appropriate, else not.
3401
3402 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3403 will expand when converted to UTF-8, and skips the extra work of checking for
3404 that.  Typically this flag is used by a routine that has already parsed the
3405 string and found such characters, and passes this information on so that the
3406 work doesn't have to be repeated.
3407
3408 Returns the number of bytes in the converted string.
3409
3410 This is not a general purpose byte encoding to Unicode interface:
3411 use the Encode extension for that.
3412
3413 =for apidoc sv_utf8_upgrade_flags_grow
3414
3415 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3416 the number of unused bytes the string of C<sv> is guaranteed to have free after
3417 it upon return.  This allows the caller to reserve extra space that it intends
3418 to fill, to avoid extra grows.
3419
3420 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3421 are implemented in terms of this function.
3422
3423 Returns the number of bytes in the converted string (not including the spares).
3424
3425 =cut
3426
3427 (One might think that the calling routine could pass in the position of the
3428 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3429 have to be found again.  But that is not the case, because typically when the
3430 caller is likely to use this flag, it won't be calling this routine unless it
3431 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3432 and just use bytes.  But some things that do fit into a byte are variants in
3433 utf8, and the caller may not have been keeping track of these.)
3434
3435 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3436 C<NUL> isn't guaranteed due to having other routines do the work in some input
3437 cases, or if the input is already flagged as being in utf8.
3438
3439 The speed of this could perhaps be improved for many cases if someone wanted to
3440 write a fast function that counts the number of variant characters in a string,
3441 especially if it could return the position of the first one.
3442
3443 */
3444
3445 STRLEN
3446 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3447 {
3448     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3449
3450     if (sv == &PL_sv_undef)
3451         return 0;
3452     if (!SvPOK_nog(sv)) {
3453         STRLEN len = 0;
3454         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3455             (void) sv_2pv_flags(sv,&len, flags);
3456             if (SvUTF8(sv)) {
3457                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3458                 return len;
3459             }
3460         } else {
3461             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3462         }
3463     }
3464
3465     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3466      * compiled and individual nodes will remain non-utf8 even if the
3467      * stringified version of the pattern gets upgraded. Whether the
3468      * PVX of a REGEXP should be grown or we should just croak, I don't
3469      * know - DAPM */
3470     if (SvUTF8(sv) || isREGEXP(sv)) {
3471         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3472         return SvCUR(sv);
3473     }
3474
3475     if (SvIsCOW(sv)) {
3476         S_sv_uncow(aTHX_ sv, 0);
3477     }
3478
3479     if (SvCUR(sv) == 0) {
3480         if (extra) SvGROW(sv, extra);
3481     } else { /* Assume Latin-1/EBCDIC */
3482         /* This function could be much more efficient if we
3483          * had a FLAG in SVs to signal if there are any variant
3484          * chars in the PV.  Given that there isn't such a flag
3485          * make the loop as fast as possible (although there are certainly ways
3486          * to speed this up, eg. through vectorization) */
3487         U8 * s = (U8 *) SvPVX_const(sv);
3488         U8 * e = (U8 *) SvEND(sv);
3489         U8 *t = s;
3490         STRLEN two_byte_count;
3491         
3492         if (flags & SV_FORCE_UTF8_UPGRADE) {
3493             two_byte_count = 0;
3494         }
3495         else {
3496             if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3497
3498                 /* utf8 conversion not needed because all are invariants.  Mark
3499                  * as UTF-8 even if no variant - saves scanning loop */
3500                 SvUTF8_on(sv);
3501                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3502                 return SvCUR(sv);
3503             }
3504
3505             /* Here, there is at least one variant, and t points to the first
3506              * one */
3507             two_byte_count = 1;
3508         }
3509
3510         /* Note that the incoming SV may not have a trailing '\0', as certain
3511          * code in pp_formline can send us partially built SVs.
3512          *
3513          * Here, the string should be converted to utf8, either because of an
3514          * input flag (which causes two_byte_count to be set to 0), or because
3515          * a character that requires 2 bytes was found (two_byte_count = 1).  t
3516          * points either to the beginning of the string (if we didn't examine
3517          * anything), or to the first variant.  In either case, everything from
3518          * s to t - 1 will occupy only 1 byte each on output.
3519          *
3520          * There are two main ways to convert.  One is to create a new string
3521          * and go through the input starting from the beginning, appending each
3522          * converted value onto the new string as we go along.  It's probably
3523          * best to allocate enough space in the string for the worst possible
3524          * case rather than possibly running out of space and having to
3525          * reallocate and then copy what we've done so far.  Since everything
3526          * from s to t - 1 is invariant, the destination can be initialized
3527          * with these using a fast memory copy
3528          *
3529          * The other way is to figure out exactly how big the string should be,
3530          * by parsing the entire input.  Then you don't have to make it big
3531          * enough to handle the worst possible case, and more importantly, if
3532          * the string you already have is large enough, you don't have to
3533          * allocate a new string, you can copy the last character in the input
3534          * string to the final position(s) that will be occupied by the
3535          * converted string and go backwards, stopping at t, since everything
3536          * before that is invariant.
3537          *
3538          * There are advantages and disadvantages to each method.
3539          *
3540          * In the first method, we can allocate a new string, do the memory
3541          * copy from the s to t - 1, and then proceed through the rest of the
3542          * string byte-by-byte.
3543          *
3544          * In the second method, we proceed through the rest of the input
3545          * string just calculating how big the converted string will be.  Then
3546          * there are two cases:
3547          *  1)  if the string has enough extra space to handle the converted
3548          *      value.  We go backwards through the string, converting until we
3549          *      get to the position we are at now, and then stop.  If this
3550          *      position is far enough along in the string, this method is
3551          *      faster than the first method above.  If the memory copy were
3552          *      the same speed as the byte-by-byte loop, that position would be
3553          *      about half-way, as at the half-way mark, parsing to the end and
3554          *      back is one complete string's parse, the same amount as
3555          *      starting over and going all the way through.  Actually, it
3556          *      would be somewhat less than half-way, as it's faster to just
3557          *      count bytes than to also copy, and we don't have the overhead
3558          *      of allocating a new string, changing the scalar to use it, and
3559          *      freeing the existing one.  But if the memory copy is fast, the
3560          *      break-even point is somewhere after half way.  The counting
3561          *      loop could be sped up by vectorization, etc, to move the
3562          *      break-even point further towards the beginning.
3563          *  2)  if the string doesn't have enough space to handle the converted
3564          *      value.  A new string will have to be allocated, and one might
3565          *      as well, given that, start from the beginning doing the first
3566          *      method.  We've spent extra time parsing the string and in
3567          *      exchange all we've gotten is that we know precisely how big to
3568          *      make the new one.  Perl is more optimized for time than space,
3569          *      so this case is a loser.
3570          * So what I've decided to do is not use the 2nd method unless it is
3571          * guaranteed that a new string won't have to be allocated, assuming
3572          * the worst case.  I also decided not to put any more conditions on it
3573          * than this, for now.  It seems likely that, since the worst case is
3574          * twice as big as the unknown portion of the string (plus 1), we won't
3575          * be guaranteed enough space, causing us to go to the first method,
3576          * unless the string is short, or the first variant character is near
3577          * the end of it.  In either of these cases, it seems best to use the
3578          * 2nd method.  The only circumstance I can think of where this would
3579          * be really slower is if the string had once had much more data in it
3580          * than it does now, but there is still a substantial amount in it  */
3581
3582         {
3583             STRLEN invariant_head = t - s;
3584             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3585             if (SvLEN(sv) < size) {
3586
3587                 /* Here, have decided to allocate a new string */
3588
3589                 U8 *dst;
3590                 U8 *d;
3591
3592                 Newx(dst, size, U8);
3593
3594                 /* If no known invariants at the beginning of the input string,
3595                  * set so starts from there.  Otherwise, can use memory copy to
3596                  * get up to where we are now, and then start from here */
3597
3598                 if (invariant_head == 0) {
3599                     d = dst;
3600                 } else {
3601                     Copy(s, dst, invariant_head, char);
3602                     d = dst + invariant_head;
3603                 }
3604
3605                 while (t < e) {
3606                     append_utf8_from_native_byte(*t, &d);
3607                     t++;
3608                 }
3609                 *d = '\0';
3610                 SvPV_free(sv); /* No longer using pre-existing string */
3611                 SvPV_set(sv, (char*)dst);
3612                 SvCUR_set(sv, d - dst);
3613                 SvLEN_set(sv, size);
3614             } else {
3615
3616                 /* Here, have decided to get the exact size of the string.
3617                  * Currently this happens only when we know that there is
3618                  * guaranteed enough space to fit the converted string, so
3619                  * don't have to worry about growing.  If two_byte_count is 0,
3620                  * then t points to the first byte of the string which hasn't
3621                  * been examined yet.  Otherwise two_byte_count is 1, and t
3622                  * points to the first byte in the string that will expand to
3623                  * two.  Depending on this, start examining at t or 1 after t.
3624                  * */
3625
3626                 U8 *d = t + two_byte_count;
3627
3628
3629                 /* Count up the remaining bytes that expand to two */
3630
3631                 while (d < e) {
3632                     const U8 chr = *d++;
3633                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3634                 }
3635
3636                 /* The string will expand by just the number of bytes that
3637                  * occupy two positions.  But we are one afterwards because of
3638                  * the increment just above.  This is the place to put the
3639                  * trailing NUL, and to set the length before we decrement */
3640
3641                 d += two_byte_count;
3642                 SvCUR_set(sv, d - s);
3643                 *d-- = '\0';
3644
3645
3646                 /* Having decremented d, it points to the position to put the
3647                  * very last byte of the expanded string.  Go backwards through
3648                  * the string, copying and expanding as we go, stopping when we
3649                  * get to the part that is invariant the rest of the way down */
3650
3651                 e--;
3652                 while (e >= t) {
3653                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3654                         *d-- = *e;
3655                     } else {
3656                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3657                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3658                     }
3659                     e--;
3660                 }
3661             }
3662
3663             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3664                 /* Update pos. We do it at the end rather than during
3665                  * the upgrade, to avoid slowing down the common case
3666                  * (upgrade without pos).
3667                  * pos can be stored as either bytes or characters.  Since
3668                  * this was previously a byte string we can just turn off
3669                  * the bytes flag. */
3670                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3671                 if (mg) {
3672                     mg->mg_flags &= ~MGf_BYTES;
3673                 }
3674                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3675                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3676             }
3677         }
3678     }
3679
3680     /* Mark as UTF-8 even if no variant - saves scanning loop */
3681     SvUTF8_on(sv);
3682     return SvCUR(sv);
3683 }
3684
3685 /*
3686 =for apidoc sv_utf8_downgrade
3687
3688 Attempts to convert the PV of an SV from characters to bytes.
3689 If the PV contains a character that cannot fit
3690 in a byte, this conversion will fail;
3691 in this case, either returns false or, if C<fail_ok> is not
3692 true, croaks.
3693
3694 This is not a general purpose Unicode to byte encoding interface:
3695 use the C<Encode> extension for that.
3696
3697 =cut
3698 */
3699
3700 bool
3701 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3702 {
3703     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3704
3705     if (SvPOKp(sv) && SvUTF8(sv)) {
3706         if (SvCUR(sv)) {
3707             U8 *s;
3708             STRLEN len;
3709             int mg_flags = SV_GMAGIC;
3710
3711             if (SvIsCOW(sv)) {
3712                 S_sv_uncow(aTHX_ sv, 0);
3713             }
3714             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3715                 /* update pos */
3716                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3717                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3718                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3719                                                 SV_GMAGIC|SV_CONST_RETURN);
3720                         mg_flags = 0; /* sv_pos_b2u does get magic */
3721                 }
3722                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3723                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3724
3725             }
3726             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3727
3728             if (!utf8_to_bytes(s, &len)) {
3729                 if (fail_ok)
3730                     return FALSE;
3731                 else {
3732                     if (PL_op)
3733                         Perl_croak(aTHX_ "Wide character in %s",
3734                                    OP_DESC(PL_op));
3735                     else
3736                         Perl_croak(aTHX_ "Wide character");
3737                 }
3738             }
3739             SvCUR_set(sv, len);
3740         }
3741     }
3742     SvUTF8_off(sv);
3743     return TRUE;
3744 }
3745
3746 /*
3747 =for apidoc sv_utf8_encode
3748
3749 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3750 flag off so that it looks like octets again.
3751
3752 =cut
3753 */
3754
3755 void
3756 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3757 {
3758     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3759
3760     if (SvREADONLY(sv)) {
3761         sv_force_normal_flags(sv, 0);
3762     }
3763     (void) sv_utf8_upgrade(sv);
3764     SvUTF8_off(sv);
3765 }
3766
3767 /*
3768 =for apidoc sv_utf8_decode
3769
3770 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3771 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3772 so that it looks like a character.  If the PV contains only single-byte
3773 characters, the C<SvUTF8> flag stays off.
3774 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3775
3776 =cut
3777 */
3778
3779 bool
3780 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3781 {
3782     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3783
3784     if (SvPOKp(sv)) {
3785         const U8 *start, *c;
3786
3787         /* The octets may have got themselves encoded - get them back as
3788          * bytes
3789          */
3790         if (!sv_utf8_downgrade(sv, TRUE))
3791             return FALSE;
3792
3793         /* it is actually just a matter of turning the utf8 flag on, but
3794          * we want to make sure everything inside is valid utf8 first.
3795          */
3796         c = start = (const U8 *) SvPVX_const(sv);
3797         if (!is_utf8_string(c, SvCUR(sv)))
3798             return FALSE;
3799         if (! is_utf8_invariant_string(c, SvCUR(sv))) {
3800             SvUTF8_on(sv);
3801         }
3802         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3803             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3804                    after this, clearing pos.  Does anything on CPAN
3805                    need this? */
3806             /* adjust pos to the start of a UTF8 char sequence */
3807             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3808             if (mg) {
3809                 I32 pos = mg->mg_len;
3810                 if (pos > 0) {
3811                     for (c = start + pos; c > start; c--) {
3812                         if (UTF8_IS_START(*c))
3813                             break;
3814                     }
3815                     mg->mg_len  = c - start;
3816                 }
3817             }
3818             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3819                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3820         }
3821     }
3822     return TRUE;
3823 }
3824
3825 /*
3826 =for apidoc sv_setsv
3827
3828 Copies the contents of the source SV C<ssv> into the destination SV
3829 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3830 function if the source SV needs to be reused.  Does not handle 'set' magic on
3831 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3832 performs a copy-by-value, obliterating any previous content of the
3833 destination.
3834
3835 You probably want to use one of the assortment of wrappers, such as
3836 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3837 C<SvSetMagicSV_nosteal>.
3838
3839 =for apidoc sv_setsv_flags
3840
3841 Copies the contents of the source SV C<ssv> into the destination SV
3842 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3843 function if the source SV needs to be reused.  Does not handle 'set' magic.
3844 Loosely speaking, it performs a copy-by-value, obliterating any previous
3845 content of the destination.
3846 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3847 C<ssv> if appropriate, else not.  If the C<flags>
3848 parameter has the C<SV_NOSTEAL> bit set then the
3849 buffers of temps will not be stolen.  C<sv_setsv>
3850 and C<sv_setsv_nomg> are implemented in terms of this function.
3851
3852 You probably want to use one of the assortment of wrappers, such as
3853 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3854 C<SvSetMagicSV_nosteal>.
3855
3856 This is the primary function for copying scalars, and most other
3857 copy-ish functions and macros use this underneath.
3858
3859 =cut
3860 */
3861
3862 static void
3863 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3864 {
3865     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3866     HV *old_stash = NULL;
3867
3868     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3869
3870     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3871         const char * const name = GvNAME(sstr);
3872         const STRLEN len = GvNAMELEN(sstr);
3873         {
3874             if (dtype >= SVt_PV) {
3875                 SvPV_free(dstr);
3876                 SvPV_set(dstr, 0);
3877                 SvLEN_set(dstr, 0);
3878                 SvCUR_set(dstr, 0);
3879             }
3880             SvUPGRADE(dstr, SVt_PVGV);
3881             (void)SvOK_off(dstr);
3882             isGV_with_GP_on(dstr);
3883         }
3884         GvSTASH(dstr) = GvSTASH(sstr);
3885         if (GvSTASH(dstr))
3886             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3887         gv_name_set(MUTABLE_GV(dstr), name, len,
3888                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3889         SvFAKE_on(dstr);        /* can coerce to non-glob */
3890     }
3891
3892     if(GvGP(MUTABLE_GV(sstr))) {
3893         /* If source has method cache entry, clear it */
3894         if(GvCVGEN(sstr)) {
3895             SvREFCNT_dec(GvCV(sstr));
3896             GvCV_set(sstr, NULL);
3897             GvCVGEN(sstr) = 0;
3898         }
3899         /* If source has a real method, then a method is
3900            going to change */
3901         else if(
3902          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3903         ) {
3904             mro_changes = 1;
3905         }
3906     }
3907
3908     /* If dest already had a real method, that's a change as well */
3909     if(
3910         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3911      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3912     ) {
3913         mro_changes = 1;
3914     }
3915
3916     /* We don't need to check the name of the destination if it was not a
3917        glob to begin with. */
3918     if(dtype == SVt_PVGV) {
3919         const char * const name = GvNAME((const GV *)dstr);
3920         if(
3921             strEQ(name,"ISA")
3922          /* The stash may have been detached from the symbol table, so
3923             check its name. */
3924          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3925         )
3926             mro_changes = 2;
3927         else {
3928             const STRLEN len = GvNAMELEN(dstr);
3929             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3930              || (len == 1 && name[0] == ':')) {
3931                 mro_changes = 3;
3932
3933                 /* Set aside the old stash, so we can reset isa caches on
3934                    its subclasses. */
3935                 if((old_stash = GvHV(dstr)))
3936                     /* Make sure we do not lose it early. */
3937                     SvREFCNT_inc_simple_void_NN(
3938                      sv_2mortal((SV *)old_stash)
3939                     );
3940             }
3941         }
3942
3943         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3944     }
3945
3946     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3947      * so temporarily protect it */
3948     ENTER;
3949     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3950     gp_free(MUTABLE_GV(dstr));
3951     GvINTRO_off(dstr);          /* one-shot flag */
3952     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3953     LEAVE;
3954
3955     if (SvTAINTED(sstr))
3956         SvTAINT(dstr);
3957     if (GvIMPORTED(dstr) != GVf_IMPORTED
3958         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3959         {
3960             GvIMPORTED_on(dstr);
3961         }
3962     GvMULTI_on(dstr);
3963     if(mro_changes == 2) {
3964       if (GvAV((const GV *)sstr)) {
3965         MAGIC *mg;
3966         SV * const sref = (SV *)GvAV((const GV *)dstr);
3967         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3968             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3969                 AV * const ary = newAV();
3970                 av_push(ary, mg->mg_obj); /* takes the refcount */
3971                 mg->mg_obj = (SV *)ary;
3972             }
3973             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3974         }
3975         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3976       }
3977       mro_isa_changed_in(GvSTASH(dstr));
3978     }
3979     else if(mro_changes == 3) {
3980         HV * const stash = GvHV(dstr);
3981         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3982             mro_package_moved(
3983                 stash, old_stash,
3984                 (GV *)dstr, 0
3985             );
3986     }
3987     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3988     if (GvIO(dstr) && dtype == SVt_PVGV) {
3989         DEBUG_o(Perl_deb(aTHX_
3990                         "glob_assign_glob clearing PL_stashcache\n"));
3991         /* It's a cache. It will rebuild itself quite happily.
3992            It's a lot of effort to work out exactly which key (or keys)
3993            might be invalidated by the creation of the this file handle.
3994          */
3995         hv_clear(PL_stashcache);
3996     }
3997     return;
3998 }
3999
4000 void
4001 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4002 {
4003     SV * const sref = SvRV(sstr);
4004     SV *dref;
4005     const int intro = GvINTRO(dstr);
4006     SV **location;
4007     U8 import_flag = 0;
4008     const U32 stype = SvTYPE(sref);
4009
4010     PERL_ARGS_ASSERT_GV_SETREF;
4011
4012     if (intro) {
4013         GvINTRO_off(dstr);      /* one-shot flag */
4014         GvLINE(dstr) = CopLINE(PL_curcop);
4015         GvEGV(dstr) = MUTABLE_GV(dstr);
4016     }
4017     GvMULTI_on(dstr);
4018     switch (stype) {
4019     case SVt_PVCV:
4020         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4021         import_flag = GVf_IMPORTED_CV;
4022         goto common;
4023     case SVt_PVHV:
4024         location = (SV **) &GvHV(dstr);
4025         import_flag = GVf_IMPORTED_HV;
4026         goto common;
4027     case SVt_PVAV:
4028         location = (SV **) &GvAV(dstr);
4029         import_flag = GVf_IMPORTED_AV;
4030         goto common;
4031     case SVt_PVIO:
4032         location = (SV **) &GvIOp(dstr);
4033         goto common;
4034     case SVt_PVFM:
4035         location = (SV **) &GvFORM(dstr);
4036         goto common;
4037     default:
4038         location = &GvSV(dstr);
4039         import_flag = GVf_IMPORTED_SV;
4040     common:
4041         if (intro) {
4042             if (stype == SVt_PVCV) {
4043                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4044                 if (GvCVGEN(dstr)) {
4045                     SvREFCNT_dec(GvCV(dstr));
4046                     GvCV_set(dstr, NULL);
4047                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4048                 }
4049             }
4050             /* SAVEt_GVSLOT takes more room on the savestack and has more
4051                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4052                leave_scope needs access to the GV so it can reset method
4053                caches.  We must use SAVEt_GVSLOT whenever the type is
4054                SVt_PVCV, even if the stash is anonymous, as the stash may
4055                gain a name somehow before leave_scope. */
4056             if (stype == SVt_PVCV) {
4057                 /* There is no save_pushptrptrptr.  Creating it for this
4058                    one call site would be overkill.  So inline the ss add
4059                    routines here. */
4060                 dSS_ADD;
4061                 SS_ADD_PTR(dstr);
4062                 SS_ADD_PTR(location);
4063                 SS_ADD_PTR(SvREFCNT_inc(*location));
4064                 SS_ADD_UV(SAVEt_GVSLOT);
4065                 SS_ADD_END(4);
4066             }
4067             else SAVEGENERICSV(*location);
4068         }
4069         dref = *location;
4070         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4071             CV* const cv = MUTABLE_CV(*location);
4072             if (cv) {
4073                 if (!GvCVGEN((const GV *)dstr) &&
4074                     (CvROOT(cv) || CvXSUB(cv)) &&
4075                     /* redundant check that avoids creating the extra SV
4076                        most of the time: */
4077                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4078                     {
4079                         SV * const new_const_sv =
4080                             CvCONST((const CV *)sref)
4081                                  ? cv_const_sv((const CV *)sref)
4082                                  : NULL;
4083                         HV * const stash = GvSTASH((const GV *)dstr);
4084                         report_redefined_cv(
4085                            sv_2mortal(
4086                              stash
4087                                ? Perl_newSVpvf(aTHX_
4088                                     "%" HEKf "::%" HEKf,
4089                                     HEKfARG(HvNAME_HEK(stash)),
4090                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4091                                : Perl_newSVpvf(aTHX_
4092                                     "%" HEKf,
4093                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4094                            ),
4095                            cv,
4096                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4097                         );
4098                     }
4099                 if (!intro)
4100                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4101                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4102                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4103                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4104             }
4105             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4106             GvASSUMECV_on(dstr);
4107             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4108                 if (intro && GvREFCNT(dstr) > 1) {
4109                     /* temporary remove extra savestack's ref */
4110                     --GvREFCNT(dstr);
4111                     gv_method_changed(dstr);
4112                     ++GvREFCNT(dstr);
4113                 }
4114                 else gv_method_changed(dstr);
4115             }
4116         }
4117         *location = SvREFCNT_inc_simple_NN(sref);
4118         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4119             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4120             GvFLAGS(dstr) |= import_flag;
4121         }
4122
4123         if (stype == SVt_PVHV) {
4124             const char * const name = GvNAME((GV*)dstr);
4125             const STRLEN len = GvNAMELEN(dstr);
4126             if (
4127                 (
4128                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4129                 || (len == 1 && name[0] == ':')
4130                 )
4131              && (!dref || HvENAME_get(dref))
4132             ) {
4133                 mro_package_moved(
4134                     (HV *)sref, (HV *)dref,
4135                     (GV *)dstr, 0
4136                 );
4137             }
4138         }
4139         else if (
4140             stype == SVt_PVAV && sref != dref
4141          && strEQ(GvNAME((GV*)dstr), "ISA")
4142          /* The stash may have been detached from the symbol table, so
4143             check its name before doing anything. */
4144          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4145         ) {
4146             MAGIC *mg;
4147             MAGIC * const omg = dref && SvSMAGICAL(dref)
4148                                  ? mg_find(dref, PERL_MAGIC_isa)
4149                                  : NULL;
4150             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4151                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4152                     AV * const ary = newAV();
4153                     av_push(ary, mg->mg_obj); /* takes the refcount */
4154                     mg->mg_obj = (SV *)ary;
4155                 }
4156                 if (omg) {
4157                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4158                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4159                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4160                         while (items--)
4161                             av_push(
4162                              (AV *)mg->mg_obj,
4163                              SvREFCNT_inc_simple_NN(*svp++)
4164                             );
4165                     }
4166                     else
4167                         av_push(
4168                          (AV *)mg->mg_obj,
4169                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4170                         );
4171                 }
4172                 else
4173                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4174             }
4175             else
4176             {
4177                 SSize_t i;
4178                 sv_magic(
4179                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4180                 );
4181                 for (i = 0; i <= AvFILL(sref); ++i) {
4182                     SV **elem = av_fetch ((AV*)sref, i, 0);
4183                     if (elem) {
4184                         sv_magic(
4185                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4186                         );
4187                     }
4188                 }
4189                 mg = mg_find(sref, PERL_MAGIC_isa);
4190             }
4191             /* Since the *ISA assignment could have affected more than
4192                one stash, don't call mro_isa_changed_in directly, but let
4193                magic_clearisa do it for us, as it already has the logic for
4194                dealing with globs vs arrays of globs. */
4195             assert(mg);
4196             Perl_magic_clearisa(aTHX_ NULL, mg);
4197         }
4198         else if (stype == SVt_PVIO) {
4199             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4200             /* It's a cache. It will rebuild itself quite happily.
4201                It's a lot of effort to work out exactly which key (or keys)
4202                might be invalidated by the creation of the this file handle.
4203             */
4204             hv_clear(PL_stashcache);
4205         }
4206         break;
4207     }
4208     if (!intro) SvREFCNT_dec(dref);
4209     if (SvTAINTED(sstr))
4210         SvTAINT(dstr);
4211     return;
4212 }
4213
4214
4215
4216
4217 #ifdef PERL_DEBUG_READONLY_COW
4218 # include <sys/mman.h>
4219
4220 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4221 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4222 # endif
4223
4224 void
4225 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4226 {
4227     struct perl_memory_debug_header * const header =
4228         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4229     const MEM_SIZE len = header->size;
4230     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4231 # ifdef PERL_TRACK_MEMPOOL
4232     if (!header->readonly) header->readonly = 1;
4233 # endif
4234     if (mprotect(header, len, PROT_READ))
4235         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4236                          header, len, errno);
4237 }
4238
4239 static void
4240 S_sv_buf_to_rw(pTHX_ SV *sv)
4241 {
4242     struct perl_memory_debug_header * const header =
4243         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4244     const MEM_SIZE len = header->size;
4245     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4246     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4247         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4248                          header, len, errno);
4249 # ifdef PERL_TRACK_MEMPOOL
4250     header->readonly = 0;
4251 # endif
4252 }
4253
4254 #else
4255 # define sv_buf_to_ro(sv)       NOOP
4256 # define sv_buf_to_rw(sv)       NOOP
4257 #endif
4258
4259 void
4260 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4261 {
4262     U32 sflags;
4263     int dtype;
4264     svtype stype;
4265     unsigned int both_type;
4266
4267     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4268
4269     if (UNLIKELY( sstr == dstr ))
4270         return;
4271
4272     if (UNLIKELY( !sstr ))
4273         sstr = &PL_sv_undef;
4274
4275     stype = SvTYPE(sstr);
4276     dtype = SvTYPE(dstr);
4277     both_type = (stype | dtype);
4278
4279     /* with these values, we can check that both SVs are NULL/IV (and not
4280      * freed) just by testing the or'ed types */
4281     STATIC_ASSERT_STMT(SVt_NULL == 0);
4282     STATIC_ASSERT_STMT(SVt_IV   == 1);
4283     if (both_type <= 1) {
4284         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4285          * special-casing */
4286         U32 sflags;
4287         U32 new_dflags;
4288         SV *old_rv = NULL;
4289
4290         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4291         if (SvREADONLY(dstr))
4292             Perl_croak_no_modify();
4293         if (SvROK(dstr)) {
4294             if (SvWEAKREF(dstr))
4295                 sv_unref_flags(dstr, 0);
4296             else
4297                 old_rv = SvRV(dstr);
4298         }
4299
4300         assert(!SvGMAGICAL(sstr));
4301         assert(!SvGMAGICAL(dstr));
4302
4303         sflags = SvFLAGS(sstr);
4304         if (sflags & (SVf_IOK|SVf_ROK)) {
4305             SET_SVANY_FOR_BODYLESS_IV(dstr);
4306             new_dflags = SVt_IV;
4307
4308             if (sflags & SVf_ROK) {
4309                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4310                 new_dflags |= SVf_ROK;
4311             }
4312             else {
4313                 /* both src and dst are <= SVt_IV, so sv_any points to the
4314                  * head; so access the head directly
4315                  */
4316                 assert(    &(sstr->sv_u.svu_iv)
4317                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4318                 assert(    &(dstr->sv_u.svu_iv)
4319                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4320                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4321                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4322             }
4323         }
4324         else {
4325             new_dflags = dtype; /* turn off everything except the type */
4326         }
4327         SvFLAGS(dstr) = new_dflags;
4328         SvREFCNT_dec(old_rv);
4329
4330         return;
4331     }
4332
4333     if (UNLIKELY(both_type == SVTYPEMASK)) {
4334         if (SvIS_FREED(dstr)) {
4335             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4336                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4337         }
4338         if (SvIS_FREED(sstr)) {
4339             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4340                        (void*)sstr, (void*)dstr);
4341         }
4342     }
4343
4344
4345
4346     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4347     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4348
4349     /* There's a lot of redundancy below but we're going for speed here */
4350
4351     switch (stype) {
4352     case SVt_NULL:
4353       undef_sstr:
4354         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4355             (void)SvOK_off(dstr);
4356             return;
4357         }
4358         break;
4359     case SVt_IV:
4360         if (SvIOK(sstr)) {
4361             switch (dtype) {
4362             case SVt_NULL:
4363                 /* For performance, we inline promoting to type SVt_IV. */
4364                 /* We're starting from SVt_NULL, so provided that define is
4365                  * actual 0, we don't have to unset any SV type flags
4366                  * to promote to SVt_IV. */
4367                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4368                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4369                 SvFLAGS(dstr) |= SVt_IV;
4370                 break;
4371             case SVt_NV:
4372             case SVt_PV:
4373                 sv_upgrade(dstr, SVt_PVIV);
4374                 break;
4375             case SVt_PVGV:
4376             case SVt_PVLV:
4377                 goto end_of_first_switch;
4378             }
4379             (void)SvIOK_only(dstr);
4380             SvIV_set(dstr,  SvIVX(sstr));
4381             if (SvIsUV(sstr))
4382                 SvIsUV_on(dstr);
4383             /* SvTAINTED can only be true if the SV has taint magic, which in
4384                turn means that the SV type is PVMG (or greater). This is the
4385                case statement for SVt_IV, so this cannot be true (whatever gcov
4386                may say).  */
4387             assert(!SvTAINTED(sstr));
4388             return;
4389         }
4390         if (!SvROK(sstr))
4391             goto undef_sstr;
4392         if (dtype < SVt_PV && dtype != SVt_IV)
4393             sv_upgrade(dstr, SVt_IV);
4394         break;
4395
4396     case SVt_NV:
4397         if (LIKELY( SvNOK(sstr) )) {
4398             switch (dtype) {
4399             case SVt_NULL:
4400             case SVt_IV:
4401                 sv_upgrade(dstr, SVt_NV);
4402                 break;
4403             case SVt_PV:
4404             case SVt_PVIV:
4405                 sv_upgrade(dstr, SVt_PVNV);
4406                 break;
4407             case SVt_PVGV:
4408             case SVt_PVLV:
4409                 goto end_of_first_switch;
4410             }
4411             SvNV_set(dstr, SvNVX(sstr));
4412             (void)SvNOK_only(dstr);
4413             /* SvTAINTED can only be true if the SV has taint magic, which in
4414                turn means that the SV type is PVMG (or greater). This is the
4415                case statement for SVt_NV, so this cannot be true (whatever gcov
4416                may say).  */
4417             assert(!SvTAINTED(sstr));
4418             return;
4419         }
4420         goto undef_sstr;
4421
4422     case SVt_PV:
4423         if (dtype < SVt_PV)
4424             sv_upgrade(dstr, SVt_PV);
4425         break;
4426     case SVt_PVIV:
4427         if (dtype < SVt_PVIV)
4428             sv_upgrade(dstr, SVt_PVIV);
4429         break;
4430     case SVt_PVNV:
4431         if (dtype < SVt_PVNV)
4432             sv_upgrade(dstr, SVt_PVNV);
4433         break;
4434     default:
4435         {
4436         const char * const type = sv_reftype(sstr,0);
4437         if (PL_op)
4438             /* diag_listed_as: Bizarre copy of %s */
4439             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4440         else
4441             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4442         }
4443         NOT_REACHED; /* NOTREACHED */
4444
4445     case SVt_REGEXP:
4446       upgregexp:
4447         if (dtype < SVt_REGEXP)
4448             sv_upgrade(dstr, SVt_REGEXP);
4449         break;
4450
4451         case SVt_INVLIST:
4452     case SVt_PVLV:
4453     case SVt_PVGV:
4454     case SVt_PVMG:
4455         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4456             mg_get(sstr);
4457             if (SvTYPE(sstr) != stype)
4458                 stype = SvTYPE(sstr);
4459         }
4460         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4461                     glob_assign_glob(dstr, sstr, dtype);
4462                     return;
4463         }
4464         if (stype == SVt_PVLV)
4465         {
4466             if (isREGEXP(sstr)) goto upgregexp;
4467             SvUPGRADE(dstr, SVt_PVNV);
4468         }
4469         else
4470             SvUPGRADE(dstr, (svtype)stype);
4471     }
4472  end_of_first_switch:
4473
4474     /* dstr may have been upgraded.  */
4475     dtype = SvTYPE(dstr);
4476     sflags = SvFLAGS(sstr);
4477
4478     if (UNLIKELY( dtype == SVt_PVCV )) {
4479         /* Assigning to a subroutine sets the prototype.  */
4480         if (SvOK(sstr)) {
4481             STRLEN len;
4482             const char *const ptr = SvPV_const(sstr, len);
4483
4484             SvGROW(dstr, len + 1);
4485             Copy(ptr, SvPVX(dstr), len + 1, char);
4486             SvCUR_set(dstr, len);
4487             SvPOK_only(dstr);
4488             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4489             CvAUTOLOAD_off(dstr);
4490         } else {
4491             SvOK_off(dstr);
4492         }
4493     }
4494     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4495              || dtype == SVt_PVFM))
4496     {
4497         const char * const type = sv_reftype(dstr,0);
4498         if (PL_op)
4499             /* diag_listed_as: Cannot copy to %s */
4500             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4501         else
4502             Perl_croak(aTHX_ "Cannot copy to %s", type);
4503     } else if (sflags & SVf_ROK) {
4504         if (isGV_with_GP(dstr)
4505             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4506             sstr = SvRV(sstr);
4507             if (sstr == dstr) {
4508                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4509                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4510                 {
4511                     GvIMPORTED_on(dstr);
4512                 }
4513                 GvMULTI_on(dstr);
4514                 return;
4515             }
4516             glob_assign_glob(dstr, sstr, dtype);
4517             return;
4518         }
4519
4520         if (dtype >= SVt_PV) {
4521             if (isGV_with_GP(dstr)) {
4522                 gv_setref(dstr, sstr);
4523                 return;
4524             }
4525             if (SvPVX_const(dstr)) {
4526                 SvPV_free(dstr);
4527                 SvLEN_set(dstr, 0);
4528                 SvCUR_set(dstr, 0);
4529             }
4530         }
4531         (void)SvOK_off(dstr);
4532         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4533         SvFLAGS(dstr) |= sflags & SVf_ROK;
4534         assert(!(sflags & SVp_NOK));
4535         assert(!(sflags & SVp_IOK));
4536         assert(!(sflags & SVf_NOK));
4537         assert(!(sflags & SVf_IOK));
4538     }
4539     else if (isGV_with_GP(dstr)) {
4540         if (!(sflags & SVf_OK)) {
4541             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4542                            "Undefined value assigned to typeglob");
4543         }
4544         else {
4545             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4546             if (dstr != (const SV *)gv) {
4547                 const char * const name = GvNAME((const GV *)dstr);
4548                 const STRLEN len = GvNAMELEN(dstr);
4549                 HV *old_stash = NULL;
4550                 bool reset_isa = FALSE;
4551                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4552                  || (len == 1 && name[0] == ':')) {
4553                     /* Set aside the old stash, so we can reset isa caches
4554                        on its subclasses. */
4555                     if((old_stash = GvHV(dstr))) {
4556                         /* Make sure we do not lose it early. */
4557                         SvREFCNT_inc_simple_void_NN(
4558                          sv_2mortal((SV *)old_stash)
4559                         );
4560                     }
4561                     reset_isa = TRUE;
4562                 }
4563
4564                 if (GvGP(dstr)) {
4565                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4566                     gp_free(MUTABLE_GV(dstr));
4567                 }
4568                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4569
4570                 if (reset_isa) {
4571                     HV * const stash = GvHV(dstr);
4572                     if(
4573                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4574                     )
4575                         mro_package_moved(
4576                          stash, old_stash,
4577                          (GV *)dstr, 0
4578                         );
4579                 }
4580             }
4581         }
4582     }
4583     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4584           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4585         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4586     }
4587     else if (sflags & SVp_POK) {
4588         const STRLEN cur = SvCUR(sstr);
4589         const STRLEN len = SvLEN(sstr);
4590
4591         /*
4592          * We have three basic ways to copy the string:
4593          *
4594          *  1. Swipe
4595          *  2. Copy-on-write
4596          *  3. Actual copy
4597          * 
4598          * Which we choose is based on various factors.  The following
4599          * things are listed in order of speed, fastest to slowest:
4600          *  - Swipe
4601          *  - Copying a short string
4602          *  - Copy-on-write bookkeeping
4603          *  - malloc
4604          *  - Copying a long string
4605          * 
4606          * We swipe the string (steal the string buffer) if the SV on the
4607          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4608          * big win on long strings.  It should be a win on short strings if
4609          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4610          * slow things down, as SvPVX_const(sstr) would have been freed
4611          * soon anyway.
4612          * 
4613          * We also steal the buffer from a PADTMP (operator target) if it
4614          * is â€˜long enough’.  For short strings, a swipe does not help
4615          * here, as it causes more malloc calls the next time the target
4616          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4617          * be allocated it is still not worth swiping PADTMPs for short
4618          * strings, as the savings here are small.
4619          * 
4620          * If swiping is not an option, then we see whether it is
4621          * worth using copy-on-write.  If the lhs already has a buf-
4622          * fer big enough and the string is short, we skip it and fall back
4623          * to method 3, since memcpy is faster for short strings than the
4624          * later bookkeeping overhead that copy-on-write entails.
4625
4626          * If the rhs is not a copy-on-write string yet, then we also
4627          * consider whether the buffer is too large relative to the string
4628          * it holds.  Some operations such as readline allocate a large
4629          * buffer in the expectation of reusing it.  But turning such into
4630          * a COW buffer is counter-productive because it increases memory
4631          * usage by making readline allocate a new large buffer the sec-
4632          * ond time round.  So, if the buffer is too large, again, we use
4633          * method 3 (copy).
4634          * 
4635          * Finally, if there is no buffer on the left, or the buffer is too 
4636          * small, then we use copy-on-write and make both SVs share the
4637          * string buffer.
4638          *
4639          */
4640
4641         /* Whichever path we take through the next code, we want this true,
4642            and doing it now facilitates the COW check.  */
4643         (void)SvPOK_only(dstr);
4644
4645         if (
4646                  (              /* Either ... */
4647                                 /* slated for free anyway (and not COW)? */
4648                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4649                                 /* or a swipable TARG */
4650                  || ((sflags &
4651                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4652                        == SVs_PADTMP
4653                                 /* whose buffer is worth stealing */
4654                      && CHECK_COWBUF_THRESHOLD(cur,len)
4655                     )
4656                  ) &&
4657                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4658                  (!(flags & SV_NOSTEAL)) &&
4659                                         /* and we're allowed to steal temps */
4660                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4661                  len)             /* and really is a string */
4662         {       /* Passes the swipe test.  */
4663             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4664                 SvPV_free(dstr);
4665             SvPV_set(dstr, SvPVX_mutable(sstr));
4666             SvLEN_set(dstr, SvLEN(sstr));
4667             SvCUR_set(dstr, SvCUR(sstr));
4668
4669             SvTEMP_off(dstr);
4670             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4671             SvPV_set(sstr, NULL);
4672             SvLEN_set(sstr, 0);
4673             SvCUR_set(sstr, 0);
4674             SvTEMP_off(sstr);
4675         }
4676         else if (flags & SV_COW_SHARED_HASH_KEYS
4677               &&
4678 #ifdef PERL_COPY_ON_WRITE
4679                  (sflags & SVf_IsCOW
4680                    ? (!len ||
4681                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4682                           /* If this is a regular (non-hek) COW, only so
4683                              many COW "copies" are possible. */
4684                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4685                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4686                      && !(SvFLAGS(dstr) & SVf_BREAK)
4687                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4688                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4689                     ))
4690 #else
4691                  sflags & SVf_IsCOW
4692               && !(SvFLAGS(dstr) & SVf_BREAK)
4693 #endif
4694             ) {
4695             /* Either it's a shared hash key, or it's suitable for
4696                copy-on-write.  */
4697             if (DEBUG_C_TEST) {
4698                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4699                 sv_dump(sstr);
4700                 sv_dump(dstr);
4701             }
4702 #ifdef PERL_ANY_COW
4703             if (!(sflags & SVf_IsCOW)) {
4704                     SvIsCOW_on(sstr);
4705                     CowREFCNT(sstr) = 0;
4706             }
4707 #endif
4708             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4709                 SvPV_free(dstr);
4710             }
4711
4712 #ifdef PERL_ANY_COW
4713             if (len) {
4714                     if (sflags & SVf_IsCOW) {
4715                         sv_buf_to_rw(sstr);
4716                     }
4717                     CowREFCNT(sstr)++;
4718                     SvPV_set(dstr, SvPVX_mutable(sstr));
4719                     sv_buf_to_ro(sstr);
4720             } else
4721 #endif
4722             {
4723                     /* SvIsCOW_shared_hash */
4724                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4725                                           "Copy on write: Sharing hash\n"));
4726
4727                     assert (SvTYPE(dstr) >= SVt_PV);
4728                     SvPV_set(dstr,
4729                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4730             }
4731             SvLEN_set(dstr, len);
4732             SvCUR_set(dstr, cur);
4733             SvIsCOW_on(dstr);
4734         } else {
4735             /* Failed the swipe test, and we cannot do copy-on-write either.
4736                Have to copy the string.  */
4737             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4738             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4739             SvCUR_set(dstr, cur);
4740             *SvEND(dstr) = '\0';
4741         }
4742         if (sflags & SVp_NOK) {
4743             SvNV_set(dstr, SvNVX(sstr));
4744         }
4745         if (sflags & SVp_IOK) {
4746             SvIV_set(dstr, SvIVX(sstr));
4747             if (sflags & SVf_IVisUV)
4748                 SvIsUV_on(dstr);
4749         }
4750         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4751         {
4752             const MAGIC * const smg = SvVSTRING_mg(sstr);
4753             if (smg) {
4754                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4755                          smg->mg_ptr, smg->mg_len);
4756                 SvRMAGICAL_on(dstr);
4757             }
4758         }
4759     }
4760     else if (sflags & (SVp_IOK|SVp_NOK)) {
4761         (void)SvOK_off(dstr);
4762         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4763         if (sflags & SVp_IOK) {
4764             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4765             SvIV_set(dstr, SvIVX(sstr));
4766         }
4767         if (sflags & SVp_NOK) {
4768             SvNV_set(dstr, SvNVX(sstr));
4769         }
4770     }
4771     else {
4772         if (isGV_with_GP(sstr)) {
4773             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4774         }
4775         else
4776             (void)SvOK_off(dstr);
4777     }
4778     if (SvTAINTED(sstr))
4779         SvTAINT(dstr);
4780 }
4781
4782
4783 /*
4784 =for apidoc sv_set_undef
4785
4786 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4787 Doesn't handle set magic.
4788
4789 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4790 buffer, unlike C<undef $sv>.
4791
4792 Introduced in perl 5.25.12.
4793
4794 =cut
4795 */
4796
4797 void
4798 Perl_sv_set_undef(pTHX_ SV *sv)
4799 {
4800     U32 type = SvTYPE(sv);
4801
4802     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4803
4804     /* shortcut, NULL, IV, RV */
4805
4806     if (type <= SVt_IV) {
4807         assert(!SvGMAGICAL(sv));
4808         if (SvREADONLY(sv)) {
4809             /* does undeffing PL_sv_undef count as modifying a read-only
4810              * variable? Some XS code does this */
4811             if (sv == &PL_sv_undef)
4812                 return;
4813             Perl_croak_no_modify();
4814         }
4815
4816         if (SvROK(sv)) {
4817             if (SvWEAKREF(sv))
4818                 sv_unref_flags(sv, 0);
4819             else {
4820                 SV *rv = SvRV(sv);
4821                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4822                 SvREFCNT_dec_NN(rv);
4823                 return;
4824             }
4825         }
4826         SvFLAGS(sv) = type; /* quickly turn off all flags */
4827         return;
4828     }
4829
4830     if (SvIS_FREED(sv))
4831         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4832             (void *)sv);
4833
4834     SV_CHECK_THINKFIRST_COW_DROP(sv);
4835
4836     if (isGV_with_GP(sv))
4837         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4838                        "Undefined value assigned to typeglob");
4839     else
4840         SvOK_off(sv);
4841 }
4842
4843
4844
4845 /*
4846 =for apidoc sv_setsv_mg
4847
4848 Like C<sv_setsv>, but also handles 'set' magic.
4849
4850 =cut
4851 */
4852
4853 void
4854 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4855 {
4856     PERL_ARGS_ASSERT_SV_SETSV_MG;
4857
4858     sv_setsv(dstr,sstr);
4859     SvSETMAGIC(dstr);
4860 }
4861
4862 #ifdef PERL_ANY_COW
4863 #  define SVt_COW SVt_PV
4864 SV *
4865 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4866 {
4867     STRLEN cur = SvCUR(sstr);
4868     STRLEN len = SvLEN(sstr);
4869     char *new_pv;
4870 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4871     const bool already = cBOOL(SvIsCOW(sstr));
4872 #endif
4873
4874     PERL_ARGS_ASSERT_SV_SETSV_COW;
4875
4876     if (DEBUG_C_TEST) {
4877         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4878                       (void*)sstr, (void*)dstr);
4879         sv_dump(sstr);
4880         if (dstr)
4881                     sv_dump(dstr);
4882     }
4883
4884     if (dstr) {
4885         if (SvTHINKFIRST(dstr))
4886             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4887         else if (SvPVX_const(dstr))
4888             Safefree(SvPVX_mutable(dstr));
4889     }
4890     else
4891         new_SV(dstr);
4892     SvUPGRADE(dstr, SVt_COW);
4893
4894     assert (SvPOK(sstr));
4895     assert (SvPOKp(sstr));
4896
4897     if (SvIsCOW(sstr)) {
4898
4899         if (SvLEN(sstr) == 0) {
4900             /* source is a COW shared hash key.  */
4901             DEBUG_C(PerlIO_printf(Perl_debug_log,
4902                                   "Fast copy on write: Sharing hash\n"));
4903             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4904             goto common_exit;
4905         }
4906         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4907         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4908     } else {
4909         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4910         SvUPGRADE(sstr, SVt_COW);
4911         SvIsCOW_on(sstr);
4912         DEBUG_C(PerlIO_printf(Perl_debug_log,
4913                               "Fast copy on write: Converting sstr to COW\n"));
4914         CowREFCNT(sstr) = 0;    
4915     }
4916 #  ifdef PERL_DEBUG_READONLY_COW
4917     if (already) sv_buf_to_rw(sstr);
4918 #  endif
4919     CowREFCNT(sstr)++;  
4920     new_pv = SvPVX_mutable(sstr);
4921     sv_buf_to_ro(sstr);
4922
4923   common_exit:
4924     SvPV_set(dstr, new_pv);
4925     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4926     if (SvUTF8(sstr))
4927         SvUTF8_on(dstr);
4928     SvLEN_set(dstr, len);
4929     SvCUR_set(dstr, cur);
4930     if (DEBUG_C_TEST) {
4931         sv_dump(dstr);
4932     }
4933     return dstr;
4934 }
4935 #endif
4936
4937 /*
4938 =for apidoc sv_setpv_bufsize
4939
4940 Sets the SV to be a string of cur bytes length, with at least
4941 len bytes available. Ensures that there is a null byte at SvEND.
4942 Returns a char * pointer to the SvPV buffer.
4943
4944 =cut
4945 */
4946
4947 char *
4948 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4949 {
4950     char *pv;
4951
4952     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4953
4954     SV_CHECK_THINKFIRST_COW_DROP(sv);
4955     SvUPGRADE(sv, SVt_PV);
4956     pv = SvGROW(sv, len + 1);
4957     SvCUR_set(sv, cur);
4958     *(SvEND(sv))= '\0';
4959     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4960
4961     SvTAINT(sv);
4962     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4963     return pv;
4964 }
4965
4966 /*
4967 =for apidoc sv_setpvn
4968
4969 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4970 The C<len> parameter indicates the number of
4971 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4972 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4973
4974 =cut
4975 */
4976
4977 void
4978 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4979 {
4980     char *dptr;
4981
4982     PERL_ARGS_ASSERT_SV_SETPVN;
4983
4984     SV_CHECK_THINKFIRST_COW_DROP(sv);
4985     if (isGV_with_GP(sv))
4986         Perl_croak_no_modify();
4987     if (!ptr) {
4988         (void)SvOK_off(sv);
4989         return;
4990     }
4991     else {
4992         /* len is STRLEN which is unsigned, need to copy to signed */
4993         const IV iv = len;
4994         if (iv < 0)
4995             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4996                        IVdf, iv);
4997     }
4998     SvUPGRADE(sv, SVt_PV);
4999
5000     dptr = SvGROW(sv, len + 1);
5001     Move(ptr,dptr,len,char);
5002     dptr[len] = '\0';
5003     SvCUR_set(sv, len);
5004     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5005     SvTAINT(sv);
5006     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5007 }
5008
5009 /*
5010 =for apidoc sv_setpvn_mg
5011
5012 Like C<sv_setpvn>, but also handles 'set' magic.
5013
5014 =cut
5015 */
5016
5017 void
5018 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5019 {
5020     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5021
5022     sv_setpvn(sv,ptr,len);
5023     SvSETMAGIC(sv);
5024 }
5025
5026 /*
5027 =for apidoc sv_setpv
5028
5029 Copies a string into an SV.  The string must be terminated with a C<NUL>
5030 character, and not contain embeded C<NUL>'s.
5031 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5032
5033 =cut
5034 */
5035
5036 void
5037 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5038 {
5039     STRLEN len;
5040
5041     PERL_ARGS_ASSERT_SV_SETPV;
5042
5043     SV_CHECK_THINKFIRST_COW_DROP(sv);
5044     if (!ptr) {
5045         (void)SvOK_off(sv);
5046         return;
5047     }
5048     len = strlen(ptr);
5049     SvUPGRADE(sv, SVt_PV);
5050
5051     SvGROW(sv, len + 1);
5052     Move(ptr,SvPVX(sv),len+1,char);
5053     SvCUR_set(sv, len);
5054     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5055     SvTAINT(sv);
5056     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5057 }
5058
5059 /*
5060 =for apidoc sv_setpv_mg
5061
5062 Like C<sv_setpv>, but also handles 'set' magic.
5063
5064 =cut
5065 */
5066
5067 void
5068 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5069 {
5070     PERL_ARGS_ASSERT_SV_SETPV_MG;
5071
5072     sv_setpv(sv,ptr);
5073     SvSETMAGIC(sv);
5074 }
5075
5076 void
5077 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5078 {
5079     PERL_ARGS_ASSERT_SV_SETHEK;
5080
5081     if (!hek) {
5082         return;
5083     }
5084
5085     if (HEK_LEN(hek) == HEf_SVKEY) {
5086         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5087         return;
5088     } else {
5089         const int flags = HEK_FLAGS(hek);
5090         if (flags & HVhek_WASUTF8) {
5091             STRLEN utf8_len = HEK_LEN(hek);
5092             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5093             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5094             SvUTF8_on(sv);
5095             return;
5096         } else if (flags & HVhek_UNSHARED) {
5097             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5098             if (HEK_UTF8(hek))
5099                 SvUTF8_on(sv);
5100             else SvUTF8_off(sv);
5101             return;
5102         }
5103         {
5104             SV_CHECK_THINKFIRST_COW_DROP(sv);
5105             SvUPGRADE(sv, SVt_PV);
5106             SvPV_free(sv);
5107             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5108             SvCUR_set(sv, HEK_LEN(hek));
5109             SvLEN_set(sv, 0);
5110             SvIsCOW_on(sv);
5111             SvPOK_on(sv);
5112             if (HEK_UTF8(hek))
5113                 SvUTF8_on(sv);
5114             else SvUTF8_off(sv);
5115             return;
5116         }
5117     }
5118 }
5119
5120
5121 /*
5122 =for apidoc sv_usepvn_flags
5123
5124 Tells an SV to use C<ptr> to find its string value.  Normally the
5125 string is stored inside the SV, but sv_usepvn allows the SV to use an
5126 outside string.  C<ptr> should point to memory that was allocated
5127 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5128 the start of a C<Newx>-ed block of memory, and not a pointer to the
5129 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5130 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5131 string length, C<len>, must be supplied.  By default this function
5132 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5133 so that pointer should not be freed or used by the programmer after
5134 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5135 that pointer (e.g. ptr + 1) be used.
5136
5137 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5138 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5139 and the realloc
5140 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5141 C<len>, and already meets the requirements for storing in C<SvPVX>).
5142
5143 =cut
5144 */
5145
5146 void
5147 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5148 {
5149     STRLEN allocate;
5150
5151     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5152
5153     SV_CHECK_THINKFIRST_COW_DROP(sv);
5154     SvUPGRADE(sv, SVt_PV);
5155     if (!ptr) {
5156         (void)SvOK_off(sv);
5157         if (flags & SV_SMAGIC)
5158             SvSETMAGIC(sv);
5159         return;
5160     }
5161     if (SvPVX_const(sv))
5162         SvPV_free(sv);
5163
5164 #ifdef DEBUGGING
5165     if (flags & SV_HAS_TRAILING_NUL)
5166         assert(ptr[len] == '\0');
5167 #endif
5168
5169     allocate = (flags & SV_HAS_TRAILING_NUL)
5170         ? len + 1 :
5171 #ifdef Perl_safesysmalloc_size
5172         len + 1;
5173 #else 
5174         PERL_STRLEN_ROUNDUP(len + 1);
5175 #endif
5176     if (flags & SV_HAS_TRAILING_NUL) {
5177         /* It's long enough - do nothing.
5178            Specifically Perl_newCONSTSUB is relying on this.  */
5179     } else {
5180 #ifdef DEBUGGING
5181         /* Force a move to shake out bugs in callers.  */
5182         char *new_ptr = (char*)safemalloc(allocate);
5183         Copy(ptr, new_ptr, len, char);
5184         PoisonFree(ptr,len,char);
5185         Safefree(ptr);
5186         ptr = new_ptr;
5187 #else
5188         ptr = (char*) saferealloc (ptr, allocate);
5189 #endif
5190     }
5191 #ifdef Perl_safesysmalloc_size
5192     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5193 #else
5194     SvLEN_set(sv, allocate);
5195 #endif
5196     SvCUR_set(sv, len);
5197     SvPV_set(sv, ptr);
5198     if (!(flags & SV_HAS_TRAILING_NUL)) {
5199         ptr[len] = '\0';
5200     }
5201     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5202     SvTAINT(sv);
5203     if (flags & SV_SMAGIC)
5204         SvSETMAGIC(sv);
5205 }
5206
5207
5208 static void
5209 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5210 {
5211     assert(SvIsCOW(sv));
5212     {
5213 #ifdef PERL_ANY_COW
5214         const char * const pvx = SvPVX_const(sv);
5215         const STRLEN len = SvLEN(sv);
5216         const STRLEN cur = SvCUR(sv);
5217
5218         if (DEBUG_C_TEST) {
5219                 PerlIO_printf(Perl_debug_log,
5220                               "Copy on write: Force normal %ld\n",
5221                               (long) flags);
5222                 sv_dump(sv);
5223         }
5224         SvIsCOW_off(sv);
5225 # ifdef PERL_COPY_ON_WRITE
5226         if (len) {
5227             /* Must do this first, since the CowREFCNT uses SvPVX and
5228             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5229             the only owner left of the buffer. */
5230             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5231             {
5232                 U8 cowrefcnt = CowREFCNT(sv);
5233                 if(cowrefcnt != 0) {
5234                     cowrefcnt--;
5235                     CowREFCNT(sv) = cowrefcnt;
5236                     sv_buf_to_ro(sv);
5237                     goto copy_over;
5238                 }
5239             }
5240             /* Else we are the only owner of the buffer. */
5241         }
5242         else
5243 # endif
5244         {
5245             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5246             copy_over:
5247             SvPV_set(sv, NULL);
5248             SvCUR_set(sv, 0);
5249             SvLEN_set(sv, 0);
5250             if (flags & SV_COW_DROP_PV) {
5251                 /* OK, so we don't need to copy our buffer.  */
5252                 SvPOK_off(sv);
5253             } else {
5254                 SvGROW(sv, cur + 1);
5255                 Move(pvx,SvPVX(sv),cur,char);
5256                 SvCUR_set(sv, cur);
5257                 *SvEND(sv) = '\0';
5258             }
5259             if (len) {
5260             } else {
5261                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5262             }
5263             if (DEBUG_C_TEST) {
5264                 sv_dump(sv);
5265             }
5266         }
5267 #else
5268             const char * const pvx = SvPVX_const(sv);
5269             const STRLEN len = SvCUR(sv);
5270             SvIsCOW_off(sv);
5271             SvPV_set(sv, NULL);
5272             SvLEN_set(sv, 0);
5273             if (flags & SV_COW_DROP_PV) {
5274                 /* OK, so we don't need to copy our buffer.  */
5275                 SvPOK_off(sv);
5276             } else {
5277                 SvGROW(sv, len + 1);
5278                 Move(pvx,SvPVX(sv),len,char);
5279                 *SvEND(sv) = '\0';
5280             }
5281             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5282 #endif
5283     }
5284 }
5285
5286
5287 /*
5288 =for apidoc sv_force_normal_flags
5289
5290 Undo various types of fakery on an SV, where fakery means
5291 "more than" a string: if the PV is a shared string, make
5292 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5293 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5294 we do the copy, and is also used locally; if this is a
5295 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5296 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5297 C<SvPOK_off> rather than making a copy.  (Used where this
5298 scalar is about to be set to some other value.)  In addition,
5299 the C<flags> parameter gets passed to C<sv_unref_flags()>
5300 when unreffing.  C<sv_force_normal> calls this function
5301 with flags set to 0.
5302
5303 This function is expected to be used to signal to perl that this SV is
5304 about to be written to, and any extra book-keeping needs to be taken care
5305 of.  Hence, it croaks on read-only values.
5306
5307 =cut
5308 */
5309
5310 void
5311 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5312 {
5313     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5314
5315     if (SvREADONLY(sv))
5316         Perl_croak_no_modify();
5317     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5318         S_sv_uncow(aTHX_ sv, flags);
5319     if (SvROK(sv))
5320         sv_unref_flags(sv, flags);
5321     else if (SvFAKE(sv) && isGV_with_GP(sv))
5322         sv_unglob(sv, flags);
5323     else if (SvFAKE(sv) && isREGEXP(sv)) {
5324         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5325            to sv_unglob. We only need it here, so inline it.  */
5326         const bool islv = SvTYPE(sv) == SVt_PVLV;
5327         const svtype new_type =
5328           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5329         SV *const temp = newSV_type(new_type);
5330         regexp *old_rx_body;
5331
5332         if (new_type == SVt_PVMG) {
5333             SvMAGIC_set(temp, SvMAGIC(sv));
5334             SvMAGIC_set(sv, NULL);
5335             SvSTASH_set(temp, SvSTASH(sv));
5336             SvSTASH_set(sv, NULL);
5337         }
5338         if (!islv)
5339             SvCUR_set(temp, SvCUR(sv));
5340         /* Remember that SvPVX is in the head, not the body. */
5341         assert(ReANY((REGEXP *)sv)->mother_re);
5342
5343         if (islv) {
5344             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5345              * whose xpvlenu_rx field points to the regex body */
5346             XPV *xpv = (XPV*)(SvANY(sv));
5347             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5348             xpv->xpv_len_u.xpvlenu_rx = NULL;
5349         }
5350         else
5351             old_rx_body = ReANY((REGEXP *)sv);
5352
5353         /* Their buffer is already owned by someone else. */
5354         if (flags & SV_COW_DROP_PV) {
5355             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5356                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5357                a union with xpvlenu_rx) */
5358             assert(!SvLEN(islv ? sv : temp));
5359             sv->sv_u.svu_pv = 0;
5360         }
5361         else {
5362             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5363             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5364             SvPOK_on(sv);
5365         }
5366
5367         /* Now swap the rest of the bodies. */
5368
5369         SvFAKE_off(sv);
5370         if (!islv) {
5371             SvFLAGS(sv) &= ~SVTYPEMASK;
5372             SvFLAGS(sv) |= new_type;
5373             SvANY(sv) = SvANY(temp);
5374         }
5375
5376         SvFLAGS(temp) &= ~(SVTYPEMASK);
5377         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5378         SvANY(temp) = old_rx_body;
5379
5380         SvREFCNT_dec_NN(temp);
5381     }
5382     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5383 }
5384
5385 /*
5386 =for apidoc sv_chop
5387
5388 Efficient removal of characters from the beginning of the string buffer.
5389 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5390 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5391 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5392 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5393
5394 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5395 refer to the same chunk of data.
5396
5397 The unfortunate similarity of this function's name to that of Perl's C<chop>
5398 operator is strictly coincidental.  This function works from the left;
5399 C<chop> works from the right.
5400
5401 =cut
5402 */
5403
5404 void
5405 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5406 {
5407     STRLEN delta;
5408     STRLEN old_delta;
5409     U8 *p;
5410 #ifdef DEBUGGING
5411     const U8 *evacp;
5412     STRLEN evacn;
5413 #endif
5414     STRLEN max_delta;
5415
5416     PERL_ARGS_ASSERT_SV_CHOP;
5417
5418     if (!ptr || !SvPOKp(sv))
5419         return;
5420     delta = ptr - SvPVX_const(sv);
5421     if (!delta) {
5422         /* Nothing to do.  */
5423         return;
5424     }
5425     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5426     if (delta > max_delta)
5427         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5428                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5429     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5430     SV_CHECK_THINKFIRST(sv);
5431     SvPOK_only_UTF8(sv);
5432
5433     if (!SvOOK(sv)) {
5434         if (!SvLEN(sv)) { /* make copy of shared string */
5435             const char *pvx = SvPVX_const(sv);
5436             const STRLEN len = SvCUR(sv);
5437             SvGROW(sv, len + 1);
5438             Move(pvx,SvPVX(sv),len,char);
5439             *SvEND(sv) = '\0';
5440         }
5441         SvOOK_on(sv);
5442         old_delta = 0;
5443     } else {
5444         SvOOK_offset(sv, old_delta);
5445     }
5446     SvLEN_set(sv, SvLEN(sv) - delta);
5447     SvCUR_set(sv, SvCUR(sv) - delta);
5448     SvPV_set(sv, SvPVX(sv) + delta);
5449
5450     p = (U8 *)SvPVX_const(sv);
5451
5452 #ifdef DEBUGGING
5453     /* how many bytes were evacuated?  we will fill them with sentinel
5454        bytes, except for the part holding the new offset of course. */
5455     evacn = delta;
5456     if (old_delta)
5457         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5458     assert(evacn);
5459     assert(evacn <= delta + old_delta);
5460     evacp = p - evacn;
5461 #endif
5462
5463     /* This sets 'delta' to the accumulated value of all deltas so far */
5464     delta += old_delta;
5465     assert(delta);
5466
5467     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5468      * the string; otherwise store a 0 byte there and store 'delta' just prior
5469      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5470      * portion of the chopped part of the string */
5471     if (delta < 0x100) {
5472         *--p = (U8) delta;
5473     } else {
5474         *--p = 0;
5475         p -= sizeof(STRLEN);
5476         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5477     }
5478
5479 #ifdef DEBUGGING
5480     /* Fill the preceding buffer with sentinals to verify that no-one is
5481        using it.  */
5482     while (p > evacp) {
5483         --p;
5484         *p = (U8)PTR2UV(p);
5485     }
5486 #endif
5487 }
5488
5489 /*
5490 =for apidoc sv_catpvn
5491
5492 Concatenates the string onto the end of the string which is in the SV.
5493 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5494 status set, then the bytes appended should be valid UTF-8.
5495 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5496
5497 =for apidoc sv_catpvn_flags
5498
5499 Concatenates the string onto the end of the string which is in the SV.  The
5500 C<len> indicates number of bytes to copy.
5501
5502 By default, the string appended is assumed to be valid UTF-8 if the SV has
5503 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5504 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5505 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5506 string appended will be upgraded to UTF-8 if necessary.
5507
5508 If C<flags> has the C<SV_SMAGIC> bit set, will
5509 C<mg_set> on C<dsv> afterwards if appropriate.
5510 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5511 in terms of this function.
5512
5513 =cut
5514 */
5515
5516 void
5517 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5518 {
5519     STRLEN dlen;
5520     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5521
5522     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5523     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5524
5525     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5526       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5527          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5528          dlen = SvCUR(dsv);
5529       }
5530       else SvGROW(dsv, dlen + slen + 3);
5531       if (sstr == dstr)
5532         sstr = SvPVX_const(dsv);
5533       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5534       SvCUR_set(dsv, SvCUR(dsv) + slen);
5535     }
5536     else {
5537         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5538         const char * const send = sstr + slen;
5539         U8 *d;
5540
5541         /* Something this code does not account for, which I think is
5542            impossible; it would require the same pv to be treated as
5543            bytes *and* utf8, which would indicate a bug elsewhere. */
5544         assert(sstr != dstr);
5545
5546         SvGROW(dsv, dlen + slen * 2 + 3);
5547         d = (U8 *)SvPVX(dsv) + dlen;
5548
5549         while (sstr < send) {
5550             append_utf8_from_native_byte(*sstr, &d);
5551             sstr++;
5552         }
5553         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5554     }
5555     *SvEND(dsv) = '\0';
5556     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5557     SvTAINT(dsv);
5558     if (flags & SV_SMAGIC)
5559         SvSETMAGIC(dsv);
5560 }
5561
5562 /*
5563 =for apidoc sv_catsv
5564
5565 Concatenates the string from SV C<ssv> onto the end of the string in SV
5566 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5567 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5568 and C<L</sv_catsv_nomg>>.
5569
5570 =for apidoc sv_catsv_flags
5571
5572 Concatenates the string from SV C<ssv> onto the end of the string in SV
5573 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5574 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5575 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5576 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5577 and C<sv_catsv_mg> are implemented in terms of this function.
5578
5579 =cut */
5580
5581 void
5582 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5583 {
5584     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5585
5586     if (ssv) {
5587         STRLEN slen;
5588         const char *spv = SvPV_flags_const(ssv, slen, flags);
5589         if (flags & SV_GMAGIC)
5590                 SvGETMAGIC(dsv);
5591         sv_catpvn_flags(dsv, spv, slen,
5592                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5593         if (flags & SV_SMAGIC)
5594                 SvSETMAGIC(dsv);
5595     }
5596 }
5597
5598 /*
5599 =for apidoc sv_catpv
5600
5601 Concatenates the C<NUL>-terminated string onto the end of the string which is
5602 in the SV.
5603 If the SV has the UTF-8 status set, then the bytes appended should be
5604 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5605 C<L</sv_catpv_mg>>.
5606
5607 =cut */
5608
5609 void
5610 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5611 {
5612     STRLEN len;
5613     STRLEN tlen;
5614     char *junk;
5615
5616     PERL_ARGS_ASSERT_SV_CATPV;
5617
5618     if (!ptr)
5619         return;
5620     junk = SvPV_force(sv, tlen);
5621     len = strlen(ptr);
5622     SvGROW(sv, tlen + len + 1);
5623     if (ptr == junk)
5624         ptr = SvPVX_const(sv);
5625     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5626     SvCUR_set(sv, SvCUR(sv) + len);
5627     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5628     SvTAINT(sv);
5629 }
5630
5631 /*
5632 =for apidoc sv_catpv_flags
5633
5634 Concatenates the C<NUL>-terminated string onto the end of the string which is
5635 in the SV.
5636 If the SV has the UTF-8 status set, then the bytes appended should
5637 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5638 on the modified SV if appropriate.
5639
5640 =cut
5641 */
5642
5643 void
5644 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5645 {
5646     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5647     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5648 }
5649
5650 /*
5651 =for apidoc sv_catpv_mg
5652
5653 Like C<sv_catpv>, but also handles 'set' magic.
5654
5655 =cut
5656 */
5657
5658 void
5659 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5660 {
5661     PERL_ARGS_ASSERT_SV_CATPV_MG;
5662
5663     sv_catpv(sv,ptr);
5664     SvSETMAGIC(sv);
5665 }
5666
5667 /*
5668 =for apidoc newSV
5669
5670 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5671 bytes of preallocated string space the SV should have.  An extra byte for a
5672 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5673 space is allocated.)  The reference count for the new SV is set to 1.
5674
5675 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5676 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5677 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5678 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5679 modules supporting older perls.
5680
5681 =cut
5682 */
5683
5684 SV *
5685 Perl_newSV(pTHX_ const STRLEN len)
5686 {
5687     SV *sv;
5688
5689     new_SV(sv);
5690     if (len) {
5691         sv_grow(sv, len + 1);
5692     }
5693     return sv;
5694 }
5695 /*
5696 =for apidoc sv_magicext
5697
5698 Adds magic to an SV, upgrading it if necessary.  Applies the
5699 supplied C<vtable> and returns a pointer to the magic added.
5700
5701 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5702 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5703 one instance of the same C<how>.
5704
5705 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5706 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5707 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5708 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5709
5710 (This is now used as a subroutine by C<sv_magic>.)
5711
5712 =cut
5713 */
5714 MAGIC * 
5715 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5716                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5717 {
5718     MAGIC* mg;
5719
5720     PERL_ARGS_ASSERT_SV_MAGICEXT;
5721
5722     SvUPGRADE(sv, SVt_PVMG);
5723     Newxz(mg, 1, MAGIC);
5724     mg->mg_moremagic = SvMAGIC(sv);
5725     SvMAGIC_set(sv, mg);
5726
5727     /* Sometimes a magic contains a reference loop, where the sv and
5728        object refer to each other.  To prevent a reference loop that
5729        would prevent such objects being freed, we look for such loops
5730        and if we find one we avoid incrementing the object refcount.
5731
5732        Note we cannot do this to avoid self-tie loops as intervening RV must
5733        have its REFCNT incremented to keep it in existence.
5734
5735     */
5736     if (!obj || obj == sv ||
5737         how == PERL_MAGIC_arylen ||
5738         how == PERL_MAGIC_regdata ||
5739         how == PERL_MAGIC_regdatum ||
5740         how == PERL_MAGIC_symtab ||
5741         (SvTYPE(obj) == SVt_PVGV &&
5742             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5743              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5744              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5745     {
5746         mg->mg_obj = obj;
5747     }
5748     else {
5749         mg->mg_obj = SvREFCNT_inc_simple(obj);
5750         mg->mg_flags |= MGf_REFCOUNTED;
5751     }
5752
5753     /* Normal self-ties simply pass a null object, and instead of
5754        using mg_obj directly, use the SvTIED_obj macro to produce a
5755        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5756        with an RV obj pointing to the glob containing the PVIO.  In
5757        this case, to avoid a reference loop, we need to weaken the
5758        reference.
5759     */
5760
5761     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5762         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5763     {
5764       sv_rvweaken(obj);
5765     }
5766
5767     mg->mg_type = how;
5768     mg->mg_len = namlen;
5769     if (name) {
5770         if (namlen > 0)
5771             mg->mg_ptr = savepvn(name, namlen);
5772         else if (namlen == HEf_SVKEY) {
5773             /* Yes, this is casting away const. This is only for the case of
5774                HEf_SVKEY. I think we need to document this aberation of the
5775                constness of the API, rather than making name non-const, as
5776                that change propagating outwards a long way.  */
5777             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5778         } else
5779             mg->mg_ptr = (char *) name;
5780     }
5781     mg->mg_virtual = (MGVTBL *) vtable;
5782
5783     mg_magical(sv);
5784     return mg;
5785 }
5786
5787 MAGIC *
5788 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5789 {
5790     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5791     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5792         /* This sv is only a delegate.  //g magic must be attached to
5793            its target. */
5794         vivify_defelem(sv);
5795         sv = LvTARG(sv);
5796     }
5797     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5798                        &PL_vtbl_mglob, 0, 0);
5799 }
5800
5801 /*
5802 =for apidoc sv_magic
5803
5804 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5805 necessary, then adds a new magic item of type C<how> to the head of the
5806 magic list.
5807
5808 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5809 handling of the C<name> and C<namlen> arguments.
5810
5811 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5812 to add more than one instance of the same C<how>.
5813
5814 =cut
5815 */
5816
5817 void
5818 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5819              const char *const name, const I32 namlen)
5820 {
5821     const MGVTBL *vtable;
5822     MAGIC* mg;
5823     unsigned int flags;
5824     unsigned int vtable_index;
5825
5826     PERL_ARGS_ASSERT_SV_MAGIC;
5827
5828     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5829         || ((flags = PL_magic_data[how]),
5830             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5831             > magic_vtable_max))
5832         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5833
5834     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5835        Useful for attaching extension internal data to perl vars.
5836        Note that multiple extensions may clash if magical scalars
5837        etc holding private data from one are passed to another. */
5838
5839     vtable = (vtable_index == magic_vtable_max)
5840         ? NULL : PL_magic_vtables + vtable_index;
5841
5842     if (SvREADONLY(sv)) {
5843         if (
5844             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5845            )
5846         {
5847             Perl_croak_no_modify();
5848         }
5849     }
5850     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5851         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5852             /* sv_magic() refuses to add a magic of the same 'how' as an
5853                existing one
5854              */
5855             if (how == PERL_MAGIC_taint)
5856                 mg->mg_len |= 1;
5857             return;
5858         }
5859     }
5860
5861     /* Force pos to be stored as characters, not bytes. */
5862     if (SvMAGICAL(sv) && DO_UTF8(sv)
5863       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5864       && mg->mg_len != -1
5865       && mg->mg_flags & MGf_BYTES) {
5866         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5867                                                SV_CONST_RETURN);
5868         mg->mg_flags &= ~MGf_BYTES;
5869     }
5870
5871     /* Rest of work is done else where */
5872     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5873
5874     switch (how) {
5875     case PERL_MAGIC_taint:
5876         mg->mg_len = 1;
5877         break;
5878     case PERL_MAGIC_ext:
5879     case PERL_MAGIC_dbfile:
5880         SvRMAGICAL_on(sv);
5881         break;
5882     }
5883 }
5884
5885 static int
5886 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5887 {
5888     MAGIC* mg;
5889     MAGIC** mgp;
5890
5891     assert(flags <= 1);
5892
5893     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5894         return 0;
5895     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5896     for (mg = *mgp; mg; mg = *mgp) {
5897         const MGVTBL* const virt = mg->mg_virtual;
5898         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5899             *mgp = mg->mg_moremagic;
5900             if (virt && virt->svt_free)
5901                 virt->svt_free(aTHX_ sv, mg);
5902             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5903                 if (mg->mg_len > 0)
5904                     Safefree(mg->mg_ptr);
5905                 else if (mg->mg_len == HEf_SVKEY)
5906                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5907                 else if (mg->mg_type == PERL_MAGIC_utf8)
5908                     Safefree(mg->mg_ptr);
5909             }
5910             if (mg->mg_flags & MGf_REFCOUNTED)
5911                 SvREFCNT_dec(mg->mg_obj);
5912             Safefree(mg);
5913         }
5914         else
5915             mgp = &mg->mg_moremagic;
5916     }
5917     if (SvMAGIC(sv)) {
5918         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5919             mg_magical(sv);     /*    else fix the flags now */
5920     }
5921     else
5922         SvMAGICAL_off(sv);
5923
5924     return 0;
5925 }
5926
5927 /*
5928 =for apidoc sv_unmagic
5929
5930 Removes all magic of type C<type> from an SV.
5931
5932 =cut
5933 */
5934
5935 int
5936 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5937 {
5938     PERL_ARGS_ASSERT_SV_UNMAGIC;
5939     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5940 }
5941
5942 /*
5943 =for apidoc sv_unmagicext
5944
5945 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5946
5947 =cut
5948 */
5949
5950 int
5951 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5952 {
5953     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5954     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5955 }
5956
5957 /*
5958 =for apidoc sv_rvweaken
5959
5960 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5961 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5962 push a back-reference to this RV onto the array of backreferences
5963 associated with that magic.  If the RV is magical, set magic will be
5964 called after the RV is cleared.
5965
5966 =cut
5967 */
5968
5969 SV *
5970 Perl_sv_rvweaken(pTHX_ SV *const sv)
5971 {
5972     SV *tsv;
5973
5974     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5975
5976     if (!SvOK(sv))  /* let undefs pass */
5977         return sv;
5978     if (!SvROK(sv))
5979         Perl_croak(aTHX_ "Can't weaken a nonreference");
5980     else if (SvWEAKREF(sv)) {
5981         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5982         return sv;
5983     }
5984     else if (SvREADONLY(sv)) croak_no_modify();
5985     tsv = SvRV(sv);
5986     Perl_sv_add_backref(aTHX_ tsv, sv);
5987     SvWEAKREF_on(sv);
5988     SvREFCNT_dec_NN(tsv);
5989     return sv;
5990 }
5991
5992 /*
5993 =for apidoc sv_get_backrefs
5994
5995 If C<sv> is the target of a weak reference then it returns the back
5996 references structure associated with the sv; otherwise return C<NULL>.
5997
5998 When returning a non-null result the type of the return is relevant. If it
5999 is an AV then the elements of the AV are the weak reference RVs which
6000 point at this item. If it is any other type then the item itself is the
6001 weak reference.
6002
6003 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6004 C<Perl_sv_kill_backrefs()>
6005
6006 =cut
6007 */
6008
6009 SV *
6010 Perl_sv_get_backrefs(SV *const sv)
6011 {
6012     SV *backrefs= NULL;
6013
6014     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6015
6016     /* find slot to store array or singleton backref */
6017
6018     if (SvTYPE(sv) == SVt_PVHV) {
6019         if (SvOOK(sv)) {
6020             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6021             backrefs = (SV *)iter->xhv_backreferences;
6022         }
6023     } else if (SvMAGICAL(sv)) {
6024         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6025         if (mg)
6026             backrefs = mg->mg_obj;
6027     }
6028     return backrefs;
6029 }
6030
6031 /* Give tsv backref magic if it hasn't already got it, then push a
6032  * back-reference to sv onto the array associated with the backref magic.
6033  *
6034  * As an optimisation, if there's only one backref and it's not an AV,
6035  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6036  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6037  * active.)
6038  */
6039
6040 /* A discussion about the backreferences array and its refcount:
6041  *
6042  * The AV holding the backreferences is pointed to either as the mg_obj of
6043  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6044  * xhv_backreferences field. The array is created with a refcount
6045  * of 2. This means that if during global destruction the array gets
6046  * picked on before its parent to have its refcount decremented by the
6047  * random zapper, it won't actually be freed, meaning it's still there for
6048  * when its parent gets freed.
6049  *
6050  * When the parent SV is freed, the extra ref is killed by
6051  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6052  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6053  *
6054  * When a single backref SV is stored directly, it is not reference
6055  * counted.
6056  */
6057
6058 void
6059 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6060 {
6061     SV **svp;
6062     AV *av = NULL;
6063     MAGIC *mg = NULL;
6064
6065     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6066
6067     /* find slot to store array or singleton backref */
6068
6069     if (SvTYPE(tsv) == SVt_PVHV) {
6070         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6071     } else {
6072         if (SvMAGICAL(tsv))
6073             mg = mg_find(tsv, PERL_MAGIC_backref);
6074         if (!mg)
6075             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6076         svp = &(mg->mg_obj);
6077     }
6078
6079     /* create or retrieve the array */
6080
6081     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6082         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6083     ) {
6084         /* create array */
6085         if (mg)
6086             mg->mg_flags |= MGf_REFCOUNTED;
6087         av = newAV();
6088         AvREAL_off(av);
6089         SvREFCNT_inc_simple_void_NN(av);
6090         /* av now has a refcnt of 2; see discussion above */
6091         av_extend(av, *svp ? 2 : 1);
6092         if (*svp) {
6093             /* move single existing backref to the array */
6094             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6095         }
6096         *svp = (SV*)av;
6097     }
6098     else {
6099         av = MUTABLE_AV(*svp);
6100         if (!av) {
6101             /* optimisation: store single backref directly in HvAUX or mg_obj */
6102             *svp = sv;
6103             return;
6104         }
6105         assert(SvTYPE(av) == SVt_PVAV);
6106         if (AvFILLp(av) >= AvMAX(av)) {
6107             av_extend(av, AvFILLp(av)+1);
6108         }
6109     }
6110     /* push new backref */
6111     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6112 }
6113
6114 /* delete a back-reference to ourselves from the backref magic associated
6115  * with the SV we point to.
6116  */
6117
6118 void
6119 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6120 {
6121     SV **svp = NULL;
6122
6123     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6124
6125     if (SvTYPE(tsv) == SVt_PVHV) {
6126         if (SvOOK(tsv))
6127             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6128     }
6129     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6130         /* It's possible for the the last (strong) reference to tsv to have
6131            become freed *before* the last thing holding a weak reference.
6132            If both survive longer than the backreferences array, then when
6133            the referent's reference count drops to 0 and it is freed, it's
6134            not able to chase the backreferences, so they aren't NULLed.
6135
6136            For example, a CV holds a weak reference to its stash. If both the
6137            CV and the stash survive longer than the backreferences array,
6138            and the CV gets picked for the SvBREAK() treatment first,
6139            *and* it turns out that the stash is only being kept alive because
6140            of an our variable in the pad of the CV, then midway during CV
6141            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6142            It ends up pointing to the freed HV. Hence it's chased in here, and
6143            if this block wasn't here, it would hit the !svp panic just below.
6144
6145            I don't believe that "better" destruction ordering is going to help
6146            here - during global destruction there's always going to be the
6147            chance that something goes out of order. We've tried to make it
6148            foolproof before, and it only resulted in evolutionary pressure on
6149            fools. Which made us look foolish for our hubris. :-(
6150         */
6151         return;
6152     }
6153     else {
6154         MAGIC *const mg
6155             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6156         svp =  mg ? &(mg->mg_obj) : NULL;
6157     }
6158
6159     if (!svp)
6160         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6161     if (!*svp) {
6162         /* It's possible that sv is being freed recursively part way through the
6163            freeing of tsv. If this happens, the backreferences array of tsv has
6164            already been freed, and so svp will be NULL. If this is the case,
6165            we should not panic. Instead, nothing needs doing, so return.  */
6166         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6167             return;
6168         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6169                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6170     }
6171
6172     if (SvTYPE(*svp) == SVt_PVAV) {
6173 #ifdef DEBUGGING
6174         int count = 1;
6175 #endif
6176         AV * const av = (AV*)*svp;
6177         SSize_t fill;
6178         assert(!SvIS_FREED(av));
6179         fill = AvFILLp(av);
6180         assert(fill > -1);
6181         svp = AvARRAY(av);
6182         /* for an SV with N weak references to it, if all those
6183          * weak refs are deleted, then sv_del_backref will be called
6184          * N times and O(N^2) compares will be done within the backref
6185          * array. To ameliorate this potential slowness, we:
6186          * 1) make sure this code is as tight as possible;
6187          * 2) when looking for SV, look for it at both the head and tail of the
6188          *    array first before searching the rest, since some create/destroy
6189          *    patterns will cause the backrefs to be freed in order.
6190          */
6191         if (*svp == sv) {
6192             AvARRAY(av)++;
6193             AvMAX(av)--;
6194         }
6195         else {
6196             SV **p = &svp[fill];
6197             SV *const topsv = *p;
6198             if (topsv != sv) {
6199 #ifdef DEBUGGING
6200                 count = 0;
6201 #endif
6202                 while (--p > svp) {
6203                     if (*p == sv) {
6204                         /* We weren't the last entry.
6205                            An unordered list has this property that you
6206                            can take the last element off the end to fill
6207                            the hole, and it's still an unordered list :-)
6208                         */
6209                         *p = topsv;
6210 #ifdef DEBUGGING
6211                         count++;
6212 #else
6213                         break; /* should only be one */
6214 #endif
6215                     }
6216                 }
6217             }
6218         }
6219         assert(count ==1);
6220         AvFILLp(av) = fill-1;
6221     }
6222     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6223         /* freed AV; skip */
6224     }
6225     else {
6226         /* optimisation: only a single backref, stored directly */
6227         if (*svp != sv)
6228             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6229                        (void*)*svp, (void*)sv);
6230         *svp = NULL;
6231     }
6232
6233 }
6234
6235 void
6236 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6237 {
6238     SV **svp;
6239     SV **last;
6240     bool is_array;
6241
6242     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6243
6244     if (!av)
6245         return;
6246
6247     /* after multiple passes through Perl_sv_clean_all() for a thingy
6248      * that has badly leaked, the backref array may have gotten freed,
6249      * since we only protect it against 1 round of cleanup */
6250     if (SvIS_FREED(av)) {
6251         if (PL_in_clean_all) /* All is fair */
6252             return;
6253         Perl_croak(aTHX_
6254                    "panic: magic_killbackrefs (freed backref AV/SV)");
6255     }
6256
6257
6258     is_array = (SvTYPE(av) == SVt_PVAV);
6259     if (is_array) {
6260         assert(!SvIS_FREED(av));
6261         svp = AvARRAY(av);
6262         if (svp)
6263             last = svp + AvFILLp(av);
6264     }
6265     else {
6266         /* optimisation: only a single backref, stored directly */
6267         svp = (SV**)&av;
6268         last = svp;
6269     }
6270
6271     if (svp) {
6272         while (svp <= last) {
6273             if (*svp) {
6274                 SV *const referrer = *svp;
6275                 if (SvWEAKREF(referrer)) {
6276                     /* XXX Should we check that it hasn't changed? */
6277                     assert(SvROK(referrer));
6278                     SvRV_set(referrer, 0);
6279                     SvOK_off(referrer);
6280                     SvWEAKREF_off(referrer);
6281                     SvSETMAGIC(referrer);
6282                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6283                            SvTYPE(referrer) == SVt_PVLV) {
6284                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6285                     /* You lookin' at me?  */
6286                     assert(GvSTASH(referrer));
6287                     assert(GvSTASH(referrer) == (const HV *)sv);
6288                     GvSTASH(referrer) = 0;
6289                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6290                            SvTYPE(referrer) == SVt_PVFM) {
6291                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6292                         /* You lookin' at me?  */
6293                         assert(CvSTASH(referrer));
6294                         assert(CvSTASH(referrer) == (const HV *)sv);
6295                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6296                     }
6297                     else {
6298                         assert(SvTYPE(sv) == SVt_PVGV);
6299                         /* You lookin' at me?  */
6300                         assert(CvGV(referrer));
6301                         assert(CvGV(referrer) == (const GV *)sv);
6302                         anonymise_cv_maybe(MUTABLE_GV(sv),
6303                                                 MUTABLE_CV(referrer));
6304                     }
6305
6306                 } else {
6307                     Perl_croak(aTHX_
6308                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6309                                (UV)SvFLAGS(referrer));
6310                 }
6311
6312                 if (is_array)
6313                     *svp = NULL;
6314             }
6315             svp++;
6316         }
6317     }
6318     if (is_array) {
6319         AvFILLp(av) = -1;
6320         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6321     }
6322     return;
6323 }
6324
6325 /*
6326 =for apidoc sv_insert
6327
6328 Inserts a string at the specified offset/length within the SV.  Similar to
6329 the Perl C<substr()> function.  Handles get magic.
6330
6331 =for apidoc sv_insert_flags
6332
6333 Same as C<sv_insert>, but the extra C<flags> are passed to the
6334 C<SvPV_force_flags> that applies to C<bigstr>.
6335
6336 =cut
6337 */
6338
6339 void
6340 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6341 {
6342     char *big;
6343     char *mid;
6344     char *midend;
6345     char *bigend;
6346     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6347     STRLEN curlen;
6348
6349     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6350
6351     SvPV_force_flags(bigstr, curlen, flags);
6352     (void)SvPOK_only_UTF8(bigstr);
6353
6354     if (little >= SvPVX(bigstr) &&
6355         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6356         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6357            or little...little+littlelen might overlap offset...offset+len we make a copy
6358         */
6359         little = savepvn(little, littlelen);
6360         SAVEFREEPV(little);
6361     }
6362
6363     if (offset + len > curlen) {
6364         SvGROW(bigstr, offset+len+1);
6365         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6366         SvCUR_set(bigstr, offset+len);
6367     }
6368
6369     SvTAINT(bigstr);
6370     i = littlelen - len;
6371     if (i > 0) {                        /* string might grow */
6372         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6373         mid = big + offset + len;
6374         midend = bigend = big + SvCUR(bigstr);
6375         bigend += i;
6376         *bigend = '\0';
6377         while (midend > mid)            /* shove everything down */
6378             *--bigend = *--midend;
6379         Move(little,big+offset,littlelen,char);
6380         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6381         SvSETMAGIC(bigstr);
6382         return;
6383     }
6384     else if (i == 0) {
6385         Move(little,SvPVX(bigstr)+offset,len,char);
6386         SvSETMAGIC(bigstr);
6387         return;
6388     }
6389
6390     big = SvPVX(bigstr);
6391     mid = big + offset;
6392     midend = mid + len;
6393     bigend = big + SvCUR(bigstr);
6394
6395     if (midend > bigend)
6396         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6397                    midend, bigend);
6398
6399     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6400         if (littlelen) {
6401             Move(little, mid, littlelen,char);
6402             mid += littlelen;
6403         }
6404         i = bigend - midend;
6405         if (i > 0) {
6406             Move(midend, mid, i,char);
6407             mid += i;
6408         }
6409         *mid = '\0';
6410         SvCUR_set(bigstr, mid - big);
6411     }
6412     else if ((i = mid - big)) { /* faster from front */
6413         midend -= littlelen;
6414         mid = midend;
6415         Move(big, midend - i, i, char);
6416         sv_chop(bigstr,midend-i);
6417         if (littlelen)
6418             Move(little, mid, littlelen,char);
6419     }
6420     else if (littlelen) {
6421         midend -= littlelen;
6422         sv_chop(bigstr,midend);
6423         Move(little,midend,littlelen,char);
6424     }
6425     else {
6426         sv_chop(bigstr,midend);
6427     }
6428     SvSETMAGIC(bigstr);
6429 }
6430
6431 /*
6432 =for apidoc sv_replace
6433
6434 Make the first argument a copy of the second, then delete the original.
6435 The target SV physically takes over ownership of the body of the source SV
6436 and inherits its flags; however, the target keeps any magic it owns,
6437 and any magic in the source is discarded.
6438 Note that this is a rather specialist SV copying operation; most of the
6439 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6440
6441 =cut
6442 */
6443
6444 void
6445 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6446 {
6447     const U32 refcnt = SvREFCNT(sv);
6448
6449     PERL_ARGS_ASSERT_SV_REPLACE;
6450
6451     SV_CHECK_THINKFIRST_COW_DROP(sv);
6452     if (SvREFCNT(nsv) != 1) {
6453         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6454                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6455     }
6456     if (SvMAGICAL(sv)) {
6457         if (SvMAGICAL(nsv))
6458             mg_free(nsv);
6459         else
6460             sv_upgrade(nsv, SVt_PVMG);
6461         SvMAGIC_set(nsv, SvMAGIC(sv));
6462         SvFLAGS(nsv) |= SvMAGICAL(sv);
6463         SvMAGICAL_off(sv);
6464         SvMAGIC_set(sv, NULL);
6465     }
6466     SvREFCNT(sv) = 0;
6467     sv_clear(sv);
6468     assert(!SvREFCNT(sv));
6469 #ifdef DEBUG_LEAKING_SCALARS
6470     sv->sv_flags  = nsv->sv_flags;
6471     sv->sv_any    = nsv->sv_any;
6472     sv->sv_refcnt = nsv->sv_refcnt;
6473     sv->sv_u      = nsv->sv_u;
6474 #else
6475     StructCopy(nsv,sv,SV);
6476 #endif
6477     if(SvTYPE(sv) == SVt_IV) {
6478         SET_SVANY_FOR_BODYLESS_IV(sv);
6479     }
6480         
6481
6482     SvREFCNT(sv) = refcnt;
6483     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6484     SvREFCNT(nsv) = 0;
6485     del_SV(nsv);
6486 }
6487
6488 /* We're about to free a GV which has a CV that refers back to us.
6489  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6490  * field) */
6491
6492 STATIC void
6493 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6494 {
6495     SV *gvname;
6496     GV *anongv;
6497
6498     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6499
6500     /* be assertive! */
6501     assert(SvREFCNT(gv) == 0);
6502     assert(isGV(gv) && isGV_with_GP(gv));
6503     assert(GvGP(gv));
6504     assert(!CvANON(cv));
6505     assert(CvGV(cv) == gv);
6506     assert(!CvNAMED(cv));
6507
6508     /* will the CV shortly be freed by gp_free() ? */
6509     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6510         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6511         return;
6512     }
6513
6514     /* if not, anonymise: */
6515     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6516                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6517                     : newSVpvn_flags( "__ANON__", 8, 0 );
6518     sv_catpvs(gvname, "::__ANON__");
6519     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6520     SvREFCNT_dec_NN(gvname);
6521
6522     CvANON_on(cv);
6523     CvCVGV_RC_on(cv);
6524     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6525 }
6526
6527
6528 /*
6529 =for apidoc sv_clear
6530
6531 Clear an SV: call any destructors, free up any memory used by the body,
6532 and free the body itself.  The SV's head is I<not> freed, although
6533 its type is set to all 1's so that it won't inadvertently be assumed
6534 to be live during global destruction etc.
6535 This function should only be called when C<REFCNT> is zero.  Most of the time
6536 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6537 instead.
6538
6539 =cut
6540 */
6541
6542 void
6543 Perl_sv_clear(pTHX_ SV *const orig_sv)
6544 {
6545     dVAR;
6546     HV *stash;
6547     U32 type;
6548     const struct body_details *sv_type_details;
6549     SV* iter_sv = NULL;
6550     SV* next_sv = NULL;
6551     SV *sv = orig_sv;
6552     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6553                               Not strictly necessary */
6554
6555     PERL_ARGS_ASSERT_SV_CLEAR;
6556
6557     /* within this loop, sv is the SV currently being freed, and
6558      * iter_sv is the most recent AV or whatever that's being iterated
6559      * over to provide more SVs */
6560
6561     while (sv) {
6562
6563         type = SvTYPE(sv);
6564
6565         assert(SvREFCNT(sv) == 0);
6566         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6567
6568         if (type <= SVt_IV) {
6569             /* See the comment in sv.h about the collusion between this
6570              * early return and the overloading of the NULL slots in the
6571              * size table.  */
6572             if (SvROK(sv))
6573                 goto free_rv;
6574             SvFLAGS(sv) &= SVf_BREAK;
6575             SvFLAGS(sv) |= SVTYPEMASK;
6576             goto free_head;
6577         }
6578
6579         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6580            for another purpose  */
6581         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6582
6583         if (type >= SVt_PVMG) {
6584             if (SvOBJECT(sv)) {
6585                 if (!curse(sv, 1)) goto get_next_sv;
6586                 type = SvTYPE(sv); /* destructor may have changed it */
6587             }
6588             /* Free back-references before magic, in case the magic calls
6589              * Perl code that has weak references to sv. */
6590             if (type == SVt_PVHV) {
6591                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6592                 if (SvMAGIC(sv))
6593                     mg_free(sv);
6594             }
6595             else if (SvMAGIC(sv)) {
6596                 /* Free back-references before other types of magic. */
6597                 sv_unmagic(sv, PERL_MAGIC_backref);
6598                 mg_free(sv);
6599             }
6600             SvMAGICAL_off(sv);
6601         }
6602         switch (type) {
6603             /* case SVt_INVLIST: */
6604         case SVt_PVIO:
6605             if (IoIFP(sv) &&
6606                 IoIFP(sv) != PerlIO_stdin() &&
6607                 IoIFP(sv) != PerlIO_stdout() &&
6608                 IoIFP(sv) != PerlIO_stderr() &&
6609                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6610             {
6611                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6612                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6613                           IoTYPE(sv) == IoTYPE_RDWR   ||
6614                           IoTYPE(sv) == IoTYPE_APPEND));
6615             }
6616             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6617                 PerlDir_close(IoDIRP(sv));
6618             IoDIRP(sv) = (DIR*)NULL;
6619             Safefree(IoTOP_NAME(sv));
6620             Safefree(IoFMT_NAME(sv));
6621             Safefree(IoBOTTOM_NAME(sv));
6622             if ((const GV *)sv == PL_statgv)
6623                 PL_statgv = NULL;
6624             goto freescalar;
6625         case SVt_REGEXP:
6626             /* FIXME for plugins */
6627             pregfree2((REGEXP*) sv);
6628             goto freescalar;
6629         case SVt_PVCV:
6630         case SVt_PVFM:
6631             cv_undef(MUTABLE_CV(sv));
6632             /* If we're in a stash, we don't own a reference to it.
6633              * However it does have a back reference to us, which needs to
6634              * be cleared.  */
6635             if ((stash = CvSTASH(sv)))
6636                 sv_del_backref(MUTABLE_SV(stash), sv);
6637             goto freescalar;
6638         case SVt_PVHV:
6639             if (PL_last_swash_hv == (const HV *)sv) {
6640                 PL_last_swash_hv = NULL;
6641             }
6642             if (HvTOTALKEYS((HV*)sv) > 0) {
6643                 const HEK *hek;
6644                 /* this statement should match the one at the beginning of
6645                  * hv_undef_flags() */
6646                 if (   PL_phase != PERL_PHASE_DESTRUCT
6647                     && (hek = HvNAME_HEK((HV*)sv)))
6648                 {
6649                     if (PL_stashcache) {
6650                         DEBUG_o(Perl_deb(aTHX_
6651                             "sv_clear clearing PL_stashcache for '%" HEKf
6652                             "'\n",
6653                              HEKfARG(hek)));
6654                         (void)hv_deletehek(PL_stashcache,
6655                                            hek, G_DISCARD);
6656                     }
6657                     hv_name_set((HV*)sv, NULL, 0, 0);
6658                 }
6659
6660                 /* save old iter_sv in unused SvSTASH field */
6661                 assert(!SvOBJECT(sv));
6662                 SvSTASH(sv) = (HV*)iter_sv;
6663                 iter_sv = sv;
6664
6665                 /* save old hash_index in unused SvMAGIC field */
6666                 assert(!SvMAGICAL(sv));
6667                 assert(!SvMAGIC(sv));
6668                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6669                 hash_index = 0;
6670
6671                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6672                 goto get_next_sv; /* process this new sv */
6673             }
6674             /* free empty hash */
6675             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6676             assert(!HvARRAY((HV*)sv));
6677             break;
6678         case SVt_PVAV:
6679             {
6680                 AV* av = MUTABLE_AV(sv);
6681                 if (PL_comppad == av) {
6682                     PL_comppad = NULL;
6683                     PL_curpad = NULL;
6684                 }
6685                 if (AvREAL(av) && AvFILLp(av) > -1) {
6686                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6687                     /* save old iter_sv in top-most slot of AV,
6688                      * and pray that it doesn't get wiped in the meantime */
6689                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6690                     iter_sv = sv;
6691                     goto get_next_sv; /* process this new sv */
6692                 }
6693                 Safefree(AvALLOC(av));
6694             }
6695
6696             break;
6697         case SVt_PVLV:
6698             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6699                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6700                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6701                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6702             }
6703             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6704                 SvREFCNT_dec(LvTARG(sv));
6705             if (isREGEXP(sv)) {
6706                 /* SvLEN points to a regex body. Free the body, then
6707                  * set SvLEN to whatever value was in the now-freed
6708                  * regex body. The PVX buffer is shared by multiple re's
6709                  * and only freed once, by the re whose len in non-null */
6710                 STRLEN len = ReANY(sv)->xpv_len;
6711                 pregfree2((REGEXP*) sv);
6712                 SvLEN_set((sv), len);
6713                 goto freescalar;
6714             }
6715             /* FALLTHROUGH */
6716         case SVt_PVGV:
6717             if (isGV_with_GP(sv)) {
6718                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6719                    && HvENAME_get(stash))
6720                     mro_method_changed_in(stash);
6721                 gp_free(MUTABLE_GV(sv));
6722                 if (GvNAME_HEK(sv))
6723                     unshare_hek(GvNAME_HEK(sv));
6724                 /* If we're in a stash, we don't own a reference to it.
6725                  * However it does have a back reference to us, which
6726                  * needs to be cleared.  */
6727                 if ((stash = GvSTASH(sv)))
6728                         sv_del_backref(MUTABLE_SV(stash), sv);
6729             }
6730             /* FIXME. There are probably more unreferenced pointers to SVs
6731              * in the interpreter struct that we should check and tidy in
6732              * a similar fashion to this:  */
6733             /* See also S_sv_unglob, which does the same thing. */
6734             if ((const GV *)sv == PL_last_in_gv)
6735                 PL_last_in_gv = NULL;
6736             else if ((const GV *)sv == PL_statgv)
6737                 PL_statgv = NULL;
6738             else if ((const GV *)sv == PL_stderrgv)
6739                 PL_stderrgv = NULL;
6740             /* FALLTHROUGH */
6741         case SVt_PVMG:
6742         case SVt_PVNV:
6743         case SVt_PVIV:
6744         case SVt_INVLIST:
6745         case SVt_PV:
6746           freescalar:
6747             /* Don't bother with SvOOK_off(sv); as we're only going to
6748              * free it.  */
6749             if (SvOOK(sv)) {
6750                 STRLEN offset;
6751                 SvOOK_offset(sv, offset);
6752                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6753                 /* Don't even bother with turning off the OOK flag.  */
6754             }
6755             if (SvROK(sv)) {
6756             free_rv:
6757                 {
6758                     SV * const target = SvRV(sv);
6759                     if (SvWEAKREF(sv))
6760                         sv_del_backref(target, sv);
6761                     else
6762                         next_sv = target;
6763                 }
6764             }
6765 #ifdef PERL_ANY_COW
6766             else if (SvPVX_const(sv)
6767                      && !(SvTYPE(sv) == SVt_PVIO
6768                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6769             {
6770                 if (SvIsCOW(sv)) {
6771                     if (DEBUG_C_TEST) {
6772                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6773                         sv_dump(sv);
6774                     }
6775                     if (SvLEN(sv)) {
6776                         if (CowREFCNT(sv)) {
6777                             sv_buf_to_rw(sv);
6778                             CowREFCNT(sv)--;
6779                             sv_buf_to_ro(sv);
6780                             SvLEN_set(sv, 0);
6781                         }
6782                     } else {
6783                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6784                     }
6785
6786                 }
6787                 if (SvLEN(sv)) {
6788                     Safefree(SvPVX_mutable(sv));
6789                 }
6790             }
6791 #else
6792             else if (SvPVX_const(sv) && SvLEN(sv)
6793                      && !(SvTYPE(sv) == SVt_PVIO
6794                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6795                 Safefree(SvPVX_mutable(sv));
6796             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6797                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6798             }
6799 #endif
6800             break;
6801         case SVt_NV:
6802             break;
6803         }
6804
6805       free_body:
6806
6807         SvFLAGS(sv) &= SVf_BREAK;
6808         SvFLAGS(sv) |= SVTYPEMASK;
6809
6810         sv_type_details = bodies_by_type + type;
6811         if (sv_type_details->arena) {
6812             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6813                      &PL_body_roots[type]);
6814         }
6815         else if (sv_type_details->body_size) {
6816             safefree(SvANY(sv));
6817         }
6818
6819       free_head:
6820         /* caller is responsible for freeing the head of the original sv */
6821         if (sv != orig_sv && !SvREFCNT(sv))
6822             del_SV(sv);
6823
6824         /* grab and free next sv, if any */
6825       get_next_sv:
6826         while (1) {
6827             sv = NULL;
6828             if (next_sv) {
6829                 sv = next_sv;
6830                 next_sv = NULL;
6831             }
6832             else if (!iter_sv) {
6833                 break;
6834             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6835                 AV *const av = (AV*)iter_sv;
6836                 if (AvFILLp(av) > -1) {
6837                     sv = AvARRAY(av)[AvFILLp(av)--];
6838                 }
6839                 else { /* no more elements of current AV to free */
6840                     sv = iter_sv;
6841                     type = SvTYPE(sv);
6842                     /* restore previous value, squirrelled away */
6843                     iter_sv = AvARRAY(av)[AvMAX(av)];
6844                     Safefree(AvALLOC(av));
6845                     goto free_body;
6846                 }
6847             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6848                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6849                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6850                     /* no more elements of current HV to free */
6851                     sv = iter_sv;
6852                     type = SvTYPE(sv);
6853                     /* Restore previous values of iter_sv and hash_index,
6854                      * squirrelled away */
6855                     assert(!SvOBJECT(sv));
6856                     iter_sv = (SV*)SvSTASH(sv);
6857                     assert(!SvMAGICAL(sv));
6858                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6859 #ifdef DEBUGGING
6860                     /* perl -DA does not like rubbish in SvMAGIC. */
6861                     SvMAGIC_set(sv, 0);
6862 #endif
6863
6864                     /* free any remaining detritus from the hash struct */
6865                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6866                     assert(!HvARRAY((HV*)sv));
6867                     goto free_body;
6868                 }
6869             }
6870
6871             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6872
6873             if (!sv)
6874                 continue;
6875             if (!SvREFCNT(sv)) {
6876                 sv_free(sv);
6877                 continue;
6878             }
6879             if (--(SvREFCNT(sv)))
6880                 continue;
6881 #ifdef DEBUGGING
6882             if (SvTEMP(sv)) {
6883                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6884                          "Attempt to free temp prematurely: SV 0x%" UVxf
6885                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6886                 continue;
6887             }
6888 #endif
6889             if (SvIMMORTAL(sv)) {
6890                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6891                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6892                 continue;
6893             }
6894             break;
6895         } /* while 1 */
6896
6897     } /* while sv */
6898 }
6899
6900 /* This routine curses the sv itself, not the object referenced by sv. So
6901    sv does not have to be ROK. */
6902
6903 static bool
6904 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6905     PERL_ARGS_ASSERT_CURSE;
6906     assert(SvOBJECT(sv));
6907
6908     if (PL_defstash &&  /* Still have a symbol table? */
6909         SvDESTROYABLE(sv))
6910     {
6911         dSP;
6912         HV* stash;
6913         do {
6914           stash = SvSTASH(sv);
6915           assert(SvTYPE(stash) == SVt_PVHV);
6916           if (HvNAME(stash)) {
6917             CV* destructor = NULL;
6918             struct mro_meta *meta;
6919
6920             assert (SvOOK(stash));
6921
6922             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6923                          HvNAME(stash)) );
6924
6925             /* don't make this an initialization above the assert, since it needs
6926                an AUX structure */
6927             meta = HvMROMETA(stash);
6928             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6929                 destructor = meta->destroy;
6930                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6931                              (void *)destructor, HvNAME(stash)) );
6932             }
6933             else {
6934                 bool autoload = FALSE;
6935                 GV *gv =
6936                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6937                 if (gv)
6938                     destructor = GvCV(gv);
6939                 if (!destructor) {
6940                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6941                                          GV_AUTOLOAD_ISMETHOD);
6942                     if (gv)
6943                         destructor = GvCV(gv);
6944                     if (destructor)
6945                         autoload = TRUE;
6946                 }
6947                 /* we don't cache AUTOLOAD for DESTROY, since this code
6948                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6949                    equivalent for XS AUTOLOADs */
6950                 if (!autoload) {
6951                     meta->destroy_gen = PL_sub_generation;
6952                     meta->destroy = destructor;
6953
6954                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6955                                       (void *)destructor, HvNAME(stash)) );
6956                 }
6957                 else {
6958                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6959                                       HvNAME(stash)) );
6960                 }
6961             }
6962             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6963             if (destructor
6964                 /* A constant subroutine can have no side effects, so
6965                    don't bother calling it.  */
6966                 && !CvCONST(destructor)
6967                 /* Don't bother calling an empty destructor or one that
6968                    returns immediately. */
6969                 && (CvISXSUB(destructor)
6970                 || (CvSTART(destructor)
6971                     && (CvSTART(destructor)->op_next->op_type
6972                                         != OP_LEAVESUB)
6973                     && (CvSTART(destructor)->op_next->op_type
6974                                         != OP_PUSHMARK
6975                         || CvSTART(destructor)->op_next->op_next->op_type
6976                                         != OP_RETURN
6977                        )
6978                    ))
6979                )
6980             {
6981                 SV* const tmpref = newRV(sv);
6982                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6983                 ENTER;
6984                 PUSHSTACKi(PERLSI_DESTROY);
6985                 EXTEND(SP, 2);
6986                 PUSHMARK(SP);
6987                 PUSHs(tmpref);
6988                 PUTBACK;
6989                 call_sv(MUTABLE_SV(destructor),
6990                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6991                 POPSTACK;
6992                 SPAGAIN;
6993                 LEAVE;
6994                 if(SvREFCNT(tmpref) < 2) {
6995                     /* tmpref is not kept alive! */
6996                     SvREFCNT(sv)--;
6997                     SvRV_set(tmpref, NULL);
6998                     SvROK_off(tmpref);
6999                 }
7000                 SvREFCNT_dec_NN(tmpref);
7001             }
7002           }
7003         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7004
7005
7006         if (check_refcnt && SvREFCNT(sv)) {
7007             if (PL_in_clean_objs)
7008                 Perl_croak(aTHX_
7009                   "DESTROY created new reference to dead object '%" HEKf "'",
7010                    HEKfARG(HvNAME_HEK(stash)));
7011             /* DESTROY gave object new lease on life */
7012             return FALSE;
7013         }
7014     }
7015
7016     if (SvOBJECT(sv)) {
7017         HV * const stash = SvSTASH(sv);
7018         /* Curse before freeing the stash, as freeing the stash could cause
7019            a recursive call into S_curse. */
7020         SvOBJECT_off(sv);       /* Curse the object. */
7021         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7022         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7023     }
7024     return TRUE;
7025 }
7026
7027 /*
7028 =for apidoc sv_newref
7029
7030 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7031 instead.
7032
7033 =cut
7034 */
7035
7036 SV *
7037 Perl_sv_newref(pTHX_ SV *const sv)
7038 {
7039     PERL_UNUSED_CONTEXT;
7040     if (sv)
7041         (SvREFCNT(sv))++;
7042     return sv;
7043 }
7044
7045 /*
7046 =for apidoc sv_free
7047
7048 Decrement an SV's reference count, and if it drops to zero, call
7049 C<sv_clear> to invoke destructors and free up any memory used by
7050 the body; finally, deallocating the SV's head itself.
7051 Normally called via a wrapper macro C<SvREFCNT_dec>.
7052
7053 =cut
7054 */
7055
7056 void
7057 Perl_sv_free(pTHX_ SV *const sv)
7058 {
7059     SvREFCNT_dec(sv);
7060 }
7061
7062
7063 /* Private helper function for SvREFCNT_dec().
7064  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7065
7066 void
7067 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7068 {
7069     dVAR;
7070
7071     PERL_ARGS_ASSERT_SV_FREE2;
7072
7073     if (LIKELY( rc == 1 )) {
7074         /* normal case */
7075         SvREFCNT(sv) = 0;
7076
7077 #ifdef DEBUGGING
7078         if (SvTEMP(sv)) {
7079             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7080                              "Attempt to free temp prematurely: SV 0x%" UVxf
7081                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7082             return;
7083         }
7084 #endif
7085         if (SvIMMORTAL(sv)) {
7086             /* make sure SvREFCNT(sv)==0 happens very seldom */
7087             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7088             return;
7089         }
7090         sv_clear(sv);
7091         if (! SvREFCNT(sv)) /* may have have been resurrected */
7092             del_SV(sv);
7093         return;
7094     }
7095
7096     /* handle exceptional cases */
7097
7098     assert(rc == 0);
7099
7100     if (SvFLAGS(sv) & SVf_BREAK)
7101         /* this SV's refcnt has been artificially decremented to
7102          * trigger cleanup */
7103         return;
7104     if (PL_in_clean_all) /* All is fair */
7105         return;
7106     if (SvIMMORTAL(sv)) {
7107         /* make sure SvREFCNT(sv)==0 happens very seldom */
7108         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7109         return;
7110     }
7111     if (ckWARN_d(WARN_INTERNAL)) {
7112 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7113         Perl_dump_sv_child(aTHX_ sv);
7114 #else
7115     #ifdef DEBUG_LEAKING_SCALARS
7116         sv_dump(sv);
7117     #endif
7118 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7119         if (PL_warnhook == PERL_WARNHOOK_FATAL
7120             || ckDEAD(packWARN(WARN_INTERNAL))) {
7121             /* Don't let Perl_warner cause us to escape our fate:  */
7122             abort();
7123         }
7124 #endif
7125         /* This may not return:  */
7126         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7127                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7128                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7129 #endif
7130     }
7131 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7132     abort();
7133 #endif
7134
7135 }
7136
7137
7138 /*
7139 =for apidoc sv_len
7140
7141 Returns the length of the string in the SV.  Handles magic and type
7142 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7143 gives raw access to the C<xpv_cur> slot.
7144
7145 =cut
7146 */
7147
7148 STRLEN
7149 Perl_sv_len(pTHX_ SV *const sv)
7150 {
7151     STRLEN len;
7152
7153     if (!sv)
7154         return 0;
7155
7156     (void)SvPV_const(sv, len);
7157     return len;
7158 }
7159
7160 /*
7161 =for apidoc sv_len_utf8
7162
7163 Returns the number of characters in the string in an SV, counting wide
7164 UTF-8 bytes as a single character.  Handles magic and type coercion.
7165
7166 =cut
7167 */
7168
7169 /*
7170  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7171  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7172  * (Note that the mg_len is not the length of the mg_ptr field.
7173  * This allows the cache to store the character length of the string without
7174  * needing to malloc() extra storage to attach to the mg_ptr.)
7175  *
7176  */
7177
7178 STRLEN
7179 Perl_sv_len_utf8(pTHX_ SV *const sv)
7180 {
7181     if (!sv)
7182         return 0;
7183
7184     SvGETMAGIC(sv);
7185     return sv_len_utf8_nomg(sv);
7186 }
7187
7188 STRLEN
7189 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7190 {
7191     STRLEN len;
7192     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7193
7194     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7195
7196     if (PL_utf8cache && SvUTF8(sv)) {
7197             STRLEN ulen;
7198             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7199
7200             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7201                 if (mg->mg_len != -1)
7202                     ulen = mg->mg_len;
7203                 else {
7204                     /* We can use the offset cache for a headstart.
7205                        The longer value is stored in the first pair.  */
7206                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7207
7208                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7209                                                        s + len);
7210                 }
7211                 
7212                 if (PL_utf8cache < 0) {
7213                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7214                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7215                 }
7216             }
7217             else {
7218                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7219                 utf8_mg_len_cache_update(sv, &mg, ulen);
7220             }
7221             return ulen;
7222     }
7223     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7224 }
7225
7226 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7227    offset.  */
7228 static STRLEN
7229 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7230                       STRLEN *const uoffset_p, bool *const at_end)
7231 {
7232     const U8 *s = start;
7233     STRLEN uoffset = *uoffset_p;
7234
7235     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7236
7237     while (s < send && uoffset) {
7238         --uoffset;
7239         s += UTF8SKIP(s);
7240     }
7241     if (s == send) {
7242         *at_end = TRUE;
7243     }
7244     else if (s > send) {
7245         *at_end = TRUE;
7246         /* This is the existing behaviour. Possibly it should be a croak, as
7247            it's actually a bounds error  */
7248         s = send;
7249     }
7250     *uoffset_p -= uoffset;
7251     return s - start;
7252 }
7253
7254 /* Given the length of the string in both bytes and UTF-8 characters, decide
7255    whether to walk forwards or backwards to find the byte corresponding to
7256    the passed in UTF-8 offset.  */
7257 static STRLEN
7258 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7259                     STRLEN uoffset, const STRLEN uend)
7260 {
7261     STRLEN backw = uend - uoffset;
7262
7263     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7264
7265     if (uoffset < 2 * backw) {
7266         /* The assumption is that going forwards is twice the speed of going
7267            forward (that's where the 2 * backw comes from).
7268            (The real figure of course depends on the UTF-8 data.)  */
7269         const U8 *s = start;
7270
7271         while (s < send && uoffset--)
7272             s += UTF8SKIP(s);
7273         assert (s <= send);
7274         if (s > send)
7275             s = send;
7276         return s - start;
7277     }
7278
7279     while (backw--) {
7280         send--;
7281         while (UTF8_IS_CONTINUATION(*send))
7282             send--;
7283     }
7284     return send - start;
7285 }
7286
7287 /* For the string representation of the given scalar, find the byte
7288    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7289    give another position in the string, *before* the sought offset, which
7290    (which is always true, as 0, 0 is a valid pair of positions), which should
7291    help reduce the amount of linear searching.
7292    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7293    will be used to reduce the amount of linear searching. The cache will be
7294    created if necessary, and the found value offered to it for update.  */
7295 static STRLEN
7296 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7297                     const U8 *const send, STRLEN uoffset,
7298                     STRLEN uoffset0, STRLEN boffset0)
7299 {
7300     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7301     bool found = FALSE;
7302     bool at_end = FALSE;
7303
7304     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7305
7306     assert (uoffset >= uoffset0);
7307
7308     if (!uoffset)
7309         return 0;
7310
7311     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7312         && PL_utf8cache
7313         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7314                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7315         if ((*mgp)->mg_ptr) {
7316             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7317             if (cache[0] == uoffset) {
7318                 /* An exact match. */
7319                 return cache[1];
7320             }
7321             if (cache[2] == uoffset) {
7322                 /* An exact match. */
7323                 return cache[3];
7324             }
7325
7326             if (cache[0] < uoffset) {
7327                 /* The cache already knows part of the way.   */
7328                 if (cache[0] > uoffset0) {
7329                     /* The cache knows more than the passed in pair  */
7330                     uoffset0 = cache[0];
7331                     boffset0 = cache[1];
7332                 }
7333                 if ((*mgp)->mg_len != -1) {
7334                     /* And we know the end too.  */
7335                     boffset = boffset0
7336                         + sv_pos_u2b_midway(start + boffset0, send,
7337                                               uoffset - uoffset0,
7338                                               (*mgp)->mg_len - uoffset0);
7339                 } else {
7340                     uoffset -= uoffset0;
7341                     boffset = boffset0
7342                         + sv_pos_u2b_forwards(start + boffset0,
7343                                               send, &uoffset, &at_end);
7344                     uoffset += uoffset0;
7345                 }
7346             }
7347             else if (cache[2] < uoffset) {
7348                 /* We're between the two cache entries.  */
7349                 if (cache[2] > uoffset0) {
7350                     /* and the cache knows more than the passed in pair  */
7351                     uoffset0 = cache[2];
7352                     boffset0 = cache[3];
7353                 }
7354
7355                 boffset = boffset0
7356                     + sv_pos_u2b_midway(start + boffset0,
7357                                           start + cache[1],
7358                                           uoffset - uoffset0,
7359                                           cache[0] - uoffset0);
7360             } else {
7361                 boffset = boffset0
7362                     + sv_pos_u2b_midway(start + boffset0,
7363                                           start + cache[3],
7364                                           uoffset - uoffset0,
7365                                           cache[2] - uoffset0);
7366             }
7367             found = TRUE;
7368         }
7369         else if ((*mgp)->mg_len != -1) {
7370             /* If we can take advantage of a passed in offset, do so.  */
7371             /* In fact, offset0 is either 0, or less than offset, so don't
7372                need to worry about the other possibility.  */
7373             boffset = boffset0
7374                 + sv_pos_u2b_midway(start + boffset0, send,
7375                                       uoffset - uoffset0,
7376                                       (*mgp)->mg_len - uoffset0);
7377             found = TRUE;
7378         }
7379     }
7380
7381     if (!found || PL_utf8cache < 0) {
7382         STRLEN real_boffset;
7383         uoffset -= uoffset0;
7384         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7385                                                       send, &uoffset, &at_end);
7386         uoffset += uoffset0;
7387
7388         if (found && PL_utf8cache < 0)
7389             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7390                                        real_boffset, sv);
7391         boffset = real_boffset;
7392     }
7393
7394     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7395         if (at_end)
7396             utf8_mg_len_cache_update(sv, mgp, uoffset);
7397         else
7398             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7399     }
7400     return boffset;
7401 }
7402
7403
7404 /*
7405 =for apidoc sv_pos_u2b_flags
7406
7407 Converts the offset from a count of UTF-8 chars from
7408 the start of the string, to a count of the equivalent number of bytes; if
7409 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7410 C<offset>, rather than from the start
7411 of the string.  Handles type coercion.
7412 C<flags> is passed to C<SvPV_flags>, and usually should be
7413 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7414
7415 =cut
7416 */
7417
7418 /*
7419  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7420  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7421  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7422  *
7423  */
7424
7425 STRLEN
7426 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7427                       U32 flags)
7428 {
7429     const U8 *start;
7430     STRLEN len;
7431     STRLEN boffset;
7432
7433     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7434
7435     start = (U8*)SvPV_flags(sv, len, flags);
7436     if (len) {
7437         const U8 * const send = start + len;
7438         MAGIC *mg = NULL;
7439         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7440
7441         if (lenp
7442             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7443                         is 0, and *lenp is already set to that.  */) {
7444             /* Convert the relative offset to absolute.  */
7445             const STRLEN uoffset2 = uoffset + *lenp;
7446             const STRLEN boffset2
7447                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7448                                       uoffset, boffset) - boffset;
7449
7450             *lenp = boffset2;
7451         }
7452     } else {
7453         if (lenp)
7454             *lenp = 0;
7455         boffset = 0;
7456     }
7457
7458     return boffset;
7459 }
7460
7461 /*
7462 =for apidoc sv_pos_u2b
7463
7464 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7465 the start of the string, to a count of the equivalent number of bytes; if
7466 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7467 the offset, rather than from the start of the string.  Handles magic and
7468 type coercion.
7469
7470 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7471 than 2Gb.
7472
7473 =cut
7474 */
7475
7476 /*
7477  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7478  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7479  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7480  *
7481  */
7482
7483 /* This function is subject to size and sign problems */
7484
7485 void
7486 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7487 {
7488     PERL_ARGS_ASSERT_SV_POS_U2B;
7489
7490     if (lenp) {
7491         STRLEN ulen = (STRLEN)*lenp;
7492         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7493                                          SV_GMAGIC|SV_CONST_RETURN);
7494         *lenp = (I32)ulen;
7495     } else {
7496         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7497                                          SV_GMAGIC|SV_CONST_RETURN);
7498     }
7499 }
7500
7501 static void
7502 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7503                            const STRLEN ulen)
7504 {
7505     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7506     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7507         return;
7508
7509     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7510                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7511         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7512     }
7513     assert(*mgp);
7514
7515     (*mgp)->mg_len = ulen;
7516 }
7517
7518 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7519    byte length pairing. The (byte) length of the total SV is passed in too,
7520    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7521    may not have updated SvCUR, so we can't rely on reading it directly.
7522
7523    The proffered utf8/byte length pairing isn't used if the cache already has
7524    two pairs, and swapping either for the proffered pair would increase the
7525    RMS of the intervals between known byte offsets.
7526
7527    The cache itself consists of 4 STRLEN values
7528    0: larger UTF-8 offset
7529    1: corresponding byte offset
7530    2: smaller UTF-8 offset
7531    3: corresponding byte offset
7532
7533    Unused cache pairs have the value 0, 0.
7534    Keeping the cache "backwards" means that the invariant of
7535    cache[0] >= cache[2] is maintained even with empty slots, which means that
7536    the code that uses it doesn't need to worry if only 1 entry has actually
7537    been set to non-zero.  It also makes the "position beyond the end of the
7538    cache" logic much simpler, as the first slot is always the one to start
7539    from.   
7540 */
7541 static void
7542 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7543                            const STRLEN utf8, const STRLEN blen)
7544 {
7545     STRLEN *cache;
7546
7547     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7548
7549     if (SvREADONLY(sv))
7550         return;
7551
7552     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7553                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7554         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7555                            0);
7556         (*mgp)->mg_len = -1;
7557     }
7558     assert(*mgp);
7559
7560     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7561         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7562         (*mgp)->mg_ptr = (char *) cache;
7563     }
7564     assert(cache);
7565
7566     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7567         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7568            a pointer.  Note that we no longer cache utf8 offsets on refer-
7569            ences, but this check is still a good idea, for robustness.  */
7570         const U8 *start = (const U8 *) SvPVX_const(sv);
7571         const STRLEN realutf8 = utf8_length(start, start + byte);
7572
7573         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7574                                    sv);
7575     }
7576
7577     /* Cache is held with the later position first, to simplify the code
7578        that deals with unbounded ends.  */
7579        
7580     ASSERT_UTF8_CACHE(cache);
7581     if (cache[1] == 0) {
7582         /* Cache is totally empty  */
7583         cache[0] = utf8;
7584         cache[1] = byte;
7585     } else if (cache[3] == 0) {
7586         if (byte > cache[1]) {
7587             /* New one is larger, so goes first.  */
7588             cache[2] = cache[0];
7589             cache[3] = cache[1];
7590             cache[0] = utf8;
7591             cache[1] = byte;
7592         } else {
7593             cache[2] = utf8;
7594             cache[3] = byte;
7595         }
7596     } else {
7597 /* float casts necessary? XXX */
7598 #define THREEWAY_SQUARE(a,b,c,d) \
7599             ((float)((d) - (c))) * ((float)((d) - (c))) \
7600             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7601                + ((float)((b) - (a))) * ((float)((b) - (a)))
7602
7603         /* Cache has 2 slots in use, and we know three potential pairs.
7604            Keep the two that give the lowest RMS distance. Do the
7605            calculation in bytes simply because we always know the byte
7606            length.  squareroot has the same ordering as the positive value,
7607            so don't bother with the actual square root.  */
7608         if (byte > cache[1]) {
7609             /* New position is after the existing pair of pairs.  */
7610             const float keep_earlier
7611                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7612             const float keep_later
7613                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7614
7615             if (keep_later < keep_earlier) {
7616                 cache[2] = cache[0];
7617                 cache[3] = cache[1];
7618             }
7619             cache[0] = utf8;
7620             cache[1] = byte;
7621         }
7622         else {
7623             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7624             float b, c, keep_earlier;
7625             if (byte > cache[3]) {
7626                 /* New position is between the existing pair of pairs.  */
7627                 b = (float)cache[3];
7628                 c = (float)byte;
7629             } else {
7630                 /* New position is before the existing pair of pairs.  */
7631                 b = (float)byte;
7632                 c = (float)cache[3];
7633             }
7634             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7635             if (byte > cache[3]) {
7636                 if (keep_later < keep_earlier) {
7637                     cache[2] = utf8;
7638                     cache[3] = byte;
7639                 }
7640                 else {
7641                     cache[0] = utf8;
7642                     cache[1] = byte;
7643                 }
7644             }
7645             else {
7646                 if (! (keep_later < keep_earlier)) {
7647                     cache[0] = cache[2];
7648                     cache[1] = cache[3];
7649                 }
7650                 cache[2] = utf8;
7651                 cache[3] = byte;
7652             }
7653         }
7654     }
7655     ASSERT_UTF8_CACHE(cache);
7656 }
7657
7658 /* We already know all of the way, now we may be able to walk back.  The same
7659    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7660    backward is half the speed of walking forward. */
7661 static STRLEN
7662 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7663                     const U8 *end, STRLEN endu)
7664 {
7665     const STRLEN forw = target - s;
7666     STRLEN backw = end - target;
7667
7668     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7669
7670     if (forw < 2 * backw) {
7671         return utf8_length(s, target);
7672     }
7673
7674     while (end > target) {
7675         end--;
7676         while (UTF8_IS_CONTINUATION(*end)) {
7677             end--;
7678         }
7679         endu--;
7680     }
7681     return endu;
7682 }
7683
7684 /*
7685 =for apidoc sv_pos_b2u_flags
7686
7687 Converts C<offset> from a count of bytes from the start of the string, to
7688 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7689 C<flags> is passed to C<SvPV_flags>, and usually should be
7690 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7691
7692 =cut
7693 */
7694
7695 /*
7696  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7697  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7698  * and byte offsets.
7699  *
7700  */
7701 STRLEN
7702 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7703 {
7704     const U8* s;
7705     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7706     STRLEN blen;
7707     MAGIC* mg = NULL;
7708     const U8* send;
7709     bool found = FALSE;
7710
7711     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7712
7713     s = (const U8*)SvPV_flags(sv, blen, flags);
7714
7715     if (blen < offset)
7716         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7717                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7718
7719     send = s + offset;
7720
7721     if (!SvREADONLY(sv)
7722         && PL_utf8cache
7723         && SvTYPE(sv) >= SVt_PVMG
7724         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7725     {
7726         if (mg->mg_ptr) {
7727             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7728             if (cache[1] == offset) {
7729                 /* An exact match. */
7730                 return cache[0];
7731             }
7732             if (cache[3] == offset) {
7733                 /* An exact match. */
7734                 return cache[2];
7735             }
7736
7737             if (cache[1] < offset) {
7738                 /* We already know part of the way. */
7739                 if (mg->mg_len != -1) {
7740                     /* Actually, we know the end too.  */
7741                     len = cache[0]
7742                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7743                                               s + blen, mg->mg_len - cache[0]);
7744                 } else {
7745                     len = cache[0] + utf8_length(s + cache[1], send);
7746                 }
7747             }
7748             else if (cache[3] < offset) {
7749                 /* We're between the two cached pairs, so we do the calculation
7750                    offset by the byte/utf-8 positions for the earlier pair,
7751                    then add the utf-8 characters from the string start to
7752                    there.  */
7753                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7754                                           s + cache[1], cache[0] - cache[2])
7755                     + cache[2];
7756
7757             }
7758             else { /* cache[3] > offset */
7759                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7760                                           cache[2]);
7761
7762             }
7763             ASSERT_UTF8_CACHE(cache);
7764             found = TRUE;
7765         } else if (mg->mg_len != -1) {
7766             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7767             found = TRUE;
7768         }
7769     }
7770     if (!found || PL_utf8cache < 0) {
7771         const STRLEN real_len = utf8_length(s, send);
7772
7773         if (found && PL_utf8cache < 0)
7774             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7775         len = real_len;
7776     }
7777
7778     if (PL_utf8cache) {
7779         if (blen == offset)
7780             utf8_mg_len_cache_update(sv, &mg, len);
7781         else
7782             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7783     }
7784
7785     return len;
7786 }
7787
7788 /*
7789 =for apidoc sv_pos_b2u
7790
7791 Converts the value pointed to by C<offsetp> from a count of bytes from the
7792 start of the string, to a count of the equivalent number of UTF-8 chars.
7793 Handles magic and type coercion.
7794
7795 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7796 longer than 2Gb.
7797
7798 =cut
7799 */
7800
7801 /*
7802  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7803  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7804  * byte offsets.
7805  *
7806  */
7807 void
7808 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7809 {
7810     PERL_ARGS_ASSERT_SV_POS_B2U;
7811
7812     if (!sv)
7813         return;
7814
7815     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7816                                      SV_GMAGIC|SV_CONST_RETURN);
7817 }
7818
7819 static void
7820 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7821                              STRLEN real, SV *const sv)
7822 {
7823     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7824
7825     /* As this is debugging only code, save space by keeping this test here,
7826        rather than inlining it in all the callers.  */
7827     if (from_cache == real)
7828         return;
7829
7830     /* Need to turn the assertions off otherwise we may recurse infinitely
7831        while printing error messages.  */
7832     SAVEI8(PL_utf8cache);
7833     PL_utf8cache = 0;
7834     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7835                func, (UV) from_cache, (UV) real, SVfARG(sv));
7836 }
7837
7838 /*
7839 =for apidoc sv_eq
7840
7841 Returns a boolean indicating whether the strings in the two SVs are
7842 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7843 coerce its args to strings if necessary.
7844
7845 =for apidoc sv_eq_flags
7846
7847 Returns a boolean indicating whether the strings in the two SVs are
7848 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7849 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7850
7851 =cut
7852 */
7853
7854 I32
7855 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7856 {
7857     const char *pv1;
7858     STRLEN cur1;
7859     const char *pv2;
7860     STRLEN cur2;
7861     I32  eq     = 0;
7862     SV* svrecode = NULL;
7863
7864     if (!sv1) {
7865         pv1 = "";
7866         cur1 = 0;
7867     }
7868     else {
7869         /* if pv1 and pv2 are the same, second SvPV_const call may
7870          * invalidate pv1 (if we are handling magic), so we may need to
7871          * make a copy */
7872         if (sv1 == sv2 && flags & SV_GMAGIC
7873          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7874             pv1 = SvPV_const(sv1, cur1);
7875             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7876         }
7877         pv1 = SvPV_flags_const(sv1, cur1, flags);
7878     }
7879
7880     if (!sv2){
7881         pv2 = "";
7882         cur2 = 0;
7883     }
7884     else
7885         pv2 = SvPV_flags_const(sv2, cur2, flags);
7886
7887     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7888         /* Differing utf8ness.  */
7889         if (SvUTF8(sv1)) {
7890                   /* sv1 is the UTF-8 one  */
7891                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7892                                         (const U8*)pv1, cur1) == 0;
7893         }
7894         else {
7895                   /* sv2 is the UTF-8 one  */
7896                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7897                                         (const U8*)pv2, cur2) == 0;
7898         }
7899     }
7900
7901     if (cur1 == cur2)
7902         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7903         
7904     SvREFCNT_dec(svrecode);
7905
7906     return eq;
7907 }
7908
7909 /*
7910 =for apidoc sv_cmp
7911
7912 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7913 string in C<sv1> is less than, equal to, or greater than the string in
7914 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7915 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7916
7917 =for apidoc sv_cmp_flags
7918
7919 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7920 string in C<sv1> is less than, equal to, or greater than the string in
7921 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7922 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7923 also C<L</sv_cmp_locale_flags>>.
7924
7925 =cut
7926 */
7927
7928 I32
7929 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7930 {
7931     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7932 }
7933
7934 I32
7935 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7936                   const U32 flags)
7937 {
7938     STRLEN cur1, cur2;
7939     const char *pv1, *pv2;
7940     I32  cmp;
7941     SV *svrecode = NULL;
7942
7943     if (!sv1) {
7944         pv1 = "";
7945         cur1 = 0;
7946     }
7947     else
7948         pv1 = SvPV_flags_const(sv1, cur1, flags);
7949
7950     if (!sv2) {
7951         pv2 = "";
7952         cur2 = 0;
7953     }
7954     else
7955         pv2 = SvPV_flags_const(sv2, cur2, flags);
7956
7957     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7958         /* Differing utf8ness.  */
7959         if (SvUTF8(sv1)) {
7960                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7961                                                    (const U8*)pv1, cur1);
7962                 return retval ? retval < 0 ? -1 : +1 : 0;
7963         }
7964         else {
7965                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7966                                                   (const U8*)pv2, cur2);
7967                 return retval ? retval < 0 ? -1 : +1 : 0;
7968         }
7969     }
7970
7971     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7972
7973     if (!cur1) {
7974         cmp = cur2 ? -1 : 0;
7975     } else if (!cur2) {
7976         cmp = 1;
7977     } else {
7978         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7979
7980 #ifdef EBCDIC
7981         if (! DO_UTF8(sv1)) {
7982 #endif
7983             const I32 retval = memcmp((const void*)pv1,
7984                                       (const void*)pv2,
7985                                       shortest_len);
7986             if (retval) {
7987                 cmp = retval < 0 ? -1 : 1;
7988             } else if (cur1 == cur2) {
7989                 cmp = 0;
7990             } else {
7991                 cmp = cur1 < cur2 ? -1 : 1;
7992             }
7993 #ifdef EBCDIC
7994         }
7995         else {  /* Both are to be treated as UTF-EBCDIC */
7996
7997             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7998              * which remaps code points 0-255.  We therefore generally have to
7999              * unmap back to the original values to get an accurate comparison.
8000              * But we don't have to do that for UTF-8 invariants, as by
8001              * definition, they aren't remapped, nor do we have to do it for
8002              * above-latin1 code points, as they also aren't remapped.  (This
8003              * code also works on ASCII platforms, but the memcmp() above is
8004              * much faster). */
8005
8006             const char *e = pv1 + shortest_len;
8007
8008             /* Find the first bytes that differ between the two strings */
8009             while (pv1 < e && *pv1 == *pv2) {
8010                 pv1++;
8011                 pv2++;
8012             }
8013
8014
8015             if (pv1 == e) { /* Are the same all the way to the end */
8016                 if (cur1 == cur2) {
8017                     cmp = 0;
8018                 } else {
8019                     cmp = cur1 < cur2 ? -1 : 1;
8020                 }
8021             }
8022             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8023                     * in the strings were.  The current bytes may or may not be
8024                     * at the beginning of a character.  But neither or both are
8025                     * (or else earlier bytes would have been different).  And
8026                     * if we are in the middle of a character, the two
8027                     * characters are comprised of the same number of bytes
8028                     * (because in this case the start bytes are the same, and
8029                     * the start bytes encode the character's length). */
8030                  if (UTF8_IS_INVARIANT(*pv1))
8031             {
8032                 /* If both are invariants; can just compare directly */
8033                 if (UTF8_IS_INVARIANT(*pv2)) {
8034                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8035                 }
8036                 else   /* Since *pv1 is invariant, it is the whole character,
8037                           which means it is at the beginning of a character.
8038                           That means pv2 is also at the beginning of a
8039                           character (see earlier comment).  Since it isn't
8040                           invariant, it must be a start byte.  If it starts a
8041                           character whose code point is above 255, that
8042                           character is greater than any single-byte char, which
8043                           *pv1 is */
8044                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8045                 {
8046                     cmp = -1;
8047                 }
8048                 else {
8049                     /* Here, pv2 points to a character composed of 2 bytes
8050                      * whose code point is < 256.  Get its code point and
8051                      * compare with *pv1 */
8052                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8053                            ?  -1
8054                            : 1;
8055                 }
8056             }
8057             else   /* The code point starting at pv1 isn't a single byte */
8058                  if (UTF8_IS_INVARIANT(*pv2))
8059             {
8060                 /* But here, the code point starting at *pv2 is a single byte,
8061                  * and so *pv1 must begin a character, hence is a start byte.
8062                  * If that character is above 255, it is larger than any
8063                  * single-byte char, which *pv2 is */
8064                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8065                     cmp = 1;
8066                 }
8067                 else {
8068                     /* Here, pv1 points to a character composed of 2 bytes
8069                      * whose code point is < 256.  Get its code point and
8070                      * compare with the single byte character *pv2 */
8071                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8072                           ?  -1
8073                           : 1;
8074                 }
8075             }
8076             else   /* Here, we've ruled out either *pv1 and *pv2 being
8077                       invariant.  That means both are part of variants, but not
8078                       necessarily at the start of a character */
8079                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8080                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8081             {
8082                 /* Here, at least one is the start of a character, which means
8083                  * the other is also a start byte.  And the code point of at
8084                  * least one of the characters is above 255.  It is a
8085                  * characteristic of UTF-EBCDIC that all start bytes for
8086                  * above-latin1 code points are well behaved as far as code
8087                  * point comparisons go, and all are larger than all other
8088                  * start bytes, so the comparison with those is also well
8089                  * behaved */
8090                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8091             }
8092             else {
8093                 /* Here both *pv1 and *pv2 are part of variant characters.
8094                  * They could be both continuations, or both start characters.
8095                  * (One or both could even be an illegal start character (for
8096                  * an overlong) which for the purposes of sorting we treat as
8097                  * legal. */
8098                 if (UTF8_IS_CONTINUATION(*pv1)) {
8099
8100                     /* If they are continuations for code points above 255,
8101                      * then comparing the current byte is sufficient, as there
8102                      * is no remapping of these and so the comparison is
8103                      * well-behaved.   We determine if they are such
8104                      * continuations by looking at the preceding byte.  It
8105                      * could be a start byte, from which we can tell if it is
8106                      * for an above 255 code point.  Or it could be a
8107                      * continuation, which means the character occupies at
8108                      * least 3 bytes, so must be above 255.  */
8109                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8110                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8111                     {
8112                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8113                         goto cmp_done;
8114                     }
8115
8116                     /* Here, the continuations are for code points below 256;
8117                      * back up one to get to the start byte */
8118                     pv1--;
8119                     pv2--;
8120                 }
8121
8122                 /* We need to get the actual native code point of each of these
8123                  * variants in order to compare them */
8124                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8125                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8126                         ? -1
8127                         : 1;
8128             }
8129         }
8130       cmp_done: ;
8131 #endif
8132     }
8133
8134     SvREFCNT_dec(svrecode);
8135
8136     return cmp;
8137 }
8138
8139 /*
8140 =for apidoc sv_cmp_locale
8141
8142 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8143 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8144 if necessary.  See also C<L</sv_cmp>>.
8145
8146 =for apidoc sv_cmp_locale_flags
8147
8148 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8149 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8150 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8151 C<L</sv_cmp_flags>>.
8152
8153 =cut
8154 */
8155
8156 I32
8157 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8158 {
8159     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8160 }
8161
8162 I32
8163 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8164                          const U32 flags)
8165 {
8166 #ifdef USE_LOCALE_COLLATE
8167
8168     char *pv1, *pv2;
8169     STRLEN len1, len2;
8170     I32 retval;
8171
8172     if (PL_collation_standard)
8173         goto raw_compare;
8174
8175     len1 = len2 = 0;
8176
8177     /* Revert to using raw compare if both operands exist, but either one
8178      * doesn't transform properly for collation */
8179     if (sv1 && sv2) {
8180         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8181         if (! pv1) {
8182             goto raw_compare;
8183         }
8184         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8185         if (! pv2) {
8186             goto raw_compare;
8187         }
8188     }
8189     else {
8190         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8191         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8192     }
8193
8194     if (!pv1 || !len1) {
8195         if (pv2 && len2)
8196             return -1;
8197         else
8198             goto raw_compare;
8199     }
8200     else {
8201         if (!pv2 || !len2)
8202             return 1;
8203     }
8204
8205     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8206
8207     if (retval)
8208         return retval < 0 ? -1 : 1;
8209
8210     /*
8211      * When the result of collation is equality, that doesn't mean
8212      * that there are no differences -- some locales exclude some
8213      * characters from consideration.  So to avoid false equalities,
8214      * we use the raw string as a tiebreaker.
8215      */
8216
8217   raw_compare:
8218     /* FALLTHROUGH */
8219
8220 #else
8221     PERL_UNUSED_ARG(flags);
8222 #endif /* USE_LOCALE_COLLATE */
8223
8224     return sv_cmp(sv1, sv2);
8225 }
8226
8227
8228 #ifdef USE_LOCALE_COLLATE
8229
8230 /*
8231 =for apidoc sv_collxfrm
8232
8233 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8234 C<L</sv_collxfrm_flags>>.
8235
8236 =for apidoc sv_collxfrm_flags
8237
8238 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8239 flags contain C<SV_GMAGIC>, it handles get-magic.
8240
8241 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8242 scalar data of the variable, but transformed to such a format that a normal
8243 memory comparison can be used to compare the data according to the locale
8244 settings.
8245
8246 =cut
8247 */
8248
8249 char *
8250 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8251 {
8252     MAGIC *mg;
8253
8254     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8255
8256     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8257
8258     /* If we don't have collation magic on 'sv', or the locale has changed
8259      * since the last time we calculated it, get it and save it now */
8260     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8261         const char *s;
8262         char *xf;
8263         STRLEN len, xlen;
8264
8265         /* Free the old space */
8266         if (mg)
8267             Safefree(mg->mg_ptr);
8268
8269         s = SvPV_flags_const(sv, len, flags);
8270         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8271             if (! mg) {
8272                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8273                                  0, 0);
8274                 assert(mg);
8275             }
8276             mg->mg_ptr = xf;
8277             mg->mg_len = xlen;
8278         }
8279         else {
8280             if (mg) {
8281                 mg->mg_ptr = NULL;
8282                 mg->mg_len = -1;
8283             }
8284         }
8285     }
8286
8287     if (mg && mg->mg_ptr) {
8288         *nxp = mg->mg_len;
8289         return mg->mg_ptr + sizeof(PL_collation_ix);
8290     }
8291     else {
8292         *nxp = 0;
8293         return NULL;
8294     }
8295 }
8296
8297 #endif /* USE_LOCALE_COLLATE */
8298
8299 static char *
8300 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8301 {
8302     SV * const tsv = newSV(0);
8303     ENTER;
8304     SAVEFREESV(tsv);
8305     sv_gets(tsv, fp, 0);
8306     sv_utf8_upgrade_nomg(tsv);
8307     SvCUR_set(sv,append);
8308     sv_catsv(sv,tsv);
8309     LEAVE;
8310     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8311 }
8312
8313 static char *
8314 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8315 {
8316     SSize_t bytesread;
8317     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8318       /* Grab the size of the record we're getting */
8319     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8320     
8321     /* Go yank in */
8322 #ifdef __VMS
8323     int fd;
8324     Stat_t st;
8325
8326     /* With a true, record-oriented file on VMS, we need to use read directly
8327      * to ensure that we respect RMS record boundaries.  The user is responsible
8328      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8329      * record size) field.  N.B. This is likely to produce invalid results on
8330      * varying-width character data when a record ends mid-character.
8331      */
8332     fd = PerlIO_fileno(fp);
8333     if (fd != -1
8334         && PerlLIO_fstat(fd, &st) == 0
8335         && (st.st_fab_rfm == FAB$C_VAR
8336             || st.st_fab_rfm == FAB$C_VFC
8337             || st.st_fab_rfm == FAB$C_FIX)) {
8338
8339         bytesread = PerlLIO_read(fd, buffer, recsize);
8340     }
8341     else /* in-memory file from PerlIO::Scalar
8342           * or not a record-oriented file
8343           */
8344 #endif
8345     {
8346         bytesread = PerlIO_read(fp, buffer, recsize);
8347
8348         /* At this point, the logic in sv_get() means that sv will
8349            be treated as utf-8 if the handle is utf8.
8350         */
8351         if (PerlIO_isutf8(fp) && bytesread > 0) {
8352             char *bend = buffer + bytesread;
8353             char *bufp = buffer;
8354             size_t charcount = 0;
8355             bool charstart = TRUE;
8356             STRLEN skip = 0;
8357
8358             while (charcount < recsize) {
8359                 /* count accumulated characters */
8360                 while (bufp < bend) {
8361                     if (charstart) {
8362                         skip = UTF8SKIP(bufp);
8363                     }
8364                     if (bufp + skip > bend) {
8365                         /* partial at the end */
8366                         charstart = FALSE;
8367                         break;
8368                     }
8369                     else {
8370                         ++charcount;
8371                         bufp += skip;
8372                         charstart = TRUE;
8373                     }
8374                 }
8375
8376                 if (charcount < recsize) {
8377                     STRLEN readsize;
8378                     STRLEN bufp_offset = bufp - buffer;
8379                     SSize_t morebytesread;
8380
8381                     /* originally I read enough to fill any incomplete
8382                        character and the first byte of the next
8383                        character if needed, but if there's many
8384                        multi-byte encoded characters we're going to be
8385                        making a read call for every character beyond
8386                        the original read size.
8387
8388                        So instead, read the rest of the character if
8389                        any, and enough bytes to match at least the
8390                        start bytes for each character we're going to
8391                        read.
8392                     */
8393                     if (charstart)
8394                         readsize = recsize - charcount;
8395                     else 
8396                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8397                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8398                     bend = buffer + bytesread;
8399                     morebytesread = PerlIO_read(fp, bend, readsize);
8400                     if (morebytesread <= 0) {
8401                         /* we're done, if we still have incomplete
8402                            characters the check code in sv_gets() will
8403                            warn about them.
8404
8405                            I'd originally considered doing
8406                            PerlIO_ungetc() on all but the lead
8407                            character of the incomplete character, but
8408                            read() doesn't do that, so I don't.
8409                         */
8410                         break;
8411                     }
8412
8413                     /* prepare to scan some more */
8414                     bytesread += morebytesread;
8415                     bend = buffer + bytesread;
8416                     bufp = buffer + bufp_offset;
8417                 }
8418             }
8419         }
8420     }
8421
8422     if (bytesread < 0)
8423         bytesread = 0;
8424     SvCUR_set(sv, bytesread + append);
8425     buffer[bytesread] = '\0';
8426     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8427 }
8428
8429 /*
8430 =for apidoc sv_gets
8431
8432 Get a line from the filehandle and store it into the SV, optionally
8433 appending to the currently-stored string.  If C<append> is not 0, the
8434 line is appended to the SV instead of overwriting it.  C<append> should
8435 be set to the byte offset that the appended string should start at
8436 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8437
8438 =cut
8439 */
8440
8441 char *
8442 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8443 {
8444     const char *rsptr;
8445     STRLEN rslen;
8446     STDCHAR rslast;
8447     STDCHAR *bp;
8448     SSize_t cnt;
8449     int i = 0;
8450     int rspara = 0;
8451
8452     PERL_ARGS_ASSERT_SV_GETS;
8453
8454     if (SvTHINKFIRST(sv))
8455         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8456     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8457        from <>.
8458        However, perlbench says it's slower, because the existing swipe code
8459        is faster than copy on write.
8460        Swings and roundabouts.  */
8461     SvUPGRADE(sv, SVt_PV);
8462
8463     if (append) {
8464         /* line is going to be appended to the existing buffer in the sv */
8465         if (PerlIO_isutf8(fp)) {
8466             if (!SvUTF8(sv)) {
8467                 sv_utf8_upgrade_nomg(sv);
8468                 sv_pos_u2b(sv,&append,0);
8469             }
8470         } else if (SvUTF8(sv)) {
8471             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8472         }
8473     }
8474
8475     SvPOK_only(sv);
8476     if (!append) {
8477         /* not appending - "clear" the string by setting SvCUR to 0,
8478          * the pv is still avaiable. */
8479         SvCUR_set(sv,0);
8480     }
8481     if (PerlIO_isutf8(fp))
8482         SvUTF8_on(sv);
8483
8484     if (IN_PERL_COMPILETIME) {
8485         /* we always read code in line mode */
8486         rsptr = "\n";
8487         rslen = 1;
8488     }
8489     else if (RsSNARF(PL_rs)) {
8490         /* If it is a regular disk file use size from stat() as estimate
8491            of amount we are going to read -- may result in mallocing
8492            more memory than we really need if the layers below reduce
8493            the size we read (e.g. CRLF or a gzip layer).
8494          */
8495         Stat_t st;
8496         int fd = PerlIO_fileno(fp);
8497         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8498             const Off_t offset = PerlIO_tell(fp);
8499             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8500 #ifdef PERL_COPY_ON_WRITE
8501                 /* Add an extra byte for the sake of copy-on-write's
8502                  * buffer reference count. */
8503                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8504 #else
8505                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8506 #endif
8507             }
8508         }
8509         rsptr = NULL;
8510         rslen = 0;
8511     }
8512     else if (RsRECORD(PL_rs)) {
8513         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8514     }
8515     else if (RsPARA(PL_rs)) {
8516         rsptr = "\n\n";
8517         rslen = 2;
8518         rspara = 1;
8519     }
8520     else {
8521         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8522         if (PerlIO_isutf8(fp)) {
8523             rsptr = SvPVutf8(PL_rs, rslen);
8524         }
8525         else {
8526             if (SvUTF8(PL_rs)) {
8527                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8528                     Perl_croak(aTHX_ "Wide character in $/");
8529                 }
8530             }
8531             /* extract the raw pointer to the record separator */
8532             rsptr = SvPV_const(PL_rs, rslen);
8533         }
8534     }
8535
8536     /* rslast is the last character in the record separator
8537      * note we don't use rslast except when rslen is true, so the
8538      * null assign is a placeholder. */
8539     rslast = rslen ? rsptr[rslen - 1] : '\0';
8540
8541     if (rspara) {               /* have to do this both before and after */
8542         do {                    /* to make sure file boundaries work right */
8543             if (PerlIO_eof(fp))
8544                 return 0;
8545             i = PerlIO_getc(fp);
8546             if (i != '\n') {
8547                 if (i == -1)
8548                     return 0;
8549                 PerlIO_ungetc(fp,i);
8550                 break;
8551             }
8552         } while (i != EOF);
8553     }
8554
8555     /* See if we know enough about I/O mechanism to cheat it ! */
8556
8557     /* This used to be #ifdef test - it is made run-time test for ease
8558        of abstracting out stdio interface. One call should be cheap
8559        enough here - and may even be a macro allowing compile
8560        time optimization.
8561      */
8562
8563     if (PerlIO_fast_gets(fp)) {
8564     /*
8565      * We can do buffer based IO operations on this filehandle.
8566      *
8567      * This means we can bypass a lot of subcalls and process
8568      * the buffer directly, it also means we know the upper bound
8569      * on the amount of data we might read of the current buffer
8570      * into our sv. Knowing this allows us to preallocate the pv
8571      * to be able to hold that maximum, which allows us to simplify
8572      * a lot of logic. */
8573
8574     /*
8575      * We're going to steal some values from the stdio struct
8576      * and put EVERYTHING in the innermost loop into registers.
8577      */
8578     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8579     STRLEN bpx;         /* length of the data in the target sv
8580                            used to fix pointers after a SvGROW */
8581     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8582                            of data left in the read-ahead buffer.
8583                            If 0 then the pv buffer can hold the full
8584                            amount left, otherwise this is the amount it
8585                            can hold. */
8586
8587     /* Here is some breathtakingly efficient cheating */
8588
8589     /* When you read the following logic resist the urge to think
8590      * of record separators that are 1 byte long. They are an
8591      * uninteresting special (simple) case.
8592      *
8593      * Instead think of record separators which are at least 2 bytes
8594      * long, and keep in mind that we need to deal with such
8595      * separators when they cross a read-ahead buffer boundary.
8596      *
8597      * Also consider that we need to gracefully deal with separators
8598      * that may be longer than a single read ahead buffer.
8599      *
8600      * Lastly do not forget we want to copy the delimiter as well. We
8601      * are copying all data in the file _up_to_and_including_ the separator
8602      * itself.
8603      *
8604      * Now that you have all that in mind here is what is happening below:
8605      *
8606      * 1. When we first enter the loop we do some memory book keeping to see
8607      * how much free space there is in the target SV. (This sub assumes that
8608      * it is operating on the same SV most of the time via $_ and that it is
8609      * going to be able to reuse the same pv buffer each call.) If there is
8610      * "enough" room then we set "shortbuffered" to how much space there is
8611      * and start reading forward.
8612      *
8613      * 2. When we scan forward we copy from the read-ahead buffer to the target
8614      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8615      * and the end of the of pv, as well as for the "rslast", which is the last
8616      * char of the separator.
8617      *
8618      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8619      * (which has a "complete" record up to the point we saw rslast) and check
8620      * it to see if it matches the separator. If it does we are done. If it doesn't
8621      * we continue on with the scan/copy.
8622      *
8623      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8624      * the IO system to read the next buffer. We do this by doing a getc(), which
8625      * returns a single char read (or EOF), and prefills the buffer, and also
8626      * allows us to find out how full the buffer is.  We use this information to
8627      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8628      * the returned single char into the target sv, and then go back into scan
8629      * forward mode.
8630      *
8631      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8632      * remaining space in the read-buffer.
8633      *
8634      * Note that this code despite its twisty-turny nature is pretty darn slick.
8635      * It manages single byte separators, multi-byte cross boundary separators,
8636      * and cross-read-buffer separators cleanly and efficiently at the cost
8637      * of potentially greatly overallocating the target SV.
8638      *
8639      * Yves
8640      */
8641
8642
8643     /* get the number of bytes remaining in the read-ahead buffer
8644      * on first call on a given fp this will return 0.*/
8645     cnt = PerlIO_get_cnt(fp);
8646
8647     /* make sure we have the room */
8648     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8649         /* Not room for all of it
8650            if we are looking for a separator and room for some
8651          */
8652         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8653             /* just process what we have room for */
8654             shortbuffered = cnt - SvLEN(sv) + append + 1;
8655             cnt -= shortbuffered;
8656         }
8657         else {
8658             /* ensure that the target sv has enough room to hold
8659              * the rest of the read-ahead buffer */
8660             shortbuffered = 0;
8661             /* remember that cnt can be negative */
8662             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8663         }
8664     }
8665     else {
8666         /* we have enough room to hold the full buffer, lets scream */
8667         shortbuffered = 0;
8668     }
8669
8670     /* extract the pointer to sv's string buffer, offset by append as necessary */
8671     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8672     /* extract the point to the read-ahead buffer */
8673     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8674
8675     /* some trace debug output */
8676     DEBUG_P(PerlIO_printf(Perl_debug_log,
8677         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8678     DEBUG_P(PerlIO_printf(Perl_debug_log,
8679         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8680          UVuf "\n",
8681                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8682                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8683
8684     for (;;) {
8685       screamer:
8686         /* if there is stuff left in the read-ahead buffer */
8687         if (cnt > 0) {
8688             /* if there is a separator */
8689             if (rslen) {
8690                 /* find next rslast */
8691                 STDCHAR *p;
8692
8693                 /* shortcut common case of blank line */
8694                 cnt--;
8695                 if ((*bp++ = *ptr++) == rslast)
8696                     goto thats_all_folks;
8697
8698                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8699                 if (p) {
8700                     SSize_t got = p - ptr + 1;
8701                     Copy(ptr, bp, got, STDCHAR);
8702                     ptr += got;
8703                     bp  += got;
8704                     cnt -= got;
8705                     goto thats_all_folks;
8706                 }
8707                 Copy(ptr, bp, cnt, STDCHAR);
8708                 ptr += cnt;
8709                 bp  += cnt;
8710                 cnt = 0;
8711             }
8712             else {
8713                 /* no separator, slurp the full buffer */
8714                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8715                 bp += cnt;                           /* screams  |  dust */
8716                 ptr += cnt;                          /* louder   |  sed :-) */
8717                 cnt = 0;
8718                 assert (!shortbuffered);
8719                 goto cannot_be_shortbuffered;
8720             }
8721         }
8722         
8723         if (shortbuffered) {            /* oh well, must extend */
8724             /* we didnt have enough room to fit the line into the target buffer
8725              * so we must extend the target buffer and keep going */
8726             cnt = shortbuffered;
8727             shortbuffered = 0;
8728             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8729             SvCUR_set(sv, bpx);
8730             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8731             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8732             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8733             continue;
8734         }
8735
8736     cannot_be_shortbuffered:
8737         /* we need to refill the read-ahead buffer if possible */
8738
8739         DEBUG_P(PerlIO_printf(Perl_debug_log,
8740                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8741                               PTR2UV(ptr),(IV)cnt));
8742         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8743
8744         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8745            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8746             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8747             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8748
8749         /*
8750             call PerlIO_getc() to let it prefill the lookahead buffer
8751
8752             This used to call 'filbuf' in stdio form, but as that behaves like
8753             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8754             another abstraction.
8755
8756             Note we have to deal with the char in 'i' if we are not at EOF
8757         */
8758         i   = PerlIO_getc(fp);          /* get more characters */
8759
8760         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8761            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8762             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8763             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8764
8765         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8766         cnt = PerlIO_get_cnt(fp);
8767         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8768         DEBUG_P(PerlIO_printf(Perl_debug_log,
8769             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8770             PTR2UV(ptr),(IV)cnt));
8771
8772         if (i == EOF)                   /* all done for ever? */
8773             goto thats_really_all_folks;
8774
8775         /* make sure we have enough space in the target sv */
8776         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8777         SvCUR_set(sv, bpx);
8778         SvGROW(sv, bpx + cnt + 2);
8779         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8780
8781         /* copy of the char we got from getc() */
8782         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8783
8784         /* make sure we deal with the i being the last character of a separator */
8785         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8786             goto thats_all_folks;
8787     }
8788
8789   thats_all_folks:
8790     /* check if we have actually found the separator - only really applies
8791      * when rslen > 1 */
8792     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8793           memNE((char*)bp - rslen, rsptr, rslen))
8794         goto screamer;                          /* go back to the fray */
8795   thats_really_all_folks:
8796     if (shortbuffered)
8797         cnt += shortbuffered;
8798         DEBUG_P(PerlIO_printf(Perl_debug_log,
8799              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8800     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8801     DEBUG_P(PerlIO_printf(Perl_debug_log,
8802         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8803         "\n",
8804         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8805         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8806     *bp = '\0';
8807     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8808     DEBUG_P(PerlIO_printf(Perl_debug_log,
8809         "Screamer: done, len=%ld, string=|%.*s|\n",
8810         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8811     }
8812    else
8813     {
8814        /*The big, slow, and stupid way. */
8815 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8816         STDCHAR *buf = NULL;
8817         Newx(buf, 8192, STDCHAR);
8818         assert(buf);
8819 #else
8820         STDCHAR buf[8192];
8821 #endif
8822
8823       screamer2:
8824         if (rslen) {
8825             const STDCHAR * const bpe = buf + sizeof(buf);
8826             bp = buf;
8827             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8828                 ; /* keep reading */
8829             cnt = bp - buf;
8830         }
8831         else {
8832             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8833             /* Accommodate broken VAXC compiler, which applies U8 cast to
8834              * both args of ?: operator, causing EOF to change into 255
8835              */
8836             if (cnt > 0)
8837                  i = (U8)buf[cnt - 1];
8838             else
8839                  i = EOF;
8840         }
8841
8842         if (cnt < 0)
8843             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8844         if (append)
8845             sv_catpvn_nomg(sv, (char *) buf, cnt);
8846         else
8847             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8848
8849         if (i != EOF &&                 /* joy */
8850             (!rslen ||
8851              SvCUR(sv) < rslen ||
8852              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8853         {
8854             append = -1;
8855             /*
8856              * If we're reading from a TTY and we get a short read,
8857              * indicating that the user hit his EOF character, we need
8858              * to notice it now, because if we try to read from the TTY
8859              * again, the EOF condition will disappear.
8860              *
8861              * The comparison of cnt to sizeof(buf) is an optimization
8862              * that prevents unnecessary calls to feof().
8863              *
8864              * - jik 9/25/96
8865              */
8866             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8867                 goto screamer2;
8868         }
8869
8870 #ifdef USE_HEAP_INSTEAD_OF_STACK
8871         Safefree(buf);
8872 #endif
8873     }
8874
8875     if (rspara) {               /* have to do this both before and after */
8876         while (i != EOF) {      /* to make sure file boundaries work right */
8877             i = PerlIO_getc(fp);
8878             if (i != '\n') {
8879                 PerlIO_ungetc(fp,i);
8880                 break;
8881             }
8882         }
8883     }
8884
8885     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8886 }
8887
8888 /*
8889 =for apidoc sv_inc
8890
8891 Auto-increment of the value in the SV, doing string to numeric conversion
8892 if necessary.  Handles 'get' magic and operator overloading.
8893
8894 =cut
8895 */
8896
8897 void
8898 Perl_sv_inc(pTHX_ SV *const sv)
8899 {
8900     if (!sv)
8901         return;
8902     SvGETMAGIC(sv);
8903     sv_inc_nomg(sv);
8904 }
8905
8906 /*
8907 =for apidoc sv_inc_nomg
8908
8909 Auto-increment of the value in the SV, doing string to numeric conversion
8910 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8911
8912 =cut
8913 */
8914
8915 void
8916 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8917 {
8918     char *d;
8919     int flags;
8920
8921     if (!sv)
8922         return;
8923     if (SvTHINKFIRST(sv)) {
8924         if (SvREADONLY(sv)) {
8925                 Perl_croak_no_modify();
8926         }
8927         if (SvROK(sv)) {
8928             IV i;
8929             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8930                 return;
8931             i = PTR2IV(SvRV(sv));
8932             sv_unref(sv);
8933             sv_setiv(sv, i);
8934         }
8935         else sv_force_normal_flags(sv, 0);
8936     }
8937     flags = SvFLAGS(sv);
8938     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8939         /* It's (privately or publicly) a float, but not tested as an
8940            integer, so test it to see. */
8941         (void) SvIV(sv);
8942         flags = SvFLAGS(sv);
8943     }
8944     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8945         /* It's publicly an integer, or privately an integer-not-float */
8946 #ifdef PERL_PRESERVE_IVUV
8947       oops_its_int:
8948 #endif
8949         if (SvIsUV(sv)) {
8950             if (SvUVX(sv) == UV_MAX)
8951                 sv_setnv(sv, UV_MAX_P1);
8952             else
8953                 (void)SvIOK_only_UV(sv);
8954                 SvUV_set(sv, SvUVX(sv) + 1);
8955         } else {
8956             if (SvIVX(sv) == IV_MAX)
8957                 sv_setuv(sv, (UV)IV_MAX + 1);
8958             else {
8959                 (void)SvIOK_only(sv);
8960                 SvIV_set(sv, SvIVX(sv) + 1);
8961             }   
8962         }
8963         return;
8964     }
8965     if (flags & SVp_NOK) {
8966         const NV was = SvNVX(sv);
8967         if (LIKELY(!Perl_isinfnan(was)) &&
8968             NV_OVERFLOWS_INTEGERS_AT &&
8969             was >= NV_OVERFLOWS_INTEGERS_AT) {
8970             /* diag_listed_as: Lost precision when %s %f by 1 */
8971             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8972                            "Lost precision when incrementing %" NVff " by 1",
8973                            was);
8974         }
8975         (void)SvNOK_only(sv);
8976         SvNV_set(sv, was + 1.0);
8977         return;
8978     }
8979
8980     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8981     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8982         Perl_croak_no_modify();
8983
8984     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8985         if ((flags & SVTYPEMASK) < SVt_PVIV)
8986             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8987         (void)SvIOK_only(sv);
8988         SvIV_set(sv, 1);
8989         return;
8990     }
8991     d = SvPVX(sv);
8992     while (isALPHA(*d)) d++;
8993     while (isDIGIT(*d)) d++;
8994     if (d < SvEND(sv)) {
8995         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8996 #ifdef PERL_PRESERVE_IVUV
8997         /* Got to punt this as an integer if needs be, but we don't issue
8998            warnings. Probably ought to make the sv_iv_please() that does
8999            the conversion if possible, and silently.  */
9000         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9001             /* Need to try really hard to see if it's an integer.
9002                9.22337203685478e+18 is an integer.
9003                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9004                so $a="9.22337203685478e+18"; $a+0; $a++
9005                needs to be the same as $a="9.22337203685478e+18"; $a++
9006                or we go insane. */
9007         
9008             (void) sv_2iv(sv);
9009             if (SvIOK(sv))
9010                 goto oops_its_int;
9011
9012             /* sv_2iv *should* have made this an NV */
9013             if (flags & SVp_NOK) {
9014                 (void)SvNOK_only(sv);
9015                 SvNV_set(sv, SvNVX(sv) + 1.0);
9016                 return;
9017             }
9018             /* I don't think we can get here. Maybe I should assert this
9019                And if we do get here I suspect that sv_setnv will croak. NWC
9020                Fall through. */
9021             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9022                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9023         }
9024 #endif /* PERL_PRESERVE_IVUV */
9025         if (!numtype && ckWARN(WARN_NUMERIC))
9026             not_incrementable(sv);
9027         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9028         return;
9029     }
9030     d--;
9031     while (d >= SvPVX_const(sv)) {
9032         if (isDIGIT(*d)) {
9033             if (++*d <= '9')
9034                 return;
9035             *(d--) = '0';
9036         }
9037         else {
9038 #ifdef EBCDIC
9039             /* MKS: The original code here died if letters weren't consecutive.
9040              * at least it didn't have to worry about non-C locales.  The
9041              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9042              * arranged in order (although not consecutively) and that only
9043              * [A-Za-z] are accepted by isALPHA in the C locale.
9044              */
9045             if (isALPHA_FOLD_NE(*d, 'z')) {
9046                 do { ++*d; } while (!isALPHA(*d));
9047                 return;
9048             }
9049             *(d--) -= 'z' - 'a';
9050 #else
9051             ++*d;
9052             if (isALPHA(*d))
9053                 return;
9054             *(d--) -= 'z' - 'a' + 1;
9055 #endif
9056         }
9057     }
9058     /* oh,oh, the number grew */
9059     SvGROW(sv, SvCUR(sv) + 2);
9060     SvCUR_set(sv, SvCUR(sv) + 1);
9061     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9062         *d = d[-1];
9063     if (isDIGIT(d[1]))
9064         *d = '1';
9065     else
9066         *d = d[1];
9067 }
9068
9069 /*
9070 =for apidoc sv_dec
9071
9072 Auto-decrement of the value in the SV, doing string to numeric conversion
9073 if necessary.  Handles 'get' magic and operator overloading.
9074
9075 =cut
9076 */
9077
9078 void
9079 Perl_sv_dec(pTHX_ SV *const sv)
9080 {
9081     if (!sv)
9082         return;
9083     SvGETMAGIC(sv);
9084     sv_dec_nomg(sv);
9085 }
9086
9087 /*
9088 =for apidoc sv_dec_nomg
9089
9090 Auto-decrement of the value in the SV, doing string to numeric conversion
9091 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9092
9093 =cut
9094 */
9095
9096 void
9097 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9098 {
9099     int flags;
9100
9101     if (!sv)
9102         return;
9103     if (SvTHINKFIRST(sv)) {
9104         if (SvREADONLY(sv)) {
9105                 Perl_croak_no_modify();
9106         }
9107         if (SvROK(sv)) {
9108             IV i;
9109             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9110                 return;
9111             i = PTR2IV(SvRV(sv));
9112             sv_unref(sv);
9113             sv_setiv(sv, i);
9114         }
9115         else sv_force_normal_flags(sv, 0);
9116     }
9117     /* Unlike sv_inc we don't have to worry about string-never-numbers
9118        and keeping them magic. But we mustn't warn on punting */
9119     flags = SvFLAGS(sv);
9120     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9121         /* It's publicly an integer, or privately an integer-not-float */
9122 #ifdef PERL_PRESERVE_IVUV
9123       oops_its_int:
9124 #endif
9125         if (SvIsUV(sv)) {
9126             if (SvUVX(sv) == 0) {
9127                 (void)SvIOK_only(sv);
9128                 SvIV_set(sv, -1);
9129             }
9130             else {
9131                 (void)SvIOK_only_UV(sv);
9132                 SvUV_set(sv, SvUVX(sv) - 1);
9133             }   
9134         } else {
9135             if (SvIVX(sv) == IV_MIN) {
9136                 sv_setnv(sv, (NV)IV_MIN);
9137                 goto oops_its_num;
9138             }
9139             else {
9140                 (void)SvIOK_only(sv);
9141                 SvIV_set(sv, SvIVX(sv) - 1);
9142             }   
9143         }
9144         return;
9145     }
9146     if (flags & SVp_NOK) {
9147     oops_its_num:
9148         {
9149             const NV was = SvNVX(sv);
9150             if (LIKELY(!Perl_isinfnan(was)) &&
9151                 NV_OVERFLOWS_INTEGERS_AT &&
9152                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9153                 /* diag_listed_as: Lost precision when %s %f by 1 */
9154                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9155                                "Lost precision when decrementing %" NVff " by 1",
9156                                was);
9157             }
9158             (void)SvNOK_only(sv);
9159             SvNV_set(sv, was - 1.0);
9160             return;
9161         }
9162     }
9163
9164     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9165     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9166         Perl_croak_no_modify();
9167
9168     if (!(flags & SVp_POK)) {
9169         if ((flags & SVTYPEMASK) < SVt_PVIV)
9170             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9171         SvIV_set(sv, -1);
9172         (void)SvIOK_only(sv);
9173         return;
9174     }
9175 #ifdef PERL_PRESERVE_IVUV
9176     {
9177         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9178         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9179             /* Need to try really hard to see if it's an integer.
9180                9.22337203685478e+18 is an integer.
9181                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9182                so $a="9.22337203685478e+18"; $a+0; $a--
9183                needs to be the same as $a="9.22337203685478e+18"; $a--
9184                or we go insane. */
9185         
9186             (void) sv_2iv(sv);
9187             if (SvIOK(sv))
9188                 goto oops_its_int;
9189
9190             /* sv_2iv *should* have made this an NV */
9191             if (flags & SVp_NOK) {
9192                 (void)SvNOK_only(sv);
9193                 SvNV_set(sv, SvNVX(sv) - 1.0);
9194                 return;
9195             }
9196             /* I don't think we can get here. Maybe I should assert this
9197                And if we do get here I suspect that sv_setnv will croak. NWC
9198                Fall through. */
9199             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9200                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9201         }
9202     }
9203 #endif /* PERL_PRESERVE_IVUV */
9204     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9205 }
9206
9207 /* this define is used to eliminate a chunk of duplicated but shared logic
9208  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9209  * used anywhere but here - yves
9210  */
9211 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9212     STMT_START {      \
9213         SSize_t ix = ++PL_tmps_ix;              \
9214         if (UNLIKELY(ix >= PL_tmps_max))        \
9215             ix = tmps_grow_p(ix);                       \
9216         PL_tmps_stack[ix] = (AnSv); \
9217     } STMT_END
9218
9219 /*
9220 =for apidoc sv_mortalcopy
9221
9222 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9223 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9224 explicit call to C<FREETMPS>, or by an implicit call at places such as
9225 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9226
9227 =cut
9228 */
9229
9230 /* Make a string that will exist for the duration of the expression
9231  * evaluation.  Actually, it may have to last longer than that, but
9232  * hopefully we won't free it until it has been assigned to a
9233  * permanent location. */
9234
9235 SV *
9236 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9237 {
9238     SV *sv;
9239
9240     if (flags & SV_GMAGIC)
9241         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9242     new_SV(sv);
9243     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9244     PUSH_EXTEND_MORTAL__SV_C(sv);
9245     SvTEMP_on(sv);
9246     return sv;
9247 }
9248
9249 /*
9250 =for apidoc sv_newmortal
9251
9252 Creates a new null SV which is mortal.  The reference count of the SV is
9253 set to 1.  It will be destroyed "soon", either by an explicit call to
9254 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9255 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9256
9257 =cut
9258 */
9259
9260 SV *
9261 Perl_sv_newmortal(pTHX)
9262 {
9263     SV *sv;
9264
9265     new_SV(sv);
9266     SvFLAGS(sv) = SVs_TEMP;
9267     PUSH_EXTEND_MORTAL__SV_C(sv);
9268     return sv;
9269 }
9270
9271
9272 /*
9273 =for apidoc newSVpvn_flags
9274
9275 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9276 characters) into it.  The reference count for the
9277 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9278 string.  You are responsible for ensuring that the source string is at least
9279 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9280 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9281 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9282 returning.  If C<SVf_UTF8> is set, C<s>
9283 is considered to be in UTF-8 and the
9284 C<SVf_UTF8> flag will be set on the new SV.
9285 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9286
9287     #define newSVpvn_utf8(s, len, u)                    \
9288         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9289
9290 =cut
9291 */
9292
9293 SV *
9294 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9295 {
9296     SV *sv;
9297
9298     /* All the flags we don't support must be zero.
9299        And we're new code so I'm going to assert this from the start.  */
9300     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9301     new_SV(sv);
9302     sv_setpvn(sv,s,len);
9303
9304     /* This code used to do a sv_2mortal(), however we now unroll the call to
9305      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9306      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9307      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9308      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9309      * means that we eliminate quite a few steps than it looks - Yves
9310      * (explaining patch by gfx) */
9311
9312     SvFLAGS(sv) |= flags;
9313
9314     if(flags & SVs_TEMP){
9315         PUSH_EXTEND_MORTAL__SV_C(sv);
9316     }
9317
9318     return sv;
9319 }
9320
9321 /*
9322 =for apidoc sv_2mortal
9323
9324 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9325 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9326 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9327 string buffer can be "stolen" if this SV is copied.  See also
9328 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9329
9330 =cut
9331 */
9332
9333 SV *
9334 Perl_sv_2mortal(pTHX_ SV *const sv)
9335 {
9336     dVAR;
9337     if (!sv)
9338         return sv;
9339     if (SvIMMORTAL(sv))
9340         return sv;
9341     PUSH_EXTEND_MORTAL__SV_C(sv);
9342     SvTEMP_on(sv);
9343     return sv;
9344 }
9345
9346 /*
9347 =for apidoc newSVpv
9348
9349 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9350 characters) into it.  The reference count for the
9351 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9352 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9353 C<NUL> characters and has to have a terminating C<NUL> byte).
9354
9355 This function can cause reliability issues if you are likely to pass in
9356 empty strings that are not null terminated, because it will run
9357 strlen on the string and potentially run past valid memory.
9358
9359 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9360 For string literals use L</newSVpvs> instead.  This function will work fine for
9361 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9362 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9363
9364 =cut
9365 */
9366
9367 SV *
9368 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9369 {
9370     SV *sv;
9371
9372     new_SV(sv);
9373     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9374     return sv;
9375 }
9376
9377 /*
9378 =for apidoc newSVpvn
9379
9380 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9381 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9382 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9383 are responsible for ensuring that the source buffer is at least
9384 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9385 undefined.
9386
9387 =cut
9388 */
9389
9390 SV *
9391 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9392 {
9393     SV *sv;
9394     new_SV(sv);
9395     sv_setpvn(sv,buffer,len);
9396     return sv;
9397 }
9398
9399 /*
9400 =for apidoc newSVhek
9401
9402 Creates a new SV from the hash key structure.  It will generate scalars that
9403 point to the shared string table where possible.  Returns a new (undefined)
9404 SV if C<hek> is NULL.
9405
9406 =cut
9407 */
9408
9409 SV *
9410 Perl_newSVhek(pTHX_ const HEK *const hek)
9411 {
9412     if (!hek) {
9413         SV *sv;
9414
9415         new_SV(sv);
9416         return sv;
9417     }
9418
9419     if (HEK_LEN(hek) == HEf_SVKEY) {
9420         return newSVsv(*(SV**)HEK_KEY(hek));
9421     } else {
9422         const int flags = HEK_FLAGS(hek);
9423         if (flags & HVhek_WASUTF8) {
9424             /* Trouble :-)
9425                Andreas would like keys he put in as utf8 to come back as utf8
9426             */
9427             STRLEN utf8_len = HEK_LEN(hek);
9428             SV * const sv = newSV_type(SVt_PV);
9429             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9430             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9431             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9432             SvUTF8_on (sv);
9433             return sv;
9434         } else if (flags & HVhek_UNSHARED) {
9435             /* A hash that isn't using shared hash keys has to have
9436                the flag in every key so that we know not to try to call
9437                share_hek_hek on it.  */
9438
9439             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9440             if (HEK_UTF8(hek))
9441                 SvUTF8_on (sv);
9442             return sv;
9443         }
9444         /* This will be overwhelminly the most common case.  */
9445         {
9446             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9447                more efficient than sharepvn().  */
9448             SV *sv;
9449
9450             new_SV(sv);
9451             sv_upgrade(sv, SVt_PV);
9452             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9453             SvCUR_set(sv, HEK_LEN(hek));
9454             SvLEN_set(sv, 0);
9455             SvIsCOW_on(sv);
9456             SvPOK_on(sv);
9457             if (HEK_UTF8(hek))
9458                 SvUTF8_on(sv);
9459             return sv;
9460         }
9461     }
9462 }
9463
9464 /*
9465 =for apidoc newSVpvn_share
9466
9467 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9468 table.  If the string does not already exist in the table, it is
9469 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9470 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9471 is non-zero, that value is used; otherwise the hash is computed.
9472 The string's hash can later be retrieved from the SV
9473 with the C<SvSHARED_HASH()> macro.  The idea here is
9474 that as the string table is used for shared hash keys these strings will have
9475 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9476
9477 =cut
9478 */
9479
9480 SV *
9481 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9482 {
9483     dVAR;
9484     SV *sv;
9485     bool is_utf8 = FALSE;
9486     const char *const orig_src = src;
9487
9488     if (len < 0) {
9489         STRLEN tmplen = -len;
9490         is_utf8 = TRUE;
9491         /* See the note in hv.c:hv_fetch() --jhi */
9492         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9493         len = tmplen;
9494     }
9495     if (!hash)
9496         PERL_HASH(hash, src, len);
9497     new_SV(sv);
9498     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9499        changes here, update it there too.  */
9500     sv_upgrade(sv, SVt_PV);
9501     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9502     SvCUR_set(sv, len);
9503     SvLEN_set(sv, 0);
9504     SvIsCOW_on(sv);
9505     SvPOK_on(sv);
9506     if (is_utf8)
9507         SvUTF8_on(sv);
9508     if (src != orig_src)
9509         Safefree(src);
9510     return sv;
9511 }
9512
9513 /*
9514 =for apidoc newSVpv_share
9515
9516 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9517 string/length pair.
9518
9519 =cut
9520 */
9521
9522 SV *
9523 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9524 {
9525     return newSVpvn_share(src, strlen(src), hash);
9526 }
9527
9528 #if defined(PERL_IMPLICIT_CONTEXT)
9529
9530 /* pTHX_ magic can't cope with varargs, so this is a no-context
9531  * version of the main function, (which may itself be aliased to us).
9532  * Don't access this version directly.
9533  */
9534
9535 SV *
9536 Perl_newSVpvf_nocontext(const char *const pat, ...)
9537 {
9538     dTHX;
9539     SV *sv;
9540     va_list args;
9541
9542     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9543
9544     va_start(args, pat);
9545     sv = vnewSVpvf(pat, &args);
9546     va_end(args);
9547     return sv;
9548 }
9549 #endif
9550
9551 /*
9552 =for apidoc newSVpvf
9553
9554 Creates a new SV and initializes it with the string formatted like
9555 C<sv_catpvf>.
9556
9557 =cut
9558 */
9559
9560 SV *
9561 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9562 {
9563     SV *sv;
9564     va_list args;
9565
9566     PERL_ARGS_ASSERT_NEWSVPVF;
9567
9568     va_start(args, pat);
9569     sv = vnewSVpvf(pat, &args);
9570     va_end(args);
9571     return sv;
9572 }
9573
9574 /* backend for newSVpvf() and newSVpvf_nocontext() */
9575
9576 SV *
9577 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9578 {
9579     SV *sv;
9580
9581     PERL_ARGS_ASSERT_VNEWSVPVF;
9582
9583     new_SV(sv);
9584     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9585     return sv;
9586 }
9587
9588 /*
9589 =for apidoc newSVnv
9590
9591 Creates a new SV and copies a floating point value into it.
9592 The reference count for the SV is set to 1.
9593
9594 =cut
9595 */
9596
9597 SV *
9598 Perl_newSVnv(pTHX_ const NV n)
9599 {
9600     SV *sv;
9601
9602     new_SV(sv);
9603     sv_setnv(sv,n);
9604     return sv;
9605 }
9606
9607 /*
9608 =for apidoc newSViv
9609
9610 Creates a new SV and copies an integer into it.  The reference count for the
9611 SV is set to 1.
9612
9613 =cut
9614 */
9615
9616 SV *
9617 Perl_newSViv(pTHX_ const IV i)
9618 {
9619     SV *sv;
9620
9621     new_SV(sv);
9622
9623     /* Inlining ONLY the small relevant subset of sv_setiv here
9624      * for performance. Makes a significant difference. */
9625
9626     /* We're starting from SVt_FIRST, so provided that's
9627      * actual 0, we don't have to unset any SV type flags
9628      * to promote to SVt_IV. */
9629     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9630
9631     SET_SVANY_FOR_BODYLESS_IV(sv);
9632     SvFLAGS(sv) |= SVt_IV;
9633     (void)SvIOK_on(sv);
9634
9635     SvIV_set(sv, i);
9636     SvTAINT(sv);
9637
9638     return sv;
9639 }
9640
9641 /*
9642 =for apidoc newSVuv
9643
9644 Creates a new SV and copies an unsigned integer into it.
9645 The reference count for the SV is set to 1.
9646
9647 =cut
9648 */
9649
9650 SV *
9651 Perl_newSVuv(pTHX_ const UV u)
9652 {
9653     SV *sv;
9654
9655     /* Inlining ONLY the small relevant subset of sv_setuv here
9656      * for performance. Makes a significant difference. */
9657
9658     /* Using ivs is more efficient than using uvs - see sv_setuv */
9659     if (u <= (UV)IV_MAX) {
9660         return newSViv((IV)u);
9661     }
9662
9663     new_SV(sv);
9664
9665     /* We're starting from SVt_FIRST, so provided that's
9666      * actual 0, we don't have to unset any SV type flags
9667      * to promote to SVt_IV. */
9668     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9669
9670     SET_SVANY_FOR_BODYLESS_IV(sv);
9671     SvFLAGS(sv) |= SVt_IV;
9672     (void)SvIOK_on(sv);
9673     (void)SvIsUV_on(sv);
9674
9675     SvUV_set(sv, u);
9676     SvTAINT(sv);
9677
9678     return sv;
9679 }
9680
9681 /*
9682 =for apidoc newSV_type
9683
9684 Creates a new SV, of the type specified.  The reference count for the new SV
9685 is set to 1.
9686
9687 =cut
9688 */
9689
9690 SV *
9691 Perl_newSV_type(pTHX_ const svtype type)
9692 {
9693     SV *sv;
9694
9695     new_SV(sv);
9696     ASSUME(SvTYPE(sv) == SVt_FIRST);
9697     if(type != SVt_FIRST)
9698         sv_upgrade(sv, type);
9699     return sv;
9700 }
9701
9702 /*
9703 =for apidoc newRV_noinc
9704
9705 Creates an RV wrapper for an SV.  The reference count for the original
9706 SV is B<not> incremented.
9707
9708 =cut
9709 */
9710
9711 SV *
9712 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9713 {
9714     SV *sv;
9715
9716     PERL_ARGS_ASSERT_NEWRV_NOINC;
9717
9718     new_SV(sv);
9719
9720     /* We're starting from SVt_FIRST, so provided that's
9721      * actual 0, we don't have to unset any SV type flags
9722      * to promote to SVt_IV. */
9723     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9724
9725     SET_SVANY_FOR_BODYLESS_IV(sv);
9726     SvFLAGS(sv) |= SVt_IV;
9727     SvROK_on(sv);
9728     SvIV_set(sv, 0);
9729
9730     SvTEMP_off(tmpRef);
9731     SvRV_set(sv, tmpRef);
9732
9733     return sv;
9734 }
9735
9736 /* newRV_inc is the official function name to use now.
9737  * newRV_inc is in fact #defined to newRV in sv.h
9738  */
9739
9740 SV *
9741 Perl_newRV(pTHX_ SV *const sv)
9742 {
9743     PERL_ARGS_ASSERT_NEWRV;
9744
9745     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9746 }
9747
9748 /*
9749 =for apidoc newSVsv
9750
9751 Creates a new SV which is an exact duplicate of the original SV.
9752 (Uses C<sv_setsv>.)
9753
9754 =cut
9755 */
9756
9757 SV *
9758 Perl_newSVsv(pTHX_ SV *const old)
9759 {
9760     SV *sv;
9761
9762     if (!old)
9763         return NULL;
9764     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9765         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9766         return NULL;
9767     }
9768     /* Do this here, otherwise we leak the new SV if this croaks. */
9769     SvGETMAGIC(old);
9770     new_SV(sv);
9771     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9772        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9773     sv_setsv_flags(sv, old, SV_NOSTEAL);
9774     return sv;
9775 }
9776
9777 /*
9778 =for apidoc sv_reset
9779
9780 Underlying implementation for the C<reset> Perl function.
9781 Note that the perl-level function is vaguely deprecated.
9782
9783 =cut
9784 */
9785
9786 void
9787 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9788 {
9789     PERL_ARGS_ASSERT_SV_RESET;
9790
9791     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9792 }
9793
9794 void
9795 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9796 {
9797     char todo[PERL_UCHAR_MAX+1];
9798     const char *send;
9799
9800     if (!stash || SvTYPE(stash) != SVt_PVHV)
9801         return;
9802
9803     if (!s) {           /* reset ?? searches */
9804         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9805         if (mg) {
9806             const U32 count = mg->mg_len / sizeof(PMOP**);
9807             PMOP **pmp = (PMOP**) mg->mg_ptr;
9808             PMOP *const *const end = pmp + count;
9809
9810             while (pmp < end) {
9811 #ifdef USE_ITHREADS
9812                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9813 #else
9814                 (*pmp)->op_pmflags &= ~PMf_USED;
9815 #endif
9816                 ++pmp;
9817             }
9818         }
9819         return;
9820     }
9821
9822     /* reset variables */
9823
9824     if (!HvARRAY(stash))
9825         return;
9826
9827     Zero(todo, 256, char);
9828     send = s + len;
9829     while (s < send) {
9830         I32 max;
9831         I32 i = (unsigned char)*s;
9832         if (s[1] == '-') {
9833             s += 2;
9834         }
9835         max = (unsigned char)*s++;
9836         for ( ; i <= max; i++) {
9837             todo[i] = 1;
9838         }
9839         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9840             HE *entry;
9841             for (entry = HvARRAY(stash)[i];
9842                  entry;
9843                  entry = HeNEXT(entry))
9844             {
9845                 GV *gv;
9846                 SV *sv;
9847
9848                 if (!todo[(U8)*HeKEY(entry)])
9849                     continue;
9850                 gv = MUTABLE_GV(HeVAL(entry));
9851                 if (!isGV(gv))
9852                     continue;
9853                 sv = GvSV(gv);
9854                 if (sv && !SvREADONLY(sv)) {
9855                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9856                     if (!isGV(sv)) SvOK_off(sv);
9857                 }
9858                 if (GvAV(gv)) {
9859                     av_clear(GvAV(gv));
9860                 }
9861                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9862                     hv_clear(GvHV(gv));
9863                 }
9864             }
9865         }
9866     }
9867 }
9868
9869 /*
9870 =for apidoc sv_2io
9871
9872 Using various gambits, try to get an IO from an SV: the IO slot if its a
9873 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9874 named after the PV if we're a string.
9875
9876 'Get' magic is ignored on the C<sv> passed in, but will be called on
9877 C<SvRV(sv)> if C<sv> is an RV.
9878
9879 =cut
9880 */
9881
9882 IO*
9883 Perl_sv_2io(pTHX_ SV *const sv)
9884 {
9885     IO* io;
9886     GV* gv;
9887
9888     PERL_ARGS_ASSERT_SV_2IO;
9889
9890     switch (SvTYPE(sv)) {
9891     case SVt_PVIO:
9892         io = MUTABLE_IO(sv);
9893         break;
9894     case SVt_PVGV:
9895     case SVt_PVLV:
9896         if (isGV_with_GP(sv)) {
9897             gv = MUTABLE_GV(sv);
9898             io = GvIO(gv);
9899             if (!io)
9900                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9901                                     HEKfARG(GvNAME_HEK(gv)));
9902             break;
9903         }
9904         /* FALLTHROUGH */
9905     default:
9906         if (!SvOK(sv))
9907             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9908         if (SvROK(sv)) {
9909             SvGETMAGIC(SvRV(sv));
9910             return sv_2io(SvRV(sv));
9911         }
9912         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9913         if (gv)
9914             io = GvIO(gv);
9915         else
9916             io = 0;
9917         if (!io) {
9918             SV *newsv = sv;
9919             if (SvGMAGICAL(sv)) {
9920                 newsv = sv_newmortal();
9921                 sv_setsv_nomg(newsv, sv);
9922             }
9923             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9924         }
9925         break;
9926     }
9927     return io;
9928 }
9929
9930 /*
9931 =for apidoc sv_2cv
9932
9933 Using various gambits, try to get a CV from an SV; in addition, try if
9934 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9935 The flags in C<lref> are passed to C<gv_fetchsv>.
9936
9937 =cut
9938 */
9939
9940 CV *
9941 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9942 {
9943     GV *gv = NULL;
9944     CV *cv = NULL;
9945
9946     PERL_ARGS_ASSERT_SV_2CV;
9947
9948     if (!sv) {
9949         *st = NULL;
9950         *gvp = NULL;
9951         return NULL;
9952     }
9953     switch (SvTYPE(sv)) {
9954     case SVt_PVCV:
9955         *st = CvSTASH(sv);
9956         *gvp = NULL;
9957         return MUTABLE_CV(sv);
9958     case SVt_PVHV:
9959     case SVt_PVAV:
9960         *st = NULL;
9961         *gvp = NULL;
9962         return NULL;
9963     default:
9964         SvGETMAGIC(sv);
9965         if (SvROK(sv)) {
9966             if (SvAMAGIC(sv))
9967                 sv = amagic_deref_call(sv, to_cv_amg);
9968
9969             sv = SvRV(sv);
9970             if (SvTYPE(sv) == SVt_PVCV) {
9971                 cv = MUTABLE_CV(sv);
9972                 *gvp = NULL;
9973                 *st = CvSTASH(cv);
9974                 return cv;
9975             }
9976             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9977                 gv = MUTABLE_GV(sv);
9978             else
9979                 Perl_croak(aTHX_ "Not a subroutine reference");
9980         }
9981         else if (isGV_with_GP(sv)) {
9982             gv = MUTABLE_GV(sv);
9983         }
9984         else {
9985             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9986         }
9987         *gvp = gv;
9988         if (!gv) {
9989             *st = NULL;
9990             return NULL;
9991         }
9992         /* Some flags to gv_fetchsv mean don't really create the GV  */
9993         if (!isGV_with_GP(gv)) {
9994             *st = NULL;
9995             return NULL;
9996         }
9997         *st = GvESTASH(gv);
9998         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9999             /* XXX this is probably not what they think they're getting.
10000              * It has the same effect as "sub name;", i.e. just a forward
10001              * declaration! */
10002             newSTUB(gv,0);
10003         }
10004         return GvCVu(gv);
10005     }
10006 }
10007
10008 /*
10009 =for apidoc sv_true
10010
10011 Returns true if the SV has a true value by Perl's rules.
10012 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10013 instead use an in-line version.
10014
10015 =cut
10016 */
10017
10018 I32
10019 Perl_sv_true(pTHX_ SV *const sv)
10020 {
10021     if (!sv)
10022         return 0;
10023     if (SvPOK(sv)) {
10024         const XPV* const tXpv = (XPV*)SvANY(sv);
10025         if (tXpv &&
10026                 (tXpv->xpv_cur > 1 ||
10027                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10028             return 1;
10029         else
10030             return 0;
10031     }
10032     else {
10033         if (SvIOK(sv))
10034             return SvIVX(sv) != 0;
10035         else {
10036             if (SvNOK(sv))
10037                 return SvNVX(sv) != 0.0;
10038             else
10039                 return sv_2bool(sv);
10040         }
10041     }
10042 }
10043
10044 /*
10045 =for apidoc sv_pvn_force
10046
10047 Get a sensible string out of the SV somehow.
10048 A private implementation of the C<SvPV_force> macro for compilers which
10049 can't cope with complex macro expressions.  Always use the macro instead.
10050
10051 =for apidoc sv_pvn_force_flags
10052
10053 Get a sensible string out of the SV somehow.
10054 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10055 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10056 implemented in terms of this function.
10057 You normally want to use the various wrapper macros instead: see
10058 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10059
10060 =cut
10061 */
10062
10063 char *
10064 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10065 {
10066     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10067
10068     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10069     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10070         sv_force_normal_flags(sv, 0);
10071
10072     if (SvPOK(sv)) {
10073         if (lp)
10074             *lp = SvCUR(sv);
10075     }
10076     else {
10077         char *s;
10078         STRLEN len;
10079  
10080         if (SvTYPE(sv) > SVt_PVLV
10081             || isGV_with_GP(sv))
10082             /* diag_listed_as: Can't coerce %s to %s in %s */
10083             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10084                 OP_DESC(PL_op));
10085         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10086         if (!s) {
10087           s = (char *)"";
10088         }
10089         if (lp)
10090             *lp = len;
10091
10092         if (SvTYPE(sv) < SVt_PV ||
10093             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10094             if (SvROK(sv))
10095                 sv_unref(sv);
10096             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10097             SvGROW(sv, len + 1);
10098             Move(s,SvPVX(sv),len,char);
10099             SvCUR_set(sv, len);
10100             SvPVX(sv)[len] = '\0';
10101         }
10102         if (!SvPOK(sv)) {
10103             SvPOK_on(sv);               /* validate pointer */
10104             SvTAINT(sv);
10105             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10106                                   PTR2UV(sv),SvPVX_const(sv)));
10107         }
10108     }
10109     (void)SvPOK_only_UTF8(sv);
10110     return SvPVX_mutable(sv);
10111 }
10112
10113 /*
10114 =for apidoc sv_pvbyten_force
10115
10116 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10117 instead.
10118
10119 =cut
10120 */
10121
10122 char *
10123 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10124 {
10125     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10126
10127     sv_pvn_force(sv,lp);
10128     sv_utf8_downgrade(sv,0);
10129     *lp = SvCUR(sv);
10130     return SvPVX(sv);
10131 }
10132
10133 /*
10134 =for apidoc sv_pvutf8n_force
10135
10136 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10137 instead.
10138
10139 =cut
10140 */
10141
10142 char *
10143 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10144 {
10145     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10146
10147     sv_pvn_force(sv,0);
10148     sv_utf8_upgrade_nomg(sv);
10149     *lp = SvCUR(sv);
10150     return SvPVX(sv);
10151 }
10152
10153 /*
10154 =for apidoc sv_reftype
10155
10156 Returns a string describing what the SV is a reference to.
10157
10158 If ob is true and the SV is blessed, the string is the class name,
10159 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10160
10161 =cut
10162 */
10163
10164 const char *
10165 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10166 {
10167     PERL_ARGS_ASSERT_SV_REFTYPE;
10168     if (ob && SvOBJECT(sv)) {
10169         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10170     }
10171     else {
10172         /* WARNING - There is code, for instance in mg.c, that assumes that
10173          * the only reason that sv_reftype(sv,0) would return a string starting
10174          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10175          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10176          * this routine inside other subs, and it saves time.
10177          * Do not change this assumption without searching for "dodgy type check" in
10178          * the code.
10179          * - Yves */
10180         switch (SvTYPE(sv)) {
10181         case SVt_NULL:
10182         case SVt_IV:
10183         case SVt_NV:
10184         case SVt_PV:
10185         case SVt_PVIV:
10186         case SVt_PVNV:
10187         case SVt_PVMG:
10188                                 if (SvVOK(sv))
10189                                     return "VSTRING";
10190                                 if (SvROK(sv))
10191                                     return "REF";
10192                                 else
10193                                     return "SCALAR";
10194
10195         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10196                                 /* tied lvalues should appear to be
10197                                  * scalars for backwards compatibility */
10198                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10199                                     ? "SCALAR" : "LVALUE");
10200         case SVt_PVAV:          return "ARRAY";
10201         case SVt_PVHV:          return "HASH";
10202         case SVt_PVCV:          return "CODE";
10203         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10204                                     ? "GLOB" : "SCALAR");
10205         case SVt_PVFM:          return "FORMAT";
10206         case SVt_PVIO:          return "IO";
10207         case SVt_INVLIST:       return "INVLIST";
10208         case SVt_REGEXP:        return "REGEXP";
10209         default:                return "UNKNOWN";
10210         }
10211     }
10212 }
10213
10214 /*
10215 =for apidoc sv_ref
10216
10217 Returns a SV describing what the SV passed in is a reference to.
10218
10219 dst can be a SV to be set to the description or NULL, in which case a
10220 mortal SV is returned.
10221
10222 If ob is true and the SV is blessed, the description is the class
10223 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10224
10225 =cut
10226 */
10227
10228 SV *
10229 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10230 {
10231     PERL_ARGS_ASSERT_SV_REF;
10232
10233     if (!dst)
10234         dst = sv_newmortal();
10235
10236     if (ob && SvOBJECT(sv)) {
10237         HvNAME_get(SvSTASH(sv))
10238                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10239                     : sv_setpvs(dst, "__ANON__");
10240     }
10241     else {
10242         const char * reftype = sv_reftype(sv, 0);
10243         sv_setpv(dst, reftype);
10244     }
10245     return dst;
10246 }
10247
10248 /*
10249 =for apidoc sv_isobject
10250
10251 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10252 object.  If the SV is not an RV, or if the object is not blessed, then this
10253 will return false.
10254
10255 =cut
10256 */
10257
10258 int
10259 Perl_sv_isobject(pTHX_ SV *sv)
10260 {
10261     if (!sv)
10262         return 0;
10263     SvGETMAGIC(sv);
10264     if (!SvROK(sv))
10265         return 0;
10266     sv = SvRV(sv);
10267     if (!SvOBJECT(sv))
10268         return 0;
10269     return 1;
10270 }
10271
10272 /*
10273 =for apidoc sv_isa
10274
10275 Returns a boolean indicating whether the SV is blessed into the specified
10276 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10277 an inheritance relationship.
10278
10279 =cut
10280 */
10281
10282 int
10283 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10284 {
10285     const char *hvname;
10286
10287     PERL_ARGS_ASSERT_SV_ISA;
10288
10289     if (!sv)
10290         return 0;
10291     SvGETMAGIC(sv);
10292     if (!SvROK(sv))
10293         return 0;
10294     sv = SvRV(sv);
10295     if (!SvOBJECT(sv))
10296         return 0;
10297     hvname = HvNAME_get(SvSTASH(sv));
10298     if (!hvname)
10299         return 0;
10300
10301     return strEQ(hvname, name);
10302 }
10303
10304 /*
10305 =for apidoc newSVrv
10306
10307 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10308 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10309 SV will be blessed in the specified package.  The new SV is returned and its
10310 reference count is 1.  The reference count 1 is owned by C<rv>.
10311
10312 =cut
10313 */
10314
10315 SV*
10316 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10317 {
10318     SV *sv;
10319
10320     PERL_ARGS_ASSERT_NEWSVRV;
10321
10322     new_SV(sv);
10323
10324     SV_CHECK_THINKFIRST_COW_DROP(rv);
10325
10326     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10327         const U32 refcnt = SvREFCNT(rv);
10328         SvREFCNT(rv) = 0;
10329         sv_clear(rv);
10330         SvFLAGS(rv) = 0;
10331         SvREFCNT(rv) = refcnt;
10332
10333         sv_upgrade(rv, SVt_IV);
10334     } else if (SvROK(rv)) {
10335         SvREFCNT_dec(SvRV(rv));
10336     } else {
10337         prepare_SV_for_RV(rv);
10338     }
10339
10340     SvOK_off(rv);
10341     SvRV_set(rv, sv);
10342     SvROK_on(rv);
10343
10344     if (classname) {
10345         HV* const stash = gv_stashpv(classname, GV_ADD);
10346         (void)sv_bless(rv, stash);
10347     }
10348     return sv;
10349 }
10350
10351 SV *
10352 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10353 {
10354     SV * const lv = newSV_type(SVt_PVLV);
10355     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10356     LvTYPE(lv) = 'y';
10357     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10358     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10359     LvSTARGOFF(lv) = ix;
10360     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10361     return lv;
10362 }
10363
10364 /*
10365 =for apidoc sv_setref_pv
10366
10367 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10368 argument will be upgraded to an RV.  That RV will be modified to point to
10369 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10370 into the SV.  The C<classname> argument indicates the package for the
10371 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10372 will have a reference count of 1, and the RV will be returned.
10373
10374 Do not use with other Perl types such as HV, AV, SV, CV, because those
10375 objects will become corrupted by the pointer copy process.
10376
10377 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10378
10379 =cut
10380 */
10381
10382 SV*
10383 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10384 {
10385     PERL_ARGS_ASSERT_SV_SETREF_PV;
10386
10387     if (!pv) {
10388         sv_set_undef(rv);
10389         SvSETMAGIC(rv);
10390     }
10391     else
10392         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10393     return rv;
10394 }
10395
10396 /*
10397 =for apidoc sv_setref_iv
10398
10399 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10400 argument will be upgraded to an RV.  That RV will be modified to point to
10401 the new SV.  The C<classname> argument indicates the package for the
10402 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10403 will have a reference count of 1, and the RV will be returned.
10404
10405 =cut
10406 */
10407
10408 SV*
10409 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10410 {
10411     PERL_ARGS_ASSERT_SV_SETREF_IV;
10412
10413     sv_setiv(newSVrv(rv,classname), iv);
10414     return rv;
10415 }
10416
10417 /*
10418 =for apidoc sv_setref_uv
10419
10420 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10421 argument will be upgraded to an RV.  That RV will be modified to point to
10422 the new SV.  The C<classname> argument indicates the package for the
10423 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10424 will have a reference count of 1, and the RV will be returned.
10425
10426 =cut
10427 */
10428
10429 SV*
10430 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10431 {
10432     PERL_ARGS_ASSERT_SV_SETREF_UV;
10433
10434     sv_setuv(newSVrv(rv,classname), uv);
10435     return rv;
10436 }
10437
10438 /*
10439 =for apidoc sv_setref_nv
10440
10441 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10442 argument will be upgraded to an RV.  That RV will be modified to point to
10443 the new SV.  The C<classname> argument indicates the package for the
10444 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10445 will have a reference count of 1, and the RV will be returned.
10446
10447 =cut
10448 */
10449
10450 SV*
10451 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10452 {
10453     PERL_ARGS_ASSERT_SV_SETREF_NV;
10454
10455     sv_setnv(newSVrv(rv,classname), nv);
10456     return rv;
10457 }
10458
10459 /*
10460 =for apidoc sv_setref_pvn
10461
10462 Copies a string into a new SV, optionally blessing the SV.  The length of the
10463 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10464 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10465 argument indicates the package for the blessing.  Set C<classname> to
10466 C<NULL> to avoid the blessing.  The new SV will have a reference count
10467 of 1, and the RV will be returned.
10468
10469 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10470
10471 =cut
10472 */
10473
10474 SV*
10475 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10476                    const char *const pv, const STRLEN n)
10477 {
10478     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10479
10480     sv_setpvn(newSVrv(rv,classname), pv, n);
10481     return rv;
10482 }
10483
10484 /*
10485 =for apidoc sv_bless
10486
10487 Blesses an SV into a specified package.  The SV must be an RV.  The package
10488 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10489 of the SV is unaffected.
10490
10491 =cut
10492 */
10493
10494 SV*
10495 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10496 {
10497     SV *tmpRef;
10498     HV *oldstash = NULL;
10499
10500     PERL_ARGS_ASSERT_SV_BLESS;
10501
10502     SvGETMAGIC(sv);
10503     if (!SvROK(sv))
10504         Perl_croak(aTHX_ "Can't bless non-reference value");
10505     tmpRef = SvRV(sv);
10506     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10507         if (SvREADONLY(tmpRef))
10508             Perl_croak_no_modify();
10509         if (SvOBJECT(tmpRef)) {
10510             oldstash = SvSTASH(tmpRef);
10511         }
10512     }
10513     SvOBJECT_on(tmpRef);
10514     SvUPGRADE(tmpRef, SVt_PVMG);
10515     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10516     SvREFCNT_dec(oldstash);
10517
10518     if(SvSMAGICAL(tmpRef))
10519         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10520             mg_set(tmpRef);
10521
10522
10523
10524     return sv;
10525 }
10526
10527 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10528  * as it is after unglobbing it.
10529  */
10530
10531 PERL_STATIC_INLINE void
10532 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10533 {
10534     void *xpvmg;
10535     HV *stash;
10536     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10537
10538     PERL_ARGS_ASSERT_SV_UNGLOB;
10539
10540     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10541     SvFAKE_off(sv);
10542     if (!(flags & SV_COW_DROP_PV))
10543         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10544
10545     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10546     if (GvGP(sv)) {
10547         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10548            && HvNAME_get(stash))
10549             mro_method_changed_in(stash);
10550         gp_free(MUTABLE_GV(sv));
10551     }
10552     if (GvSTASH(sv)) {
10553         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10554         GvSTASH(sv) = NULL;
10555     }
10556     GvMULTI_off(sv);
10557     if (GvNAME_HEK(sv)) {
10558         unshare_hek(GvNAME_HEK(sv));
10559     }
10560     isGV_with_GP_off(sv);
10561
10562     if(SvTYPE(sv) == SVt_PVGV) {
10563         /* need to keep SvANY(sv) in the right arena */
10564         xpvmg = new_XPVMG();
10565         StructCopy(SvANY(sv), xpvmg, XPVMG);
10566         del_XPVGV(SvANY(sv));
10567         SvANY(sv) = xpvmg;
10568
10569         SvFLAGS(sv) &= ~SVTYPEMASK;
10570         SvFLAGS(sv) |= SVt_PVMG;
10571     }
10572
10573     /* Intentionally not calling any local SET magic, as this isn't so much a
10574        set operation as merely an internal storage change.  */
10575     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10576     else sv_setsv_flags(sv, temp, 0);
10577
10578     if ((const GV *)sv == PL_last_in_gv)
10579         PL_last_in_gv = NULL;
10580     else if ((const GV *)sv == PL_statgv)
10581         PL_statgv = NULL;
10582 }
10583
10584 /*
10585 =for apidoc sv_unref_flags
10586
10587 Unsets the RV status of the SV, and decrements the reference count of
10588 whatever was being referenced by the RV.  This can almost be thought of
10589 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10590 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10591 (otherwise the decrementing is conditional on the reference count being
10592 different from one or the reference being a readonly SV).
10593 See C<L</SvROK_off>>.
10594
10595 =cut
10596 */
10597
10598 void
10599 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10600 {
10601     SV* const target = SvRV(ref);
10602
10603     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10604
10605     if (SvWEAKREF(ref)) {
10606         sv_del_backref(target, ref);
10607         SvWEAKREF_off(ref);
10608         SvRV_set(ref, NULL);
10609         return;
10610     }
10611     SvRV_set(ref, NULL);
10612     SvROK_off(ref);
10613     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10614        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10615     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10616         SvREFCNT_dec_NN(target);
10617     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10618         sv_2mortal(target);     /* Schedule for freeing later */
10619 }
10620
10621 /*
10622 =for apidoc sv_untaint
10623
10624 Untaint an SV.  Use C<SvTAINTED_off> instead.
10625
10626 =cut
10627 */
10628
10629 void
10630 Perl_sv_untaint(pTHX_ SV *const sv)
10631 {
10632     PERL_ARGS_ASSERT_SV_UNTAINT;
10633     PERL_UNUSED_CONTEXT;
10634
10635     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10636         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10637         if (mg)
10638             mg->mg_len &= ~1;
10639     }
10640 }
10641
10642 /*
10643 =for apidoc sv_tainted
10644
10645 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10646
10647 =cut
10648 */
10649
10650 bool
10651 Perl_sv_tainted(pTHX_ SV *const sv)
10652 {
10653     PERL_ARGS_ASSERT_SV_TAINTED;
10654     PERL_UNUSED_CONTEXT;
10655
10656     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10657         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10658         if (mg && (mg->mg_len & 1) )
10659             return TRUE;
10660     }
10661     return FALSE;
10662 }
10663
10664 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10665                        private to this file */
10666
10667 /*
10668 =for apidoc sv_setpviv
10669
10670 Copies an integer into the given SV, also updating its string value.
10671 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10672
10673 =cut
10674 */
10675
10676 void
10677 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10678 {
10679     char buf[TYPE_CHARS(UV)];
10680     char *ebuf;
10681     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10682
10683     PERL_ARGS_ASSERT_SV_SETPVIV;
10684
10685     sv_setpvn(sv, ptr, ebuf - ptr);
10686 }
10687
10688 /*
10689 =for apidoc sv_setpviv_mg
10690
10691 Like C<sv_setpviv>, but also handles 'set' magic.
10692
10693 =cut
10694 */
10695
10696 void
10697 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10698 {
10699     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10700
10701     sv_setpviv(sv, iv);
10702     SvSETMAGIC(sv);
10703 }
10704
10705 #endif  /* NO_MATHOMS */
10706
10707 #if defined(PERL_IMPLICIT_CONTEXT)
10708
10709 /* pTHX_ magic can't cope with varargs, so this is a no-context
10710  * version of the main function, (which may itself be aliased to us).
10711  * Don't access this version directly.
10712  */
10713
10714 void
10715 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10716 {
10717     dTHX;
10718     va_list args;
10719
10720     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10721
10722     va_start(args, pat);
10723     sv_vsetpvf(sv, pat, &args);
10724     va_end(args);
10725 }
10726
10727 /* pTHX_ magic can't cope with varargs, so this is a no-context
10728  * version of the main function, (which may itself be aliased to us).
10729  * Don't access this version directly.
10730  */
10731
10732 void
10733 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10734 {
10735     dTHX;
10736     va_list args;
10737
10738     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10739
10740     va_start(args, pat);
10741     sv_vsetpvf_mg(sv, pat, &args);
10742     va_end(args);
10743 }
10744 #endif
10745
10746 /*
10747 =for apidoc sv_setpvf
10748
10749 Works like C<sv_catpvf> but copies the text into the SV instead of
10750 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10751
10752 =cut
10753 */
10754
10755 void
10756 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10757 {
10758     va_list args;
10759
10760     PERL_ARGS_ASSERT_SV_SETPVF;
10761
10762     va_start(args, pat);
10763     sv_vsetpvf(sv, pat, &args);
10764     va_end(args);
10765 }
10766
10767 /*
10768 =for apidoc sv_vsetpvf
10769
10770 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10771 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10772
10773 Usually used via its frontend C<sv_setpvf>.
10774
10775 =cut
10776 */
10777
10778 void
10779 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10780 {
10781     PERL_ARGS_ASSERT_SV_VSETPVF;
10782
10783     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10784 }
10785
10786 /*
10787 =for apidoc sv_setpvf_mg
10788
10789 Like C<sv_setpvf>, but also handles 'set' magic.
10790
10791 =cut
10792 */
10793
10794 void
10795 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10796 {
10797     va_list args;
10798
10799     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10800
10801     va_start(args, pat);
10802     sv_vsetpvf_mg(sv, pat, &args);
10803     va_end(args);
10804 }
10805
10806 /*
10807 =for apidoc sv_vsetpvf_mg
10808
10809 Like C<sv_vsetpvf>, but also handles 'set' magic.
10810
10811 Usually used via its frontend C<sv_setpvf_mg>.
10812
10813 =cut
10814 */
10815
10816 void
10817 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10818 {
10819     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10820
10821     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10822     SvSETMAGIC(sv);
10823 }
10824
10825 #if defined(PERL_IMPLICIT_CONTEXT)
10826
10827 /* pTHX_ magic can't cope with varargs, so this is a no-context
10828  * version of the main function, (which may itself be aliased to us).
10829  * Don't access this version directly.
10830  */
10831
10832 void
10833 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10834 {
10835     dTHX;
10836     va_list args;
10837
10838     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10839
10840     va_start(args, pat);
10841     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10842     va_end(args);
10843 }
10844
10845 /* pTHX_ magic can't cope with varargs, so this is a no-context
10846  * version of the main function, (which may itself be aliased to us).
10847  * Don't access this version directly.
10848  */
10849
10850 void
10851 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10852 {
10853     dTHX;
10854     va_list args;
10855
10856     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10857
10858     va_start(args, pat);
10859     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10860     SvSETMAGIC(sv);
10861     va_end(args);
10862 }
10863 #endif
10864
10865 /*
10866 =for apidoc sv_catpvf
10867
10868 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10869 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10870 variable argument list, argument reordering is not supported.
10871 If the appended data contains "wide" characters
10872 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10873 and characters >255 formatted with C<%c>), the original SV might get
10874 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10875 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10876 valid UTF-8; if the original SV was bytes, the pattern should be too.
10877
10878 =cut */
10879
10880 void
10881 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10882 {
10883     va_list args;
10884
10885     PERL_ARGS_ASSERT_SV_CATPVF;
10886
10887     va_start(args, pat);
10888     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10889     va_end(args);
10890 }
10891
10892 /*
10893 =for apidoc sv_vcatpvf
10894
10895 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10896 variable argument list, and appends the formatted output
10897 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10898
10899 Usually used via its frontend C<sv_catpvf>.
10900
10901 =cut
10902 */
10903
10904 void
10905 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10906 {
10907     PERL_ARGS_ASSERT_SV_VCATPVF;
10908
10909     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10910 }
10911
10912 /*
10913 =for apidoc sv_catpvf_mg
10914
10915 Like C<sv_catpvf>, but also handles 'set' magic.
10916
10917 =cut
10918 */
10919
10920 void
10921 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10922 {
10923     va_list args;
10924
10925     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10926
10927     va_start(args, pat);
10928     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10929     SvSETMAGIC(sv);
10930     va_end(args);
10931 }
10932
10933 /*
10934 =for apidoc sv_vcatpvf_mg
10935
10936 Like C<sv_vcatpvf>, but also handles 'set' magic.
10937
10938 Usually used via its frontend C<sv_catpvf_mg>.
10939
10940 =cut
10941 */
10942
10943 void
10944 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10945 {
10946     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10947
10948     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10949     SvSETMAGIC(sv);
10950 }
10951
10952 /*
10953 =for apidoc sv_vsetpvfn
10954
10955 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10956 appending it.
10957
10958 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10959
10960 =cut
10961 */
10962
10963 void
10964 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10965                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
10966 {
10967     PERL_ARGS_ASSERT_SV_VSETPVFN;
10968
10969     SvPVCLEAR(sv);
10970     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
10971 }
10972
10973
10974 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
10975
10976 PERL_STATIC_INLINE void
10977 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
10978 {
10979     STRLEN const need = len + SvCUR(sv) + 1;
10980     char *end;
10981
10982     /* can't wrap as both len and SvCUR() are allocated in
10983      * memory and together can't consume all the address space
10984      */
10985     assert(need > len);
10986
10987     assert(SvPOK(sv));
10988     SvGROW(sv, need);
10989     end = SvEND(sv);
10990     Copy(buf, end, len, char);
10991     end += len;
10992     *end = '\0';
10993     SvCUR_set(sv, need - 1);
10994 }
10995
10996
10997 /*
10998  * Warn of missing argument to sprintf. The value used in place of such
10999  * arguments should be &PL_sv_no; an undefined value would yield
11000  * inappropriate "use of uninit" warnings [perl #71000].
11001  */
11002 STATIC void
11003 S_warn_vcatpvfn_missing_argument(pTHX) {
11004     if (ckWARN(WARN_MISSING)) {
11005         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11006                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11007     }
11008 }
11009
11010
11011 static void
11012 S_croak_overflow()
11013 {
11014     dTHX;
11015     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11016                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11017 }
11018
11019
11020 /* Given an int i from the next arg (if args is true) or an sv from an arg
11021  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11022  * with overflow checking.
11023  * Sets *neg to true if the value was negative (untouched otherwise.
11024  * Returns the absolute value.
11025  * As an extra margin of safety, it croaks if the returned value would
11026  * exceed the maximum value of a STRLEN / 4.
11027  */
11028
11029 static STRLEN
11030 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11031 {
11032     IV iv;
11033
11034     if (args) {
11035         iv = i;
11036         goto do_iv;
11037     }
11038
11039     if (!sv)
11040         return 0;
11041
11042     SvGETMAGIC(sv);
11043
11044     if (UNLIKELY(SvIsUV(sv))) {
11045         UV uv = SvUV_nomg(sv);
11046         if (uv > IV_MAX)
11047             S_croak_overflow();
11048         iv = uv;
11049     }
11050     else {
11051         iv = SvIV_nomg(sv);
11052       do_iv:
11053         if (iv < 0) {
11054             if (iv < -IV_MAX)
11055                 S_croak_overflow();
11056             iv = -iv;
11057             *neg = TRUE;
11058         }
11059     }
11060
11061     if (iv > (IV)(((STRLEN)~0) / 4))
11062         S_croak_overflow();
11063
11064     return (STRLEN)iv;
11065 }
11066
11067
11068 /* Returns true if c is in the range '1'..'9'
11069  * Written with the cast so it only needs one conditional test
11070  */
11071 #define IS_1_TO_9(c) ((U8)(c - '1') <= 8)
11072
11073 /* Read in and return a number. Updates *pattern to point to the char
11074  * following the number. Expects the first char to 1..9.
11075  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11076  * This is a belt-and-braces safety measure to complement any
11077  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11078  * It means that e.g. on a 32-bit system the width/precision can't be more
11079  * than 1G, which seems reasonable.
11080  */
11081
11082 STATIC STRLEN
11083 S_expect_number(pTHX_ const char **const pattern)
11084 {
11085     STRLEN var;
11086
11087     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11088
11089     assert(IS_1_TO_9(**pattern));
11090
11091     var = *(*pattern)++ - '0';
11092     while (isDIGIT(**pattern)) {
11093         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11094         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11095             S_croak_overflow();
11096         var = var * 10 + (*(*pattern)++ - '0');
11097     }
11098     return var;
11099 }
11100
11101 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11102  * ensures it's big enough), back fill it with the rounded integer part of
11103  * nv. Returns ptr to start of string, and sets *len to its length.
11104  * Returns NULL if not convertible.
11105  */
11106
11107 STATIC char *
11108 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11109 {
11110     const int neg = nv < 0;
11111     UV uv;
11112
11113     PERL_ARGS_ASSERT_F0CONVERT;
11114
11115     assert(!Perl_isinfnan(nv));
11116     if (neg)
11117         nv = -nv;
11118     if (nv < UV_MAX) {
11119         char *p = endbuf;
11120         nv += 0.5;
11121         uv = (UV)nv;
11122         if (uv & 1 && uv == nv)
11123             uv--;                       /* Round to even */
11124         do {
11125             const unsigned dig = uv % 10;
11126             *--p = '0' + dig;
11127         } while (uv /= 10);
11128         if (neg)
11129             *--p = '-';
11130         *len = endbuf - p;
11131         return p;
11132     }
11133     return NULL;
11134 }
11135
11136
11137 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11138
11139 void
11140 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11141                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11142 {
11143     PERL_ARGS_ASSERT_SV_VCATPVFN;
11144
11145     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11146 }
11147
11148
11149 /* For the vcatpvfn code, we need a long double target in case
11150  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11151  * with long double formats, even without NV being long double.  But we
11152  * call the target 'fv' instead of 'nv', since most of the time it is not
11153  * (most compilers these days recognize "long double", even if only as a
11154  * synonym for "double").
11155 */
11156 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11157         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11158 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11159 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11160        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11161 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11162             STMT_START {                                \
11163                 double _dv = nv;                        \
11164                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11165             } STMT_END
11166 #  else
11167 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11168 #  endif
11169    typedef long double vcatpvfn_long_double_t;
11170 #else
11171 #  define VCATPVFN_FV_GF NVgf
11172 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11173    typedef NV vcatpvfn_long_double_t;
11174 #endif
11175
11176 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11177 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11178  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11179  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11180  * after the first 1023 zero bits.
11181  *
11182  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11183  * of dynamically growing buffer might be better, start at just 16 bytes
11184  * (for example) and grow only when necessary.  Or maybe just by looking
11185  * at the exponents of the two doubles? */
11186 #  define DOUBLEDOUBLE_MAXBITS 2098
11187 #endif
11188
11189 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11190  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11191  * per xdigit.  For the double-double case, this can be rather many.
11192  * The non-double-double-long-double overshoots since all bits of NV
11193  * are not mantissa bits, there are also exponent bits. */
11194 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11195 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11196 #else
11197 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11198 #endif
11199
11200 /* If we do not have a known long double format, (including not using
11201  * long doubles, or long doubles being equal to doubles) then we will
11202  * fall back to the ldexp/frexp route, with which we can retrieve at
11203  * most as many bits as our widest unsigned integer type is.  We try
11204  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11205  *
11206  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11207  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11208  */
11209 #if defined(HAS_QUAD) && defined(Uquad_t)
11210 #  define MANTISSATYPE Uquad_t
11211 #  define MANTISSASIZE 8
11212 #else
11213 #  define MANTISSATYPE UV
11214 #  define MANTISSASIZE UVSIZE
11215 #endif
11216
11217 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11218 #  define HEXTRACT_LITTLE_ENDIAN
11219 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11220 #  define HEXTRACT_BIG_ENDIAN
11221 #else
11222 #  define HEXTRACT_MIX_ENDIAN
11223 #endif
11224
11225 /* S_hextract() is a helper for S_format_hexfp, for extracting
11226  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11227  * are being extracted from (either directly from the long double in-memory
11228  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11229  * is used to update the exponent.  The subnormal is set to true
11230  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11231  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11232  *
11233  * The tricky part is that S_hextract() needs to be called twice:
11234  * the first time with vend as NULL, and the second time with vend as
11235  * the pointer returned by the first call.  What happens is that on
11236  * the first round the output size is computed, and the intended
11237  * extraction sanity checked.  On the second round the actual output
11238  * (the extraction of the hexadecimal values) takes place.
11239  * Sanity failures cause fatal failures during both rounds. */
11240 STATIC U8*
11241 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11242            U8* vhex, U8* vend)
11243 {
11244     U8* v = vhex;
11245     int ix;
11246     int ixmin = 0, ixmax = 0;
11247
11248     /* XXX Inf/NaN are not handled here, since it is
11249      * assumed they are to be output as "Inf" and "NaN". */
11250
11251     /* These macros are just to reduce typos, they have multiple
11252      * repetitions below, but usually only one (or sometimes two)
11253      * of them is really being used. */
11254     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11255 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11256 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11257 #define HEXTRACT_OUTPUT(ix) \
11258     STMT_START { \
11259       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11260    } STMT_END
11261 #define HEXTRACT_COUNT(ix, c) \
11262     STMT_START { \
11263       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11264    } STMT_END
11265 #define HEXTRACT_BYTE(ix) \
11266     STMT_START { \
11267       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11268    } STMT_END
11269 #define HEXTRACT_LO_NYBBLE(ix) \
11270     STMT_START { \
11271       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11272    } STMT_END
11273     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11274      * to make it look less odd when the top bits of a NV
11275      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11276      * order bits can be in the "low nybble" of a byte. */
11277 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11278 #define HEXTRACT_BYTES_LE(a, b) \
11279     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11280 #define HEXTRACT_BYTES_BE(a, b) \
11281     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11282 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11283 #define HEXTRACT_IMPLICIT_BIT(nv) \
11284     STMT_START { \
11285         if (!*subnormal) { \
11286             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11287         } \
11288    } STMT_END
11289
11290 /* Most formats do.  Those which don't should undef this.
11291  *
11292  * But also note that IEEE 754 subnormals do not have it, or,
11293  * expressed alternatively, their implicit bit is zero. */
11294 #define HEXTRACT_HAS_IMPLICIT_BIT
11295
11296 /* Many formats do.  Those which don't should undef this. */
11297 #define HEXTRACT_HAS_TOP_NYBBLE
11298
11299     /* HEXTRACTSIZE is the maximum number of xdigits. */
11300 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11301 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11302 #else
11303 #  define HEXTRACTSIZE 2 * NVSIZE
11304 #endif
11305
11306     const U8* vmaxend = vhex + HEXTRACTSIZE;
11307
11308     assert(HEXTRACTSIZE <= VHEX_SIZE);
11309
11310     PERL_UNUSED_VAR(ix); /* might happen */
11311     (void)Perl_frexp(PERL_ABS(nv), exponent);
11312     *subnormal = FALSE;
11313     if (vend && (vend <= vhex || vend > vmaxend)) {
11314         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11315         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11316     }
11317     {
11318         /* First check if using long doubles. */
11319 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11320 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11321         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11322          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11323         /* The bytes 13..0 are the mantissa/fraction,
11324          * the 15,14 are the sign+exponent. */
11325         const U8* nvp = (const U8*)(&nv);
11326         HEXTRACT_GET_SUBNORMAL(nv);
11327         HEXTRACT_IMPLICIT_BIT(nv);
11328 #    undef HEXTRACT_HAS_TOP_NYBBLE
11329         HEXTRACT_BYTES_LE(13, 0);
11330 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11331         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11332          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11333         /* The bytes 2..15 are the mantissa/fraction,
11334          * the 0,1 are the sign+exponent. */
11335         const U8* nvp = (const U8*)(&nv);
11336         HEXTRACT_GET_SUBNORMAL(nv);
11337         HEXTRACT_IMPLICIT_BIT(nv);
11338 #    undef HEXTRACT_HAS_TOP_NYBBLE
11339         HEXTRACT_BYTES_BE(2, 15);
11340 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11341         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11342          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11343          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11344          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11345         /* The bytes 0..1 are the sign+exponent,
11346          * the bytes 2..9 are the mantissa/fraction. */
11347         const U8* nvp = (const U8*)(&nv);
11348 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11349 #    undef HEXTRACT_HAS_TOP_NYBBLE
11350         HEXTRACT_GET_SUBNORMAL(nv);
11351         HEXTRACT_BYTES_LE(7, 0);
11352 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11353         /* Does this format ever happen? (Wikipedia says the Motorola
11354          * 6888x math coprocessors used format _like_ this but padded
11355          * to 96 bits with 16 unused bits between the exponent and the
11356          * mantissa.) */
11357         const U8* nvp = (const U8*)(&nv);
11358 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11359 #    undef HEXTRACT_HAS_TOP_NYBBLE
11360         HEXTRACT_GET_SUBNORMAL(nv);
11361         HEXTRACT_BYTES_BE(0, 7);
11362 #  else
11363 #    define HEXTRACT_FALLBACK
11364         /* Double-double format: two doubles next to each other.
11365          * The first double is the high-order one, exactly like
11366          * it would be for a "lone" double.  The second double
11367          * is shifted down using the exponent so that that there
11368          * are no common bits.  The tricky part is that the value
11369          * of the double-double is the SUM of the two doubles and
11370          * the second one can be also NEGATIVE.
11371          *
11372          * Because of this tricky construction the bytewise extraction we
11373          * use for the other long double formats doesn't work, we must
11374          * extract the values bit by bit.
11375          *
11376          * The little-endian double-double is used .. somewhere?
11377          *
11378          * The big endian double-double is used in e.g. PPC/Power (AIX)
11379          * and MIPS (SGI).
11380          *
11381          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11382          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11383          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11384          */
11385 #  endif
11386 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11387         /* Using normal doubles, not long doubles.
11388          *
11389          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11390          * bytes, since we might need to handle printf precision, and
11391          * also need to insert the radix. */
11392 #  if NVSIZE == 8
11393 #    ifdef HEXTRACT_LITTLE_ENDIAN
11394         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11395         const U8* nvp = (const U8*)(&nv);
11396         HEXTRACT_GET_SUBNORMAL(nv);
11397         HEXTRACT_IMPLICIT_BIT(nv);
11398         HEXTRACT_TOP_NYBBLE(6);
11399         HEXTRACT_BYTES_LE(5, 0);
11400 #    elif defined(HEXTRACT_BIG_ENDIAN)
11401         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11402         const U8* nvp = (const U8*)(&nv);
11403         HEXTRACT_GET_SUBNORMAL(nv);
11404         HEXTRACT_IMPLICIT_BIT(nv);
11405         HEXTRACT_TOP_NYBBLE(1);
11406         HEXTRACT_BYTES_BE(2, 7);
11407 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11408         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11409         const U8* nvp = (const U8*)(&nv);
11410         HEXTRACT_GET_SUBNORMAL(nv);
11411         HEXTRACT_IMPLICIT_BIT(nv);
11412         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11413         HEXTRACT_BYTE(1); /* 5 */
11414         HEXTRACT_BYTE(0); /* 4 */
11415         HEXTRACT_BYTE(7); /* 3 */
11416         HEXTRACT_BYTE(6); /* 2 */
11417         HEXTRACT_BYTE(5); /* 1 */
11418         HEXTRACT_BYTE(4); /* 0 */
11419 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11420         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11421         const U8* nvp = (const U8*)(&nv);
11422         HEXTRACT_GET_SUBNORMAL(nv);
11423         HEXTRACT_IMPLICIT_BIT(nv);
11424         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11425         HEXTRACT_BYTE(6); /* 5 */
11426         HEXTRACT_BYTE(7); /* 4 */
11427         HEXTRACT_BYTE(0); /* 3 */
11428         HEXTRACT_BYTE(1); /* 2 */
11429         HEXTRACT_BYTE(2); /* 1 */
11430         HEXTRACT_BYTE(3); /* 0 */
11431 #    else
11432 #      define HEXTRACT_FALLBACK
11433 #    endif
11434 #  else
11435 #    define HEXTRACT_FALLBACK
11436 #  endif
11437 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11438
11439 #ifdef HEXTRACT_FALLBACK
11440         HEXTRACT_GET_SUBNORMAL(nv);
11441 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11442         /* The fallback is used for the double-double format, and
11443          * for unknown long double formats, and for unknown double
11444          * formats, or in general unknown NV formats. */
11445         if (nv == (NV)0.0) {
11446             if (vend)
11447                 *v++ = 0;
11448             else
11449                 v++;
11450             *exponent = 0;
11451         }
11452         else {
11453             NV d = nv < 0 ? -nv : nv;
11454             NV e = (NV)1.0;
11455             U8 ha = 0x0; /* hexvalue accumulator */
11456             U8 hd = 0x8; /* hexvalue digit */
11457
11458             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11459              * this is essentially manual frexp(). Multiplying by 0.5 and
11460              * doubling should be lossless in binary floating point. */
11461
11462             *exponent = 1;
11463
11464             while (e > d) {
11465                 e *= (NV)0.5;
11466                 (*exponent)--;
11467             }
11468             /* Now d >= e */
11469
11470             while (d >= e + e) {
11471                 e += e;
11472                 (*exponent)++;
11473             }
11474             /* Now e <= d < 2*e */
11475
11476             /* First extract the leading hexdigit (the implicit bit). */
11477             if (d >= e) {
11478                 d -= e;
11479                 if (vend)
11480                     *v++ = 1;
11481                 else
11482                     v++;
11483             }
11484             else {
11485                 if (vend)
11486                     *v++ = 0;
11487                 else
11488                     v++;
11489             }
11490             e *= (NV)0.5;
11491
11492             /* Then extract the remaining hexdigits. */
11493             while (d > (NV)0.0) {
11494                 if (d >= e) {
11495                     ha |= hd;
11496                     d -= e;
11497                 }
11498                 if (hd == 1) {
11499                     /* Output or count in groups of four bits,
11500                      * that is, when the hexdigit is down to one. */
11501                     if (vend)
11502                         *v++ = ha;
11503                     else
11504                         v++;
11505                     /* Reset the hexvalue. */
11506                     ha = 0x0;
11507                     hd = 0x8;
11508                 }
11509                 else
11510                     hd >>= 1;
11511                 e *= (NV)0.5;
11512             }
11513
11514             /* Flush possible pending hexvalue. */
11515             if (ha) {
11516                 if (vend)
11517                     *v++ = ha;
11518                 else
11519                     v++;
11520             }
11521         }
11522 #endif
11523     }
11524     /* Croak for various reasons: if the output pointer escaped the
11525      * output buffer, if the extraction index escaped the extraction
11526      * buffer, or if the ending output pointer didn't match the
11527      * previously computed value. */
11528     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11529         /* For double-double the ixmin and ixmax stay at zero,
11530          * which is convenient since the HEXTRACTSIZE is tricky
11531          * for double-double. */
11532         ixmin < 0 || ixmax >= NVSIZE ||
11533         (vend && v != vend)) {
11534         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11535         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11536     }
11537     return v;
11538 }
11539
11540
11541 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11542  *
11543  * Processes the %a/%A hexadecimal floating-point format, since the
11544  * built-in snprintf()s which are used for most of the f/p formats, don't
11545  * universally handle %a/%A.
11546  * Populates buf of length bufsize, and returns the length of the created
11547  * string.
11548  * The rest of the args have the same meaning as the local vars of the
11549  * same name within Perl_sv_vcatpvfn_flags().
11550  *
11551  * It assumes the caller has already done STORE_LC_NUMERIC_SET_TO_NEEDED();
11552  *
11553  * It requires the caller to make buf large enough.
11554  */
11555
11556 static STRLEN
11557 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11558                     const NV nv, const vcatpvfn_long_double_t fv,
11559                     bool has_precis, STRLEN precis, STRLEN width,
11560                     bool alt, char plus, bool left, bool fill)
11561 {
11562     /* Hexadecimal floating point. */
11563     char* p = buf;
11564     U8 vhex[VHEX_SIZE];
11565     U8* v = vhex; /* working pointer to vhex */
11566     U8* vend; /* pointer to one beyond last digit of vhex */
11567     U8* vfnz = NULL; /* first non-zero */
11568     U8* vlnz = NULL; /* last non-zero */
11569     U8* v0 = NULL; /* first output */
11570     const bool lower = (c == 'a');
11571     /* At output the values of vhex (up to vend) will
11572      * be mapped through the xdig to get the actual
11573      * human-readable xdigits. */
11574     const char* xdig = PL_hexdigit;
11575     STRLEN zerotail = 0; /* how many extra zeros to append */
11576     int exponent = 0; /* exponent of the floating point input */
11577     bool hexradix = FALSE; /* should we output the radix */
11578     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11579     bool negative = FALSE;
11580     STRLEN elen;
11581
11582     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11583      *
11584      * For example with denormals, (assuming the vanilla
11585      * 64-bit double): the exponent is zero. 1xp-1074 is
11586      * the smallest denormal and the smallest double, it
11587      * could be output also as 0x0.0000000000001p-1022 to
11588      * match its internal structure. */
11589
11590     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11591     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11592
11593 #if NVSIZE > DOUBLESIZE
11594 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11595     /* In this case there is an implicit bit,
11596      * and therefore the exponent is shifted by one. */
11597     exponent--;
11598 #  else
11599 #    ifdef NV_X86_80_BIT
11600     if (subnormal) {
11601         /* The subnormals of the x86-80 have a base exponent of -16382,
11602          * (while the physical exponent bits are zero) but the frexp()
11603          * returned the scientific-style floating exponent.  We want
11604          * to map the last one as:
11605          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11606          * -16835..-16388 -> -16384
11607          * since we want to keep the first hexdigit
11608          * as one of the [8421]. */
11609         exponent = -4 * ( (exponent + 1) / -4) - 2;
11610     } else {
11611         exponent -= 4;
11612     }
11613 #    endif
11614     /* TBD: other non-implicit-bit platforms than the x86-80. */
11615 #  endif
11616 #endif
11617
11618     negative = fv < 0 || Perl_signbit(nv);
11619     if (negative)
11620         *p++ = '-';
11621     else if (plus)
11622         *p++ = plus;
11623     *p++ = '0';
11624     if (lower) {
11625         *p++ = 'x';
11626     }
11627     else {
11628         *p++ = 'X';
11629         xdig += 16; /* Use uppercase hex. */
11630     }
11631
11632     /* Find the first non-zero xdigit. */
11633     for (v = vhex; v < vend; v++) {
11634         if (*v) {
11635             vfnz = v;
11636             break;
11637         }
11638     }
11639
11640     if (vfnz) {
11641         /* Find the last non-zero xdigit. */
11642         for (v = vend - 1; v >= vhex; v--) {
11643             if (*v) {
11644                 vlnz = v;
11645                 break;
11646             }
11647         }
11648
11649 #if NVSIZE == DOUBLESIZE
11650         if (fv != 0.0)
11651             exponent--;
11652 #endif
11653
11654         if (subnormal) {
11655 #ifndef NV_X86_80_BIT
11656           if (vfnz[0] > 1) {
11657             /* IEEE 754 subnormals (but not the x86 80-bit):
11658              * we want "normalize" the subnormal,
11659              * so we need to right shift the hex nybbles
11660              * so that the output of the subnormal starts
11661              * from the first true bit.  (Another, equally
11662              * valid, policy would be to dump the subnormal
11663              * nybbles as-is, to display the "physical" layout.) */
11664             int i, n;
11665             U8 *vshr;
11666             /* Find the ceil(log2(v[0])) of
11667              * the top non-zero nybble. */
11668             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11669             assert(n < 4);
11670             vlnz[1] = 0;
11671             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11672               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11673               vshr[0] >>= n;
11674             }
11675             if (vlnz[1]) {
11676               vlnz++;
11677             }
11678           }
11679 #endif
11680           v0 = vfnz;
11681         } else {
11682           v0 = vhex;
11683         }
11684
11685         if (has_precis) {
11686             U8* ve = (subnormal ? vlnz + 1 : vend);
11687             SSize_t vn = ve - v0;
11688             assert(vn >= 1);
11689             if (precis < (Size_t)(vn - 1)) {
11690                 bool overflow = FALSE;
11691                 if (v0[precis + 1] < 0x8) {
11692                     /* Round down, nothing to do. */
11693                 } else if (v0[precis + 1] > 0x8) {
11694                     /* Round up. */
11695                     v0[precis]++;
11696                     overflow = v0[precis] > 0xF;
11697                     v0[precis] &= 0xF;
11698                 } else { /* v0[precis] == 0x8 */
11699                     /* Half-point: round towards the one
11700                      * with the even least-significant digit:
11701                      * 08 -> 0  88 -> 8
11702                      * 18 -> 2  98 -> a
11703                      * 28 -> 2  a8 -> a
11704                      * 38 -> 4  b8 -> c
11705                      * 48 -> 4  c8 -> c
11706                      * 58 -> 6  d8 -> e
11707                      * 68 -> 6  e8 -> e
11708                      * 78 -> 8  f8 -> 10 */
11709                     if ((v0[precis] & 0x1)) {
11710                         v0[precis]++;
11711                     }
11712                     overflow = v0[precis] > 0xF;
11713                     v0[precis] &= 0xF;
11714                 }
11715
11716                 if (overflow) {
11717                     for (v = v0 + precis - 1; v >= v0; v--) {
11718                         (*v)++;
11719                         overflow = *v > 0xF;
11720                         (*v) &= 0xF;
11721                         if (!overflow) {
11722                             break;
11723                         }
11724                     }
11725                     if (v == v0 - 1 && overflow) {
11726                         /* If the overflow goes all the
11727                          * way to the front, we need to
11728                          * insert 0x1 in front, and adjust
11729                          * the exponent. */
11730                         Move(v0, v0 + 1, vn - 1, char);
11731                         *v0 = 0x1;
11732                         exponent += 4;
11733                     }
11734                 }
11735
11736                 /* The new effective "last non zero". */
11737                 vlnz = v0 + precis;
11738             }
11739             else {
11740                 zerotail =
11741                   subnormal ? precis - vn + 1 :
11742                   precis - (vlnz - vhex);
11743             }
11744         }
11745
11746         v = v0;
11747         *p++ = xdig[*v++];
11748
11749         /* If there are non-zero xdigits, the radix
11750          * is output after the first one. */
11751         if (vfnz < vlnz) {
11752           hexradix = TRUE;
11753         }
11754     }
11755     else {
11756         *p++ = '0';
11757         exponent = 0;
11758         zerotail = precis;
11759     }
11760
11761     /* The radix is always output if precis, or if alt. */
11762     if (precis > 0 || alt) {
11763       hexradix = TRUE;
11764     }
11765
11766     if (hexradix) {
11767 #ifndef USE_LOCALE_NUMERIC
11768             *p++ = '.';
11769 #else
11770             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
11771                 STRLEN n;
11772                 const char* r = SvPV(PL_numeric_radix_sv, n);
11773                 Copy(r, p, n, char);
11774                 p += n;
11775             }
11776             else {
11777                 *p++ = '.';
11778             }
11779 #endif
11780     }
11781
11782     if (vlnz) {
11783         while (v <= vlnz)
11784             *p++ = xdig[*v++];
11785     }
11786
11787     if (zerotail > 0) {
11788       while (zerotail--) {
11789         *p++ = '0';
11790       }
11791     }
11792
11793     elen = p - buf;
11794
11795     /* sanity checks */
11796     if (elen >= bufsize || width >= bufsize)
11797         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11798         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11799
11800     elen += my_snprintf(p, bufsize - elen,
11801                         "%c%+d", lower ? 'p' : 'P',
11802                         exponent);
11803
11804     if (elen < width) {
11805         STRLEN gap = (STRLEN)(width - elen);
11806         if (left) {
11807             /* Pad the back with spaces. */
11808             memset(buf + elen, ' ', gap);
11809         }
11810         else if (fill) {
11811             /* Insert the zeros after the "0x" and the
11812              * the potential sign, but before the digits,
11813              * otherwise we end up with "0000xH.HHH...",
11814              * when we want "0x000H.HHH..."  */
11815             STRLEN nzero = gap;
11816             char* zerox = buf + 2;
11817             STRLEN nmove = elen - 2;
11818             if (negative || plus) {
11819                 zerox++;
11820                 nmove--;
11821             }
11822             Move(zerox, zerox + nzero, nmove, char);
11823             memset(zerox, fill ? '0' : ' ', nzero);
11824         }
11825         else {
11826             /* Move it to the right. */
11827             Move(buf, buf + gap,
11828                  elen, char);
11829             /* Pad the front with spaces. */
11830             memset(buf, ' ', gap);
11831         }
11832         elen = width;
11833     }
11834     return elen;
11835 }
11836
11837
11838 /*
11839 =for apidoc sv_vcatpvfn
11840
11841 =for apidoc sv_vcatpvfn_flags
11842
11843 Processes its arguments like C<vsprintf> and appends the formatted output
11844 to an SV.  Uses an array of SVs if the C-style variable argument list is
11845 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11846 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11847 C<va_list> argument list with a format string that uses argument reordering
11848 will yield an exception.
11849
11850 When running with taint checks enabled, indicates via
11851 C<maybe_tainted> if results are untrustworthy (often due to the use of
11852 locales).
11853
11854 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11855
11856 It assumes that pat has the same utf8-ness as sv.  It's the caller's
11857 responsibility to ensure that this is so.
11858
11859 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11860
11861 =cut
11862 */
11863
11864
11865 void
11866 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11867                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11868                        const U32 flags)
11869 {
11870     const char *fmtstart; /* character following the current '%' */
11871     const char *q;        /* current position within format */
11872     const char *patend;
11873     STRLEN origlen;
11874     Size_t svix = 0;
11875     static const char nullstr[] = "(null)";
11876     SV *argsv = NULL;
11877     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11878     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11879     /* Times 4: a decimal digit takes more than 3 binary digits.
11880      * NV_DIG: mantissa takes than many decimal digits.
11881      * Plus 32: Playing safe. */
11882     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11883     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11884 #ifdef USE_LOCALE_NUMERIC
11885     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11886     bool lc_numeric_set = FALSE; /* called STORE_LC_NUMERIC_SET_TO_NEEDED? */
11887 #endif
11888
11889     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11890     PERL_UNUSED_ARG(maybe_tainted);
11891
11892     if (flags & SV_GMAGIC)
11893         SvGETMAGIC(sv);
11894
11895     /* no matter what, this is a string now */
11896     (void)SvPV_force_nomg(sv, origlen);
11897
11898     /* the code that scans for flags etc following a % relies on
11899      * a '\0' being present to avoid falling off the end. Ideally that
11900      * should be fixed */
11901     assert(pat[patlen] == '\0');
11902
11903
11904     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11905      * In each case, if there isn't the correct number of args, instead
11906      * fall through to the main code to handle the issuing of any
11907      * warnings etc.
11908      */
11909
11910     if (patlen == 0 && (args || sv_count == 0))
11911         return;
11912
11913     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11914
11915         /* "%s" */
11916         if (patlen == 2 && pat[1] == 's') {
11917             if (args) {
11918                 const char * const s = va_arg(*args, char*);
11919                 sv_catpv_nomg(sv, s ? s : nullstr);
11920             }
11921             else {
11922                 /* we want get magic on the source but not the target.
11923                  * sv_catsv can't do that, though */
11924                 SvGETMAGIC(*svargs);
11925                 sv_catsv_nomg(sv, *svargs);
11926             }
11927             return;
11928         }
11929
11930         /* "%-p" */
11931         if (args) {
11932             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11933                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11934                 sv_catsv_nomg(sv, asv);
11935                 return;
11936             }
11937         }
11938 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11939         /* special-case "%.0f" */
11940         else if (   patlen == 4
11941                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11942         {
11943             const NV nv = SvNV(*svargs);
11944             if (LIKELY(!Perl_isinfnan(nv))) {
11945                 STRLEN l;
11946                 char *p;
11947
11948                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11949                     sv_catpvn_nomg(sv, p, l);
11950                     return;
11951                 }
11952             }
11953         }
11954 #endif /* !USE_LONG_DOUBLE */
11955     }
11956
11957
11958     patend = (char*)pat + patlen;
11959     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
11960         char intsize     = 0;         /* size qualifier in "%hi..." etc */
11961         bool alt         = FALSE;     /* has      "%#..."    */
11962         bool left        = FALSE;     /* has      "%-..."    */
11963         bool fill        = FALSE;     /* has      "%0..."    */
11964         char plus        = 0;         /* has      "%+..."    */
11965         STRLEN width     = 0;         /* value of "%NNN..."  */
11966         bool has_precis  = FALSE;     /* has      "%.NNN..." */
11967         STRLEN precis    = 0;         /* value of "%.NNN..." */
11968         int base         = 0;         /* base to print in, e.g. 8 for %o */
11969         UV uv            = 0;         /* the value to print of int-ish args */
11970
11971         bool vectorize   = FALSE;     /* has      "%v..."    */
11972         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
11973         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
11974         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
11975         const char *dotstr = NULL;    /* separator string for %v */
11976         STRLEN dotstrlen;             /* length of separator string for %v */
11977
11978         Size_t efix      = 0;         /* explicit format parameter index */
11979         const Size_t osvix  = svix;   /* original index in case of bad fmt */
11980
11981         bool is_utf8     = FALSE;     /* is this item utf8?   */
11982         bool arg_missing = FALSE;     /* give "Missing argument" warning */
11983         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
11984         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
11985         STRLEN zeros     = 0;         /* how many '0' to prepend */
11986
11987         const char *eptr = NULL;      /* the address of the element string */
11988         STRLEN elen      = 0;         /* the length  of the element string */
11989
11990         char c;                       /* the actual format ('d', s' etc) */
11991
11992
11993         /* echo everything up to the next format specification */
11994         for (q = fmtstart; q < patend && *q != '%'; ++q)
11995             {};
11996
11997         if (q > fmtstart) {
11998             if (has_utf8 && !pat_utf8) {
11999                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12000                  * the fly */
12001                 const char *p;
12002                 char *dst;
12003                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12004
12005                 for (p = fmtstart; p < q; p++)
12006                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12007                         need++;
12008                 SvGROW(sv, need);
12009
12010                 dst = SvEND(sv);
12011                 for (p = fmtstart; p < q; p++)
12012                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12013                 *dst = '\0';
12014                 SvCUR_set(sv, need - 1);
12015             }
12016             else
12017                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12018         }
12019         if (q++ >= patend)
12020             break;
12021
12022         fmtstart = q; /* fmtstart is char following the '%' */
12023
12024 /*
12025     We allow format specification elements in this order:
12026         \d+\$              explicit format parameter index
12027         [-+ 0#]+           flags
12028         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12029         0                  flag (as above): repeated to allow "v02"     
12030         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12031         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12032         [hlqLV]            size
12033     [%bcdefginopsuxDFOUX] format (mandatory)
12034 */
12035
12036         if (IS_1_TO_9(*q)) {
12037             width = expect_number(&q);
12038             if (*q == '$') {
12039                 if (args)
12040                     Perl_croak_nocontext(
12041                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
12042                 ++q;
12043                 efix = (Size_t)width;
12044                 width = 0;
12045                 no_redundant_warning = TRUE;
12046             } else {
12047                 goto gotwidth;
12048             }
12049         }
12050
12051         /* FLAGS */
12052
12053         while (*q) {
12054             switch (*q) {
12055             case ' ':
12056             case '+':
12057                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12058                     q++;
12059                 else
12060                     plus = *q++;
12061                 continue;
12062
12063             case '-':
12064                 left = TRUE;
12065                 q++;
12066                 continue;
12067
12068             case '0':
12069                 fill = TRUE;
12070                 q++;
12071                 continue;
12072
12073             case '#':
12074                 alt = TRUE;
12075                 q++;
12076                 continue;
12077
12078             default:
12079                 break;
12080             }
12081             break;
12082         }
12083
12084       /* at this point we can expect one of:
12085        *
12086        *  123  an explicit width
12087        *  *    width taken from next arg
12088        *  *12$ width taken from 12th arg
12089        *       or no width
12090        *
12091        * But any width specification may be preceded by a v, in one of its
12092        * forms:
12093        *        v
12094        *        *v
12095        *        *12$v
12096        * So an asterisk may be either a width specifier or a vector
12097        * separator arg specifier, and we don't know which initially
12098        */
12099
12100       tryasterisk:
12101         if (*q == '*') {
12102             STRLEN ix; /* explicit width/vector separator index */
12103             q++;
12104             if (IS_1_TO_9(*q)) {
12105                 ix = expect_number(&q);
12106                 if (*q++ == '$') {
12107                     if (args)
12108                         Perl_croak_nocontext(
12109                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
12110                     no_redundant_warning = TRUE;
12111                 } else
12112                     goto unknown;
12113             }
12114             else
12115                 ix = 0;
12116
12117             if (*q == 'v') {
12118                 SV *vecsv;
12119                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12120                  * with the default "." */
12121                 q++;
12122                 if (vectorize)
12123                     goto unknown;
12124                 if (args)
12125                     vecsv = va_arg(*args, SV*);
12126                 else {
12127                     ix = ix ? ix - 1 : svix++;
12128                     vecsv = ix < sv_count ? svargs[ix]
12129                                        : (arg_missing = TRUE, &PL_sv_no);
12130                 }
12131                 dotstr = SvPV_const(vecsv, dotstrlen);
12132                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12133                    bad with tied or overloaded values that return UTF8.  */
12134                 if (DO_UTF8(vecsv))
12135                     is_utf8 = TRUE;
12136                 else if (has_utf8) {
12137                     vecsv = sv_mortalcopy(vecsv);
12138                     sv_utf8_upgrade(vecsv);
12139                     dotstr = SvPV_const(vecsv, dotstrlen);
12140                     is_utf8 = TRUE;
12141                 }
12142                 vectorize = TRUE;
12143                 goto tryasterisk;
12144             }
12145
12146             /* the asterisk specified a width */
12147             {
12148                 int i = 0;
12149                 SV *sv = NULL;
12150                 if (args)
12151                     i = va_arg(*args, int);
12152                 else {
12153                     ix = ix ? ix - 1 : svix++;
12154                     sv = (ix < sv_count) ? svargs[ix]
12155                                       : (arg_missing = TRUE, (SV*)NULL);
12156                 }
12157                 width = S_sprintf_arg_num_val(aTHX_ args, i, sv, &left);
12158             }
12159         }
12160         else if (*q == 'v') {
12161             q++;
12162             if (vectorize)
12163                 goto unknown;
12164             vectorize = TRUE;
12165             dotstr = ".";
12166             dotstrlen = 1;
12167             goto tryasterisk;
12168
12169         }
12170         else {
12171         /* explicit width? */
12172             if(*q == '0') {
12173                 fill = TRUE;
12174                 q++;
12175             }
12176             if (IS_1_TO_9(*q))
12177                 width = expect_number(&q);
12178         }
12179
12180       gotwidth:
12181
12182         /* PRECISION */
12183
12184         if (*q == '.') {
12185             q++;
12186             if (*q == '*') {
12187                 STRLEN ix; /* explicit precision index */
12188                 q++;
12189                 if (IS_1_TO_9(*q)) {
12190                     ix = expect_number(&q);
12191                     if (*q++ == '$') {
12192                         if (args)
12193                             Perl_croak_nocontext(
12194                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
12195                         no_redundant_warning = TRUE;
12196                     } else
12197                         goto unknown;
12198                 }
12199                 else
12200                     ix = 0;
12201
12202                 {
12203                     int i = 0;
12204                     SV *sv = NULL;
12205                     bool neg = FALSE;
12206
12207                     if (args)
12208                         i = va_arg(*args, int);
12209                     else {
12210                         ix = ix ? ix - 1 : svix++;
12211                         sv = (ix < sv_count) ? svargs[ix]
12212                                           : (arg_missing = TRUE, (SV*)NULL);
12213                     }
12214                     precis = S_sprintf_arg_num_val(aTHX_ args, i, sv, &neg);
12215                     has_precis = !neg;
12216                 }
12217             }
12218             else {
12219                 /* although it doesn't seem documented, this code has long
12220                  * behaved so that:
12221                  *   no digits following the '.' is treated like '.0'
12222                  *   the number may be preceded by any number of zeroes,
12223                  *      e.g. "%.0001f", which is the same as "%.1f"
12224                  * so I've kept that behaviour. DAPM May 2017
12225                  */
12226                 while (*q == '0')
12227                     q++;
12228                 precis = IS_1_TO_9(*q) ? expect_number(&q) : 0;
12229                 has_precis = TRUE;
12230             }
12231         }
12232
12233         /* SIZE */
12234
12235         switch (*q) {
12236 #ifdef WIN32
12237         case 'I':                       /* Ix, I32x, and I64x */
12238 #  ifdef USE_64_BIT_INT
12239             if (q[1] == '6' && q[2] == '4') {
12240                 q += 3;
12241                 intsize = 'q';
12242                 break;
12243             }
12244 #  endif
12245             if (q[1] == '3' && q[2] == '2') {
12246                 q += 3;
12247                 break;
12248             }
12249 #  ifdef USE_64_BIT_INT
12250             intsize = 'q';
12251 #  endif
12252             q++;
12253             break;
12254 #endif
12255 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12256     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12257         case 'L':                       /* Ld */
12258             /* FALLTHROUGH */
12259 #  ifdef USE_QUADMATH
12260         case 'Q':
12261             /* FALLTHROUGH */
12262 #  endif
12263 #  if IVSIZE >= 8
12264         case 'q':                       /* qd */
12265 #  endif
12266             intsize = 'q';
12267             q++;
12268             break;
12269 #endif
12270         case 'l':
12271             ++q;
12272 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12273     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12274             if (*q == 'l') {    /* lld, llf */
12275                 intsize = 'q';
12276                 ++q;
12277             }
12278             else
12279 #endif
12280                 intsize = 'l';
12281             break;
12282         case 'h':
12283             if (*++q == 'h') {  /* hhd, hhu */
12284                 intsize = 'c';
12285                 ++q;
12286             }
12287             else
12288                 intsize = 'h';
12289             break;
12290         case 'V':
12291         case 'z':
12292         case 't':
12293 #ifdef I_STDINT
12294         case 'j':
12295 #endif
12296             intsize = *q++;
12297             break;
12298         }
12299
12300         /* CONVERSION */
12301
12302         c = *q++; /* c now holds the conversion type */
12303
12304         /* '%' doesn't have an arg, so skip arg processing */
12305         if (c == '%') {
12306             eptr = q - 1;
12307             elen = 1;
12308             if (vectorize)
12309                 goto unknown;
12310             goto string;
12311         }
12312
12313         if (vectorize && !strchr("BbDdiOouUXx", c))
12314             goto unknown;
12315
12316         /* get next arg (individual branches do their own va_arg()
12317          * handling for the args case) */
12318
12319         if (!args) {
12320             efix = efix ? efix - 1 : svix++;
12321             argsv = efix < sv_count ? svargs[efix]
12322                                  : (arg_missing = TRUE, &PL_sv_no);
12323         }
12324
12325
12326         switch (c) {
12327
12328             /* STRINGS */
12329
12330         case 's':
12331             if (args) {
12332                 eptr = va_arg(*args, char*);
12333                 if (eptr)
12334                     elen = strlen(eptr);
12335                 else {
12336                     eptr = (char *)nullstr;
12337                     elen = sizeof nullstr - 1;
12338                 }
12339             }
12340             else {
12341                 eptr = SvPV_const(argsv, elen);
12342                 if (DO_UTF8(argsv)) {
12343                     STRLEN old_precis = precis;
12344                     if (has_precis && precis < elen) {
12345                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12346                         STRLEN p = precis > ulen ? ulen : precis;
12347                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12348                                                         /* sticks at end */
12349                     }
12350                     if (width) { /* fudge width (can't fudge elen) */
12351                         if (has_precis && precis < elen)
12352                             width += precis - old_precis;
12353                         else
12354                             width +=
12355                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12356                     }
12357                     is_utf8 = TRUE;
12358                 }
12359             }
12360
12361         string:
12362             if (has_precis && precis < elen)
12363                 elen = precis;
12364             break;
12365
12366             /* INTEGERS */
12367
12368         case 'p':
12369             if (alt)
12370                 goto unknown;
12371
12372             /* %p extensions:
12373              *
12374              * "%...p" is normally treated like "%...x", except that the
12375              * number to print is the SV's address (or a pointer address
12376              * for C-ish sprintf).
12377              *
12378              * However, the C-ish sprintf variant allows a few special
12379              * extensions. These are currently:
12380              *
12381              * %-p       (SVf)  Like %s, but gets the string from an SV*
12382              *                  arg rather than a char* arg.
12383              *                  (This was previously %_).
12384              *
12385              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12386              *
12387              * %2p       (HEKf) Like %s, but using the key string in a HEK
12388              *
12389              * %3p       (HEKf256) Ditto but like %.256s
12390              *
12391              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12392              *                       (cBOOL(utf8), len, string_buf).
12393              *                   It's handled by the "case 'd'" branch
12394              *                   rather than here.
12395              *
12396              * %<num>p   where num is 1 or > 4: reserved for future
12397              *           extensions. Warns, but then is treated as a
12398              *           general %p (print hex address) format.
12399              */
12400
12401             if (   args
12402                 && !intsize
12403                 && !fill
12404                 && !plus
12405                 && !has_precis
12406                     /* not %*p or %*1$p - any width was explicit */
12407                 && q[-2] != '*'
12408                 && q[-2] != '$'
12409             ) {
12410                 if (left) {                     /* %-p (SVf), %-NNNp */
12411                     if (width) {
12412                         precis = width;
12413                         has_precis = TRUE;
12414                     }
12415                     argsv = MUTABLE_SV(va_arg(*args, void*));
12416                     eptr = SvPV_const(argsv, elen);
12417                     if (DO_UTF8(argsv))
12418                         is_utf8 = TRUE;
12419                     width = 0;
12420                     goto string;
12421                 }
12422                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12423                     HEK * const hek = va_arg(*args, HEK *);
12424                     eptr = HEK_KEY(hek);
12425                     elen = HEK_LEN(hek);
12426                     if (HEK_UTF8(hek))
12427                         is_utf8 = TRUE;
12428                     if (width == 3) {
12429                         precis = 256;
12430                         has_precis = TRUE;
12431                     }
12432                     width = 0;
12433                     goto string;
12434                 }
12435                 else if (width) {
12436                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12437                          "internal %%<num>p might conflict with future printf extensions");
12438                 }
12439             }
12440
12441             /* treat as normal %...p */
12442
12443             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12444             base = 16;
12445             goto do_integer;
12446
12447         case 'c':
12448             /* Ignore any size specifiers, since they're not documented as
12449              * being allowed for %c (ideally we should warn on e.g. '%hc').
12450              * Setting a default intsize, along with a positive
12451              * (which signals unsigned) base, causes, for C-ish use, the
12452              * va_arg to be interpreted as as unsigned int, when it's
12453              * actually signed, which will convert -ve values to high +ve
12454              * values. Note that unlike the libc %c, values > 255 will
12455              * convert to high unicode points rather than being truncated
12456              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12457              * will again convert -ve args to high -ve values.
12458              */
12459             intsize = 0;
12460             base = 1; /* special value that indicates we're doing a 'c' */
12461             goto get_int_arg_val;
12462
12463         case 'D':
12464 #ifdef IV_IS_QUAD
12465             intsize = 'q';
12466 #else
12467             intsize = 'l';
12468 #endif
12469             base = -10;
12470             goto get_int_arg_val;
12471
12472         case 'd':
12473             /* probably just a plain %d, but it might be the start of the
12474              * special UTF8f format, which usually looks something like
12475              * "%d%lu%4p" (the lu may vary by platform)
12476              */
12477             assert((UTF8f)[0] == 'd');
12478             assert((UTF8f)[1] == '%');
12479
12480              if (   args              /* UTF8f only valid for C-ish sprintf */
12481                  && q == fmtstart + 1 /* plain %d, not %....d */
12482                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12483                  && *q == '%'
12484                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12485             {
12486                 /* The argument has already gone through cBOOL, so the cast
12487                    is safe. */
12488                 is_utf8 = (bool)va_arg(*args, int);
12489                 elen = va_arg(*args, UV);
12490                 /* if utf8 length is larger than 0x7ffff..., then it might
12491                  * have been a signed value that wrapped */
12492                 if (elen  > ((~(STRLEN)0) >> 1)) {
12493                     assert(0); /* in DEBUGGING build we want to crash */
12494                     elen = 0; /* otherwise we want to treat this as an empty string */
12495                 }
12496                 eptr = va_arg(*args, char *);
12497                 q += sizeof(UTF8f) - 2;
12498                 goto string;
12499             }
12500
12501             /* FALLTHROUGH */
12502         case 'i':
12503             base = -10;
12504             goto get_int_arg_val;
12505
12506         case 'U':
12507 #ifdef IV_IS_QUAD
12508             intsize = 'q';
12509 #else
12510             intsize = 'l';
12511 #endif
12512             /* FALLTHROUGH */
12513         case 'u':
12514             base = 10;
12515             goto get_int_arg_val;
12516
12517         case 'B':
12518         case 'b':
12519             base = 2;
12520             goto get_int_arg_val;
12521
12522         case 'O':
12523 #ifdef IV_IS_QUAD
12524             intsize = 'q';
12525 #else
12526             intsize = 'l';
12527 #endif
12528             /* FALLTHROUGH */
12529         case 'o':
12530             base = 8;
12531             goto get_int_arg_val;
12532
12533         case 'X':
12534         case 'x':
12535             base = 16;
12536
12537           get_int_arg_val:
12538
12539             if (vectorize) {
12540                 STRLEN ulen;
12541                 SV *vecsv;
12542
12543                 if (base < 0) {
12544                     base = -base;
12545                     if (plus)
12546                          esignbuf[esignlen++] = plus;
12547                 }
12548
12549                 /* initialise the vector string to iterate over */
12550
12551                 vecsv = args ? va_arg(*args, SV*) : argsv;
12552
12553                 /* if this is a version object, we need to convert
12554                  * back into v-string notation and then let the
12555                  * vectorize happen normally
12556                  */
12557                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12558                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12559                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12560                         "vector argument not supported with alpha versions");
12561                         vecsv = &PL_sv_no;
12562                     }
12563                     else {
12564                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12565                         vecsv = sv_newmortal();
12566                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12567                                      vecsv);
12568                     }
12569                 }
12570                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12571                 vec_utf8 = DO_UTF8(vecsv);
12572
12573               /* This is the re-entry point for when we're iterating
12574                * over the individual characters of a vector arg */
12575               vector:
12576                 if (!veclen)
12577                     goto done_valid_conversion;
12578                 if (vec_utf8)
12579                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12580                                         UTF8_ALLOW_ANYUV);
12581                 else {
12582                     uv = *vecstr;
12583                     ulen = 1;
12584                 }
12585                 vecstr += ulen;
12586                 veclen -= ulen;
12587             }
12588             else {
12589                 /* test arg for inf/nan. This can trigger an unwanted
12590                  * 'str' overload, so manually force 'num' overload first
12591                  * if necessary */
12592                 if (argsv) {
12593                     SvGETMAGIC(argsv);
12594                     if (UNLIKELY(SvAMAGIC(argsv)))
12595                         argsv = sv_2num(argsv);
12596                     if (UNLIKELY(isinfnansv(argsv)))
12597                         goto handle_infnan_argsv;
12598                 }
12599
12600                 if (base < 0) {
12601                     /* signed int type */
12602                     IV iv;
12603                     base = -base;
12604                     if (args) {
12605                         switch (intsize) {
12606                         case 'c':  iv = (char)va_arg(*args, int);  break;
12607                         case 'h':  iv = (short)va_arg(*args, int); break;
12608                         case 'l':  iv = va_arg(*args, long);       break;
12609                         case 'V':  iv = va_arg(*args, IV);         break;
12610                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12611 #ifdef HAS_PTRDIFF_T
12612                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12613 #endif
12614                         default:   iv = va_arg(*args, int);        break;
12615 #ifdef I_STDINT
12616                         case 'j':  iv = va_arg(*args, intmax_t);   break;
12617 #endif
12618                         case 'q':
12619 #if IVSIZE >= 8
12620                                    iv = va_arg(*args, Quad_t);     break;
12621 #else
12622                                    goto unknown;
12623 #endif
12624                         }
12625                     }
12626                     else {
12627                         /* assign to tiv then cast to iv to work around
12628                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12629                         IV tiv = SvIV_nomg(argsv);
12630                         switch (intsize) {
12631                         case 'c':  iv = (char)tiv;   break;
12632                         case 'h':  iv = (short)tiv;  break;
12633                         case 'l':  iv = (long)tiv;   break;
12634                         case 'V':
12635                         default:   iv = tiv;         break;
12636                         case 'q':
12637 #if IVSIZE >= 8
12638                                    iv = (Quad_t)tiv; break;
12639 #else
12640                                    goto unknown;
12641 #endif
12642                         }
12643                     }
12644
12645                     /* now convert iv to uv */
12646                     if (iv >= 0) {
12647                         uv = iv;
12648                         if (plus)
12649                             esignbuf[esignlen++] = plus;
12650                     }
12651                     else {
12652                         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12653                         esignbuf[esignlen++] = '-';
12654                     }
12655                 }
12656                 else {
12657                     /* unsigned int type */
12658                     if (args) {
12659                         switch (intsize) {
12660                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12661                                   break;
12662                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12663                                   break;
12664                         case 'l': uv = va_arg(*args, unsigned long); break;
12665                         case 'V': uv = va_arg(*args, UV);            break;
12666                         case 'z': uv = va_arg(*args, Size_t);        break;
12667 #ifdef HAS_PTRDIFF_T
12668                                   /* will sign extend, but there is no
12669                                    * uptrdiff_t, so oh well */
12670                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12671 #endif
12672 #ifdef I_STDINT
12673                         case 'j': uv = va_arg(*args, uintmax_t);     break;
12674 #endif
12675                         default:  uv = va_arg(*args, unsigned);      break;
12676                         case 'q':
12677 #if IVSIZE >= 8
12678                                   uv = va_arg(*args, Uquad_t);       break;
12679 #else
12680                                   goto unknown;
12681 #endif
12682                         }
12683                     }
12684                     else {
12685                         /* assign to tiv then cast to iv to work around
12686                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12687                         UV tuv = SvUV_nomg(argsv);
12688                         switch (intsize) {
12689                         case 'c': uv = (unsigned char)tuv;  break;
12690                         case 'h': uv = (unsigned short)tuv; break;
12691                         case 'l': uv = (unsigned long)tuv;  break;
12692                         case 'V':
12693                         default:  uv = tuv;                 break;
12694                         case 'q':
12695 #if IVSIZE >= 8
12696                                   uv = (Uquad_t)tuv;        break;
12697 #else
12698                                   goto unknown;
12699 #endif
12700                         }
12701                     }
12702                 }
12703             }
12704
12705         do_integer:
12706             {
12707                 char *ptr = ebuf + sizeof ebuf;
12708                 unsigned dig;
12709                 zeros = 0;
12710
12711                 switch (base) {
12712                 case 16:
12713                     {
12714                     const char * const p =
12715                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12716
12717                         do {
12718                             dig = uv & 15;
12719                             *--ptr = p[dig];
12720                         } while (uv >>= 4);
12721                         if (alt && *ptr != '0') {
12722                             esignbuf[esignlen++] = '0';
12723                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12724                         }
12725                         break;
12726                     }
12727                 case 8:
12728                     do {
12729                         dig = uv & 7;
12730                         *--ptr = '0' + dig;
12731                     } while (uv >>= 3);
12732                     if (alt && *ptr != '0')
12733                         *--ptr = '0';
12734                     break;
12735                 case 2:
12736                     do {
12737                         dig = uv & 1;
12738                         *--ptr = '0' + dig;
12739                     } while (uv >>= 1);
12740                     if (alt && *ptr != '0') {
12741                         esignbuf[esignlen++] = '0';
12742                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12743                     }
12744                     break;
12745
12746                 case 1:
12747                     /* special-case: base 1 indicates a 'c' format:
12748                      * we use the common code for extracting a uv,
12749                      * but handle that value differently here than
12750                      * all the other int types */
12751                     if ((uv > 255 ||
12752                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12753                         && !IN_BYTES)
12754                     {
12755                         assert(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12756                         eptr = ebuf;
12757                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12758                         is_utf8 = TRUE;
12759                     }
12760                     else {
12761                         eptr = ebuf;
12762                         ebuf[0] = (char)uv;
12763                         elen = 1;
12764                     }
12765                     goto string;
12766
12767                 default:                /* it had better be ten or less */
12768                     do {
12769                         dig = uv % base;
12770                         *--ptr = '0' + dig;
12771                     } while (uv /= base);
12772                     break;
12773                 }
12774                 elen = (ebuf + sizeof ebuf) - ptr;
12775                 eptr = ptr;
12776                 if (has_precis) {
12777                     if (precis > elen)
12778                         zeros = precis - elen;
12779                     else if (precis == 0 && elen == 1 && *eptr == '0'
12780                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12781                         elen = 0;
12782
12783                     /* a precision nullifies the 0 flag. */
12784                     fill = FALSE;
12785                 }
12786             }
12787             break;
12788
12789             /* FLOATING POINT */
12790
12791         case 'F':
12792             c = 'f';            /* maybe %F isn't supported here */
12793             /* FALLTHROUGH */
12794         case 'e': case 'E':
12795         case 'f':
12796         case 'g': case 'G':
12797         case 'a': case 'A':
12798
12799         {
12800             STRLEN float_need; /* what PL_efloatsize needs to become */
12801             bool hexfp;        /* hexadecimal floating point? */
12802
12803             vcatpvfn_long_double_t fv;
12804             NV                     nv;
12805
12806             /* This is evil, but floating point is even more evil */
12807
12808             /* for SV-style calling, we can only get NV
12809                for C-style calling, we assume %f is double;
12810                for simplicity we allow any of %Lf, %llf, %qf for long double
12811             */
12812             switch (intsize) {
12813             case 'V':
12814 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12815                 intsize = 'q';
12816 #endif
12817                 break;
12818 /* [perl #20339] - we should accept and ignore %lf rather than die */
12819             case 'l':
12820                 /* FALLTHROUGH */
12821             default:
12822 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12823                 intsize = args ? 0 : 'q';
12824 #endif
12825                 break;
12826             case 'q':
12827 #if defined(HAS_LONG_DOUBLE)
12828                 break;
12829 #else
12830                 /* FALLTHROUGH */
12831 #endif
12832             case 'c':
12833             case 'h':
12834             case 'z':
12835             case 't':
12836             case 'j':
12837                 goto unknown;
12838             }
12839
12840             /* Now we need (long double) if intsize == 'q', else (double). */
12841             if (args) {
12842                 /* Note: do not pull NVs off the va_list with va_arg()
12843                  * (pull doubles instead) because if you have a build
12844                  * with long doubles, you would always be pulling long
12845                  * doubles, which would badly break anyone using only
12846                  * doubles (i.e. the majority of builds). In other
12847                  * words, you cannot mix doubles and long doubles.
12848                  * The only case where you can pull off long doubles
12849                  * is when the format specifier explicitly asks so with
12850                  * e.g. "%Lg". */
12851 #ifdef USE_QUADMATH
12852                 fv = intsize == 'q' ?
12853                     va_arg(*args, NV) : va_arg(*args, double);
12854                 nv = fv;
12855 #elif LONG_DOUBLESIZE > DOUBLESIZE
12856                 if (intsize == 'q') {
12857                     fv = va_arg(*args, long double);
12858                     nv = fv;
12859                 } else {
12860                     nv = va_arg(*args, double);
12861                     VCATPVFN_NV_TO_FV(nv, fv);
12862                 }
12863 #else
12864                 nv = va_arg(*args, double);
12865                 fv = nv;
12866 #endif
12867             }
12868             else
12869             {
12870                 SvGETMAGIC(argsv);
12871                 /* we jump here if an int-ish format encountered an
12872                  * infinite/Nan argsv. After setting nv/fv, it falls
12873                  * into the isinfnan block which follows */
12874               handle_infnan_argsv:
12875                 nv = SvNV_nomg(argsv);
12876                 VCATPVFN_NV_TO_FV(nv, fv);
12877             }
12878
12879             if (Perl_isinfnan(nv)) {
12880                 if (c == 'c')
12881                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12882                            SvNV_nomg(argsv), (int)c);
12883
12884                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12885                 assert(elen);
12886                 eptr = ebuf;
12887                 zeros     = 0;
12888                 esignlen  = 0;
12889                 dotstrlen = 0;
12890                 break;
12891             }
12892
12893             /* special-case "%.0f" */
12894             if (   c == 'f'
12895                 && !precis
12896                 && has_precis
12897                 && !(width || left || plus || alt)
12898                 && !fill
12899                 && intsize != 'q'
12900                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12901             )
12902                 goto float_concat;
12903
12904             /* Determine the buffer size needed for the various
12905              * floating-point formats.
12906              *
12907              * The basic possibilities are:
12908              *
12909              *               <---P--->
12910              *    %f 1111111.123456789
12911              *    %e       1.111111123e+06
12912              *    %a     0x1.0f4471f9bp+20
12913              *    %g        1111111.12
12914              *    %g        1.11111112e+15
12915              *
12916              * where P is the value of the precision in the format, or 6
12917              * if not specified. Note the two possible output formats of
12918              * %g; in both cases the number of significant digits is <=
12919              * precision.
12920              *
12921              * For most of the format types the maximum buffer size needed
12922              * is precision, plus: any leading 1 or 0x1, the radix
12923              * point, and an exponent.  The difficult one is %f: for a
12924              * large positive exponent it can have many leading digits,
12925              * which needs to be calculated specially. Also %a is slightly
12926              * different in that in the absence of a specified precision,
12927              * it uses as many digits as necessary to distinguish
12928              * different values.
12929              *
12930              * First, here are the constant bits. For ease of calculation
12931              * we over-estimate the needed buffer size, for example by
12932              * assuming all formats have an exponent and a leading 0x1.
12933              *
12934              * Also for production use, add a little extra overhead for
12935              * safety's sake. Under debugging don't, as it means we're
12936              * more likely to quickly spot issues during development.
12937              */
12938
12939             float_need =     1  /* possible unary minus */
12940                           +  4  /* "0x1" plus very unlikely carry */
12941                           +  1  /* default radix point '.' */
12942                           +  2  /* "e-", "p+" etc */
12943                           +  6  /* exponent: up to 16383 (quad fp) */
12944 #ifndef DEBUGGING
12945                           + 20  /* safety net */
12946 #endif
12947                           +  1; /* \0 */
12948
12949
12950             /* determine the radix point len, e.g. length(".") in "1.2" */
12951 #ifdef USE_LOCALE_NUMERIC
12952             /* note that we may either explicitly use PL_numeric_radix_sv
12953              * below, or implicitly, via an snprintf() variant.
12954              * Note also things like ps_AF.utf8 which has
12955              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
12956             if (!lc_numeric_set) {
12957                 /* only set once and reuse in-locale value on subsequent
12958                  * iterations.
12959                  * XXX what happens if we die in an eval?
12960                  */
12961                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12962                 lc_numeric_set = TRUE;
12963             }
12964
12965             if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12966                 /* this can't wrap unless PL_numeric_radix_sv is a string
12967                  * consuming virtually all the 32-bit or 64-bit address
12968                  * space
12969                  */
12970                 float_need += (SvCUR(PL_numeric_radix_sv) - 1);
12971
12972                 /* floating-point formats only get utf8 if the radix point
12973                  * is utf8. All other characters in the string are < 128
12974                  * and so can be safely appended to both a non-utf8 and utf8
12975                  * string as-is.
12976                  * Note that this will convert the output to utf8 even if
12977                  * the radix point didn't get output.
12978                  */
12979                 if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
12980                     sv_utf8_upgrade(sv);
12981                     has_utf8 = TRUE;
12982                 }
12983             }
12984 #endif
12985
12986             hexfp = FALSE;
12987
12988             if (isALPHA_FOLD_EQ(c, 'f')) {
12989                 /* Determine how many digits before the radix point
12990                  * might be emitted.  frexp() (or frexpl) has some
12991                  * unspecified behaviour for nan/inf/-inf, so lucky we've
12992                  * already handled them above */
12993                 STRLEN digits;
12994                 int i = PERL_INT_MIN;
12995                 (void)Perl_frexp((NV)fv, &i);
12996                 if (i == PERL_INT_MIN)
12997                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
12998
12999                 if (i > 0) {
13000                     digits = BIT_DIGITS(i);
13001                     /* this can't overflow. 'digits' will only be a few
13002                      * thousand even for the largest floating-point types.
13003                      * And up until now float_need is just some small
13004                      * constants plus radix len, which can't be in
13005                      * overflow territory unless the radix SV is consuming
13006                      * over 1/2 the address space */
13007                     assert(float_need < ((STRLEN)~0) - digits);
13008                     float_need += digits;
13009                 }
13010             }
13011             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13012                 hexfp = TRUE;
13013                 if (!has_precis) {
13014                     /* %a in the absence of precision may print as many
13015                      * digits as needed to represent the entire mantissa
13016                      * bit pattern.
13017                      * This estimate seriously overshoots in most cases,
13018                      * but better the undershooting.  Firstly, all bytes
13019                      * of the NV are not mantissa, some of them are
13020                      * exponent.  Secondly, for the reasonably common
13021                      * long doubles case, the "80-bit extended", two
13022                      * or six bytes of the NV are unused. Also, we'll
13023                      * still pick up an extra +6 from the default
13024                      * precision calculation below. */
13025                     STRLEN digits =
13026 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13027                         /* For the "double double", we need more.
13028                          * Since each double has their own exponent, the
13029                          * doubles may float (haha) rather far from each
13030                          * other, and the number of required bits is much
13031                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13032                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13033                          *
13034                          * Need 2 hexdigits for each byte. */
13035                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13036 #else
13037                         NVSIZE * 2; /* 2 hexdigits for each byte */
13038 #endif
13039                     /* see "this can't overflow" comment above */
13040                     assert(float_need < ((STRLEN)~0) - digits);
13041                     float_need += digits;
13042                 }
13043             }
13044             /* special-case "%.<number>g" if it will fit in ebuf */
13045             else if (c == 'g'
13046                 && precis   /* See earlier comment about buggy Gconvert
13047                                when digits, aka precis, is 0  */
13048                 && has_precis
13049                 /* check, in manner not involving wrapping, that it will
13050                  * fit in ebuf  */
13051                 && float_need < sizeof(ebuf)
13052                 && sizeof(ebuf) - float_need > precis
13053                 && !(width || left || plus || alt)
13054                 && !fill
13055                 && intsize != 'q'
13056             ) {
13057                 SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
13058                 elen = strlen(ebuf);
13059                 eptr = ebuf;
13060                 goto float_concat;
13061             }
13062
13063
13064             {
13065                 STRLEN pr = has_precis ? precis : 6; /* known default */
13066                 /* this probably can't wrap, since precis is limited
13067                  * to 1/4 address space size, but better safe than sorry
13068                  */
13069                 if (float_need >= ((STRLEN)~0) - pr)
13070                     croak_memory_wrap();
13071                 float_need += pr;
13072             }
13073
13074             if (float_need < width)
13075                 float_need = width;
13076
13077             if (PL_efloatsize <= float_need) {
13078                 /* PL_efloatbuf should be at least 1 greater than
13079                  * float_need to allow a trailing \0 to be returned by
13080                  * snprintf().  If we need to grow, overgrow for the
13081                  * benefit of future generations */
13082                 const STRLEN extra = 0x20;
13083                 if (float_need >= ((STRLEN)~0) - extra)
13084                     croak_memory_wrap();
13085                 float_need += extra;
13086                 Safefree(PL_efloatbuf);
13087                 PL_efloatsize = float_need;
13088                 Newx(PL_efloatbuf, PL_efloatsize, char);
13089                 PL_efloatbuf[0] = '\0';
13090             }
13091
13092             if (UNLIKELY(hexfp)) {
13093                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13094                                 nv, fv, has_precis, precis, width,
13095                                 alt, plus, left, fill);
13096             }
13097             else {
13098                 char *ptr = ebuf + sizeof ebuf;
13099                 *--ptr = '\0';
13100                 *--ptr = c;
13101 #if defined(USE_QUADMATH)
13102                 if (intsize == 'q') {
13103                     /* "g" -> "Qg" */
13104                     *--ptr = 'Q';
13105                 }
13106                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13107 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13108                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13109                  * not USE_LONG_DOUBLE and NVff.  In other words,
13110                  * this needs to work without USE_LONG_DOUBLE. */
13111                 if (intsize == 'q') {
13112                     /* Copy the one or more characters in a long double
13113                      * format before the 'base' ([efgEFG]) character to
13114                      * the format string. */
13115                     static char const ldblf[] = PERL_PRIfldbl;
13116                     char const *p = ldblf + sizeof(ldblf) - 3;
13117                     while (p >= ldblf) { *--ptr = *p--; }
13118                 }
13119 #endif
13120                 if (has_precis) {
13121                     base = precis;
13122                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13123                     *--ptr = '.';
13124                 }
13125                 if (width) {
13126                     base = width;
13127                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13128                 }
13129                 if (fill)
13130                     *--ptr = '0';
13131                 if (left)
13132                     *--ptr = '-';
13133                 if (plus)
13134                     *--ptr = plus;
13135                 if (alt)
13136                     *--ptr = '#';
13137                 *--ptr = '%';
13138
13139                 /* No taint.  Otherwise we are in the strange situation
13140                  * where printf() taints but print($float) doesn't.
13141                  * --jhi */
13142
13143                 /* hopefully the above makes ptr a very constrained format
13144                  * that is safe to use, even though it's not literal */
13145                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
13146 #ifdef USE_QUADMATH
13147                 {
13148                     const char* qfmt = quadmath_format_single(ptr);
13149                     if (!qfmt)
13150                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13151                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13152                                              qfmt, nv);
13153                     if ((IV)elen == -1) {
13154                         if (qfmt != ptr)
13155                             SAVEFREEPV(qfmt);
13156                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
13157                     }
13158                     if (qfmt != ptr)
13159                         Safefree(qfmt);
13160                 }
13161 #elif defined(HAS_LONG_DOUBLE)
13162                 elen = ((intsize == 'q')
13163                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13164                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
13165 #else
13166                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
13167 #endif
13168                 GCC_DIAG_RESTORE;
13169             }
13170
13171             eptr = PL_efloatbuf;
13172
13173           float_concat:
13174
13175             /* Since floating-point formats do their own formatting and
13176              * padding, we skip the main block of code at the end of this
13177              * loop which handles appending eptr to sv, and do our own
13178              * stripped-down version */
13179
13180             assert(!zeros);
13181             assert(!esignlen);
13182             assert(elen);
13183             assert(elen >= width);
13184
13185             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13186
13187             goto done_valid_conversion;
13188         }
13189
13190             /* SPECIAL */
13191
13192         case 'n':
13193             {
13194                 STRLEN len;
13195                 /* XXX ideally we should warn if any flags etc have been
13196                  * set, e.g. "%-4.5n" */
13197                 /* XXX if sv was originally non-utf8 with a char in the
13198                  * range 0x80-0xff, then if it got upgraded, we should
13199                  * calculate char len rather than byte len here */
13200                 len = SvCUR(sv) - origlen;
13201                 if (args) {
13202                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13203
13204                     switch (intsize) {
13205                     case 'c':  *(va_arg(*args, char*))      = i; break;
13206                     case 'h':  *(va_arg(*args, short*))     = i; break;
13207                     default:   *(va_arg(*args, int*))       = i; break;
13208                     case 'l':  *(va_arg(*args, long*))      = i; break;
13209                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13210                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13211 #ifdef HAS_PTRDIFF_T
13212                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13213 #endif
13214 #ifdef I_STDINT
13215                     case 'j':  *(va_arg(*args, intmax_t*))  = i; break;
13216 #endif
13217                     case 'q':
13218 #if IVSIZE >= 8
13219                                *(va_arg(*args, Quad_t*))    = i; break;
13220 #else
13221                                goto unknown;
13222 #endif
13223                     }
13224                 }
13225                 else {
13226                     if (arg_missing)
13227                         Perl_croak_nocontext(
13228                             "Missing argument for %%n in %s",
13229                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13230                     sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)len);
13231                 }
13232                 goto done_valid_conversion;
13233             }
13234
13235             /* UNKNOWN */
13236
13237         default:
13238       unknown:
13239             if (!args
13240                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13241                 && ckWARN(WARN_PRINTF))
13242             {
13243                 SV * const msg = sv_newmortal();
13244                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13245                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13246                 if (fmtstart < patend) {
13247                     const char * const fmtend = q < patend ? q : patend;
13248                     const char * f;
13249                     sv_catpvs(msg, "\"%");
13250                     for (f = fmtstart; f < fmtend; f++) {
13251                         if (isPRINT(*f)) {
13252                             sv_catpvn_nomg(msg, f, 1);
13253                         } else {
13254                             Perl_sv_catpvf(aTHX_ msg,
13255                                            "\\%03" UVof, (UV)*f & 0xFF);
13256                         }
13257                     }
13258                     sv_catpvs(msg, "\"");
13259                 } else {
13260                     sv_catpvs(msg, "end of string");
13261                 }
13262                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13263             }
13264
13265             /* mangled format: output the '%', then continue from the
13266              * character following that */
13267             sv_catpvn_nomg(sv, fmtstart-1, 1);
13268             q = fmtstart;
13269             svix = osvix;
13270             /* Any "redundant arg" warning from now onwards will probably
13271              * just be misleading, so don't bother. */
13272             no_redundant_warning = TRUE;
13273             continue;   /* not "break" */
13274         }
13275
13276         if (is_utf8 != has_utf8) {
13277             if (is_utf8) {
13278                 if (SvCUR(sv))
13279                     sv_utf8_upgrade(sv);
13280             }
13281             else {
13282                 const STRLEN old_elen = elen;
13283                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13284                 sv_utf8_upgrade(nsv);
13285                 eptr = SvPVX_const(nsv);
13286                 elen = SvCUR(nsv);
13287
13288                 if (width) { /* fudge width (can't fudge elen) */
13289                     width += elen - old_elen;
13290                 }
13291                 is_utf8 = TRUE;
13292             }
13293         }
13294
13295
13296         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13297
13298         {
13299             STRLEN need, have, gap;
13300             STRLEN i;
13301             char *s;
13302
13303             /* signed value that's wrapped? */
13304             assert(elen  <= ((~(STRLEN)0) >> 1));
13305
13306             /* if zeros is non-zero, then it represents filler between
13307              * elen and precis. So adding elen and zeros together will
13308              * always be <= precis, and the addition can never wrap */
13309             assert(!zeros || (precis > elen && precis - elen == zeros));
13310             have = elen + zeros;
13311
13312             if (have >= (((STRLEN)~0) - esignlen))
13313                 croak_memory_wrap();
13314             have += esignlen;
13315
13316             need = (have > width ? have : width);
13317             gap = need - have;
13318
13319             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13320                 croak_memory_wrap();
13321             need += (SvCUR(sv) + 1);
13322
13323             SvGROW(sv, need);
13324
13325             s = SvEND(sv);
13326
13327             if (left) {
13328                 for (i = 0; i < esignlen; i++)
13329                     *s++ = esignbuf[i];
13330                 for (i = zeros; i; i--)
13331                     *s++ = '0';
13332                 Copy(eptr, s, elen, char);
13333                 s += elen;
13334                 for (i = gap; i; i--)
13335                     *s++ = ' ';
13336             }
13337             else {
13338                 if (fill) {
13339                     for (i = 0; i < esignlen; i++)
13340                         *s++ = esignbuf[i];
13341                     assert(!zeros);
13342                     zeros = gap;
13343                 }
13344                 else {
13345                     for (i = gap; i; i--)
13346                         *s++ = ' ';
13347                     for (i = 0; i < esignlen; i++)
13348                         *s++ = esignbuf[i];
13349                 }
13350
13351                 for (i = zeros; i; i--)
13352                     *s++ = '0';
13353                 Copy(eptr, s, elen, char);
13354                 s += elen;
13355             }
13356
13357             *s = '\0';
13358             SvCUR_set(sv, s - SvPVX_const(sv));
13359
13360             if (is_utf8)
13361                 has_utf8 = TRUE;
13362             if (has_utf8)
13363                 SvUTF8_on(sv);
13364         }
13365
13366         if (vectorize && veclen) {
13367             /* we append the vector separator separately since %v isn't
13368              * very common: don't slow down the general case by adding
13369              * dotstrlen to need etc */
13370             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13371             esignlen = 0;
13372             goto vector; /* do next iteration */
13373         }
13374
13375       done_valid_conversion:
13376
13377         if (arg_missing)
13378             S_warn_vcatpvfn_missing_argument(aTHX);
13379     }
13380
13381     /* Now that we've consumed all our printf format arguments (svix)
13382      * do we have things left on the stack that we didn't use?
13383      */
13384     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13385         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13386                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13387     }
13388
13389     SvTAINT(sv);
13390
13391     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
13392                                each iteration. */
13393 }
13394
13395 /* =========================================================================
13396
13397 =head1 Cloning an interpreter
13398
13399 =cut
13400
13401 All the macros and functions in this section are for the private use of
13402 the main function, perl_clone().
13403
13404 The foo_dup() functions make an exact copy of an existing foo thingy.
13405 During the course of a cloning, a hash table is used to map old addresses
13406 to new addresses.  The table is created and manipulated with the
13407 ptr_table_* functions.
13408
13409  * =========================================================================*/
13410
13411
13412 #if defined(USE_ITHREADS)
13413
13414 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13415 #ifndef GpREFCNT_inc
13416 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13417 #endif
13418
13419
13420 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13421    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13422    If this changes, please unmerge ss_dup.
13423    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13424 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13425 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13426 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13427 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13428 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13429 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13430 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13431 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13432 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13433 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13434 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13435 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13436 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13437
13438 /* clone a parser */
13439
13440 yy_parser *
13441 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13442 {
13443     yy_parser *parser;
13444
13445     PERL_ARGS_ASSERT_PARSER_DUP;
13446
13447     if (!proto)
13448         return NULL;
13449
13450     /* look for it in the table first */
13451     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13452     if (parser)
13453         return parser;
13454
13455     /* create anew and remember what it is */
13456     Newxz(parser, 1, yy_parser);
13457     ptr_table_store(PL_ptr_table, proto, parser);
13458
13459     /* XXX these not yet duped */
13460     parser->old_parser = NULL;
13461     parser->stack = NULL;
13462     parser->ps = NULL;
13463     parser->stack_max1 = 0;
13464     /* XXX parser->stack->state = 0; */
13465
13466     /* XXX eventually, just Copy() most of the parser struct ? */
13467
13468     parser->lex_brackets = proto->lex_brackets;
13469     parser->lex_casemods = proto->lex_casemods;
13470     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13471                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13472     parser->lex_casestack = savepvn(proto->lex_casestack,
13473                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13474     parser->lex_defer   = proto->lex_defer;
13475     parser->lex_dojoin  = proto->lex_dojoin;
13476     parser->lex_formbrack = proto->lex_formbrack;
13477     parser->lex_inpat   = proto->lex_inpat;
13478     parser->lex_inwhat  = proto->lex_inwhat;
13479     parser->lex_op      = proto->lex_op;
13480     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13481     parser->lex_starts  = proto->lex_starts;
13482     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13483     parser->multi_close = proto->multi_close;
13484     parser->multi_open  = proto->multi_open;
13485     parser->multi_start = proto->multi_start;
13486     parser->multi_end   = proto->multi_end;
13487     parser->preambled   = proto->preambled;
13488     parser->lex_super_state = proto->lex_super_state;
13489     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13490     parser->lex_sub_op  = proto->lex_sub_op;
13491     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13492     parser->linestr     = sv_dup_inc(proto->linestr, param);
13493     parser->expect      = proto->expect;
13494     parser->copline     = proto->copline;
13495     parser->last_lop_op = proto->last_lop_op;
13496     parser->lex_state   = proto->lex_state;
13497     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13498     /* rsfp_filters entries have fake IoDIRP() */
13499     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13500     parser->in_my       = proto->in_my;
13501     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13502     parser->error_count = proto->error_count;
13503     parser->sig_elems   = proto->sig_elems;
13504     parser->sig_optelems= proto->sig_optelems;
13505     parser->sig_slurpy  = proto->sig_slurpy;
13506     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13507     parser->linestr     = sv_dup_inc(proto->linestr, param);
13508
13509     {
13510         char * const ols = SvPVX(proto->linestr);
13511         char * const ls  = SvPVX(parser->linestr);
13512
13513         parser->bufptr      = ls + (proto->bufptr >= ols ?
13514                                     proto->bufptr -  ols : 0);
13515         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13516                                     proto->oldbufptr -  ols : 0);
13517         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13518                                     proto->oldoldbufptr -  ols : 0);
13519         parser->linestart   = ls + (proto->linestart >= ols ?
13520                                     proto->linestart -  ols : 0);
13521         parser->last_uni    = ls + (proto->last_uni >= ols ?
13522                                     proto->last_uni -  ols : 0);
13523         parser->last_lop    = ls + (proto->last_lop >= ols ?
13524                                     proto->last_lop -  ols : 0);
13525
13526         parser->bufend      = ls + SvCUR(parser->linestr);
13527     }
13528
13529     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13530
13531
13532     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13533     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13534     parser->nexttoke    = proto->nexttoke;
13535
13536     /* XXX should clone saved_curcop here, but we aren't passed
13537      * proto_perl; so do it in perl_clone_using instead */
13538
13539     return parser;
13540 }
13541
13542
13543 /* duplicate a file handle */
13544
13545 PerlIO *
13546 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13547 {
13548     PerlIO *ret;
13549
13550     PERL_ARGS_ASSERT_FP_DUP;
13551     PERL_UNUSED_ARG(type);
13552
13553     if (!fp)
13554         return (PerlIO*)NULL;
13555
13556     /* look for it in the table first */
13557     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13558     if (ret)
13559         return ret;
13560
13561     /* create anew and remember what it is */
13562 #ifdef __amigaos4__
13563     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13564 #else
13565     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13566 #endif
13567     ptr_table_store(PL_ptr_table, fp, ret);
13568     return ret;
13569 }
13570
13571 /* duplicate a directory handle */
13572
13573 DIR *
13574 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13575 {
13576     DIR *ret;
13577
13578 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13579     DIR *pwd;
13580     const Direntry_t *dirent;
13581     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13582     char *name = NULL;
13583     STRLEN len = 0;
13584     long pos;
13585 #endif
13586
13587     PERL_UNUSED_CONTEXT;
13588     PERL_ARGS_ASSERT_DIRP_DUP;
13589
13590     if (!dp)
13591         return (DIR*)NULL;
13592
13593     /* look for it in the table first */
13594     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13595     if (ret)
13596         return ret;
13597
13598 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13599
13600     PERL_UNUSED_ARG(param);
13601
13602     /* create anew */
13603
13604     /* open the current directory (so we can switch back) */
13605     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13606
13607     /* chdir to our dir handle and open the present working directory */
13608     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13609         PerlDir_close(pwd);
13610         return (DIR *)NULL;
13611     }
13612     /* Now we should have two dir handles pointing to the same dir. */
13613
13614     /* Be nice to the calling code and chdir back to where we were. */
13615     /* XXX If this fails, then what? */
13616     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13617
13618     /* We have no need of the pwd handle any more. */
13619     PerlDir_close(pwd);
13620
13621 #ifdef DIRNAMLEN
13622 # define d_namlen(d) (d)->d_namlen
13623 #else
13624 # define d_namlen(d) strlen((d)->d_name)
13625 #endif
13626     /* Iterate once through dp, to get the file name at the current posi-
13627        tion. Then step back. */
13628     pos = PerlDir_tell(dp);
13629     if ((dirent = PerlDir_read(dp))) {
13630         len = d_namlen(dirent);
13631         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13632             /* If the len is somehow magically longer than the
13633              * maximum length of the directory entry, even though
13634              * we could fit it in a buffer, we could not copy it
13635              * from the dirent.  Bail out. */
13636             PerlDir_close(ret);
13637             return (DIR*)NULL;
13638         }
13639         if (len <= sizeof smallbuf) name = smallbuf;
13640         else Newx(name, len, char);
13641         Move(dirent->d_name, name, len, char);
13642     }
13643     PerlDir_seek(dp, pos);
13644
13645     /* Iterate through the new dir handle, till we find a file with the
13646        right name. */
13647     if (!dirent) /* just before the end */
13648         for(;;) {
13649             pos = PerlDir_tell(ret);
13650             if (PerlDir_read(ret)) continue; /* not there yet */
13651             PerlDir_seek(ret, pos); /* step back */
13652             break;
13653         }
13654     else {
13655         const long pos0 = PerlDir_tell(ret);
13656         for(;;) {
13657             pos = PerlDir_tell(ret);
13658             if ((dirent = PerlDir_read(ret))) {
13659                 if (len == (STRLEN)d_namlen(dirent)
13660                     && memEQ(name, dirent->d_name, len)) {
13661                     /* found it */
13662                     PerlDir_seek(ret, pos); /* step back */
13663                     break;
13664                 }
13665                 /* else we are not there yet; keep iterating */
13666             }
13667             else { /* This is not meant to happen. The best we can do is
13668                       reset the iterator to the beginning. */
13669                 PerlDir_seek(ret, pos0);
13670                 break;
13671             }
13672         }
13673     }
13674 #undef d_namlen
13675
13676     if (name && name != smallbuf)
13677         Safefree(name);
13678 #endif
13679
13680 #ifdef WIN32
13681     ret = win32_dirp_dup(dp, param);
13682 #endif
13683
13684     /* pop it in the pointer table */
13685     if (ret)
13686         ptr_table_store(PL_ptr_table, dp, ret);
13687
13688     return ret;
13689 }
13690
13691 /* duplicate a typeglob */
13692
13693 GP *
13694 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13695 {
13696     GP *ret;
13697
13698     PERL_ARGS_ASSERT_GP_DUP;
13699
13700     if (!gp)
13701         return (GP*)NULL;
13702     /* look for it in the table first */
13703     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13704     if (ret)
13705         return ret;
13706
13707     /* create anew and remember what it is */
13708     Newxz(ret, 1, GP);
13709     ptr_table_store(PL_ptr_table, gp, ret);
13710
13711     /* clone */
13712     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13713        on Newxz() to do this for us.  */
13714     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13715     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13716     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13717     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13718     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13719     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13720     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13721     ret->gp_cvgen       = gp->gp_cvgen;
13722     ret->gp_line        = gp->gp_line;
13723     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13724     return ret;
13725 }
13726
13727 /* duplicate a chain of magic */
13728
13729 MAGIC *
13730 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13731 {
13732     MAGIC *mgret = NULL;
13733     MAGIC **mgprev_p = &mgret;
13734
13735     PERL_ARGS_ASSERT_MG_DUP;
13736
13737     for (; mg; mg = mg->mg_moremagic) {
13738         MAGIC *nmg;
13739
13740         if ((param->flags & CLONEf_JOIN_IN)
13741                 && mg->mg_type == PERL_MAGIC_backref)
13742             /* when joining, we let the individual SVs add themselves to
13743              * backref as needed. */
13744             continue;
13745
13746         Newx(nmg, 1, MAGIC);
13747         *mgprev_p = nmg;
13748         mgprev_p = &(nmg->mg_moremagic);
13749
13750         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13751            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13752            from the original commit adding Perl_mg_dup() - revision 4538.
13753            Similarly there is the annotation "XXX random ptr?" next to the
13754            assignment to nmg->mg_ptr.  */
13755         *nmg = *mg;
13756
13757         /* FIXME for plugins
13758         if (nmg->mg_type == PERL_MAGIC_qr) {
13759             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13760         }
13761         else
13762         */
13763         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13764                           ? nmg->mg_type == PERL_MAGIC_backref
13765                                 /* The backref AV has its reference
13766                                  * count deliberately bumped by 1 */
13767                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13768                                                     nmg->mg_obj, param))
13769                                 : sv_dup_inc(nmg->mg_obj, param)
13770                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13771                              nmg->mg_type == PERL_MAGIC_regdata)
13772                                   ? nmg->mg_obj
13773                                   : sv_dup(nmg->mg_obj, param);
13774
13775         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13776             if (nmg->mg_len > 0) {
13777                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13778                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13779                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13780                 {
13781                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13782                     sv_dup_inc_multiple((SV**)(namtp->table),
13783                                         (SV**)(namtp->table), NofAMmeth, param);
13784                 }
13785             }
13786             else if (nmg->mg_len == HEf_SVKEY)
13787                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13788         }
13789         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13790             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13791         }
13792     }
13793     return mgret;
13794 }
13795
13796 #endif /* USE_ITHREADS */
13797
13798 struct ptr_tbl_arena {
13799     struct ptr_tbl_arena *next;
13800     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13801 };
13802
13803 /* create a new pointer-mapping table */
13804
13805 PTR_TBL_t *
13806 Perl_ptr_table_new(pTHX)
13807 {
13808     PTR_TBL_t *tbl;
13809     PERL_UNUSED_CONTEXT;
13810
13811     Newx(tbl, 1, PTR_TBL_t);
13812     tbl->tbl_max        = 511;
13813     tbl->tbl_items      = 0;
13814     tbl->tbl_arena      = NULL;
13815     tbl->tbl_arena_next = NULL;
13816     tbl->tbl_arena_end  = NULL;
13817     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13818     return tbl;
13819 }
13820
13821 #define PTR_TABLE_HASH(ptr) \
13822   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13823
13824 /* map an existing pointer using a table */
13825
13826 STATIC PTR_TBL_ENT_t *
13827 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13828 {
13829     PTR_TBL_ENT_t *tblent;
13830     const UV hash = PTR_TABLE_HASH(sv);
13831
13832     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13833
13834     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13835     for (; tblent; tblent = tblent->next) {
13836         if (tblent->oldval == sv)
13837             return tblent;
13838     }
13839     return NULL;
13840 }
13841
13842 void *
13843 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13844 {
13845     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13846
13847     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13848     PERL_UNUSED_CONTEXT;
13849
13850     return tblent ? tblent->newval : NULL;
13851 }
13852
13853 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13854  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13855  * the core's typical use of ptr_tables in thread cloning. */
13856
13857 void
13858 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13859 {
13860     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13861
13862     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13863     PERL_UNUSED_CONTEXT;
13864
13865     if (tblent) {
13866         tblent->newval = newsv;
13867     } else {
13868         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13869
13870         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13871             struct ptr_tbl_arena *new_arena;
13872
13873             Newx(new_arena, 1, struct ptr_tbl_arena);
13874             new_arena->next = tbl->tbl_arena;
13875             tbl->tbl_arena = new_arena;
13876             tbl->tbl_arena_next = new_arena->array;
13877             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13878         }
13879
13880         tblent = tbl->tbl_arena_next++;
13881
13882         tblent->oldval = oldsv;
13883         tblent->newval = newsv;
13884         tblent->next = tbl->tbl_ary[entry];
13885         tbl->tbl_ary[entry] = tblent;
13886         tbl->tbl_items++;
13887         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13888             ptr_table_split(tbl);
13889     }
13890 }
13891
13892 /* double the hash bucket size of an existing ptr table */
13893
13894 void
13895 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13896 {
13897     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13898     const UV oldsize = tbl->tbl_max + 1;
13899     UV newsize = oldsize * 2;
13900     UV i;
13901
13902     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13903     PERL_UNUSED_CONTEXT;
13904
13905     Renew(ary, newsize, PTR_TBL_ENT_t*);
13906     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13907     tbl->tbl_max = --newsize;
13908     tbl->tbl_ary = ary;
13909     for (i=0; i < oldsize; i++, ary++) {
13910         PTR_TBL_ENT_t **entp = ary;
13911         PTR_TBL_ENT_t *ent = *ary;
13912         PTR_TBL_ENT_t **curentp;
13913         if (!ent)
13914             continue;
13915         curentp = ary + oldsize;
13916         do {
13917             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13918                 *entp = ent->next;
13919                 ent->next = *curentp;
13920                 *curentp = ent;
13921             }
13922             else
13923                 entp = &ent->next;
13924             ent = *entp;
13925         } while (ent);
13926     }
13927 }
13928
13929 /* remove all the entries from a ptr table */
13930 /* Deprecated - will be removed post 5.14 */
13931
13932 void
13933 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13934 {
13935     PERL_UNUSED_CONTEXT;
13936     if (tbl && tbl->tbl_items) {
13937         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13938
13939         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13940
13941         while (arena) {
13942             struct ptr_tbl_arena *next = arena->next;
13943
13944             Safefree(arena);
13945             arena = next;
13946         };
13947
13948         tbl->tbl_items = 0;
13949         tbl->tbl_arena = NULL;
13950         tbl->tbl_arena_next = NULL;
13951         tbl->tbl_arena_end = NULL;
13952     }
13953 }
13954
13955 /* clear and free a ptr table */
13956
13957 void
13958 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13959 {
13960     struct ptr_tbl_arena *arena;
13961
13962     PERL_UNUSED_CONTEXT;
13963
13964     if (!tbl) {
13965         return;
13966     }
13967
13968     arena = tbl->tbl_arena;
13969
13970     while (arena) {
13971         struct ptr_tbl_arena *next = arena->next;
13972
13973         Safefree(arena);
13974         arena = next;
13975     }
13976
13977     Safefree(tbl->tbl_ary);
13978     Safefree(tbl);
13979 }
13980
13981 #if defined(USE_ITHREADS)
13982
13983 void
13984 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13985 {
13986     PERL_ARGS_ASSERT_RVPV_DUP;
13987
13988     assert(!isREGEXP(sstr));
13989     if (SvROK(sstr)) {
13990         if (SvWEAKREF(sstr)) {
13991             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13992             if (param->flags & CLONEf_JOIN_IN) {
13993                 /* if joining, we add any back references individually rather
13994                  * than copying the whole backref array */
13995                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13996             }
13997         }
13998         else
13999             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
14000     }
14001     else if (SvPVX_const(sstr)) {
14002         /* Has something there */
14003         if (SvLEN(sstr)) {
14004             /* Normal PV - clone whole allocated space */
14005             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
14006             /* sstr may not be that normal, but actually copy on write.
14007                But we are a true, independent SV, so:  */
14008             SvIsCOW_off(dstr);
14009         }
14010         else {
14011             /* Special case - not normally malloced for some reason */
14012             if (isGV_with_GP(sstr)) {
14013                 /* Don't need to do anything here.  */
14014             }
14015             else if ((SvIsCOW(sstr))) {
14016                 /* A "shared" PV - clone it as "shared" PV */
14017                 SvPV_set(dstr,
14018                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
14019                                          param)));
14020             }
14021             else {
14022                 /* Some other special case - random pointer */
14023                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
14024             }
14025         }
14026     }
14027     else {
14028         /* Copy the NULL */
14029         SvPV_set(dstr, NULL);
14030     }
14031 }
14032
14033 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14034 static SV **
14035 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14036                       SSize_t items, CLONE_PARAMS *const param)
14037 {
14038     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14039
14040     while (items-- > 0) {
14041         *dest++ = sv_dup_inc(*source++, param);
14042     }
14043
14044     return dest;
14045 }
14046
14047 /* duplicate an SV of any type (including AV, HV etc) */
14048
14049 static SV *
14050 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14051 {
14052     dVAR;
14053     SV *dstr;
14054
14055     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14056
14057     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
14058 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14059         abort();
14060 #endif
14061         return NULL;
14062     }
14063     /* look for it in the table first */
14064     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14065     if (dstr)
14066         return dstr;
14067
14068     if(param->flags & CLONEf_JOIN_IN) {
14069         /** We are joining here so we don't want do clone
14070             something that is bad **/
14071         if (SvTYPE(sstr) == SVt_PVHV) {
14072             const HEK * const hvname = HvNAME_HEK(sstr);
14073             if (hvname) {
14074                 /** don't clone stashes if they already exist **/
14075                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14076                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14077                 ptr_table_store(PL_ptr_table, sstr, dstr);
14078                 return dstr;
14079             }
14080         }
14081         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14082             HV *stash = GvSTASH(sstr);
14083             const HEK * hvname;
14084             if (stash && (hvname = HvNAME_HEK(stash))) {
14085                 /** don't clone GVs if they already exist **/
14086                 SV **svp;
14087                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14088                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14089                 svp = hv_fetch(
14090                         stash, GvNAME(sstr),
14091                         GvNAMEUTF8(sstr)
14092                             ? -GvNAMELEN(sstr)
14093                             :  GvNAMELEN(sstr),
14094                         0
14095                       );
14096                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14097                     ptr_table_store(PL_ptr_table, sstr, *svp);
14098                     return *svp;
14099                 }
14100             }
14101         }
14102     }
14103
14104     /* create anew and remember what it is */
14105     new_SV(dstr);
14106
14107 #ifdef DEBUG_LEAKING_SCALARS
14108     dstr->sv_debug_optype = sstr->sv_debug_optype;
14109     dstr->sv_debug_line = sstr->sv_debug_line;
14110     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14111     dstr->sv_debug_parent = (SV*)sstr;
14112     FREE_SV_DEBUG_FILE(dstr);
14113     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14114 #endif
14115
14116     ptr_table_store(PL_ptr_table, sstr, dstr);
14117
14118     /* clone */
14119     SvFLAGS(dstr)       = SvFLAGS(sstr);
14120     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14121     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14122
14123 #ifdef DEBUGGING
14124     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14125         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14126                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14127 #endif
14128
14129     /* don't clone objects whose class has asked us not to */
14130     if (SvOBJECT(sstr)
14131      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14132     {
14133         SvFLAGS(dstr) = 0;
14134         return dstr;
14135     }
14136
14137     switch (SvTYPE(sstr)) {
14138     case SVt_NULL:
14139         SvANY(dstr)     = NULL;
14140         break;
14141     case SVt_IV:
14142         SET_SVANY_FOR_BODYLESS_IV(dstr);
14143         if(SvROK(sstr)) {
14144             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14145         } else {
14146             SvIV_set(dstr, SvIVX(sstr));
14147         }
14148         break;
14149     case SVt_NV:
14150 #if NVSIZE <= IVSIZE
14151         SET_SVANY_FOR_BODYLESS_NV(dstr);
14152 #else
14153         SvANY(dstr)     = new_XNV();
14154 #endif
14155         SvNV_set(dstr, SvNVX(sstr));
14156         break;
14157     default:
14158         {
14159             /* These are all the types that need complex bodies allocating.  */
14160             void *new_body;
14161             const svtype sv_type = SvTYPE(sstr);
14162             const struct body_details *const sv_type_details
14163                 = bodies_by_type + sv_type;
14164
14165             switch (sv_type) {
14166             default:
14167                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14168                 NOT_REACHED; /* NOTREACHED */
14169                 break;
14170
14171             case SVt_PVGV:
14172             case SVt_PVIO:
14173             case SVt_PVFM:
14174             case SVt_PVHV:
14175             case SVt_PVAV:
14176             case SVt_PVCV:
14177             case SVt_PVLV:
14178             case SVt_REGEXP:
14179             case SVt_PVMG:
14180             case SVt_PVNV:
14181             case SVt_PVIV:
14182             case SVt_INVLIST:
14183             case SVt_PV:
14184                 assert(sv_type_details->body_size);
14185                 if (sv_type_details->arena) {
14186                     new_body_inline(new_body, sv_type);
14187                     new_body
14188                         = (void*)((char*)new_body - sv_type_details->offset);
14189                 } else {
14190                     new_body = new_NOARENA(sv_type_details);
14191                 }
14192             }
14193             assert(new_body);
14194             SvANY(dstr) = new_body;
14195
14196 #ifndef PURIFY
14197             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14198                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14199                  sv_type_details->copy, char);
14200 #else
14201             Copy(((char*)SvANY(sstr)),
14202                  ((char*)SvANY(dstr)),
14203                  sv_type_details->body_size + sv_type_details->offset, char);
14204 #endif
14205
14206             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14207                 && !isGV_with_GP(dstr)
14208                 && !isREGEXP(dstr)
14209                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14210                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14211
14212             /* The Copy above means that all the source (unduplicated) pointers
14213                are now in the destination.  We can check the flags and the
14214                pointers in either, but it's possible that there's less cache
14215                missing by always going for the destination.
14216                FIXME - instrument and check that assumption  */
14217             if (sv_type >= SVt_PVMG) {
14218                 if (SvMAGIC(dstr))
14219                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14220                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14221                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14222                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14223             }
14224
14225             /* The cast silences a GCC warning about unhandled types.  */
14226             switch ((int)sv_type) {
14227             case SVt_PV:
14228                 break;
14229             case SVt_PVIV:
14230                 break;
14231             case SVt_PVNV:
14232                 break;
14233             case SVt_PVMG:
14234                 break;
14235             case SVt_REGEXP:
14236               duprex:
14237                 /* FIXME for plugins */
14238                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14239                 break;
14240             case SVt_PVLV:
14241                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14242                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14243                     LvTARG(dstr) = dstr;
14244                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14245                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14246                 else
14247                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14248                 if (isREGEXP(sstr)) goto duprex;
14249             case SVt_PVGV:
14250                 /* non-GP case already handled above */
14251                 if(isGV_with_GP(sstr)) {
14252                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14253                     /* Don't call sv_add_backref here as it's going to be
14254                        created as part of the magic cloning of the symbol
14255                        table--unless this is during a join and the stash
14256                        is not actually being cloned.  */
14257                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14258                        at the point of this comment.  */
14259                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14260                     if (param->flags & CLONEf_JOIN_IN)
14261                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14262                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14263                     (void)GpREFCNT_inc(GvGP(dstr));
14264                 }
14265                 break;
14266             case SVt_PVIO:
14267                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14268                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14269                     /* I have no idea why fake dirp (rsfps)
14270                        should be treated differently but otherwise
14271                        we end up with leaks -- sky*/
14272                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14273                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14274                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14275                 } else {
14276                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14277                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14278                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14279                     if (IoDIRP(dstr)) {
14280                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14281                     } else {
14282                         NOOP;
14283                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14284                     }
14285                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14286                 }
14287                 if (IoOFP(dstr) == IoIFP(sstr))
14288                     IoOFP(dstr) = IoIFP(dstr);
14289                 else
14290                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14291                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14292                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14293                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14294                 break;
14295             case SVt_PVAV:
14296                 /* avoid cloning an empty array */
14297                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14298                     SV **dst_ary, **src_ary;
14299                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14300
14301                     src_ary = AvARRAY((const AV *)sstr);
14302                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14303                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14304                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14305                     AvALLOC((const AV *)dstr) = dst_ary;
14306                     if (AvREAL((const AV *)sstr)) {
14307                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14308                                                       param);
14309                     }
14310                     else {
14311                         while (items-- > 0)
14312                             *dst_ary++ = sv_dup(*src_ary++, param);
14313                     }
14314                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14315                     while (items-- > 0) {
14316                         *dst_ary++ = NULL;
14317                     }
14318                 }
14319                 else {
14320                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14321                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14322                     AvMAX(  (const AV *)dstr)   = -1;
14323                     AvFILLp((const AV *)dstr)   = -1;
14324                 }
14325                 break;
14326             case SVt_PVHV:
14327                 if (HvARRAY((const HV *)sstr)) {
14328                     STRLEN i = 0;
14329                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14330                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14331                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14332                     char *darray;
14333                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14334                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14335                         char);
14336                     HvARRAY(dstr) = (HE**)darray;
14337                     while (i <= sxhv->xhv_max) {
14338                         const HE * const source = HvARRAY(sstr)[i];
14339                         HvARRAY(dstr)[i] = source
14340                             ? he_dup(source, sharekeys, param) : 0;
14341                         ++i;
14342                     }
14343                     if (SvOOK(sstr)) {
14344                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14345                         struct xpvhv_aux * const daux = HvAUX(dstr);
14346                         /* This flag isn't copied.  */
14347                         SvOOK_on(dstr);
14348
14349                         if (saux->xhv_name_count) {
14350                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14351                             const I32 count
14352                              = saux->xhv_name_count < 0
14353                                 ? -saux->xhv_name_count
14354                                 :  saux->xhv_name_count;
14355                             HEK **shekp = sname + count;
14356                             HEK **dhekp;
14357                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14358                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14359                             while (shekp-- > sname) {
14360                                 dhekp--;
14361                                 *dhekp = hek_dup(*shekp, param);
14362                             }
14363                         }
14364                         else {
14365                             daux->xhv_name_u.xhvnameu_name
14366                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14367                                           param);
14368                         }
14369                         daux->xhv_name_count = saux->xhv_name_count;
14370
14371                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14372 #ifdef PERL_HASH_RANDOMIZE_KEYS
14373                         daux->xhv_rand = saux->xhv_rand;
14374                         daux->xhv_last_rand = saux->xhv_last_rand;
14375 #endif
14376                         daux->xhv_riter = saux->xhv_riter;
14377                         daux->xhv_eiter = saux->xhv_eiter
14378                             ? he_dup(saux->xhv_eiter,
14379                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14380                         /* backref array needs refcnt=2; see sv_add_backref */
14381                         daux->xhv_backreferences =
14382                             (param->flags & CLONEf_JOIN_IN)
14383                                 /* when joining, we let the individual GVs and
14384                                  * CVs add themselves to backref as
14385                                  * needed. This avoids pulling in stuff
14386                                  * that isn't required, and simplifies the
14387                                  * case where stashes aren't cloned back
14388                                  * if they already exist in the parent
14389                                  * thread */
14390                             ? NULL
14391                             : saux->xhv_backreferences
14392                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14393                                     ? MUTABLE_AV(SvREFCNT_inc(
14394                                           sv_dup_inc((const SV *)
14395                                             saux->xhv_backreferences, param)))
14396                                     : MUTABLE_AV(sv_dup((const SV *)
14397                                             saux->xhv_backreferences, param))
14398                                 : 0;
14399
14400                         daux->xhv_mro_meta = saux->xhv_mro_meta
14401                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14402                             : 0;
14403
14404                         /* Record stashes for possible cloning in Perl_clone(). */
14405                         if (HvNAME(sstr))
14406                             av_push(param->stashes, dstr);
14407                     }
14408                 }
14409                 else
14410                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14411                 break;
14412             case SVt_PVCV:
14413                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14414                     CvDEPTH(dstr) = 0;
14415                 }
14416                 /* FALLTHROUGH */
14417             case SVt_PVFM:
14418                 /* NOTE: not refcounted */
14419                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14420                     hv_dup(CvSTASH(dstr), param);
14421                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14422                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14423                 if (!CvISXSUB(dstr)) {
14424                     OP_REFCNT_LOCK;
14425                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14426                     OP_REFCNT_UNLOCK;
14427                     CvSLABBED_off(dstr);
14428                 } else if (CvCONST(dstr)) {
14429                     CvXSUBANY(dstr).any_ptr =
14430                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14431                 }
14432                 assert(!CvSLABBED(dstr));
14433                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14434                 if (CvNAMED(dstr))
14435                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14436                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14437                 /* don't dup if copying back - CvGV isn't refcounted, so the
14438                  * duped GV may never be freed. A bit of a hack! DAPM */
14439                 else
14440                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14441                     CvCVGV_RC(dstr)
14442                     ? gv_dup_inc(CvGV(sstr), param)
14443                     : (param->flags & CLONEf_JOIN_IN)
14444                         ? NULL
14445                         : gv_dup(CvGV(sstr), param);
14446
14447                 if (!CvISXSUB(sstr)) {
14448                     PADLIST * padlist = CvPADLIST(sstr);
14449                     if(padlist)
14450                         padlist = padlist_dup(padlist, param);
14451                     CvPADLIST_set(dstr, padlist);
14452                 } else
14453 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14454                     PoisonPADLIST(dstr);
14455
14456                 CvOUTSIDE(dstr) =
14457                     CvWEAKOUTSIDE(sstr)
14458                     ? cv_dup(    CvOUTSIDE(dstr), param)
14459                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14460                 break;
14461             }
14462         }
14463     }
14464
14465     return dstr;
14466  }
14467
14468 SV *
14469 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14470 {
14471     PERL_ARGS_ASSERT_SV_DUP_INC;
14472     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14473 }
14474
14475 SV *
14476 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14477 {
14478     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14479     PERL_ARGS_ASSERT_SV_DUP;
14480
14481     /* Track every SV that (at least initially) had a reference count of 0.
14482        We need to do this by holding an actual reference to it in this array.
14483        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14484        (akin to the stashes hash, and the perl stack), we come unstuck if
14485        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14486        thread) is manipulated in a CLONE method, because CLONE runs before the
14487        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14488        (and fix things up by giving each a reference via the temps stack).
14489        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14490        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14491        before the walk of unreferenced happens and a reference to that is SV
14492        added to the temps stack. At which point we have the same SV considered
14493        to be in use, and free to be re-used. Not good.
14494     */
14495     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14496         assert(param->unreferenced);
14497         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14498     }
14499
14500     return dstr;
14501 }
14502
14503 /* duplicate a context */
14504
14505 PERL_CONTEXT *
14506 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14507 {
14508     PERL_CONTEXT *ncxs;
14509
14510     PERL_ARGS_ASSERT_CX_DUP;
14511
14512     if (!cxs)
14513         return (PERL_CONTEXT*)NULL;
14514
14515     /* look for it in the table first */
14516     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14517     if (ncxs)
14518         return ncxs;
14519
14520     /* create anew and remember what it is */
14521     Newx(ncxs, max + 1, PERL_CONTEXT);
14522     ptr_table_store(PL_ptr_table, cxs, ncxs);
14523     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14524
14525     while (ix >= 0) {
14526         PERL_CONTEXT * const ncx = &ncxs[ix];
14527         if (CxTYPE(ncx) == CXt_SUBST) {
14528             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14529         }
14530         else {
14531             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14532             switch (CxTYPE(ncx)) {
14533             case CXt_SUB:
14534                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14535                 if(CxHASARGS(ncx)){
14536                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14537                 } else {
14538                     ncx->blk_sub.savearray = NULL;
14539                 }
14540                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14541                                            ncx->blk_sub.prevcomppad);
14542                 break;
14543             case CXt_EVAL:
14544                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14545                                                       param);
14546                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14547                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14548                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14549                 /* XXX what do do with cur_top_env ???? */
14550                 break;
14551             case CXt_LOOP_LAZYSV:
14552                 ncx->blk_loop.state_u.lazysv.end
14553                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14554                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14555                    duplication code instead.
14556                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14557                    actually being the same function, and (2) order
14558                    equivalence of the two unions.
14559                    We can assert the later [but only at run time :-(]  */
14560                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14561                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14562                 /* FALLTHROUGH */
14563             case CXt_LOOP_ARY:
14564                 ncx->blk_loop.state_u.ary.ary
14565                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14566                 /* FALLTHROUGH */
14567             case CXt_LOOP_LIST:
14568             case CXt_LOOP_LAZYIV:
14569                 /* code common to all 'for' CXt_LOOP_* types */
14570                 ncx->blk_loop.itersave =
14571                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14572                 if (CxPADLOOP(ncx)) {
14573                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14574                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14575                     ncx->blk_loop.oldcomppad =
14576                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14577                                                 ncx->blk_loop.oldcomppad);
14578                     ncx->blk_loop.itervar_u.svp =
14579                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14580                 }
14581                 else {
14582                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14583                      * alias (for \$x (...)) - relies on gv_dup being the
14584                      * same as sv_dup */
14585                     ncx->blk_loop.itervar_u.gv
14586                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14587                                     param);
14588                 }
14589                 break;
14590             case CXt_LOOP_PLAIN:
14591                 break;
14592             case CXt_FORMAT:
14593                 ncx->blk_format.prevcomppad =
14594                         (PAD*)ptr_table_fetch(PL_ptr_table,
14595                                            ncx->blk_format.prevcomppad);
14596                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14597                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14598                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14599                                                      param);
14600                 break;
14601             case CXt_GIVEN:
14602                 ncx->blk_givwhen.defsv_save =
14603                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14604                 break;
14605             case CXt_BLOCK:
14606             case CXt_NULL:
14607             case CXt_WHEN:
14608                 break;
14609             }
14610         }
14611         --ix;
14612     }
14613     return ncxs;
14614 }
14615
14616 /* duplicate a stack info structure */
14617
14618 PERL_SI *
14619 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14620 {
14621     PERL_SI *nsi;
14622
14623     PERL_ARGS_ASSERT_SI_DUP;
14624
14625     if (!si)
14626         return (PERL_SI*)NULL;
14627
14628     /* look for it in the table first */
14629     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14630     if (nsi)
14631         return nsi;
14632
14633     /* create anew and remember what it is */
14634     Newxz(nsi, 1, PERL_SI);
14635     ptr_table_store(PL_ptr_table, si, nsi);
14636
14637     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14638     nsi->si_cxix        = si->si_cxix;
14639     nsi->si_cxmax       = si->si_cxmax;
14640     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14641     nsi->si_type        = si->si_type;
14642     nsi->si_prev        = si_dup(si->si_prev, param);
14643     nsi->si_next        = si_dup(si->si_next, param);
14644     nsi->si_markoff     = si->si_markoff;
14645
14646     return nsi;
14647 }
14648
14649 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14650 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14651 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14652 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14653 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14654 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14655 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14656 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14657 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14658 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14659 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14660 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14661 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14662 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14663 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14664 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14665
14666 /* XXXXX todo */
14667 #define pv_dup_inc(p)   SAVEPV(p)
14668 #define pv_dup(p)       SAVEPV(p)
14669 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14670
14671 /* map any object to the new equivent - either something in the
14672  * ptr table, or something in the interpreter structure
14673  */
14674
14675 void *
14676 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14677 {
14678     void *ret;
14679
14680     PERL_ARGS_ASSERT_ANY_DUP;
14681
14682     if (!v)
14683         return (void*)NULL;
14684
14685     /* look for it in the table first */
14686     ret = ptr_table_fetch(PL_ptr_table, v);
14687     if (ret)
14688         return ret;
14689
14690     /* see if it is part of the interpreter structure */
14691     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14692         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14693     else {
14694         ret = v;
14695     }
14696
14697     return ret;
14698 }
14699
14700 /* duplicate the save stack */
14701
14702 ANY *
14703 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14704 {
14705     dVAR;
14706     ANY * const ss      = proto_perl->Isavestack;
14707     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14708     I32 ix              = proto_perl->Isavestack_ix;
14709     ANY *nss;
14710     const SV *sv;
14711     const GV *gv;
14712     const AV *av;
14713     const HV *hv;
14714     void* ptr;
14715     int intval;
14716     long longval;
14717     GP *gp;
14718     IV iv;
14719     I32 i;
14720     char *c = NULL;
14721     void (*dptr) (void*);
14722     void (*dxptr) (pTHX_ void*);
14723
14724     PERL_ARGS_ASSERT_SS_DUP;
14725
14726     Newxz(nss, max, ANY);
14727
14728     while (ix > 0) {
14729         const UV uv = POPUV(ss,ix);
14730         const U8 type = (U8)uv & SAVE_MASK;
14731
14732         TOPUV(nss,ix) = uv;
14733         switch (type) {
14734         case SAVEt_CLEARSV:
14735         case SAVEt_CLEARPADRANGE:
14736             break;
14737         case SAVEt_HELEM:               /* hash element */
14738         case SAVEt_SV:                  /* scalar reference */
14739             sv = (const SV *)POPPTR(ss,ix);
14740             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14741             /* FALLTHROUGH */
14742         case SAVEt_ITEM:                        /* normal string */
14743         case SAVEt_GVSV:                        /* scalar slot in GV */
14744             sv = (const SV *)POPPTR(ss,ix);
14745             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14746             if (type == SAVEt_SV)
14747                 break;
14748             /* FALLTHROUGH */
14749         case SAVEt_FREESV:
14750         case SAVEt_MORTALIZESV:
14751         case SAVEt_READONLY_OFF:
14752             sv = (const SV *)POPPTR(ss,ix);
14753             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14754             break;
14755         case SAVEt_FREEPADNAME:
14756             ptr = POPPTR(ss,ix);
14757             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14758             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14759             break;
14760         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14761             c = (char*)POPPTR(ss,ix);
14762             TOPPTR(nss,ix) = savesharedpv(c);
14763             ptr = POPPTR(ss,ix);
14764             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14765             break;
14766         case SAVEt_GENERIC_SVREF:               /* generic sv */
14767         case SAVEt_SVREF:                       /* scalar reference */
14768             sv = (const SV *)POPPTR(ss,ix);
14769             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14770             if (type == SAVEt_SVREF)
14771                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14772             ptr = POPPTR(ss,ix);
14773             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14774             break;
14775         case SAVEt_GVSLOT:              /* any slot in GV */
14776             sv = (const SV *)POPPTR(ss,ix);
14777             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14778             ptr = POPPTR(ss,ix);
14779             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14780             sv = (const SV *)POPPTR(ss,ix);
14781             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14782             break;
14783         case SAVEt_HV:                          /* hash reference */
14784         case SAVEt_AV:                          /* array reference */
14785             sv = (const SV *) POPPTR(ss,ix);
14786             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14787             /* FALLTHROUGH */
14788         case SAVEt_COMPPAD:
14789         case SAVEt_NSTAB:
14790             sv = (const SV *) POPPTR(ss,ix);
14791             TOPPTR(nss,ix) = sv_dup(sv, param);
14792             break;
14793         case SAVEt_INT:                         /* int reference */
14794             ptr = POPPTR(ss,ix);
14795             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14796             intval = (int)POPINT(ss,ix);
14797             TOPINT(nss,ix) = intval;
14798             break;
14799         case SAVEt_LONG:                        /* long reference */
14800             ptr = POPPTR(ss,ix);
14801             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14802             longval = (long)POPLONG(ss,ix);
14803             TOPLONG(nss,ix) = longval;
14804             break;
14805         case SAVEt_I32:                         /* I32 reference */
14806             ptr = POPPTR(ss,ix);
14807             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14808             i = POPINT(ss,ix);
14809             TOPINT(nss,ix) = i;
14810             break;
14811         case SAVEt_IV:                          /* IV reference */
14812         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14813             ptr = POPPTR(ss,ix);
14814             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14815             iv = POPIV(ss,ix);
14816             TOPIV(nss,ix) = iv;
14817             break;
14818         case SAVEt_TMPSFLOOR:
14819             iv = POPIV(ss,ix);
14820             TOPIV(nss,ix) = iv;
14821             break;
14822         case SAVEt_HPTR:                        /* HV* reference */
14823         case SAVEt_APTR:                        /* AV* reference */
14824         case SAVEt_SPTR:                        /* SV* reference */
14825             ptr = POPPTR(ss,ix);
14826             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14827             sv = (const SV *)POPPTR(ss,ix);
14828             TOPPTR(nss,ix) = sv_dup(sv, param);
14829             break;
14830         case SAVEt_VPTR:                        /* random* reference */
14831             ptr = POPPTR(ss,ix);
14832             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14833             /* FALLTHROUGH */
14834         case SAVEt_INT_SMALL:
14835         case SAVEt_I32_SMALL:
14836         case SAVEt_I16:                         /* I16 reference */
14837         case SAVEt_I8:                          /* I8 reference */
14838         case SAVEt_BOOL:
14839             ptr = POPPTR(ss,ix);
14840             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14841             break;
14842         case SAVEt_GENERIC_PVREF:               /* generic char* */
14843         case SAVEt_PPTR:                        /* char* reference */
14844             ptr = POPPTR(ss,ix);
14845             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14846             c = (char*)POPPTR(ss,ix);
14847             TOPPTR(nss,ix) = pv_dup(c);
14848             break;
14849         case SAVEt_GP:                          /* scalar reference */
14850             gp = (GP*)POPPTR(ss,ix);
14851             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14852             (void)GpREFCNT_inc(gp);
14853             gv = (const GV *)POPPTR(ss,ix);
14854             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14855             break;
14856         case SAVEt_FREEOP:
14857             ptr = POPPTR(ss,ix);
14858             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14859                 /* these are assumed to be refcounted properly */
14860                 OP *o;
14861                 switch (((OP*)ptr)->op_type) {
14862                 case OP_LEAVESUB:
14863                 case OP_LEAVESUBLV:
14864                 case OP_LEAVEEVAL:
14865                 case OP_LEAVE:
14866                 case OP_SCOPE:
14867                 case OP_LEAVEWRITE:
14868                     TOPPTR(nss,ix) = ptr;
14869                     o = (OP*)ptr;
14870                     OP_REFCNT_LOCK;
14871                     (void) OpREFCNT_inc(o);
14872                     OP_REFCNT_UNLOCK;
14873                     break;
14874                 default:
14875                     TOPPTR(nss,ix) = NULL;
14876                     break;
14877                 }
14878             }
14879             else
14880                 TOPPTR(nss,ix) = NULL;
14881             break;
14882         case SAVEt_FREECOPHH:
14883             ptr = POPPTR(ss,ix);
14884             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14885             break;
14886         case SAVEt_ADELETE:
14887             av = (const AV *)POPPTR(ss,ix);
14888             TOPPTR(nss,ix) = av_dup_inc(av, param);
14889             i = POPINT(ss,ix);
14890             TOPINT(nss,ix) = i;
14891             break;
14892         case SAVEt_DELETE:
14893             hv = (const HV *)POPPTR(ss,ix);
14894             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14895             i = POPINT(ss,ix);
14896             TOPINT(nss,ix) = i;
14897             /* FALLTHROUGH */
14898         case SAVEt_FREEPV:
14899             c = (char*)POPPTR(ss,ix);
14900             TOPPTR(nss,ix) = pv_dup_inc(c);
14901             break;
14902         case SAVEt_STACK_POS:           /* Position on Perl stack */
14903             i = POPINT(ss,ix);
14904             TOPINT(nss,ix) = i;
14905             break;
14906         case SAVEt_DESTRUCTOR:
14907             ptr = POPPTR(ss,ix);
14908             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14909             dptr = POPDPTR(ss,ix);
14910             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14911                                         any_dup(FPTR2DPTR(void *, dptr),
14912                                                 proto_perl));
14913             break;
14914         case SAVEt_DESTRUCTOR_X:
14915             ptr = POPPTR(ss,ix);
14916             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14917             dxptr = POPDXPTR(ss,ix);
14918             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14919                                          any_dup(FPTR2DPTR(void *, dxptr),
14920                                                  proto_perl));
14921             break;
14922         case SAVEt_REGCONTEXT:
14923         case SAVEt_ALLOC:
14924             ix -= uv >> SAVE_TIGHT_SHIFT;
14925             break;
14926         case SAVEt_AELEM:               /* array element */
14927             sv = (const SV *)POPPTR(ss,ix);
14928             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14929             i = POPINT(ss,ix);
14930             TOPINT(nss,ix) = i;
14931             av = (const AV *)POPPTR(ss,ix);
14932             TOPPTR(nss,ix) = av_dup_inc(av, param);
14933             break;
14934         case SAVEt_OP:
14935             ptr = POPPTR(ss,ix);
14936             TOPPTR(nss,ix) = ptr;
14937             break;
14938         case SAVEt_HINTS:
14939             ptr = POPPTR(ss,ix);
14940             ptr = cophh_copy((COPHH*)ptr);
14941             TOPPTR(nss,ix) = ptr;
14942             i = POPINT(ss,ix);
14943             TOPINT(nss,ix) = i;
14944             if (i & HINT_LOCALIZE_HH) {
14945                 hv = (const HV *)POPPTR(ss,ix);
14946                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14947             }
14948             break;
14949         case SAVEt_PADSV_AND_MORTALIZE:
14950             longval = (long)POPLONG(ss,ix);
14951             TOPLONG(nss,ix) = longval;
14952             ptr = POPPTR(ss,ix);
14953             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14954             sv = (const SV *)POPPTR(ss,ix);
14955             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14956             break;
14957         case SAVEt_SET_SVFLAGS:
14958             i = POPINT(ss,ix);
14959             TOPINT(nss,ix) = i;
14960             i = POPINT(ss,ix);
14961             TOPINT(nss,ix) = i;
14962             sv = (const SV *)POPPTR(ss,ix);
14963             TOPPTR(nss,ix) = sv_dup(sv, param);
14964             break;
14965         case SAVEt_COMPILE_WARNINGS:
14966             ptr = POPPTR(ss,ix);
14967             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14968             break;
14969         case SAVEt_PARSER:
14970             ptr = POPPTR(ss,ix);
14971             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14972             break;
14973         default:
14974             Perl_croak(aTHX_
14975                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14976         }
14977     }
14978
14979     return nss;
14980 }
14981
14982
14983 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14984  * flag to the result. This is done for each stash before cloning starts,
14985  * so we know which stashes want their objects cloned */
14986
14987 static void
14988 do_mark_cloneable_stash(pTHX_ SV *const sv)
14989 {
14990     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14991     if (hvname) {
14992         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14993         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14994         if (cloner && GvCV(cloner)) {
14995             dSP;
14996             UV status;
14997
14998             ENTER;
14999             SAVETMPS;
15000             PUSHMARK(SP);
15001             mXPUSHs(newSVhek(hvname));
15002             PUTBACK;
15003             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15004             SPAGAIN;
15005             status = POPu;
15006             PUTBACK;
15007             FREETMPS;
15008             LEAVE;
15009             if (status)
15010                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15011         }
15012     }
15013 }
15014
15015
15016
15017 /*
15018 =for apidoc perl_clone
15019
15020 Create and return a new interpreter by cloning the current one.
15021
15022 C<perl_clone> takes these flags as parameters:
15023
15024 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15025 without it we only clone the data and zero the stacks,
15026 with it we copy the stacks and the new perl interpreter is
15027 ready to run at the exact same point as the previous one.
15028 The pseudo-fork code uses C<COPY_STACKS> while the
15029 threads->create doesn't.
15030
15031 C<CLONEf_KEEP_PTR_TABLE> -
15032 C<perl_clone> keeps a ptr_table with the pointer of the old
15033 variable as a key and the new variable as a value,
15034 this allows it to check if something has been cloned and not
15035 clone it again but rather just use the value and increase the
15036 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
15037 the ptr_table using the function
15038 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
15039 reason to keep it around is if you want to dup some of your own
15040 variable who are outside the graph perl scans, an example of this
15041 code is in F<threads.xs> create.
15042
15043 C<CLONEf_CLONE_HOST> -
15044 This is a win32 thing, it is ignored on unix, it tells perls
15045 win32host code (which is c++) to clone itself, this is needed on
15046 win32 if you want to run two threads at the same time,
15047 if you just want to do some stuff in a separate perl interpreter
15048 and then throw it away and return to the original one,
15049 you don't need to do anything.
15050
15051 =cut
15052 */
15053
15054 /* XXX the above needs expanding by someone who actually understands it ! */
15055 EXTERN_C PerlInterpreter *
15056 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15057
15058 PerlInterpreter *
15059 perl_clone(PerlInterpreter *proto_perl, UV flags)
15060 {
15061    dVAR;
15062 #ifdef PERL_IMPLICIT_SYS
15063
15064     PERL_ARGS_ASSERT_PERL_CLONE;
15065
15066    /* perlhost.h so we need to call into it
15067    to clone the host, CPerlHost should have a c interface, sky */
15068
15069 #ifndef __amigaos4__
15070    if (flags & CLONEf_CLONE_HOST) {
15071        return perl_clone_host(proto_perl,flags);
15072    }
15073 #endif
15074    return perl_clone_using(proto_perl, flags,
15075                             proto_perl->IMem,
15076                             proto_perl->IMemShared,
15077                             proto_perl->IMemParse,
15078                             proto_perl->IEnv,
15079                             proto_perl->IStdIO,
15080                             proto_perl->ILIO,
15081                             proto_perl->IDir,
15082                             proto_perl->ISock,
15083                             proto_perl->IProc);
15084 }
15085
15086 PerlInterpreter *
15087 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15088                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15089                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15090                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15091                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15092                  struct IPerlProc* ipP)
15093 {
15094     /* XXX many of the string copies here can be optimized if they're
15095      * constants; they need to be allocated as common memory and just
15096      * their pointers copied. */
15097
15098     IV i;
15099     CLONE_PARAMS clone_params;
15100     CLONE_PARAMS* const param = &clone_params;
15101
15102     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15103
15104     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15105 #else           /* !PERL_IMPLICIT_SYS */
15106     IV i;
15107     CLONE_PARAMS clone_params;
15108     CLONE_PARAMS* param = &clone_params;
15109     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15110
15111     PERL_ARGS_ASSERT_PERL_CLONE;
15112 #endif          /* PERL_IMPLICIT_SYS */
15113
15114     /* for each stash, determine whether its objects should be cloned */
15115     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15116     PERL_SET_THX(my_perl);
15117
15118 #ifdef DEBUGGING
15119     PoisonNew(my_perl, 1, PerlInterpreter);
15120     PL_op = NULL;
15121     PL_curcop = NULL;
15122     PL_defstash = NULL; /* may be used by perl malloc() */
15123     PL_markstack = 0;
15124     PL_scopestack = 0;
15125     PL_scopestack_name = 0;
15126     PL_savestack = 0;
15127     PL_savestack_ix = 0;
15128     PL_savestack_max = -1;
15129     PL_sig_pending = 0;
15130     PL_parser = NULL;
15131     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15132     Zero(&PL_padname_undef, 1, PADNAME);
15133     Zero(&PL_padname_const, 1, PADNAME);
15134 #  ifdef DEBUG_LEAKING_SCALARS
15135     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15136 #  endif
15137 #  ifdef PERL_TRACE_OPS
15138     Zero(PL_op_exec_cnt, OP_max+2, UV);
15139 #  endif
15140 #else   /* !DEBUGGING */
15141     Zero(my_perl, 1, PerlInterpreter);
15142 #endif  /* DEBUGGING */
15143
15144 #ifdef PERL_IMPLICIT_SYS
15145     /* host pointers */
15146     PL_Mem              = ipM;
15147     PL_MemShared        = ipMS;
15148     PL_MemParse         = ipMP;
15149     PL_Env              = ipE;
15150     PL_StdIO            = ipStd;
15151     PL_LIO              = ipLIO;
15152     PL_Dir              = ipD;
15153     PL_Sock             = ipS;
15154     PL_Proc             = ipP;
15155 #endif          /* PERL_IMPLICIT_SYS */
15156
15157
15158     param->flags = flags;
15159     /* Nothing in the core code uses this, but we make it available to
15160        extensions (using mg_dup).  */
15161     param->proto_perl = proto_perl;
15162     /* Likely nothing will use this, but it is initialised to be consistent
15163        with Perl_clone_params_new().  */
15164     param->new_perl = my_perl;
15165     param->unreferenced = NULL;
15166
15167
15168     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15169
15170     PL_body_arenas = NULL;
15171     Zero(&PL_body_roots, 1, PL_body_roots);
15172     
15173     PL_sv_count         = 0;
15174     PL_sv_root          = NULL;
15175     PL_sv_arenaroot     = NULL;
15176
15177     PL_debug            = proto_perl->Idebug;
15178
15179     /* dbargs array probably holds garbage */
15180     PL_dbargs           = NULL;
15181
15182     PL_compiling = proto_perl->Icompiling;
15183
15184     /* pseudo environmental stuff */
15185     PL_origargc         = proto_perl->Iorigargc;
15186     PL_origargv         = proto_perl->Iorigargv;
15187
15188 #ifndef NO_TAINT_SUPPORT
15189     /* Set tainting stuff before PerlIO_debug can possibly get called */
15190     PL_tainting         = proto_perl->Itainting;
15191     PL_taint_warn       = proto_perl->Itaint_warn;
15192 #else
15193     PL_tainting         = FALSE;
15194     PL_taint_warn       = FALSE;
15195 #endif
15196
15197     PL_minus_c          = proto_perl->Iminus_c;
15198
15199     PL_localpatches     = proto_perl->Ilocalpatches;
15200     PL_splitstr         = proto_perl->Isplitstr;
15201     PL_minus_n          = proto_perl->Iminus_n;
15202     PL_minus_p          = proto_perl->Iminus_p;
15203     PL_minus_l          = proto_perl->Iminus_l;
15204     PL_minus_a          = proto_perl->Iminus_a;
15205     PL_minus_E          = proto_perl->Iminus_E;
15206     PL_minus_F          = proto_perl->Iminus_F;
15207     PL_doswitches       = proto_perl->Idoswitches;
15208     PL_dowarn           = proto_perl->Idowarn;
15209 #ifdef PERL_SAWAMPERSAND
15210     PL_sawampersand     = proto_perl->Isawampersand;
15211 #endif
15212     PL_unsafe           = proto_perl->Iunsafe;
15213     PL_perldb           = proto_perl->Iperldb;
15214     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15215     PL_exit_flags       = proto_perl->Iexit_flags;
15216
15217     /* XXX time(&PL_basetime) when asked for? */
15218     PL_basetime         = proto_perl->Ibasetime;
15219
15220     PL_maxsysfd         = proto_perl->Imaxsysfd;
15221     PL_statusvalue      = proto_perl->Istatusvalue;
15222 #ifdef __VMS
15223     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15224 #else
15225     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15226 #endif
15227
15228     /* RE engine related */
15229     PL_regmatch_slab    = NULL;
15230     PL_reg_curpm        = NULL;
15231
15232     PL_sub_generation   = proto_perl->Isub_generation;
15233
15234     /* funky return mechanisms */
15235     PL_forkprocess      = proto_perl->Iforkprocess;
15236
15237     /* internal state */
15238     PL_main_start       = proto_perl->Imain_start;
15239     PL_eval_root        = proto_perl->Ieval_root;
15240     PL_eval_start       = proto_perl->Ieval_start;
15241
15242     PL_filemode         = proto_perl->Ifilemode;
15243     PL_lastfd           = proto_perl->Ilastfd;
15244     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15245     PL_Argv             = NULL;
15246     PL_Cmd              = NULL;
15247     PL_gensym           = proto_perl->Igensym;
15248
15249     PL_laststatval      = proto_perl->Ilaststatval;
15250     PL_laststype        = proto_perl->Ilaststype;
15251     PL_mess_sv          = NULL;
15252
15253     PL_profiledata      = NULL;
15254
15255     PL_generation       = proto_perl->Igeneration;
15256
15257     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15258     PL_in_clean_all     = proto_perl->Iin_clean_all;
15259
15260     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15261     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15262     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15263     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15264     PL_nomemok          = proto_perl->Inomemok;
15265     PL_an               = proto_perl->Ian;
15266     PL_evalseq          = proto_perl->Ievalseq;
15267     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15268     PL_origalen         = proto_perl->Iorigalen;
15269
15270     PL_sighandlerp      = proto_perl->Isighandlerp;
15271
15272     PL_runops           = proto_perl->Irunops;
15273
15274     PL_subline          = proto_perl->Isubline;
15275
15276     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15277
15278 #ifdef FCRYPT
15279     PL_cryptseen        = proto_perl->Icryptseen;
15280 #endif
15281
15282 #ifdef USE_LOCALE_COLLATE
15283     PL_collation_ix     = proto_perl->Icollation_ix;
15284     PL_collation_standard       = proto_perl->Icollation_standard;
15285     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15286     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15287     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15288 #endif /* USE_LOCALE_COLLATE */
15289
15290 #ifdef USE_LOCALE_NUMERIC
15291     PL_numeric_standard = proto_perl->Inumeric_standard;
15292     PL_numeric_local    = proto_perl->Inumeric_local;
15293 #endif /* !USE_LOCALE_NUMERIC */
15294
15295     /* Did the locale setup indicate UTF-8? */
15296     PL_utf8locale       = proto_perl->Iutf8locale;
15297     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15298     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15299     /* Unicode features (see perlrun/-C) */
15300     PL_unicode          = proto_perl->Iunicode;
15301
15302     /* Pre-5.8 signals control */
15303     PL_signals          = proto_perl->Isignals;
15304
15305     /* times() ticks per second */
15306     PL_clocktick        = proto_perl->Iclocktick;
15307
15308     /* Recursion stopper for PerlIO_find_layer */
15309     PL_in_load_module   = proto_perl->Iin_load_module;
15310
15311     /* sort() routine */
15312     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15313
15314     /* Not really needed/useful since the reenrant_retint is "volatile",
15315      * but do it for consistency's sake. */
15316     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15317
15318     /* Hooks to shared SVs and locks. */
15319     PL_sharehook        = proto_perl->Isharehook;
15320     PL_lockhook         = proto_perl->Ilockhook;
15321     PL_unlockhook       = proto_perl->Iunlockhook;
15322     PL_threadhook       = proto_perl->Ithreadhook;
15323     PL_destroyhook      = proto_perl->Idestroyhook;
15324     PL_signalhook       = proto_perl->Isignalhook;
15325
15326     PL_globhook         = proto_perl->Iglobhook;
15327
15328     /* swatch cache */
15329     PL_last_swash_hv    = NULL; /* reinits on demand */
15330     PL_last_swash_klen  = 0;
15331     PL_last_swash_key[0]= '\0';
15332     PL_last_swash_tmps  = (U8*)NULL;
15333     PL_last_swash_slen  = 0;
15334
15335     PL_srand_called     = proto_perl->Isrand_called;
15336     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15337
15338     if (flags & CLONEf_COPY_STACKS) {
15339         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15340         PL_tmps_ix              = proto_perl->Itmps_ix;
15341         PL_tmps_max             = proto_perl->Itmps_max;
15342         PL_tmps_floor           = proto_perl->Itmps_floor;
15343
15344         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15345          * NOTE: unlike the others! */
15346         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15347         PL_scopestack_max       = proto_perl->Iscopestack_max;
15348
15349         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15350          * NOTE: unlike the others! */
15351         PL_savestack_ix         = proto_perl->Isavestack_ix;
15352         PL_savestack_max        = proto_perl->Isavestack_max;
15353     }
15354
15355     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15356     PL_top_env          = &PL_start_env;
15357
15358     PL_op               = proto_perl->Iop;
15359
15360     PL_Sv               = NULL;
15361     PL_Xpv              = (XPV*)NULL;
15362     my_perl->Ina        = proto_perl->Ina;
15363
15364     PL_statcache        = proto_perl->Istatcache;
15365
15366 #ifndef NO_TAINT_SUPPORT
15367     PL_tainted          = proto_perl->Itainted;
15368 #else
15369     PL_tainted          = FALSE;
15370 #endif
15371     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15372
15373     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15374
15375     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15376     PL_restartop        = proto_perl->Irestartop;
15377     PL_in_eval          = proto_perl->Iin_eval;
15378     PL_delaymagic       = proto_perl->Idelaymagic;
15379     PL_phase            = proto_perl->Iphase;
15380     PL_localizing       = proto_perl->Ilocalizing;
15381
15382     PL_hv_fetch_ent_mh  = NULL;
15383     PL_modcount         = proto_perl->Imodcount;
15384     PL_lastgotoprobe    = NULL;
15385     PL_dumpindent       = proto_perl->Idumpindent;
15386
15387     PL_efloatbuf        = NULL;         /* reinits on demand */
15388     PL_efloatsize       = 0;                    /* reinits on demand */
15389
15390     /* regex stuff */
15391
15392     PL_colorset         = 0;            /* reinits PL_colors[] */
15393     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15394
15395     /* Pluggable optimizer */
15396     PL_peepp            = proto_perl->Ipeepp;
15397     PL_rpeepp           = proto_perl->Irpeepp;
15398     /* op_free() hook */
15399     PL_opfreehook       = proto_perl->Iopfreehook;
15400
15401 #ifdef USE_REENTRANT_API
15402     /* XXX: things like -Dm will segfault here in perlio, but doing
15403      *  PERL_SET_CONTEXT(proto_perl);
15404      * breaks too many other things
15405      */
15406     Perl_reentrant_init(aTHX);
15407 #endif
15408
15409     /* create SV map for pointer relocation */
15410     PL_ptr_table = ptr_table_new();
15411
15412     /* initialize these special pointers as early as possible */
15413     init_constants();
15414     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15415     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15416     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15417     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15418     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15419                     &PL_padname_const);
15420
15421     /* create (a non-shared!) shared string table */
15422     PL_strtab           = newHV();
15423     HvSHAREKEYS_off(PL_strtab);
15424     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15425     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15426
15427     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15428
15429     /* This PV will be free'd special way so must set it same way op.c does */
15430     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15431     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15432
15433     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15434     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15435     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15436     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15437
15438     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15439     /* This makes no difference to the implementation, as it always pushes
15440        and shifts pointers to other SVs without changing their reference
15441        count, with the array becoming empty before it is freed. However, it
15442        makes it conceptually clear what is going on, and will avoid some
15443        work inside av.c, filling slots between AvFILL() and AvMAX() with
15444        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15445     AvREAL_off(param->stashes);
15446
15447     if (!(flags & CLONEf_COPY_STACKS)) {
15448         param->unreferenced = newAV();
15449     }
15450
15451 #ifdef PERLIO_LAYERS
15452     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15453     PerlIO_clone(aTHX_ proto_perl, param);
15454 #endif
15455
15456     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15457     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15458     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15459     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15460     PL_xsubfilename     = proto_perl->Ixsubfilename;
15461     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15462     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15463
15464     /* switches */
15465     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15466     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15467     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15468
15469     /* magical thingies */
15470
15471     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15472     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15473     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15474
15475    
15476     /* Clone the regex array */
15477     /* ORANGE FIXME for plugins, probably in the SV dup code.
15478        newSViv(PTR2IV(CALLREGDUPE(
15479        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15480     */
15481     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15482     PL_regex_pad = AvARRAY(PL_regex_padav);
15483
15484     PL_stashpadmax      = proto_perl->Istashpadmax;
15485     PL_stashpadix       = proto_perl->Istashpadix ;
15486     Newx(PL_stashpad, PL_stashpadmax, HV *);
15487     {
15488         PADOFFSET o = 0;
15489         for (; o < PL_stashpadmax; ++o)
15490             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15491     }
15492
15493     /* shortcuts to various I/O objects */
15494     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15495     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15496     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15497     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15498     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15499     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15500     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15501
15502     /* shortcuts to regexp stuff */
15503     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15504
15505     /* shortcuts to misc objects */
15506     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15507
15508     /* shortcuts to debugging objects */
15509     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15510     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15511     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15512     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15513     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15514     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15515     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15516
15517     /* symbol tables */
15518     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15519     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15520     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15521     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15522     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15523
15524     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15525     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15526     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15527     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15528     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15529     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15530     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15531     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15532     PL_savebegin        = proto_perl->Isavebegin;
15533
15534     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15535
15536     /* subprocess state */
15537     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15538
15539     if (proto_perl->Iop_mask)
15540         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15541     else
15542         PL_op_mask      = NULL;
15543     /* PL_asserting        = proto_perl->Iasserting; */
15544
15545     /* current interpreter roots */
15546     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15547     OP_REFCNT_LOCK;
15548     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15549     OP_REFCNT_UNLOCK;
15550
15551     /* runtime control stuff */
15552     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15553
15554     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15555
15556     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15557
15558     /* interpreter atexit processing */
15559     PL_exitlistlen      = proto_perl->Iexitlistlen;
15560     if (PL_exitlistlen) {
15561         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15562         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15563     }
15564     else
15565         PL_exitlist     = (PerlExitListEntry*)NULL;
15566
15567     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15568     if (PL_my_cxt_size) {
15569         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15570         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15571 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15572         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15573         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15574 #endif
15575     }
15576     else {
15577         PL_my_cxt_list  = (void**)NULL;
15578 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15579         PL_my_cxt_keys  = (const char**)NULL;
15580 #endif
15581     }
15582     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15583     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15584     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15585     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15586
15587     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15588
15589     PAD_CLONE_VARS(proto_perl, param);
15590
15591 #ifdef HAVE_INTERP_INTERN
15592     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15593 #endif
15594
15595     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15596
15597 #ifdef PERL_USES_PL_PIDSTATUS
15598     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15599 #endif
15600     PL_osname           = SAVEPV(proto_perl->Iosname);
15601     PL_parser           = parser_dup(proto_perl->Iparser, param);
15602
15603     /* XXX this only works if the saved cop has already been cloned */
15604     if (proto_perl->Iparser) {
15605         PL_parser->saved_curcop = (COP*)any_dup(
15606                                     proto_perl->Iparser->saved_curcop,
15607                                     proto_perl);
15608     }
15609
15610     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15611
15612 #ifdef USE_LOCALE_CTYPE
15613     /* Should we warn if uses locale? */
15614     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15615 #endif
15616
15617 #ifdef USE_LOCALE_COLLATE
15618     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15619 #endif /* USE_LOCALE_COLLATE */
15620
15621 #ifdef USE_LOCALE_NUMERIC
15622     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15623     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15624 #endif /* !USE_LOCALE_NUMERIC */
15625
15626     /* Unicode inversion lists */
15627     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15628     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15629     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15630     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15631
15632     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15633     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15634
15635     /* utf8 character class swashes */
15636     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15637         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15638     }
15639     for (i = 0; i < POSIX_CC_COUNT; i++) {
15640         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15641     }
15642     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15643     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15644     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15645     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15646     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15647     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15648     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15649     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15650     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15651     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15652     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15653     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15654     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15655     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15656     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15657     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15658     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15659     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15660
15661     if (proto_perl->Ipsig_pend) {
15662         Newxz(PL_psig_pend, SIG_SIZE, int);
15663     }
15664     else {
15665         PL_psig_pend    = (int*)NULL;
15666     }
15667
15668     if (proto_perl->Ipsig_name) {
15669         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15670         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15671                             param);
15672         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15673     }
15674     else {
15675         PL_psig_ptr     = (SV**)NULL;
15676         PL_psig_name    = (SV**)NULL;
15677     }
15678
15679     if (flags & CLONEf_COPY_STACKS) {
15680         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15681         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15682                             PL_tmps_ix+1, param);
15683
15684         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15685         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15686         Newxz(PL_markstack, i, I32);
15687         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15688                                                   - proto_perl->Imarkstack);
15689         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15690                                                   - proto_perl->Imarkstack);
15691         Copy(proto_perl->Imarkstack, PL_markstack,
15692              PL_markstack_ptr - PL_markstack + 1, I32);
15693
15694         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15695          * NOTE: unlike the others! */
15696         Newxz(PL_scopestack, PL_scopestack_max, I32);
15697         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15698
15699 #ifdef DEBUGGING
15700         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15701         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15702 #endif
15703         /* reset stack AV to correct length before its duped via
15704          * PL_curstackinfo */
15705         AvFILLp(proto_perl->Icurstack) =
15706                             proto_perl->Istack_sp - proto_perl->Istack_base;
15707
15708         /* NOTE: si_dup() looks at PL_markstack */
15709         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15710
15711         /* PL_curstack          = PL_curstackinfo->si_stack; */
15712         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15713         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15714
15715         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15716         PL_stack_base           = AvARRAY(PL_curstack);
15717         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15718                                                    - proto_perl->Istack_base);
15719         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15720
15721         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15722         PL_savestack            = ss_dup(proto_perl, param);
15723     }
15724     else {
15725         init_stacks();
15726         ENTER;                  /* perl_destruct() wants to LEAVE; */
15727     }
15728
15729     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15730     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15731
15732     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15733     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15734     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15735     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15736     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15737     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15738
15739     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15740
15741     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15742     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15743     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15744
15745     PL_stashcache       = newHV();
15746
15747     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15748                                             proto_perl->Iwatchaddr);
15749     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15750     if (PL_debug && PL_watchaddr) {
15751         PerlIO_printf(Perl_debug_log,
15752           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15753           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15754           PTR2UV(PL_watchok));
15755     }
15756
15757     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15758     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15759     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15760
15761     /* Call the ->CLONE method, if it exists, for each of the stashes
15762        identified by sv_dup() above.
15763     */
15764     while(av_tindex(param->stashes) != -1) {
15765         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15766         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15767         if (cloner && GvCV(cloner)) {
15768             dSP;
15769             ENTER;
15770             SAVETMPS;
15771             PUSHMARK(SP);
15772             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15773             PUTBACK;
15774             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15775             FREETMPS;
15776             LEAVE;
15777         }
15778     }
15779
15780     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15781         ptr_table_free(PL_ptr_table);
15782         PL_ptr_table = NULL;
15783     }
15784
15785     if (!(flags & CLONEf_COPY_STACKS)) {
15786         unreferenced_to_tmp_stack(param->unreferenced);
15787     }
15788
15789     SvREFCNT_dec(param->stashes);
15790
15791     /* orphaned? eg threads->new inside BEGIN or use */
15792     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15793         SvREFCNT_inc_simple_void(PL_compcv);
15794         SAVEFREESV(PL_compcv);
15795     }
15796
15797     return my_perl;
15798 }
15799
15800 static void
15801 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15802 {
15803     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15804     
15805     if (AvFILLp(unreferenced) > -1) {
15806         SV **svp = AvARRAY(unreferenced);
15807         SV **const last = svp + AvFILLp(unreferenced);
15808         SSize_t count = 0;
15809
15810         do {
15811             if (SvREFCNT(*svp) == 1)
15812                 ++count;
15813         } while (++svp <= last);
15814
15815         EXTEND_MORTAL(count);
15816         svp = AvARRAY(unreferenced);
15817
15818         do {
15819             if (SvREFCNT(*svp) == 1) {
15820                 /* Our reference is the only one to this SV. This means that
15821                    in this thread, the scalar effectively has a 0 reference.
15822                    That doesn't work (cleanup never happens), so donate our
15823                    reference to it onto the save stack. */
15824                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15825             } else {
15826                 /* As an optimisation, because we are already walking the
15827                    entire array, instead of above doing either
15828                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15829                    release our reference to the scalar, so that at the end of
15830                    the array owns zero references to the scalars it happens to
15831                    point to. We are effectively converting the array from
15832                    AvREAL() on to AvREAL() off. This saves the av_clear()
15833                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15834                    walking the array a second time.  */
15835                 SvREFCNT_dec(*svp);
15836             }
15837
15838         } while (++svp <= last);
15839         AvREAL_off(unreferenced);
15840     }
15841     SvREFCNT_dec_NN(unreferenced);
15842 }
15843
15844 void
15845 Perl_clone_params_del(CLONE_PARAMS *param)
15846 {
15847     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15848        happy: */
15849     PerlInterpreter *const to = param->new_perl;
15850     dTHXa(to);
15851     PerlInterpreter *const was = PERL_GET_THX;
15852
15853     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15854
15855     if (was != to) {
15856         PERL_SET_THX(to);
15857     }
15858
15859     SvREFCNT_dec(param->stashes);
15860     if (param->unreferenced)
15861         unreferenced_to_tmp_stack(param->unreferenced);
15862
15863     Safefree(param);
15864
15865     if (was != to) {
15866         PERL_SET_THX(was);
15867     }
15868 }
15869
15870 CLONE_PARAMS *
15871 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15872 {
15873     dVAR;
15874     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15875        does a dTHX; to get the context from thread local storage.
15876        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15877        a version that passes in my_perl.  */
15878     PerlInterpreter *const was = PERL_GET_THX;
15879     CLONE_PARAMS *param;
15880
15881     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15882
15883     if (was != to) {
15884         PERL_SET_THX(to);
15885     }
15886
15887     /* Given that we've set the context, we can do this unshared.  */
15888     Newx(param, 1, CLONE_PARAMS);
15889
15890     param->flags = 0;
15891     param->proto_perl = from;
15892     param->new_perl = to;
15893     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15894     AvREAL_off(param->stashes);
15895     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15896
15897     if (was != to) {
15898         PERL_SET_THX(was);
15899     }
15900     return param;
15901 }
15902
15903 #endif /* USE_ITHREADS */
15904
15905 void
15906 Perl_init_constants(pTHX)
15907 {
15908     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15909     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15910     SvANY(&PL_sv_undef)         = NULL;
15911
15912     SvANY(&PL_sv_no)            = new_XPVNV();
15913     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15914     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15915                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15916                                   |SVp_POK|SVf_POK;
15917
15918     SvANY(&PL_sv_yes)           = new_XPVNV();
15919     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15920     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15921                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15922                                   |SVp_POK|SVf_POK;
15923
15924     SvANY(&PL_sv_zero)          = new_XPVNV();
15925     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
15926     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15927                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15928                                   |SVp_POK|SVf_POK
15929                                   |SVs_PADTMP;
15930
15931     SvPV_set(&PL_sv_no, (char*)PL_No);
15932     SvCUR_set(&PL_sv_no, 0);
15933     SvLEN_set(&PL_sv_no, 0);
15934     SvIV_set(&PL_sv_no, 0);
15935     SvNV_set(&PL_sv_no, 0);
15936
15937     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15938     SvCUR_set(&PL_sv_yes, 1);
15939     SvLEN_set(&PL_sv_yes, 0);
15940     SvIV_set(&PL_sv_yes, 1);
15941     SvNV_set(&PL_sv_yes, 1);
15942
15943     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
15944     SvCUR_set(&PL_sv_zero, 1);
15945     SvLEN_set(&PL_sv_zero, 0);
15946     SvIV_set(&PL_sv_zero, 0);
15947     SvNV_set(&PL_sv_zero, 0);
15948
15949     PadnamePV(&PL_padname_const) = (char *)PL_No;
15950
15951     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
15952     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
15953     assert(SvIMMORTAL_INTERP(&PL_sv_no));
15954     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
15955
15956     assert(SvIMMORTAL(&PL_sv_yes));
15957     assert(SvIMMORTAL(&PL_sv_undef));
15958     assert(SvIMMORTAL(&PL_sv_no));
15959     assert(SvIMMORTAL(&PL_sv_zero));
15960
15961     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
15962     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
15963     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
15964     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
15965
15966     assert( SvTRUE_nomg_NN(&PL_sv_yes));
15967     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
15968     assert(!SvTRUE_nomg_NN(&PL_sv_no));
15969     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
15970 }
15971
15972 /*
15973 =head1 Unicode Support
15974
15975 =for apidoc sv_recode_to_utf8
15976
15977 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15978 of C<sv> is assumed to be octets in that encoding, and C<sv>
15979 will be converted into Unicode (and UTF-8).
15980
15981 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15982 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15983 an C<Encode::XS> Encoding object, bad things will happen.
15984 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15985
15986 The PV of C<sv> is returned.
15987
15988 =cut */
15989
15990 char *
15991 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15992 {
15993     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15994
15995     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15996         SV *uni;
15997         STRLEN len;
15998         const char *s;
15999         dSP;
16000         SV *nsv = sv;
16001         ENTER;
16002         PUSHSTACK;
16003         SAVETMPS;
16004         if (SvPADTMP(nsv)) {
16005             nsv = sv_newmortal();
16006             SvSetSV_nosteal(nsv, sv);
16007         }
16008         save_re_context();
16009         PUSHMARK(sp);
16010         EXTEND(SP, 3);
16011         PUSHs(encoding);
16012         PUSHs(nsv);
16013 /*
16014   NI-S 2002/07/09
16015   Passing sv_yes is wrong - it needs to be or'ed set of constants
16016   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16017   remove converted chars from source.
16018
16019   Both will default the value - let them.
16020
16021         XPUSHs(&PL_sv_yes);
16022 */
16023         PUTBACK;
16024         call_method("decode", G_SCALAR);
16025         SPAGAIN;
16026         uni = POPs;
16027         PUTBACK;
16028         s = SvPV_const(uni, len);
16029         if (s != SvPVX_const(sv)) {
16030             SvGROW(sv, len + 1);
16031             Move(s, SvPVX(sv), len + 1, char);
16032             SvCUR_set(sv, len);
16033         }
16034         FREETMPS;
16035         POPSTACK;
16036         LEAVE;
16037         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16038             /* clear pos and any utf8 cache */
16039             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16040             if (mg)
16041                 mg->mg_len = -1;
16042             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16043                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16044         }
16045         SvUTF8_on(sv);
16046         return SvPVX(sv);
16047     }
16048     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16049 }
16050
16051 /*
16052 =for apidoc sv_cat_decode
16053
16054 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16055 assumed to be octets in that encoding and decoding the input starts
16056 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16057 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16058 when the string C<tstr> appears in decoding output or the input ends on
16059 the PV of C<ssv>.  The value which C<offset> points will be modified
16060 to the last input position on C<ssv>.
16061
16062 Returns TRUE if the terminator was found, else returns FALSE.
16063
16064 =cut */
16065
16066 bool
16067 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16068                    SV *ssv, int *offset, char *tstr, int tlen)
16069 {
16070     bool ret = FALSE;
16071
16072     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16073
16074     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16075         SV *offsv;
16076         dSP;
16077         ENTER;
16078         SAVETMPS;
16079         save_re_context();
16080         PUSHMARK(sp);
16081         EXTEND(SP, 6);
16082         PUSHs(encoding);
16083         PUSHs(dsv);
16084         PUSHs(ssv);
16085         offsv = newSViv(*offset);
16086         mPUSHs(offsv);
16087         mPUSHp(tstr, tlen);
16088         PUTBACK;
16089         call_method("cat_decode", G_SCALAR);
16090         SPAGAIN;
16091         ret = SvTRUE(TOPs);
16092         *offset = SvIV(offsv);
16093         PUTBACK;
16094         FREETMPS;
16095         LEAVE;
16096     }
16097     else
16098         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16099     return ret;
16100
16101 }
16102
16103 /* ---------------------------------------------------------------------
16104  *
16105  * support functions for report_uninit()
16106  */
16107
16108 /* the maxiumum size of array or hash where we will scan looking
16109  * for the undefined element that triggered the warning */
16110
16111 #define FUV_MAX_SEARCH_SIZE 1000
16112
16113 /* Look for an entry in the hash whose value has the same SV as val;
16114  * If so, return a mortal copy of the key. */
16115
16116 STATIC SV*
16117 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16118 {
16119     dVAR;
16120     HE **array;
16121     I32 i;
16122
16123     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16124
16125     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16126                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16127         return NULL;
16128
16129     array = HvARRAY(hv);
16130
16131     for (i=HvMAX(hv); i>=0; i--) {
16132         HE *entry;
16133         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16134             if (HeVAL(entry) != val)
16135                 continue;
16136             if (    HeVAL(entry) == &PL_sv_undef ||
16137                     HeVAL(entry) == &PL_sv_placeholder)
16138                 continue;
16139             if (!HeKEY(entry))
16140                 return NULL;
16141             if (HeKLEN(entry) == HEf_SVKEY)
16142                 return sv_mortalcopy(HeKEY_sv(entry));
16143             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16144         }
16145     }
16146     return NULL;
16147 }
16148
16149 /* Look for an entry in the array whose value has the same SV as val;
16150  * If so, return the index, otherwise return -1. */
16151
16152 STATIC SSize_t
16153 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16154 {
16155     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16156
16157     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16158                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16159         return -1;
16160
16161     if (val != &PL_sv_undef) {
16162         SV ** const svp = AvARRAY(av);
16163         SSize_t i;
16164
16165         for (i=AvFILLp(av); i>=0; i--)
16166             if (svp[i] == val)
16167                 return i;
16168     }
16169     return -1;
16170 }
16171
16172 /* varname(): return the name of a variable, optionally with a subscript.
16173  * If gv is non-zero, use the name of that global, along with gvtype (one
16174  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16175  * targ.  Depending on the value of the subscript_type flag, return:
16176  */
16177
16178 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16179 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16180 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16181 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16182
16183 SV*
16184 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16185         const SV *const keyname, SSize_t aindex, int subscript_type)
16186 {
16187
16188     SV * const name = sv_newmortal();
16189     if (gv && isGV(gv)) {
16190         char buffer[2];
16191         buffer[0] = gvtype;
16192         buffer[1] = 0;
16193
16194         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16195
16196         gv_fullname4(name, gv, buffer, 0);
16197
16198         if ((unsigned int)SvPVX(name)[1] <= 26) {
16199             buffer[0] = '^';
16200             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16201
16202             /* Swap the 1 unprintable control character for the 2 byte pretty
16203                version - ie substr($name, 1, 1) = $buffer; */
16204             sv_insert(name, 1, 1, buffer, 2);
16205         }
16206     }
16207     else {
16208         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16209         PADNAME *sv;
16210
16211         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16212
16213         if (!cv || !CvPADLIST(cv))
16214             return NULL;
16215         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16216         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16217         SvUTF8_on(name);
16218     }
16219
16220     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16221         SV * const sv = newSV(0);
16222         STRLEN len;
16223         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16224
16225         *SvPVX(name) = '$';
16226         Perl_sv_catpvf(aTHX_ name, "{%s}",
16227             pv_pretty(sv, pv, len, 32, NULL, NULL,
16228                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16229         SvREFCNT_dec_NN(sv);
16230     }
16231     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16232         *SvPVX(name) = '$';
16233         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16234     }
16235     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16236         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16237         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16238     }
16239
16240     return name;
16241 }
16242
16243
16244 /*
16245 =for apidoc find_uninit_var
16246
16247 Find the name of the undefined variable (if any) that caused the operator
16248 to issue a "Use of uninitialized value" warning.
16249 If match is true, only return a name if its value matches C<uninit_sv>.
16250 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16251 warning, then following the direct child of the op may yield an
16252 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16253 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16254 the variable name if we get an exact match.
16255 C<desc_p> points to a string pointer holding the description of the op.
16256 This may be updated if needed.
16257
16258 The name is returned as a mortal SV.
16259
16260 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16261 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16262
16263 =cut
16264 */
16265
16266 STATIC SV *
16267 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16268                   bool match, const char **desc_p)
16269 {
16270     dVAR;
16271     SV *sv;
16272     const GV *gv;
16273     const OP *o, *o2, *kid;
16274
16275     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16276
16277     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16278                             uninit_sv == &PL_sv_placeholder)))
16279         return NULL;
16280
16281     switch (obase->op_type) {
16282
16283     case OP_UNDEF:
16284         /* undef should care if its args are undef - any warnings
16285          * will be from tied/magic vars */
16286         break;
16287
16288     case OP_RV2AV:
16289     case OP_RV2HV:
16290     case OP_PADAV:
16291     case OP_PADHV:
16292       {
16293         const bool pad  = (    obase->op_type == OP_PADAV
16294                             || obase->op_type == OP_PADHV
16295                             || obase->op_type == OP_PADRANGE
16296                           );
16297
16298         const bool hash = (    obase->op_type == OP_PADHV
16299                             || obase->op_type == OP_RV2HV
16300                             || (obase->op_type == OP_PADRANGE
16301                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16302                           );
16303         SSize_t index = 0;
16304         SV *keysv = NULL;
16305         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16306
16307         if (pad) { /* @lex, %lex */
16308             sv = PAD_SVl(obase->op_targ);
16309             gv = NULL;
16310         }
16311         else {
16312             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16313             /* @global, %global */
16314                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16315                 if (!gv)
16316                     break;
16317                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16318             }
16319             else if (obase == PL_op) /* @{expr}, %{expr} */
16320                 return find_uninit_var(cUNOPx(obase)->op_first,
16321                                                 uninit_sv, match, desc_p);
16322             else /* @{expr}, %{expr} as a sub-expression */
16323                 return NULL;
16324         }
16325
16326         /* attempt to find a match within the aggregate */
16327         if (hash) {
16328             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16329             if (keysv)
16330                 subscript_type = FUV_SUBSCRIPT_HASH;
16331         }
16332         else {
16333             index = find_array_subscript((const AV *)sv, uninit_sv);
16334             if (index >= 0)
16335                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16336         }
16337
16338         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16339             break;
16340
16341         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16342                                     keysv, index, subscript_type);
16343       }
16344
16345     case OP_RV2SV:
16346         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16347             /* $global */
16348             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16349             if (!gv || !GvSTASH(gv))
16350                 break;
16351             if (match && (GvSV(gv) != uninit_sv))
16352                 break;
16353             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16354         }
16355         /* ${expr} */
16356         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16357
16358     case OP_PADSV:
16359         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16360             break;
16361         return varname(NULL, '$', obase->op_targ,
16362                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16363
16364     case OP_GVSV:
16365         gv = cGVOPx_gv(obase);
16366         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16367             break;
16368         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16369
16370     case OP_AELEMFAST_LEX:
16371         if (match) {
16372             SV **svp;
16373             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16374             if (!av || SvRMAGICAL(av))
16375                 break;
16376             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16377             if (!svp || *svp != uninit_sv)
16378                 break;
16379         }
16380         return varname(NULL, '$', obase->op_targ,
16381                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16382     case OP_AELEMFAST:
16383         {
16384             gv = cGVOPx_gv(obase);
16385             if (!gv)
16386                 break;
16387             if (match) {
16388                 SV **svp;
16389                 AV *const av = GvAV(gv);
16390                 if (!av || SvRMAGICAL(av))
16391                     break;
16392                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16393                 if (!svp || *svp != uninit_sv)
16394                     break;
16395             }
16396             return varname(gv, '$', 0,
16397                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16398         }
16399         NOT_REACHED; /* NOTREACHED */
16400
16401     case OP_EXISTS:
16402         o = cUNOPx(obase)->op_first;
16403         if (!o || o->op_type != OP_NULL ||
16404                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16405             break;
16406         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16407
16408     case OP_AELEM:
16409     case OP_HELEM:
16410     {
16411         bool negate = FALSE;
16412
16413         if (PL_op == obase)
16414             /* $a[uninit_expr] or $h{uninit_expr} */
16415             return find_uninit_var(cBINOPx(obase)->op_last,
16416                                                 uninit_sv, match, desc_p);
16417
16418         gv = NULL;
16419         o = cBINOPx(obase)->op_first;
16420         kid = cBINOPx(obase)->op_last;
16421
16422         /* get the av or hv, and optionally the gv */
16423         sv = NULL;
16424         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16425             sv = PAD_SV(o->op_targ);
16426         }
16427         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16428                 && cUNOPo->op_first->op_type == OP_GV)
16429         {
16430             gv = cGVOPx_gv(cUNOPo->op_first);
16431             if (!gv)
16432                 break;
16433             sv = o->op_type
16434                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16435         }
16436         if (!sv)
16437             break;
16438
16439         if (kid && kid->op_type == OP_NEGATE) {
16440             negate = TRUE;
16441             kid = cUNOPx(kid)->op_first;
16442         }
16443
16444         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16445             /* index is constant */
16446             SV* kidsv;
16447             if (negate) {
16448                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16449                 sv_catsv(kidsv, cSVOPx_sv(kid));
16450             }
16451             else
16452                 kidsv = cSVOPx_sv(kid);
16453             if (match) {
16454                 if (SvMAGICAL(sv))
16455                     break;
16456                 if (obase->op_type == OP_HELEM) {
16457                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16458                     if (!he || HeVAL(he) != uninit_sv)
16459                         break;
16460                 }
16461                 else {
16462                     SV * const  opsv = cSVOPx_sv(kid);
16463                     const IV  opsviv = SvIV(opsv);
16464                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16465                         negate ? - opsviv : opsviv,
16466                         FALSE);
16467                     if (!svp || *svp != uninit_sv)
16468                         break;
16469                 }
16470             }
16471             if (obase->op_type == OP_HELEM)
16472                 return varname(gv, '%', o->op_targ,
16473                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16474             else
16475                 return varname(gv, '@', o->op_targ, NULL,
16476                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16477                     FUV_SUBSCRIPT_ARRAY);
16478         }
16479         else  {
16480             /* index is an expression;
16481              * attempt to find a match within the aggregate */
16482             if (obase->op_type == OP_HELEM) {
16483                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16484                 if (keysv)
16485                     return varname(gv, '%', o->op_targ,
16486                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16487             }
16488             else {
16489                 const SSize_t index
16490                     = find_array_subscript((const AV *)sv, uninit_sv);
16491                 if (index >= 0)
16492                     return varname(gv, '@', o->op_targ,
16493                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16494             }
16495             if (match)
16496                 break;
16497             return varname(gv,
16498                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16499                 ? '@' : '%'),
16500                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16501         }
16502         NOT_REACHED; /* NOTREACHED */
16503     }
16504
16505     case OP_MULTIDEREF: {
16506         /* If we were executing OP_MULTIDEREF when the undef warning
16507          * triggered, then it must be one of the index values within
16508          * that triggered it. If not, then the only possibility is that
16509          * the value retrieved by the last aggregate index might be the
16510          * culprit. For the former, we set PL_multideref_pc each time before
16511          * using an index, so work though the item list until we reach
16512          * that point. For the latter, just work through the entire item
16513          * list; the last aggregate retrieved will be the candidate.
16514          * There is a third rare possibility: something triggered
16515          * magic while fetching an array/hash element. Just display
16516          * nothing in this case.
16517          */
16518
16519         /* the named aggregate, if any */
16520         PADOFFSET agg_targ = 0;
16521         GV       *agg_gv   = NULL;
16522         /* the last-seen index */
16523         UV        index_type;
16524         PADOFFSET index_targ;
16525         GV       *index_gv;
16526         IV        index_const_iv = 0; /* init for spurious compiler warn */
16527         SV       *index_const_sv;
16528         int       depth = 0;  /* how many array/hash lookups we've done */
16529
16530         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16531         UNOP_AUX_item *last = NULL;
16532         UV actions = items->uv;
16533         bool is_hv;
16534
16535         if (PL_op == obase) {
16536             last = PL_multideref_pc;
16537             assert(last >= items && last <= items + items[-1].uv);
16538         }
16539
16540         assert(actions);
16541
16542         while (1) {
16543             is_hv = FALSE;
16544             switch (actions & MDEREF_ACTION_MASK) {
16545
16546             case MDEREF_reload:
16547                 actions = (++items)->uv;
16548                 continue;
16549
16550             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16551                 is_hv = TRUE;
16552                 /* FALLTHROUGH */
16553             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16554                 agg_targ = (++items)->pad_offset;
16555                 agg_gv = NULL;
16556                 break;
16557
16558             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16559                 is_hv = TRUE;
16560                 /* FALLTHROUGH */
16561             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16562                 agg_targ = 0;
16563                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16564                 assert(isGV_with_GP(agg_gv));
16565                 break;
16566
16567             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16568             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16569                 ++items;
16570                 /* FALLTHROUGH */
16571             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16572             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16573                 agg_targ = 0;
16574                 agg_gv   = NULL;
16575                 is_hv    = TRUE;
16576                 break;
16577
16578             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16579             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16580                 ++items;
16581                 /* FALLTHROUGH */
16582             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16583             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16584                 agg_targ = 0;
16585                 agg_gv   = NULL;
16586             } /* switch */
16587
16588             index_targ     = 0;
16589             index_gv       = NULL;
16590             index_const_sv = NULL;
16591
16592             index_type = (actions & MDEREF_INDEX_MASK);
16593             switch (index_type) {
16594             case MDEREF_INDEX_none:
16595                 break;
16596             case MDEREF_INDEX_const:
16597                 if (is_hv)
16598                     index_const_sv = UNOP_AUX_item_sv(++items)
16599                 else
16600                     index_const_iv = (++items)->iv;
16601                 break;
16602             case MDEREF_INDEX_padsv:
16603                 index_targ = (++items)->pad_offset;
16604                 break;
16605             case MDEREF_INDEX_gvsv:
16606                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16607                 assert(isGV_with_GP(index_gv));
16608                 break;
16609             }
16610
16611             if (index_type != MDEREF_INDEX_none)
16612                 depth++;
16613
16614             if (   index_type == MDEREF_INDEX_none
16615                 || (actions & MDEREF_FLAG_last)
16616                 || (last && items >= last)
16617             )
16618                 break;
16619
16620             actions >>= MDEREF_SHIFT;
16621         } /* while */
16622
16623         if (PL_op == obase) {
16624             /* most likely index was undef */
16625
16626             *desc_p = (    (actions & MDEREF_FLAG_last)
16627                         && (obase->op_private
16628                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16629                         ?
16630                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16631                                 ? "exists"
16632                                 : "delete"
16633                         : is_hv ? "hash element" : "array element";
16634             assert(index_type != MDEREF_INDEX_none);
16635             if (index_gv) {
16636                 if (GvSV(index_gv) == uninit_sv)
16637                     return varname(index_gv, '$', 0, NULL, 0,
16638                                                     FUV_SUBSCRIPT_NONE);
16639                 else
16640                     return NULL;
16641             }
16642             if (index_targ) {
16643                 if (PL_curpad[index_targ] == uninit_sv)
16644                     return varname(NULL, '$', index_targ,
16645                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16646                 else
16647                     return NULL;
16648             }
16649             /* If we got to this point it was undef on a const subscript,
16650              * so magic probably involved, e.g. $ISA[0]. Give up. */
16651             return NULL;
16652         }
16653
16654         /* the SV returned by pp_multideref() was undef, if anything was */
16655
16656         if (depth != 1)
16657             break;
16658
16659         if (agg_targ)
16660             sv = PAD_SV(agg_targ);
16661         else if (agg_gv)
16662             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16663         else
16664             break;
16665
16666         if (index_type == MDEREF_INDEX_const) {
16667             if (match) {
16668                 if (SvMAGICAL(sv))
16669                     break;
16670                 if (is_hv) {
16671                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16672                     if (!he || HeVAL(he) != uninit_sv)
16673                         break;
16674                 }
16675                 else {
16676                     SV * const * const svp =
16677                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16678                     if (!svp || *svp != uninit_sv)
16679                         break;
16680                 }
16681             }
16682             return is_hv
16683                 ? varname(agg_gv, '%', agg_targ,
16684                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16685                 : varname(agg_gv, '@', agg_targ,
16686                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16687         }
16688         else  {
16689             /* index is an var */
16690             if (is_hv) {
16691                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16692                 if (keysv)
16693                     return varname(agg_gv, '%', agg_targ,
16694                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16695             }
16696             else {
16697                 const SSize_t index
16698                     = find_array_subscript((const AV *)sv, uninit_sv);
16699                 if (index >= 0)
16700                     return varname(agg_gv, '@', agg_targ,
16701                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16702             }
16703             if (match)
16704                 break;
16705             return varname(agg_gv,
16706                 is_hv ? '%' : '@',
16707                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16708         }
16709         NOT_REACHED; /* NOTREACHED */
16710     }
16711
16712     case OP_AASSIGN:
16713         /* only examine RHS */
16714         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16715                                                                 match, desc_p);
16716
16717     case OP_OPEN:
16718         o = cUNOPx(obase)->op_first;
16719         if (   o->op_type == OP_PUSHMARK
16720            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16721         )
16722             o = OpSIBLING(o);
16723
16724         if (!OpHAS_SIBLING(o)) {
16725             /* one-arg version of open is highly magical */
16726
16727             if (o->op_type == OP_GV) { /* open FOO; */
16728                 gv = cGVOPx_gv(o);
16729                 if (match && GvSV(gv) != uninit_sv)
16730                     break;
16731                 return varname(gv, '$', 0,
16732                             NULL, 0, FUV_SUBSCRIPT_NONE);
16733             }
16734             /* other possibilities not handled are:
16735              * open $x; or open my $x;  should return '${*$x}'
16736              * open expr;               should return '$'.expr ideally
16737              */
16738              break;
16739         }
16740         match = 1;
16741         goto do_op;
16742
16743     /* ops where $_ may be an implicit arg */
16744     case OP_TRANS:
16745     case OP_TRANSR:
16746     case OP_SUBST:
16747     case OP_MATCH:
16748         if ( !(obase->op_flags & OPf_STACKED)) {
16749             if (uninit_sv == DEFSV)
16750                 return newSVpvs_flags("$_", SVs_TEMP);
16751             else if (obase->op_targ
16752                   && uninit_sv == PAD_SVl(obase->op_targ))
16753                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16754                                FUV_SUBSCRIPT_NONE);
16755         }
16756         goto do_op;
16757
16758     case OP_PRTF:
16759     case OP_PRINT:
16760     case OP_SAY:
16761         match = 1; /* print etc can return undef on defined args */
16762         /* skip filehandle as it can't produce 'undef' warning  */
16763         o = cUNOPx(obase)->op_first;
16764         if ((obase->op_flags & OPf_STACKED)
16765             &&
16766                (   o->op_type == OP_PUSHMARK
16767                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16768             o = OpSIBLING(OpSIBLING(o));
16769         goto do_op2;
16770
16771
16772     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16773     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16774
16775         /* the following ops are capable of returning PL_sv_undef even for
16776          * defined arg(s) */
16777
16778     case OP_BACKTICK:
16779     case OP_PIPE_OP:
16780     case OP_FILENO:
16781     case OP_BINMODE:
16782     case OP_TIED:
16783     case OP_GETC:
16784     case OP_SYSREAD:
16785     case OP_SEND:
16786     case OP_IOCTL:
16787     case OP_SOCKET:
16788     case OP_SOCKPAIR:
16789     case OP_BIND:
16790     case OP_CONNECT:
16791     case OP_LISTEN:
16792     case OP_ACCEPT:
16793     case OP_SHUTDOWN:
16794     case OP_SSOCKOPT:
16795     case OP_GETPEERNAME:
16796     case OP_FTRREAD:
16797     case OP_FTRWRITE:
16798     case OP_FTREXEC:
16799     case OP_FTROWNED:
16800     case OP_FTEREAD:
16801     case OP_FTEWRITE:
16802     case OP_FTEEXEC:
16803     case OP_FTEOWNED:
16804     case OP_FTIS:
16805     case OP_FTZERO:
16806     case OP_FTSIZE:
16807     case OP_FTFILE:
16808     case OP_FTDIR:
16809     case OP_FTLINK:
16810     case OP_FTPIPE:
16811     case OP_FTSOCK:
16812     case OP_FTBLK:
16813     case OP_FTCHR:
16814     case OP_FTTTY:
16815     case OP_FTSUID:
16816     case OP_FTSGID:
16817     case OP_FTSVTX:
16818     case OP_FTTEXT:
16819     case OP_FTBINARY:
16820     case OP_FTMTIME:
16821     case OP_FTATIME:
16822     case OP_FTCTIME:
16823     case OP_READLINK:
16824     case OP_OPEN_DIR:
16825     case OP_READDIR:
16826     case OP_TELLDIR:
16827     case OP_SEEKDIR:
16828     case OP_REWINDDIR:
16829     case OP_CLOSEDIR:
16830     case OP_GMTIME:
16831     case OP_ALARM:
16832     case OP_SEMGET:
16833     case OP_GETLOGIN:
16834     case OP_SUBSTR:
16835     case OP_AEACH:
16836     case OP_EACH:
16837     case OP_SORT:
16838     case OP_CALLER:
16839     case OP_DOFILE:
16840     case OP_PROTOTYPE:
16841     case OP_NCMP:
16842     case OP_SMARTMATCH:
16843     case OP_UNPACK:
16844     case OP_SYSOPEN:
16845     case OP_SYSSEEK:
16846         match = 1;
16847         goto do_op;
16848
16849     case OP_ENTERSUB:
16850     case OP_GOTO:
16851         /* XXX tmp hack: these two may call an XS sub, and currently
16852           XS subs don't have a SUB entry on the context stack, so CV and
16853           pad determination goes wrong, and BAD things happen. So, just
16854           don't try to determine the value under those circumstances.
16855           Need a better fix at dome point. DAPM 11/2007 */
16856         break;
16857
16858     case OP_FLIP:
16859     case OP_FLOP:
16860     {
16861         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16862         if (gv && GvSV(gv) == uninit_sv)
16863             return newSVpvs_flags("$.", SVs_TEMP);
16864         goto do_op;
16865     }
16866
16867     case OP_POS:
16868         /* def-ness of rval pos() is independent of the def-ness of its arg */
16869         if ( !(obase->op_flags & OPf_MOD))
16870             break;
16871
16872     case OP_SCHOMP:
16873     case OP_CHOMP:
16874         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16875             return newSVpvs_flags("${$/}", SVs_TEMP);
16876         /* FALLTHROUGH */
16877
16878     default:
16879     do_op:
16880         if (!(obase->op_flags & OPf_KIDS))
16881             break;
16882         o = cUNOPx(obase)->op_first;
16883         
16884     do_op2:
16885         if (!o)
16886             break;
16887
16888         /* This loop checks all the kid ops, skipping any that cannot pos-
16889          * sibly be responsible for the uninitialized value; i.e., defined
16890          * constants and ops that return nothing.  If there is only one op
16891          * left that is not skipped, then we *know* it is responsible for
16892          * the uninitialized value.  If there is more than one op left, we
16893          * have to look for an exact match in the while() loop below.
16894          * Note that we skip padrange, because the individual pad ops that
16895          * it replaced are still in the tree, so we work on them instead.
16896          */
16897         o2 = NULL;
16898         for (kid=o; kid; kid = OpSIBLING(kid)) {
16899             const OPCODE type = kid->op_type;
16900             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16901               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16902               || (type == OP_PUSHMARK)
16903               || (type == OP_PADRANGE)
16904             )
16905             continue;
16906
16907             if (o2) { /* more than one found */
16908                 o2 = NULL;
16909                 break;
16910             }
16911             o2 = kid;
16912         }
16913         if (o2)
16914             return find_uninit_var(o2, uninit_sv, match, desc_p);
16915
16916         /* scan all args */
16917         while (o) {
16918             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16919             if (sv)
16920                 return sv;
16921             o = OpSIBLING(o);
16922         }
16923         break;
16924     }
16925     return NULL;
16926 }
16927
16928
16929 /*
16930 =for apidoc report_uninit
16931
16932 Print appropriate "Use of uninitialized variable" warning.
16933
16934 =cut
16935 */
16936
16937 void
16938 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16939 {
16940     const char *desc = NULL;
16941     SV* varname = NULL;
16942
16943     if (PL_op) {
16944         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16945                 ? "join or string"
16946                 : OP_DESC(PL_op);
16947         if (uninit_sv && PL_curpad) {
16948             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16949             if (varname)
16950                 sv_insert(varname, 0, 0, " ", 1);
16951         }
16952     }
16953     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16954         /* we've reached the end of a sort block or sub,
16955          * and the uninit value is probably what that code returned */
16956         desc = "sort";
16957
16958     /* PL_warn_uninit_sv is constant */
16959     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16960     if (desc)
16961         /* diag_listed_as: Use of uninitialized value%s */
16962         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16963                 SVfARG(varname ? varname : &PL_sv_no),
16964                 " in ", desc);
16965     else
16966         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16967                 "", "", "");
16968     GCC_DIAG_RESTORE;
16969 }
16970
16971 /*
16972  * ex: set ts=8 sts=4 sw=4 et:
16973  */