This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Better wording.
[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 *referant = 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             referant = 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 (UNLIKELY(new_type == SVt_REGEXP))
1466             sv->sv_u.svu_rx = (regexp *)new_body;
1467         else if (old_type < SVt_PV) {
1468             /* referant will be NULL unless the old type was SVt_IV emulating
1469                SVt_RV */
1470             sv->sv_u.svu_rv = referant;
1471         }
1472         break;
1473     default:
1474         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1475                    (unsigned long)new_type);
1476     }
1477
1478     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1479        and sometimes SVt_NV */
1480     if (old_type_details->body_size) {
1481 #ifdef PURIFY
1482         safefree(old_body);
1483 #else
1484         /* Note that there is an assumption that all bodies of types that
1485            can be upgraded came from arenas. Only the more complex non-
1486            upgradable types are allowed to be directly malloc()ed.  */
1487         assert(old_type_details->arena);
1488         del_body((void*)((char*)old_body + old_type_details->offset),
1489                  &PL_body_roots[old_type]);
1490 #endif
1491     }
1492 }
1493
1494 /*
1495 =for apidoc sv_backoff
1496
1497 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1498 wrapper instead.
1499
1500 =cut
1501 */
1502
1503 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1504    prior to 5.23.4 this function always returned 0
1505 */
1506
1507 void
1508 Perl_sv_backoff(SV *const sv)
1509 {
1510     STRLEN delta;
1511     const char * const s = SvPVX_const(sv);
1512
1513     PERL_ARGS_ASSERT_SV_BACKOFF;
1514
1515     assert(SvOOK(sv));
1516     assert(SvTYPE(sv) != SVt_PVHV);
1517     assert(SvTYPE(sv) != SVt_PVAV);
1518
1519     SvOOK_offset(sv, delta);
1520     
1521     SvLEN_set(sv, SvLEN(sv) + delta);
1522     SvPV_set(sv, SvPVX(sv) - delta);
1523     SvFLAGS(sv) &= ~SVf_OOK;
1524     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1525     return;
1526 }
1527
1528 /*
1529 =for apidoc sv_grow
1530
1531 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1532 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1533 Use the C<SvGROW> wrapper instead.
1534
1535 =cut
1536 */
1537
1538 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1539
1540 char *
1541 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1542 {
1543     char *s;
1544
1545     PERL_ARGS_ASSERT_SV_GROW;
1546
1547     if (SvROK(sv))
1548         sv_unref(sv);
1549     if (SvTYPE(sv) < SVt_PV) {
1550         sv_upgrade(sv, SVt_PV);
1551         s = SvPVX_mutable(sv);
1552     }
1553     else if (SvOOK(sv)) {       /* pv is offset? */
1554         sv_backoff(sv);
1555         s = SvPVX_mutable(sv);
1556         if (newlen > SvLEN(sv))
1557             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1558     }
1559     else
1560     {
1561         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1562         s = SvPVX_mutable(sv);
1563     }
1564
1565 #ifdef PERL_COPY_ON_WRITE
1566     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1567      * to store the COW count. So in general, allocate one more byte than
1568      * asked for, to make it likely this byte is always spare: and thus
1569      * make more strings COW-able.
1570      * If the new size is a big power of two, don't bother: we assume the
1571      * caller wanted a nice 2^N sized block and will be annoyed at getting
1572      * 2^N+1.
1573      * Only increment if the allocation isn't MEM_SIZE_MAX,
1574      * otherwise it will wrap to 0.
1575      */
1576     if (newlen & 0xff && 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, (newlen < SvCUR(sv)) ? newlen : 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         break;
1657     default: NOOP;
1658     }
1659     (void)SvIOK_only(sv);                       /* validate number */
1660     SvIV_set(sv, i);
1661     SvTAINT(sv);
1662 }
1663
1664 /*
1665 =for apidoc sv_setiv_mg
1666
1667 Like C<sv_setiv>, but also handles 'set' magic.
1668
1669 =cut
1670 */
1671
1672 void
1673 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1674 {
1675     PERL_ARGS_ASSERT_SV_SETIV_MG;
1676
1677     sv_setiv(sv,i);
1678     SvSETMAGIC(sv);
1679 }
1680
1681 /*
1682 =for apidoc sv_setuv
1683
1684 Copies an unsigned integer into the given SV, upgrading first if necessary.
1685 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1686
1687 =cut
1688 */
1689
1690 void
1691 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1692 {
1693     PERL_ARGS_ASSERT_SV_SETUV;
1694
1695     /* With the if statement to ensure that integers are stored as IVs whenever
1696        possible:
1697        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1698
1699        without
1700        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1701
1702        If you wish to remove the following if statement, so that this routine
1703        (and its callers) always return UVs, please benchmark to see what the
1704        effect is. Modern CPUs may be different. Or may not :-)
1705     */
1706     if (u <= (UV)IV_MAX) {
1707        sv_setiv(sv, (IV)u);
1708        return;
1709     }
1710     sv_setiv(sv, 0);
1711     SvIsUV_on(sv);
1712     SvUV_set(sv, u);
1713 }
1714
1715 /*
1716 =for apidoc sv_setuv_mg
1717
1718 Like C<sv_setuv>, but also handles 'set' magic.
1719
1720 =cut
1721 */
1722
1723 void
1724 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1725 {
1726     PERL_ARGS_ASSERT_SV_SETUV_MG;
1727
1728     sv_setuv(sv,u);
1729     SvSETMAGIC(sv);
1730 }
1731
1732 /*
1733 =for apidoc sv_setnv
1734
1735 Copies a double into the given SV, upgrading first if necessary.
1736 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1737
1738 =cut
1739 */
1740
1741 void
1742 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1743 {
1744     PERL_ARGS_ASSERT_SV_SETNV;
1745
1746     SV_CHECK_THINKFIRST_COW_DROP(sv);
1747     switch (SvTYPE(sv)) {
1748     case SVt_NULL:
1749     case SVt_IV:
1750         sv_upgrade(sv, SVt_NV);
1751         break;
1752     case SVt_PV:
1753     case SVt_PVIV:
1754         sv_upgrade(sv, SVt_PVNV);
1755         break;
1756
1757     case SVt_PVGV:
1758         if (!isGV_with_GP(sv))
1759             break;
1760     case SVt_PVAV:
1761     case SVt_PVHV:
1762     case SVt_PVCV:
1763     case SVt_PVFM:
1764     case SVt_PVIO:
1765         /* diag_listed_as: Can't coerce %s to %s in %s */
1766         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1767                    OP_DESC(PL_op));
1768         break;
1769     default: NOOP;
1770     }
1771     SvNV_set(sv, num);
1772     (void)SvNOK_only(sv);                       /* validate number */
1773     SvTAINT(sv);
1774 }
1775
1776 /*
1777 =for apidoc sv_setnv_mg
1778
1779 Like C<sv_setnv>, but also handles 'set' magic.
1780
1781 =cut
1782 */
1783
1784 void
1785 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1786 {
1787     PERL_ARGS_ASSERT_SV_SETNV_MG;
1788
1789     sv_setnv(sv,num);
1790     SvSETMAGIC(sv);
1791 }
1792
1793 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1794  * not incrementable warning display.
1795  * Originally part of S_not_a_number().
1796  * The return value may be != tmpbuf.
1797  */
1798
1799 STATIC const char *
1800 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1801     const char *pv;
1802
1803      PERL_ARGS_ASSERT_SV_DISPLAY;
1804
1805      if (DO_UTF8(sv)) {
1806           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1807           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1808      } else {
1809           char *d = tmpbuf;
1810           const char * const limit = tmpbuf + tmpbuf_size - 8;
1811           /* each *s can expand to 4 chars + "...\0",
1812              i.e. need room for 8 chars */
1813         
1814           const char *s = SvPVX_const(sv);
1815           const char * const end = s + SvCUR(sv);
1816           for ( ; s < end && d < limit; s++ ) {
1817                int ch = *s & 0xFF;
1818                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1819                     *d++ = 'M';
1820                     *d++ = '-';
1821
1822                     /* Map to ASCII "equivalent" of Latin1 */
1823                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1824                }
1825                if (ch == '\n') {
1826                     *d++ = '\\';
1827                     *d++ = 'n';
1828                }
1829                else if (ch == '\r') {
1830                     *d++ = '\\';
1831                     *d++ = 'r';
1832                }
1833                else if (ch == '\f') {
1834                     *d++ = '\\';
1835                     *d++ = 'f';
1836                }
1837                else if (ch == '\\') {
1838                     *d++ = '\\';
1839                     *d++ = '\\';
1840                }
1841                else if (ch == '\0') {
1842                     *d++ = '\\';
1843                     *d++ = '0';
1844                }
1845                else if (isPRINT_LC(ch))
1846                     *d++ = ch;
1847                else {
1848                     *d++ = '^';
1849                     *d++ = toCTRL(ch);
1850                }
1851           }
1852           if (s < end) {
1853                *d++ = '.';
1854                *d++ = '.';
1855                *d++ = '.';
1856           }
1857           *d = '\0';
1858           pv = tmpbuf;
1859     }
1860
1861     return pv;
1862 }
1863
1864 /* Print an "isn't numeric" warning, using a cleaned-up,
1865  * printable version of the offending string
1866  */
1867
1868 STATIC void
1869 S_not_a_number(pTHX_ SV *const sv)
1870 {
1871      char tmpbuf[64];
1872      const char *pv;
1873
1874      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1875
1876      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1877
1878     if (PL_op)
1879         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1880                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1881                     "Argument \"%s\" isn't numeric in %s", pv,
1882                     OP_DESC(PL_op));
1883     else
1884         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1885                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1886                     "Argument \"%s\" isn't numeric", pv);
1887 }
1888
1889 STATIC void
1890 S_not_incrementable(pTHX_ SV *const sv) {
1891      char tmpbuf[64];
1892      const char *pv;
1893
1894      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1895
1896      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1897
1898      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1899                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1900 }
1901
1902 /*
1903 =for apidoc looks_like_number
1904
1905 Test if the content of an SV looks like a number (or is a number).
1906 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1907 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1908 ignored.
1909
1910 =cut
1911 */
1912
1913 I32
1914 Perl_looks_like_number(pTHX_ SV *const sv)
1915 {
1916     const char *sbegin;
1917     STRLEN len;
1918     int numtype;
1919
1920     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1921
1922     if (SvPOK(sv) || SvPOKp(sv)) {
1923         sbegin = SvPV_nomg_const(sv, len);
1924     }
1925     else
1926         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1927     numtype = grok_number(sbegin, len, NULL);
1928     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1929 }
1930
1931 STATIC bool
1932 S_glob_2number(pTHX_ GV * const gv)
1933 {
1934     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1935
1936     /* We know that all GVs stringify to something that is not-a-number,
1937         so no need to test that.  */
1938     if (ckWARN(WARN_NUMERIC))
1939     {
1940         SV *const buffer = sv_newmortal();
1941         gv_efullname3(buffer, gv, "*");
1942         not_a_number(buffer);
1943     }
1944     /* We just want something true to return, so that S_sv_2iuv_common
1945         can tail call us and return true.  */
1946     return TRUE;
1947 }
1948
1949 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1950    until proven guilty, assume that things are not that bad... */
1951
1952 /*
1953    NV_PRESERVES_UV:
1954
1955    As 64 bit platforms often have an NV that doesn't preserve all bits of
1956    an IV (an assumption perl has been based on to date) it becomes necessary
1957    to remove the assumption that the NV always carries enough precision to
1958    recreate the IV whenever needed, and that the NV is the canonical form.
1959    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1960    precision as a side effect of conversion (which would lead to insanity
1961    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1962    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1963       where precision was lost, and IV/UV/NV slots that have a valid conversion
1964       which has lost no precision
1965    2) to ensure that if a numeric conversion to one form is requested that
1966       would lose precision, the precise conversion (or differently
1967       imprecise conversion) is also performed and cached, to prevent
1968       requests for different numeric formats on the same SV causing
1969       lossy conversion chains. (lossless conversion chains are perfectly
1970       acceptable (still))
1971
1972
1973    flags are used:
1974    SvIOKp is true if the IV slot contains a valid value
1975    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1976    SvNOKp is true if the NV slot contains a valid value
1977    SvNOK  is true only if the NV value is accurate
1978
1979    so
1980    while converting from PV to NV, check to see if converting that NV to an
1981    IV(or UV) would lose accuracy over a direct conversion from PV to
1982    IV(or UV). If it would, cache both conversions, return NV, but mark
1983    SV as IOK NOKp (ie not NOK).
1984
1985    While converting from PV to IV, check to see if converting that IV to an
1986    NV would lose accuracy over a direct conversion from PV to NV. If it
1987    would, cache both conversions, flag similarly.
1988
1989    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1990    correctly because if IV & NV were set NV *always* overruled.
1991    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1992    changes - now IV and NV together means that the two are interchangeable:
1993    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1994
1995    The benefit of this is that operations such as pp_add know that if
1996    SvIOK is true for both left and right operands, then integer addition
1997    can be used instead of floating point (for cases where the result won't
1998    overflow). Before, floating point was always used, which could lead to
1999    loss of precision compared with integer addition.
2000
2001    * making IV and NV equal status should make maths accurate on 64 bit
2002      platforms
2003    * may speed up maths somewhat if pp_add and friends start to use
2004      integers when possible instead of fp. (Hopefully the overhead in
2005      looking for SvIOK and checking for overflow will not outweigh the
2006      fp to integer speedup)
2007    * will slow down integer operations (callers of SvIV) on "inaccurate"
2008      values, as the change from SvIOK to SvIOKp will cause a call into
2009      sv_2iv each time rather than a macro access direct to the IV slot
2010    * should speed up number->string conversion on integers as IV is
2011      favoured when IV and NV are equally accurate
2012
2013    ####################################################################
2014    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2015    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2016    On the other hand, SvUOK is true iff UV.
2017    ####################################################################
2018
2019    Your mileage will vary depending your CPU's relative fp to integer
2020    performance ratio.
2021 */
2022
2023 #ifndef NV_PRESERVES_UV
2024 #  define IS_NUMBER_UNDERFLOW_IV 1
2025 #  define IS_NUMBER_UNDERFLOW_UV 2
2026 #  define IS_NUMBER_IV_AND_UV    2
2027 #  define IS_NUMBER_OVERFLOW_IV  4
2028 #  define IS_NUMBER_OVERFLOW_UV  5
2029
2030 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2031
2032 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2033 STATIC int
2034 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2035 #  ifdef DEBUGGING
2036                        , I32 numtype
2037 #  endif
2038                        )
2039 {
2040     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2041     PERL_UNUSED_CONTEXT;
2042
2043     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
2044     if (SvNVX(sv) < (NV)IV_MIN) {
2045         (void)SvIOKp_on(sv);
2046         (void)SvNOK_on(sv);
2047         SvIV_set(sv, IV_MIN);
2048         return IS_NUMBER_UNDERFLOW_IV;
2049     }
2050     if (SvNVX(sv) > (NV)UV_MAX) {
2051         (void)SvIOKp_on(sv);
2052         (void)SvNOK_on(sv);
2053         SvIsUV_on(sv);
2054         SvUV_set(sv, UV_MAX);
2055         return IS_NUMBER_OVERFLOW_UV;
2056     }
2057     (void)SvIOKp_on(sv);
2058     (void)SvNOK_on(sv);
2059     /* Can't use strtol etc to convert this string.  (See truth table in
2060        sv_2iv  */
2061     if (SvNVX(sv) <= (UV)IV_MAX) {
2062         SvIV_set(sv, I_V(SvNVX(sv)));
2063         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2064             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2065         } else {
2066             /* Integer is imprecise. NOK, IOKp */
2067         }
2068         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2069     }
2070     SvIsUV_on(sv);
2071     SvUV_set(sv, U_V(SvNVX(sv)));
2072     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2073         if (SvUVX(sv) == UV_MAX) {
2074             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2075                possibly be preserved by NV. Hence, it must be overflow.
2076                NOK, IOKp */
2077             return IS_NUMBER_OVERFLOW_UV;
2078         }
2079         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2080     } else {
2081         /* Integer is imprecise. NOK, IOKp */
2082     }
2083     return IS_NUMBER_OVERFLOW_IV;
2084 }
2085 #endif /* !NV_PRESERVES_UV*/
2086
2087 /* If numtype is infnan, set the NV of the sv accordingly.
2088  * If numtype is anything else, try setting the NV using Atof(PV). */
2089 #ifdef USING_MSVC6
2090 #  pragma warning(push)
2091 #  pragma warning(disable:4756;disable:4056)
2092 #endif
2093 static void
2094 S_sv_setnv(pTHX_ SV* sv, int numtype)
2095 {
2096     bool pok = cBOOL(SvPOK(sv));
2097     bool nok = FALSE;
2098     if ((numtype & IS_NUMBER_INFINITY)) {
2099         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2100         nok = TRUE;
2101     }
2102     else if ((numtype & IS_NUMBER_NAN)) {
2103         SvNV_set(sv, NV_NAN);
2104         nok = TRUE;
2105     }
2106     else if (pok) {
2107         SvNV_set(sv, Atof(SvPVX_const(sv)));
2108         /* Purposefully no true nok here, since we don't want to blow
2109          * away the possible IOK/UV of an existing sv. */
2110     }
2111     if (nok) {
2112         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2113         if (pok)
2114             SvPOK_on(sv); /* PV is okay, though. */
2115     }
2116 }
2117 #ifdef USING_MSVC6
2118 #  pragma warning(pop)
2119 #endif
2120
2121 STATIC bool
2122 S_sv_2iuv_common(pTHX_ SV *const sv)
2123 {
2124     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2125
2126     if (SvNOKp(sv)) {
2127         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2128          * without also getting a cached IV/UV from it at the same time
2129          * (ie PV->NV conversion should detect loss of accuracy and cache
2130          * IV or UV at same time to avoid this. */
2131         /* IV-over-UV optimisation - choose to cache IV if possible */
2132
2133         if (SvTYPE(sv) == SVt_NV)
2134             sv_upgrade(sv, SVt_PVNV);
2135
2136         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2137         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2138            certainly cast into the IV range at IV_MAX, whereas the correct
2139            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2140            cases go to UV */
2141 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2142         if (Perl_isnan(SvNVX(sv))) {
2143             SvUV_set(sv, 0);
2144             SvIsUV_on(sv);
2145             return FALSE;
2146         }
2147 #endif
2148         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2149             SvIV_set(sv, I_V(SvNVX(sv)));
2150             if (SvNVX(sv) == (NV) SvIVX(sv)
2151 #ifndef NV_PRESERVES_UV
2152                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2153                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2154                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2155                 /* Don't flag it as "accurately an integer" if the number
2156                    came from a (by definition imprecise) NV operation, and
2157                    we're outside the range of NV integer precision */
2158 #endif
2159                 ) {
2160                 if (SvNOK(sv))
2161                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2162                 else {
2163                     /* scalar has trailing garbage, eg "42a" */
2164                 }
2165                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2166                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2167                                       PTR2UV(sv),
2168                                       SvNVX(sv),
2169                                       SvIVX(sv)));
2170
2171             } else {
2172                 /* IV not precise.  No need to convert from PV, as NV
2173                    conversion would already have cached IV if it detected
2174                    that PV->IV would be better than PV->NV->IV
2175                    flags already correct - don't set public IOK.  */
2176                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2177                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2178                                       PTR2UV(sv),
2179                                       SvNVX(sv),
2180                                       SvIVX(sv)));
2181             }
2182             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2183                but the cast (NV)IV_MIN rounds to a the value less (more
2184                negative) than IV_MIN which happens to be equal to SvNVX ??
2185                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2186                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2187                (NV)UVX == NVX are both true, but the values differ. :-(
2188                Hopefully for 2s complement IV_MIN is something like
2189                0x8000000000000000 which will be exact. NWC */
2190         }
2191         else {
2192             SvUV_set(sv, U_V(SvNVX(sv)));
2193             if (
2194                 (SvNVX(sv) == (NV) SvUVX(sv))
2195 #ifndef  NV_PRESERVES_UV
2196                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2197                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2198                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2199                 /* Don't flag it as "accurately an integer" if the number
2200                    came from a (by definition imprecise) NV operation, and
2201                    we're outside the range of NV integer precision */
2202 #endif
2203                 && SvNOK(sv)
2204                 )
2205                 SvIOK_on(sv);
2206             SvIsUV_on(sv);
2207             DEBUG_c(PerlIO_printf(Perl_debug_log,
2208                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2209                                   PTR2UV(sv),
2210                                   SvUVX(sv),
2211                                   SvUVX(sv)));
2212         }
2213     }
2214     else if (SvPOKp(sv)) {
2215         UV value;
2216         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2217         /* We want to avoid a possible problem when we cache an IV/ a UV which
2218            may be later translated to an NV, and the resulting NV is not
2219            the same as the direct translation of the initial string
2220            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2221            be careful to ensure that the value with the .456 is around if the
2222            NV value is requested in the future).
2223         
2224            This means that if we cache such an IV/a UV, we need to cache the
2225            NV as well.  Moreover, we trade speed for space, and do not
2226            cache the NV if we are sure it's not needed.
2227          */
2228
2229         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2230         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2231              == IS_NUMBER_IN_UV) {
2232             /* It's definitely an integer, only upgrade to PVIV */
2233             if (SvTYPE(sv) < SVt_PVIV)
2234                 sv_upgrade(sv, SVt_PVIV);
2235             (void)SvIOK_on(sv);
2236         } else if (SvTYPE(sv) < SVt_PVNV)
2237             sv_upgrade(sv, SVt_PVNV);
2238
2239         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2240             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2241                 not_a_number(sv);
2242             S_sv_setnv(aTHX_ sv, numtype);
2243             return FALSE;
2244         }
2245
2246         /* If NVs preserve UVs then we only use the UV value if we know that
2247            we aren't going to call atof() below. If NVs don't preserve UVs
2248            then the value returned may have more precision than atof() will
2249            return, even though value isn't perfectly accurate.  */
2250         if ((numtype & (IS_NUMBER_IN_UV
2251 #ifdef NV_PRESERVES_UV
2252                         | IS_NUMBER_NOT_INT
2253 #endif
2254             )) == IS_NUMBER_IN_UV) {
2255             /* This won't turn off the public IOK flag if it was set above  */
2256             (void)SvIOKp_on(sv);
2257
2258             if (!(numtype & IS_NUMBER_NEG)) {
2259                 /* positive */;
2260                 if (value <= (UV)IV_MAX) {
2261                     SvIV_set(sv, (IV)value);
2262                 } else {
2263                     /* it didn't overflow, and it was positive. */
2264                     SvUV_set(sv, value);
2265                     SvIsUV_on(sv);
2266                 }
2267             } else {
2268                 /* 2s complement assumption  */
2269                 if (value <= (UV)IV_MIN) {
2270                     SvIV_set(sv, value == (UV)IV_MIN
2271                                     ? IV_MIN : -(IV)value);
2272                 } else {
2273                     /* Too negative for an IV.  This is a double upgrade, but
2274                        I'm assuming it will be rare.  */
2275                     if (SvTYPE(sv) < SVt_PVNV)
2276                         sv_upgrade(sv, SVt_PVNV);
2277                     SvNOK_on(sv);
2278                     SvIOK_off(sv);
2279                     SvIOKp_on(sv);
2280                     SvNV_set(sv, -(NV)value);
2281                     SvIV_set(sv, IV_MIN);
2282                 }
2283             }
2284         }
2285         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2286            will be in the previous block to set the IV slot, and the next
2287            block to set the NV slot.  So no else here.  */
2288         
2289         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2290             != IS_NUMBER_IN_UV) {
2291             /* It wasn't an (integer that doesn't overflow the UV). */
2292             S_sv_setnv(aTHX_ sv, numtype);
2293
2294             if (! numtype && ckWARN(WARN_NUMERIC))
2295                 not_a_number(sv);
2296
2297             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2298                                   PTR2UV(sv), SvNVX(sv)));
2299
2300 #ifdef NV_PRESERVES_UV
2301             (void)SvIOKp_on(sv);
2302             (void)SvNOK_on(sv);
2303 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2304             if (Perl_isnan(SvNVX(sv))) {
2305                 SvUV_set(sv, 0);
2306                 SvIsUV_on(sv);
2307                 return FALSE;
2308             }
2309 #endif
2310             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2311                 SvIV_set(sv, I_V(SvNVX(sv)));
2312                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2313                     SvIOK_on(sv);
2314                 } else {
2315                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2316                 }
2317                 /* UV will not work better than IV */
2318             } else {
2319                 if (SvNVX(sv) > (NV)UV_MAX) {
2320                     SvIsUV_on(sv);
2321                     /* Integer is inaccurate. NOK, IOKp, is UV */
2322                     SvUV_set(sv, UV_MAX);
2323                 } else {
2324                     SvUV_set(sv, U_V(SvNVX(sv)));
2325                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2326                        NV preservse UV so can do correct comparison.  */
2327                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2328                         SvIOK_on(sv);
2329                     } else {
2330                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2331                     }
2332                 }
2333                 SvIsUV_on(sv);
2334             }
2335 #else /* NV_PRESERVES_UV */
2336             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2337                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2338                 /* The IV/UV slot will have been set from value returned by
2339                    grok_number above.  The NV slot has just been set using
2340                    Atof.  */
2341                 SvNOK_on(sv);
2342                 assert (SvIOKp(sv));
2343             } else {
2344                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2345                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2346                     /* Small enough to preserve all bits. */
2347                     (void)SvIOKp_on(sv);
2348                     SvNOK_on(sv);
2349                     SvIV_set(sv, I_V(SvNVX(sv)));
2350                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2351                         SvIOK_on(sv);
2352                     /* Assumption: first non-preserved integer is < IV_MAX,
2353                        this NV is in the preserved range, therefore: */
2354                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2355                           < (UV)IV_MAX)) {
2356                         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);
2357                     }
2358                 } else {
2359                     /* IN_UV NOT_INT
2360                          0      0       already failed to read UV.
2361                          0      1       already failed to read UV.
2362                          1      0       you won't get here in this case. IV/UV
2363                                         slot set, public IOK, Atof() unneeded.
2364                          1      1       already read UV.
2365                        so there's no point in sv_2iuv_non_preserve() attempting
2366                        to use atol, strtol, strtoul etc.  */
2367 #  ifdef DEBUGGING
2368                     sv_2iuv_non_preserve (sv, numtype);
2369 #  else
2370                     sv_2iuv_non_preserve (sv);
2371 #  endif
2372                 }
2373             }
2374 #endif /* NV_PRESERVES_UV */
2375         /* It might be more code efficient to go through the entire logic above
2376            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2377            gets complex and potentially buggy, so more programmer efficient
2378            to do it this way, by turning off the public flags:  */
2379         if (!numtype)
2380             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2381         }
2382     }
2383     else  {
2384         if (isGV_with_GP(sv))
2385             return glob_2number(MUTABLE_GV(sv));
2386
2387         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2388                 report_uninit(sv);
2389         if (SvTYPE(sv) < SVt_IV)
2390             /* Typically the caller expects that sv_any is not NULL now.  */
2391             sv_upgrade(sv, SVt_IV);
2392         /* Return 0 from the caller.  */
2393         return TRUE;
2394     }
2395     return FALSE;
2396 }
2397
2398 /*
2399 =for apidoc sv_2iv_flags
2400
2401 Return the integer value of an SV, doing any necessary string
2402 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2403 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2404
2405 =cut
2406 */
2407
2408 IV
2409 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2410 {
2411     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2412
2413     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2414          && SvTYPE(sv) != SVt_PVFM);
2415
2416     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2417         mg_get(sv);
2418
2419     if (SvROK(sv)) {
2420         if (SvAMAGIC(sv)) {
2421             SV * tmpstr;
2422             if (flags & SV_SKIP_OVERLOAD)
2423                 return 0;
2424             tmpstr = AMG_CALLunary(sv, numer_amg);
2425             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2426                 return SvIV(tmpstr);
2427             }
2428         }
2429         return PTR2IV(SvRV(sv));
2430     }
2431
2432     if (SvVALID(sv) || isREGEXP(sv)) {
2433         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2434            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2435            In practice they are extremely unlikely to actually get anywhere
2436            accessible by user Perl code - the only way that I'm aware of is when
2437            a constant subroutine which is used as the second argument to index.
2438
2439            Regexps have no SvIVX and SvNVX fields.
2440         */
2441         assert(isREGEXP(sv) || SvPOKp(sv));
2442         {
2443             UV value;
2444             const char * const ptr =
2445                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2446             const int numtype
2447                 = grok_number(ptr, SvCUR(sv), &value);
2448
2449             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2450                 == IS_NUMBER_IN_UV) {
2451                 /* It's definitely an integer */
2452                 if (numtype & IS_NUMBER_NEG) {
2453                     if (value < (UV)IV_MIN)
2454                         return -(IV)value;
2455                 } else {
2456                     if (value < (UV)IV_MAX)
2457                         return (IV)value;
2458                 }
2459             }
2460
2461             /* Quite wrong but no good choices. */
2462             if ((numtype & IS_NUMBER_INFINITY)) {
2463                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2464             } else if ((numtype & IS_NUMBER_NAN)) {
2465                 return 0; /* So wrong. */
2466             }
2467
2468             if (!numtype) {
2469                 if (ckWARN(WARN_NUMERIC))
2470                     not_a_number(sv);
2471             }
2472             return I_V(Atof(ptr));
2473         }
2474     }
2475
2476     if (SvTHINKFIRST(sv)) {
2477         if (SvREADONLY(sv) && !SvOK(sv)) {
2478             if (ckWARN(WARN_UNINITIALIZED))
2479                 report_uninit(sv);
2480             return 0;
2481         }
2482     }
2483
2484     if (!SvIOKp(sv)) {
2485         if (S_sv_2iuv_common(aTHX_ sv))
2486             return 0;
2487     }
2488
2489     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2490         PTR2UV(sv),SvIVX(sv)));
2491     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2492 }
2493
2494 /*
2495 =for apidoc sv_2uv_flags
2496
2497 Return the unsigned integer value of an SV, doing any necessary string
2498 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2499 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2500
2501 =cut
2502 */
2503
2504 UV
2505 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2506 {
2507     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2508
2509     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2510         mg_get(sv);
2511
2512     if (SvROK(sv)) {
2513         if (SvAMAGIC(sv)) {
2514             SV *tmpstr;
2515             if (flags & SV_SKIP_OVERLOAD)
2516                 return 0;
2517             tmpstr = AMG_CALLunary(sv, numer_amg);
2518             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2519                 return SvUV(tmpstr);
2520             }
2521         }
2522         return PTR2UV(SvRV(sv));
2523     }
2524
2525     if (SvVALID(sv) || isREGEXP(sv)) {
2526         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2527            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2528            Regexps have no SvIVX and SvNVX fields. */
2529         assert(isREGEXP(sv) || SvPOKp(sv));
2530         {
2531             UV value;
2532             const char * const ptr =
2533                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2534             const int numtype
2535                 = grok_number(ptr, SvCUR(sv), &value);
2536
2537             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2538                 == IS_NUMBER_IN_UV) {
2539                 /* It's definitely an integer */
2540                 if (!(numtype & IS_NUMBER_NEG))
2541                     return value;
2542             }
2543
2544             /* Quite wrong but no good choices. */
2545             if ((numtype & IS_NUMBER_INFINITY)) {
2546                 return UV_MAX; /* So wrong. */
2547             } else if ((numtype & IS_NUMBER_NAN)) {
2548                 return 0; /* So wrong. */
2549             }
2550
2551             if (!numtype) {
2552                 if (ckWARN(WARN_NUMERIC))
2553                     not_a_number(sv);
2554             }
2555             return U_V(Atof(ptr));
2556         }
2557     }
2558
2559     if (SvTHINKFIRST(sv)) {
2560         if (SvREADONLY(sv) && !SvOK(sv)) {
2561             if (ckWARN(WARN_UNINITIALIZED))
2562                 report_uninit(sv);
2563             return 0;
2564         }
2565     }
2566
2567     if (!SvIOKp(sv)) {
2568         if (S_sv_2iuv_common(aTHX_ sv))
2569             return 0;
2570     }
2571
2572     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2573                           PTR2UV(sv),SvUVX(sv)));
2574     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2575 }
2576
2577 /*
2578 =for apidoc sv_2nv_flags
2579
2580 Return the num value of an SV, doing any necessary string or integer
2581 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2582 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2583
2584 =cut
2585 */
2586
2587 NV
2588 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2589 {
2590     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2591
2592     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2593          && SvTYPE(sv) != SVt_PVFM);
2594     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2595         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2596            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2597            Regexps have no SvIVX and SvNVX fields.  */
2598         const char *ptr;
2599         if (flags & SV_GMAGIC)
2600             mg_get(sv);
2601         if (SvNOKp(sv))
2602             return SvNVX(sv);
2603         if (SvPOKp(sv) && !SvIOKp(sv)) {
2604             ptr = SvPVX_const(sv);
2605           grokpv:
2606             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2607                 !grok_number(ptr, SvCUR(sv), NULL))
2608                 not_a_number(sv);
2609             return Atof(ptr);
2610         }
2611         if (SvIOKp(sv)) {
2612             if (SvIsUV(sv))
2613                 return (NV)SvUVX(sv);
2614             else
2615                 return (NV)SvIVX(sv);
2616         }
2617         if (SvROK(sv)) {
2618             goto return_rok;
2619         }
2620         if (isREGEXP(sv)) {
2621             ptr = RX_WRAPPED((REGEXP *)sv);
2622             goto grokpv;
2623         }
2624         assert(SvTYPE(sv) >= SVt_PVMG);
2625         /* This falls through to the report_uninit near the end of the
2626            function. */
2627     } else if (SvTHINKFIRST(sv)) {
2628         if (SvROK(sv)) {
2629         return_rok:
2630             if (SvAMAGIC(sv)) {
2631                 SV *tmpstr;
2632                 if (flags & SV_SKIP_OVERLOAD)
2633                     return 0;
2634                 tmpstr = AMG_CALLunary(sv, numer_amg);
2635                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2636                     return SvNV(tmpstr);
2637                 }
2638             }
2639             return PTR2NV(SvRV(sv));
2640         }
2641         if (SvREADONLY(sv) && !SvOK(sv)) {
2642             if (ckWARN(WARN_UNINITIALIZED))
2643                 report_uninit(sv);
2644             return 0.0;
2645         }
2646     }
2647     if (SvTYPE(sv) < SVt_NV) {
2648         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2649         sv_upgrade(sv, SVt_NV);
2650         DEBUG_c({
2651             STORE_NUMERIC_LOCAL_SET_STANDARD();
2652             PerlIO_printf(Perl_debug_log,
2653                           "0x%"UVxf" num(%" NVgf ")\n",
2654                           PTR2UV(sv), SvNVX(sv));
2655             RESTORE_NUMERIC_LOCAL();
2656         });
2657     }
2658     else if (SvTYPE(sv) < SVt_PVNV)
2659         sv_upgrade(sv, SVt_PVNV);
2660     if (SvNOKp(sv)) {
2661         return SvNVX(sv);
2662     }
2663     if (SvIOKp(sv)) {
2664         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2665 #ifdef NV_PRESERVES_UV
2666         if (SvIOK(sv))
2667             SvNOK_on(sv);
2668         else
2669             SvNOKp_on(sv);
2670 #else
2671         /* Only set the public NV OK flag if this NV preserves the IV  */
2672         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2673         if (SvIOK(sv) &&
2674             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2675                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2676             SvNOK_on(sv);
2677         else
2678             SvNOKp_on(sv);
2679 #endif
2680     }
2681     else if (SvPOKp(sv)) {
2682         UV value;
2683         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2684         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2685             not_a_number(sv);
2686 #ifdef NV_PRESERVES_UV
2687         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2688             == IS_NUMBER_IN_UV) {
2689             /* It's definitely an integer */
2690             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2691         } else {
2692             S_sv_setnv(aTHX_ sv, numtype);
2693         }
2694         if (numtype)
2695             SvNOK_on(sv);
2696         else
2697             SvNOKp_on(sv);
2698 #else
2699         SvNV_set(sv, Atof(SvPVX_const(sv)));
2700         /* Only set the public NV OK flag if this NV preserves the value in
2701            the PV at least as well as an IV/UV would.
2702            Not sure how to do this 100% reliably. */
2703         /* if that shift count is out of range then Configure's test is
2704            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2705            UV_BITS */
2706         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2707             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2708             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2709         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2710             /* Can't use strtol etc to convert this string, so don't try.
2711                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2712             SvNOK_on(sv);
2713         } else {
2714             /* value has been set.  It may not be precise.  */
2715             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2716                 /* 2s complement assumption for (UV)IV_MIN  */
2717                 SvNOK_on(sv); /* Integer is too negative.  */
2718             } else {
2719                 SvNOKp_on(sv);
2720                 SvIOKp_on(sv);
2721
2722                 if (numtype & IS_NUMBER_NEG) {
2723                     /* -IV_MIN is undefined, but we should never reach
2724                      * this point with both IS_NUMBER_NEG and value ==
2725                      * (UV)IV_MIN */
2726                     assert(value != (UV)IV_MIN);
2727                     SvIV_set(sv, -(IV)value);
2728                 } else if (value <= (UV)IV_MAX) {
2729                     SvIV_set(sv, (IV)value);
2730                 } else {
2731                     SvUV_set(sv, value);
2732                     SvIsUV_on(sv);
2733                 }
2734
2735                 if (numtype & IS_NUMBER_NOT_INT) {
2736                     /* I believe that even if the original PV had decimals,
2737                        they are lost beyond the limit of the FP precision.
2738                        However, neither is canonical, so both only get p
2739                        flags.  NWC, 2000/11/25 */
2740                     /* Both already have p flags, so do nothing */
2741                 } else {
2742                     const NV nv = SvNVX(sv);
2743                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2744                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2745                         if (SvIVX(sv) == I_V(nv)) {
2746                             SvNOK_on(sv);
2747                         } else {
2748                             /* It had no "." so it must be integer.  */
2749                         }
2750                         SvIOK_on(sv);
2751                     } else {
2752                         /* between IV_MAX and NV(UV_MAX).
2753                            Could be slightly > UV_MAX */
2754
2755                         if (numtype & IS_NUMBER_NOT_INT) {
2756                             /* UV and NV both imprecise.  */
2757                         } else {
2758                             const UV nv_as_uv = U_V(nv);
2759
2760                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2761                                 SvNOK_on(sv);
2762                             }
2763                             SvIOK_on(sv);
2764                         }
2765                     }
2766                 }
2767             }
2768         }
2769         /* It might be more code efficient to go through the entire logic above
2770            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2771            gets complex and potentially buggy, so more programmer efficient
2772            to do it this way, by turning off the public flags:  */
2773         if (!numtype)
2774             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2775 #endif /* NV_PRESERVES_UV */
2776     }
2777     else  {
2778         if (isGV_with_GP(sv)) {
2779             glob_2number(MUTABLE_GV(sv));
2780             return 0.0;
2781         }
2782
2783         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2784             report_uninit(sv);
2785         assert (SvTYPE(sv) >= SVt_NV);
2786         /* Typically the caller expects that sv_any is not NULL now.  */
2787         /* XXX Ilya implies that this is a bug in callers that assume this
2788            and ideally should be fixed.  */
2789         return 0.0;
2790     }
2791     DEBUG_c({
2792         STORE_NUMERIC_LOCAL_SET_STANDARD();
2793         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2794                       PTR2UV(sv), SvNVX(sv));
2795         RESTORE_NUMERIC_LOCAL();
2796     });
2797     return SvNVX(sv);
2798 }
2799
2800 /*
2801 =for apidoc sv_2num
2802
2803 Return an SV with the numeric value of the source SV, doing any necessary
2804 reference or overload conversion.  The caller is expected to have handled
2805 get-magic already.
2806
2807 =cut
2808 */
2809
2810 SV *
2811 Perl_sv_2num(pTHX_ SV *const sv)
2812 {
2813     PERL_ARGS_ASSERT_SV_2NUM;
2814
2815     if (!SvROK(sv))
2816         return sv;
2817     if (SvAMAGIC(sv)) {
2818         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2819         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2820         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2821             return sv_2num(tmpsv);
2822     }
2823     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2824 }
2825
2826 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2827  * UV as a string towards the end of buf, and return pointers to start and
2828  * end of it.
2829  *
2830  * We assume that buf is at least TYPE_CHARS(UV) long.
2831  */
2832
2833 static char *
2834 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2835 {
2836     char *ptr = buf + TYPE_CHARS(UV);
2837     char * const ebuf = ptr;
2838     int sign;
2839
2840     PERL_ARGS_ASSERT_UIV_2BUF;
2841
2842     if (is_uv)
2843         sign = 0;
2844     else if (iv >= 0) {
2845         uv = iv;
2846         sign = 0;
2847     } else {
2848         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2849         sign = 1;
2850     }
2851     do {
2852         *--ptr = '0' + (char)(uv % 10);
2853     } while (uv /= 10);
2854     if (sign)
2855         *--ptr = '-';
2856     *peob = ebuf;
2857     return ptr;
2858 }
2859
2860 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2861  * infinity or a not-a-number, writes the appropriate strings to the
2862  * buffer, including a zero byte.  On success returns the written length,
2863  * excluding the zero byte, on failure (not an infinity, not a nan)
2864  * returns zero, assert-fails on maxlen being too short.
2865  *
2866  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2867  * shared string constants we point to, instead of generating a new
2868  * string for each instance. */
2869 STATIC size_t
2870 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2871     char* s = buffer;
2872     assert(maxlen >= 4);
2873     if (Perl_isinf(nv)) {
2874         if (nv < 0) {
2875             if (maxlen < 5) /* "-Inf\0"  */
2876                 return 0;
2877             *s++ = '-';
2878         } else if (plus) {
2879             *s++ = '+';
2880         }
2881         *s++ = 'I';
2882         *s++ = 'n';
2883         *s++ = 'f';
2884     }
2885     else if (Perl_isnan(nv)) {
2886         *s++ = 'N';
2887         *s++ = 'a';
2888         *s++ = 'N';
2889         /* XXX optionally output the payload mantissa bits as
2890          * "(unsigned)" (to match the nan("...") C99 function,
2891          * or maybe as "(0xhhh...)"  would make more sense...
2892          * provide a format string so that the user can decide?
2893          * NOTE: would affect the maxlen and assert() logic.*/
2894     }
2895     else {
2896       return 0;
2897     }
2898     assert((s == buffer + 3) || (s == buffer + 4));
2899     *s++ = 0;
2900     return s - buffer - 1; /* -1: excluding the zero byte */
2901 }
2902
2903 /*
2904 =for apidoc sv_2pv_flags
2905
2906 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2907 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2908 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2909 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2910
2911 =cut
2912 */
2913
2914 char *
2915 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2916 {
2917     char *s;
2918
2919     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2920
2921     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2922          && SvTYPE(sv) != SVt_PVFM);
2923     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2924         mg_get(sv);
2925     if (SvROK(sv)) {
2926         if (SvAMAGIC(sv)) {
2927             SV *tmpstr;
2928             if (flags & SV_SKIP_OVERLOAD)
2929                 return NULL;
2930             tmpstr = AMG_CALLunary(sv, string_amg);
2931             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2932             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2933                 /* Unwrap this:  */
2934                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2935                  */
2936
2937                 char *pv;
2938                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2939                     if (flags & SV_CONST_RETURN) {
2940                         pv = (char *) SvPVX_const(tmpstr);
2941                     } else {
2942                         pv = (flags & SV_MUTABLE_RETURN)
2943                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2944                     }
2945                     if (lp)
2946                         *lp = SvCUR(tmpstr);
2947                 } else {
2948                     pv = sv_2pv_flags(tmpstr, lp, flags);
2949                 }
2950                 if (SvUTF8(tmpstr))
2951                     SvUTF8_on(sv);
2952                 else
2953                     SvUTF8_off(sv);
2954                 return pv;
2955             }
2956         }
2957         {
2958             STRLEN len;
2959             char *retval;
2960             char *buffer;
2961             SV *const referent = SvRV(sv);
2962
2963             if (!referent) {
2964                 len = 7;
2965                 retval = buffer = savepvn("NULLREF", len);
2966             } else if (SvTYPE(referent) == SVt_REGEXP &&
2967                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2968                         amagic_is_enabled(string_amg))) {
2969                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2970
2971                 assert(re);
2972                         
2973                 /* If the regex is UTF-8 we want the containing scalar to
2974                    have an UTF-8 flag too */
2975                 if (RX_UTF8(re))
2976                     SvUTF8_on(sv);
2977                 else
2978                     SvUTF8_off(sv);     
2979
2980                 if (lp)
2981                     *lp = RX_WRAPLEN(re);
2982  
2983                 return RX_WRAPPED(re);
2984             } else {
2985                 const char *const typestr = sv_reftype(referent, 0);
2986                 const STRLEN typelen = strlen(typestr);
2987                 UV addr = PTR2UV(referent);
2988                 const char *stashname = NULL;
2989                 STRLEN stashnamelen = 0; /* hush, gcc */
2990                 const char *buffer_end;
2991
2992                 if (SvOBJECT(referent)) {
2993                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2994
2995                     if (name) {
2996                         stashname = HEK_KEY(name);
2997                         stashnamelen = HEK_LEN(name);
2998
2999                         if (HEK_UTF8(name)) {
3000                             SvUTF8_on(sv);
3001                         } else {
3002                             SvUTF8_off(sv);
3003                         }
3004                     } else {
3005                         stashname = "__ANON__";
3006                         stashnamelen = 8;
3007                     }
3008                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3009                         + 2 * sizeof(UV) + 2 /* )\0 */;
3010                 } else {
3011                     len = typelen + 3 /* (0x */
3012                         + 2 * sizeof(UV) + 2 /* )\0 */;
3013                 }
3014
3015                 Newx(buffer, len, char);
3016                 buffer_end = retval = buffer + len;
3017
3018                 /* Working backwards  */
3019                 *--retval = '\0';
3020                 *--retval = ')';
3021                 do {
3022                     *--retval = PL_hexdigit[addr & 15];
3023                 } while (addr >>= 4);
3024                 *--retval = 'x';
3025                 *--retval = '0';
3026                 *--retval = '(';
3027
3028                 retval -= typelen;
3029                 memcpy(retval, typestr, typelen);
3030
3031                 if (stashname) {
3032                     *--retval = '=';
3033                     retval -= stashnamelen;
3034                     memcpy(retval, stashname, stashnamelen);
3035                 }
3036                 /* retval may not necessarily have reached the start of the
3037                    buffer here.  */
3038                 assert (retval >= buffer);
3039
3040                 len = buffer_end - retval - 1; /* -1 for that \0  */
3041             }
3042             if (lp)
3043                 *lp = len;
3044             SAVEFREEPV(buffer);
3045             return retval;
3046         }
3047     }
3048
3049     if (SvPOKp(sv)) {
3050         if (lp)
3051             *lp = SvCUR(sv);
3052         if (flags & SV_MUTABLE_RETURN)
3053             return SvPVX_mutable(sv);
3054         if (flags & SV_CONST_RETURN)
3055             return (char *)SvPVX_const(sv);
3056         return SvPVX(sv);
3057     }
3058
3059     if (SvIOK(sv)) {
3060         /* I'm assuming that if both IV and NV are equally valid then
3061            converting the IV is going to be more efficient */
3062         const U32 isUIOK = SvIsUV(sv);
3063         char buf[TYPE_CHARS(UV)];
3064         char *ebuf, *ptr;
3065         STRLEN len;
3066
3067         if (SvTYPE(sv) < SVt_PVIV)
3068             sv_upgrade(sv, SVt_PVIV);
3069         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3070         len = ebuf - ptr;
3071         /* inlined from sv_setpvn */
3072         s = SvGROW_mutable(sv, len + 1);
3073         Move(ptr, s, len, char);
3074         s += len;
3075         *s = '\0';
3076         SvPOK_on(sv);
3077     }
3078     else if (SvNOK(sv)) {
3079         if (SvTYPE(sv) < SVt_PVNV)
3080             sv_upgrade(sv, SVt_PVNV);
3081         if (SvNVX(sv) == 0.0
3082 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3083             && !Perl_isnan(SvNVX(sv))
3084 #endif
3085         ) {
3086             s = SvGROW_mutable(sv, 2);
3087             *s++ = '0';
3088             *s = '\0';
3089         } else {
3090             STRLEN len;
3091             STRLEN size = 5; /* "-Inf\0" */
3092
3093             s = SvGROW_mutable(sv, size);
3094             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3095             if (len > 0) {
3096                 s += len;
3097                 SvPOK_on(sv);
3098             }
3099             else {
3100                 /* some Xenix systems wipe out errno here */
3101                 dSAVE_ERRNO;
3102
3103                 size =
3104                     1 + /* sign */
3105                     1 + /* "." */
3106                     NV_DIG +
3107                     1 + /* "e" */
3108                     1 + /* sign */
3109                     5 + /* exponent digits */
3110                     1 + /* \0 */
3111                     2; /* paranoia */
3112
3113                 s = SvGROW_mutable(sv, size);
3114 #ifndef USE_LOCALE_NUMERIC
3115                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3116
3117                 SvPOK_on(sv);
3118 #else
3119                 {
3120                     bool local_radix;
3121                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3122                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3123
3124                     local_radix = PL_numeric_local && PL_numeric_radix_sv;
3125                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3126                         size += SvLEN(PL_numeric_radix_sv) - 1;
3127                         s = SvGROW_mutable(sv, size);
3128                     }
3129
3130                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3131
3132                     /* If the radix character is UTF-8, and actually is in the
3133                      * output, turn on the UTF-8 flag for the scalar */
3134                     if (   local_radix
3135                         && SvUTF8(PL_numeric_radix_sv)
3136                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3137                     {
3138                         SvUTF8_on(sv);
3139                     }
3140
3141                     RESTORE_LC_NUMERIC();
3142                 }
3143
3144                 /* We don't call SvPOK_on(), because it may come to
3145                  * pass that the locale changes so that the
3146                  * stringification we just did is no longer correct.  We
3147                  * will have to re-stringify every time it is needed */
3148 #endif
3149                 RESTORE_ERRNO;
3150             }
3151             while (*s) s++;
3152         }
3153     }
3154     else if (isGV_with_GP(sv)) {
3155         GV *const gv = MUTABLE_GV(sv);
3156         SV *const buffer = sv_newmortal();
3157
3158         gv_efullname3(buffer, gv, "*");
3159
3160         assert(SvPOK(buffer));
3161         if (SvUTF8(buffer))
3162             SvUTF8_on(sv);
3163         if (lp)
3164             *lp = SvCUR(buffer);
3165         return SvPVX(buffer);
3166     }
3167     else if (isREGEXP(sv)) {
3168         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3169         return RX_WRAPPED((REGEXP *)sv);
3170     }
3171     else {
3172         if (lp)
3173             *lp = 0;
3174         if (flags & SV_UNDEF_RETURNS_NULL)
3175             return NULL;
3176         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3177             report_uninit(sv);
3178         /* Typically the caller expects that sv_any is not NULL now.  */
3179         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3180             sv_upgrade(sv, SVt_PV);
3181         return (char *)"";
3182     }
3183
3184     {
3185         const STRLEN len = s - SvPVX_const(sv);
3186         if (lp) 
3187             *lp = len;
3188         SvCUR_set(sv, len);
3189     }
3190     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3191                           PTR2UV(sv),SvPVX_const(sv)));
3192     if (flags & SV_CONST_RETURN)
3193         return (char *)SvPVX_const(sv);
3194     if (flags & SV_MUTABLE_RETURN)
3195         return SvPVX_mutable(sv);
3196     return SvPVX(sv);
3197 }
3198
3199 /*
3200 =for apidoc sv_copypv
3201
3202 Copies a stringified representation of the source SV into the
3203 destination SV.  Automatically performs any necessary C<mg_get> and
3204 coercion of numeric values into strings.  Guaranteed to preserve
3205 C<UTF8> flag even from overloaded objects.  Similar in nature to
3206 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3207 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3208 would lose the UTF-8'ness of the PV.
3209
3210 =for apidoc sv_copypv_nomg
3211
3212 Like C<sv_copypv>, but doesn't invoke get magic first.
3213
3214 =for apidoc sv_copypv_flags
3215
3216 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3217 has the C<SV_GMAGIC> bit set.
3218
3219 =cut
3220 */
3221
3222 void
3223 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3224 {
3225     STRLEN len;
3226     const char *s;
3227
3228     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3229
3230     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3231     sv_setpvn(dsv,s,len);
3232     if (SvUTF8(ssv))
3233         SvUTF8_on(dsv);
3234     else
3235         SvUTF8_off(dsv);
3236 }
3237
3238 /*
3239 =for apidoc sv_2pvbyte
3240
3241 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3242 to its length.  May cause the SV to be downgraded from UTF-8 as a
3243 side-effect.
3244
3245 Usually accessed via the C<SvPVbyte> macro.
3246
3247 =cut
3248 */
3249
3250 char *
3251 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3252 {
3253     PERL_ARGS_ASSERT_SV_2PVBYTE;
3254
3255     SvGETMAGIC(sv);
3256     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3257      || isGV_with_GP(sv) || SvROK(sv)) {
3258         SV *sv2 = sv_newmortal();
3259         sv_copypv_nomg(sv2,sv);
3260         sv = sv2;
3261     }
3262     sv_utf8_downgrade(sv,0);
3263     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3264 }
3265
3266 /*
3267 =for apidoc sv_2pvutf8
3268
3269 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3270 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3271
3272 Usually accessed via the C<SvPVutf8> macro.
3273
3274 =cut
3275 */
3276
3277 char *
3278 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3279 {
3280     PERL_ARGS_ASSERT_SV_2PVUTF8;
3281
3282     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3283      || isGV_with_GP(sv) || SvROK(sv))
3284         sv = sv_mortalcopy(sv);
3285     else
3286         SvGETMAGIC(sv);
3287     sv_utf8_upgrade_nomg(sv);
3288     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3289 }
3290
3291
3292 /*
3293 =for apidoc sv_2bool
3294
3295 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3296 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3297 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3298
3299 =for apidoc sv_2bool_flags
3300
3301 This function is only used by C<sv_true()> and friends,  and only if
3302 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3303 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3304
3305
3306 =cut
3307 */
3308
3309 bool
3310 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3311 {
3312     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3313
3314     restart:
3315     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3316
3317     if (!SvOK(sv))
3318         return 0;
3319     if (SvROK(sv)) {
3320         if (SvAMAGIC(sv)) {
3321             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3322             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3323                 bool svb;
3324                 sv = tmpsv;
3325                 if(SvGMAGICAL(sv)) {
3326                     flags = SV_GMAGIC;
3327                     goto restart; /* call sv_2bool */
3328                 }
3329                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3330                 else if(!SvOK(sv)) {
3331                     svb = 0;
3332                 }
3333                 else if(SvPOK(sv)) {
3334                     svb = SvPVXtrue(sv);
3335                 }
3336                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3337                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3338                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3339                 }
3340                 else {
3341                     flags = 0;
3342                     goto restart; /* call sv_2bool_nomg */
3343                 }
3344                 return cBOOL(svb);
3345             }
3346         }
3347         return SvRV(sv) != 0;
3348     }
3349     if (isREGEXP(sv))
3350         return
3351           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3352     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3353 }
3354
3355 /*
3356 =for apidoc sv_utf8_upgrade
3357
3358 Converts the PV of an SV to its UTF-8-encoded form.
3359 Forces the SV to string form if it is not already.
3360 Will C<mg_get> on C<sv> if appropriate.
3361 Always sets the C<SvUTF8> flag to avoid future validity checks even
3362 if the whole string is the same in UTF-8 as not.
3363 Returns the number of bytes in the converted string
3364
3365 This is not a general purpose byte encoding to Unicode interface:
3366 use the Encode extension for that.
3367
3368 =for apidoc sv_utf8_upgrade_nomg
3369
3370 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3371
3372 =for apidoc sv_utf8_upgrade_flags
3373
3374 Converts the PV of an SV to its UTF-8-encoded form.
3375 Forces the SV to string form if it is not already.
3376 Always sets the SvUTF8 flag to avoid future validity checks even
3377 if all the bytes are invariant in UTF-8.
3378 If C<flags> has C<SV_GMAGIC> bit set,
3379 will C<mg_get> on C<sv> if appropriate, else not.
3380
3381 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3382 will expand when converted to UTF-8, and skips the extra work of checking for
3383 that.  Typically this flag is used by a routine that has already parsed the
3384 string and found such characters, and passes this information on so that the
3385 work doesn't have to be repeated.
3386
3387 Returns the number of bytes in the converted string.
3388
3389 This is not a general purpose byte encoding to Unicode interface:
3390 use the Encode extension for that.
3391
3392 =for apidoc sv_utf8_upgrade_flags_grow
3393
3394 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3395 the number of unused bytes the string of C<sv> is guaranteed to have free after
3396 it upon return.  This allows the caller to reserve extra space that it intends
3397 to fill, to avoid extra grows.
3398
3399 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3400 are implemented in terms of this function.
3401
3402 Returns the number of bytes in the converted string (not including the spares).
3403
3404 =cut
3405
3406 (One might think that the calling routine could pass in the position of the
3407 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3408 have to be found again.  But that is not the case, because typically when the
3409 caller is likely to use this flag, it won't be calling this routine unless it
3410 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3411 and just use bytes.  But some things that do fit into a byte are variants in
3412 utf8, and the caller may not have been keeping track of these.)
3413
3414 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3415 C<NUL> isn't guaranteed due to having other routines do the work in some input
3416 cases, or if the input is already flagged as being in utf8.
3417
3418 The speed of this could perhaps be improved for many cases if someone wanted to
3419 write a fast function that counts the number of variant characters in a string,
3420 especially if it could return the position of the first one.
3421
3422 */
3423
3424 STRLEN
3425 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3426 {
3427     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3428
3429     if (sv == &PL_sv_undef)
3430         return 0;
3431     if (!SvPOK_nog(sv)) {
3432         STRLEN len = 0;
3433         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3434             (void) sv_2pv_flags(sv,&len, flags);
3435             if (SvUTF8(sv)) {
3436                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3437                 return len;
3438             }
3439         } else {
3440             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3441         }
3442     }
3443
3444     if (SvUTF8(sv)) {
3445         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3446         return SvCUR(sv);
3447     }
3448
3449     if (SvIsCOW(sv)) {
3450         S_sv_uncow(aTHX_ sv, 0);
3451     }
3452
3453     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3454         sv_recode_to_utf8(sv, _get_encoding());
3455         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3456         return SvCUR(sv);
3457     }
3458
3459     if (SvCUR(sv) == 0) {
3460         if (extra) SvGROW(sv, extra);
3461     } else { /* Assume Latin-1/EBCDIC */
3462         /* This function could be much more efficient if we
3463          * had a FLAG in SVs to signal if there are any variant
3464          * chars in the PV.  Given that there isn't such a flag
3465          * make the loop as fast as possible (although there are certainly ways
3466          * to speed this up, eg. through vectorization) */
3467         U8 * s = (U8 *) SvPVX_const(sv);
3468         U8 * e = (U8 *) SvEND(sv);
3469         U8 *t = s;
3470         STRLEN two_byte_count = 0;
3471         
3472         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3473
3474         /* See if really will need to convert to utf8.  We mustn't rely on our
3475          * incoming SV being well formed and having a trailing '\0', as certain
3476          * code in pp_formline can send us partially built SVs. */
3477
3478         while (t < e) {
3479             const U8 ch = *t++;
3480             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3481
3482             t--;    /* t already incremented; re-point to first variant */
3483             two_byte_count = 1;
3484             goto must_be_utf8;
3485         }
3486
3487         /* utf8 conversion not needed because all are invariants.  Mark as
3488          * UTF-8 even if no variant - saves scanning loop */
3489         SvUTF8_on(sv);
3490         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3491         return SvCUR(sv);
3492
3493       must_be_utf8:
3494
3495         /* Here, the string should be converted to utf8, either because of an
3496          * input flag (two_byte_count = 0), or because a character that
3497          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3498          * the beginning of the string (if we didn't examine anything), or to
3499          * the first variant.  In either case, everything from s to t - 1 will
3500          * occupy only 1 byte each on output.
3501          *
3502          * There are two main ways to convert.  One is to create a new string
3503          * and go through the input starting from the beginning, appending each
3504          * converted value onto the new string as we go along.  It's probably
3505          * best to allocate enough space in the string for the worst possible
3506          * case rather than possibly running out of space and having to
3507          * reallocate and then copy what we've done so far.  Since everything
3508          * from s to t - 1 is invariant, the destination can be initialized
3509          * with these using a fast memory copy
3510          *
3511          * The other way is to figure out exactly how big the string should be
3512          * by parsing the entire input.  Then you don't have to make it big
3513          * enough to handle the worst possible case, and more importantly, if
3514          * the string you already have is large enough, you don't have to
3515          * allocate a new string, you can copy the last character in the input
3516          * string to the final position(s) that will be occupied by the
3517          * converted string and go backwards, stopping at t, since everything
3518          * before that is invariant.
3519          *
3520          * There are advantages and disadvantages to each method.
3521          *
3522          * In the first method, we can allocate a new string, do the memory
3523          * copy from the s to t - 1, and then proceed through the rest of the
3524          * string byte-by-byte.
3525          *
3526          * In the second method, we proceed through the rest of the input
3527          * string just calculating how big the converted string will be.  Then
3528          * there are two cases:
3529          *  1)  if the string has enough extra space to handle the converted
3530          *      value.  We go backwards through the string, converting until we
3531          *      get to the position we are at now, and then stop.  If this
3532          *      position is far enough along in the string, this method is
3533          *      faster than the other method.  If the memory copy were the same
3534          *      speed as the byte-by-byte loop, that position would be about
3535          *      half-way, as at the half-way mark, parsing to the end and back
3536          *      is one complete string's parse, the same amount as starting
3537          *      over and going all the way through.  Actually, it would be
3538          *      somewhat less than half-way, as it's faster to just count bytes
3539          *      than to also copy, and we don't have the overhead of allocating
3540          *      a new string, changing the scalar to use it, and freeing the
3541          *      existing one.  But if the memory copy is fast, the break-even
3542          *      point is somewhere after half way.  The counting loop could be
3543          *      sped up by vectorization, etc, to move the break-even point
3544          *      further towards the beginning.
3545          *  2)  if the string doesn't have enough space to handle the converted
3546          *      value.  A new string will have to be allocated, and one might
3547          *      as well, given that, start from the beginning doing the first
3548          *      method.  We've spent extra time parsing the string and in
3549          *      exchange all we've gotten is that we know precisely how big to
3550          *      make the new one.  Perl is more optimized for time than space,
3551          *      so this case is a loser.
3552          * So what I've decided to do is not use the 2nd method unless it is
3553          * guaranteed that a new string won't have to be allocated, assuming
3554          * the worst case.  I also decided not to put any more conditions on it
3555          * than this, for now.  It seems likely that, since the worst case is
3556          * twice as big as the unknown portion of the string (plus 1), we won't
3557          * be guaranteed enough space, causing us to go to the first method,
3558          * unless the string is short, or the first variant character is near
3559          * the end of it.  In either of these cases, it seems best to use the
3560          * 2nd method.  The only circumstance I can think of where this would
3561          * be really slower is if the string had once had much more data in it
3562          * than it does now, but there is still a substantial amount in it  */
3563
3564         {
3565             STRLEN invariant_head = t - s;
3566             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3567             if (SvLEN(sv) < size) {
3568
3569                 /* Here, have decided to allocate a new string */
3570
3571                 U8 *dst;
3572                 U8 *d;
3573
3574                 Newx(dst, size, U8);
3575
3576                 /* If no known invariants at the beginning of the input string,
3577                  * set so starts from there.  Otherwise, can use memory copy to
3578                  * get up to where we are now, and then start from here */
3579
3580                 if (invariant_head == 0) {
3581                     d = dst;
3582                 } else {
3583                     Copy(s, dst, invariant_head, char);
3584                     d = dst + invariant_head;
3585                 }
3586
3587                 while (t < e) {
3588                     append_utf8_from_native_byte(*t, &d);
3589                     t++;
3590                 }
3591                 *d = '\0';
3592                 SvPV_free(sv); /* No longer using pre-existing string */
3593                 SvPV_set(sv, (char*)dst);
3594                 SvCUR_set(sv, d - dst);
3595                 SvLEN_set(sv, size);
3596             } else {
3597
3598                 /* Here, have decided to get the exact size of the string.
3599                  * Currently this happens only when we know that there is
3600                  * guaranteed enough space to fit the converted string, so
3601                  * don't have to worry about growing.  If two_byte_count is 0,
3602                  * then t points to the first byte of the string which hasn't
3603                  * been examined yet.  Otherwise two_byte_count is 1, and t
3604                  * points to the first byte in the string that will expand to
3605                  * two.  Depending on this, start examining at t or 1 after t.
3606                  * */
3607
3608                 U8 *d = t + two_byte_count;
3609
3610
3611                 /* Count up the remaining bytes that expand to two */
3612
3613                 while (d < e) {
3614                     const U8 chr = *d++;
3615                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3616                 }
3617
3618                 /* The string will expand by just the number of bytes that
3619                  * occupy two positions.  But we are one afterwards because of
3620                  * the increment just above.  This is the place to put the
3621                  * trailing NUL, and to set the length before we decrement */
3622
3623                 d += two_byte_count;
3624                 SvCUR_set(sv, d - s);
3625                 *d-- = '\0';
3626
3627
3628                 /* Having decremented d, it points to the position to put the
3629                  * very last byte of the expanded string.  Go backwards through
3630                  * the string, copying and expanding as we go, stopping when we
3631                  * get to the part that is invariant the rest of the way down */
3632
3633                 e--;
3634                 while (e >= t) {
3635                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3636                         *d-- = *e;
3637                     } else {
3638                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3639                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3640                     }
3641                     e--;
3642                 }
3643             }
3644
3645             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3646                 /* Update pos. We do it at the end rather than during
3647                  * the upgrade, to avoid slowing down the common case
3648                  * (upgrade without pos).
3649                  * pos can be stored as either bytes or characters.  Since
3650                  * this was previously a byte string we can just turn off
3651                  * the bytes flag. */
3652                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3653                 if (mg) {
3654                     mg->mg_flags &= ~MGf_BYTES;
3655                 }
3656                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3657                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3658             }
3659         }
3660     }
3661
3662     /* Mark as UTF-8 even if no variant - saves scanning loop */
3663     SvUTF8_on(sv);
3664     return SvCUR(sv);
3665 }
3666
3667 /*
3668 =for apidoc sv_utf8_downgrade
3669
3670 Attempts to convert the PV of an SV from characters to bytes.
3671 If the PV contains a character that cannot fit
3672 in a byte, this conversion will fail;
3673 in this case, either returns false or, if C<fail_ok> is not
3674 true, croaks.
3675
3676 This is not a general purpose Unicode to byte encoding interface:
3677 use the C<Encode> extension for that.
3678
3679 =cut
3680 */
3681
3682 bool
3683 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3684 {
3685     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3686
3687     if (SvPOKp(sv) && SvUTF8(sv)) {
3688         if (SvCUR(sv)) {
3689             U8 *s;
3690             STRLEN len;
3691             int mg_flags = SV_GMAGIC;
3692
3693             if (SvIsCOW(sv)) {
3694                 S_sv_uncow(aTHX_ sv, 0);
3695             }
3696             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3697                 /* update pos */
3698                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3699                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3700                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3701                                                 SV_GMAGIC|SV_CONST_RETURN);
3702                         mg_flags = 0; /* sv_pos_b2u does get magic */
3703                 }
3704                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3705                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3706
3707             }
3708             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3709
3710             if (!utf8_to_bytes(s, &len)) {
3711                 if (fail_ok)
3712                     return FALSE;
3713                 else {
3714                     if (PL_op)
3715                         Perl_croak(aTHX_ "Wide character in %s",
3716                                    OP_DESC(PL_op));
3717                     else
3718                         Perl_croak(aTHX_ "Wide character");
3719                 }
3720             }
3721             SvCUR_set(sv, len);
3722         }
3723     }
3724     SvUTF8_off(sv);
3725     return TRUE;
3726 }
3727
3728 /*
3729 =for apidoc sv_utf8_encode
3730
3731 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3732 flag off so that it looks like octets again.
3733
3734 =cut
3735 */
3736
3737 void
3738 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3739 {
3740     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3741
3742     if (SvREADONLY(sv)) {
3743         sv_force_normal_flags(sv, 0);
3744     }
3745     (void) sv_utf8_upgrade(sv);
3746     SvUTF8_off(sv);
3747 }
3748
3749 /*
3750 =for apidoc sv_utf8_decode
3751
3752 If the PV of the SV is an octet sequence in UTF-8
3753 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3754 so that it looks like a character.  If the PV contains only single-byte
3755 characters, the C<SvUTF8> flag stays off.
3756 Scans PV for validity and returns false if the PV is invalid UTF-8.
3757
3758 =cut
3759 */
3760
3761 bool
3762 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3763 {
3764     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3765
3766     if (SvPOKp(sv)) {
3767         const U8 *start, *c;
3768         const U8 *e;
3769
3770         /* The octets may have got themselves encoded - get them back as
3771          * bytes
3772          */
3773         if (!sv_utf8_downgrade(sv, TRUE))
3774             return FALSE;
3775
3776         /* it is actually just a matter of turning the utf8 flag on, but
3777          * we want to make sure everything inside is valid utf8 first.
3778          */
3779         c = start = (const U8 *) SvPVX_const(sv);
3780         if (!is_utf8_string(c, SvCUR(sv)))
3781             return FALSE;
3782         e = (const U8 *) SvEND(sv);
3783         while (c < e) {
3784             const U8 ch = *c++;
3785             if (!UTF8_IS_INVARIANT(ch)) {
3786                 SvUTF8_on(sv);
3787                 break;
3788             }
3789         }
3790         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3791             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3792                    after this, clearing pos.  Does anything on CPAN
3793                    need this? */
3794             /* adjust pos to the start of a UTF8 char sequence */
3795             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3796             if (mg) {
3797                 I32 pos = mg->mg_len;
3798                 if (pos > 0) {
3799                     for (c = start + pos; c > start; c--) {
3800                         if (UTF8_IS_START(*c))
3801                             break;
3802                     }
3803                     mg->mg_len  = c - start;
3804                 }
3805             }
3806             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3807                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3808         }
3809     }
3810     return TRUE;
3811 }
3812
3813 /*
3814 =for apidoc sv_setsv
3815
3816 Copies the contents of the source SV C<ssv> into the destination SV
3817 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3818 function if the source SV needs to be reused.  Does not handle 'set' magic on
3819 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3820 performs a copy-by-value, obliterating any previous content of the
3821 destination.
3822
3823 You probably want to use one of the assortment of wrappers, such as
3824 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3825 C<SvSetMagicSV_nosteal>.
3826
3827 =for apidoc sv_setsv_flags
3828
3829 Copies the contents of the source SV C<ssv> into the destination SV
3830 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3831 function if the source SV needs to be reused.  Does not handle 'set' magic.
3832 Loosely speaking, it performs a copy-by-value, obliterating any previous
3833 content of the destination.
3834 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3835 C<ssv> if appropriate, else not.  If the C<flags>
3836 parameter has the C<SV_NOSTEAL> bit set then the
3837 buffers of temps will not be stolen.  C<sv_setsv>
3838 and C<sv_setsv_nomg> are implemented in terms of this function.
3839
3840 You probably want to use one of the assortment of wrappers, such as
3841 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3842 C<SvSetMagicSV_nosteal>.
3843
3844 This is the primary function for copying scalars, and most other
3845 copy-ish functions and macros use this underneath.
3846
3847 =cut
3848 */
3849
3850 static void
3851 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3852 {
3853     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3854     HV *old_stash = NULL;
3855
3856     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3857
3858     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3859         const char * const name = GvNAME(sstr);
3860         const STRLEN len = GvNAMELEN(sstr);
3861         {
3862             if (dtype >= SVt_PV) {
3863                 SvPV_free(dstr);
3864                 SvPV_set(dstr, 0);
3865                 SvLEN_set(dstr, 0);
3866                 SvCUR_set(dstr, 0);
3867             }
3868             SvUPGRADE(dstr, SVt_PVGV);
3869             (void)SvOK_off(dstr);
3870             isGV_with_GP_on(dstr);
3871         }
3872         GvSTASH(dstr) = GvSTASH(sstr);
3873         if (GvSTASH(dstr))
3874             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3875         gv_name_set(MUTABLE_GV(dstr), name, len,
3876                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3877         SvFAKE_on(dstr);        /* can coerce to non-glob */
3878     }
3879
3880     if(GvGP(MUTABLE_GV(sstr))) {
3881         /* If source has method cache entry, clear it */
3882         if(GvCVGEN(sstr)) {
3883             SvREFCNT_dec(GvCV(sstr));
3884             GvCV_set(sstr, NULL);
3885             GvCVGEN(sstr) = 0;
3886         }
3887         /* If source has a real method, then a method is
3888            going to change */
3889         else if(
3890          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3891         ) {
3892             mro_changes = 1;
3893         }
3894     }
3895
3896     /* If dest already had a real method, that's a change as well */
3897     if(
3898         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3899      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3900     ) {
3901         mro_changes = 1;
3902     }
3903
3904     /* We don't need to check the name of the destination if it was not a
3905        glob to begin with. */
3906     if(dtype == SVt_PVGV) {
3907         const char * const name = GvNAME((const GV *)dstr);
3908         if(
3909             strEQ(name,"ISA")
3910          /* The stash may have been detached from the symbol table, so
3911             check its name. */
3912          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3913         )
3914             mro_changes = 2;
3915         else {
3916             const STRLEN len = GvNAMELEN(dstr);
3917             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3918              || (len == 1 && name[0] == ':')) {
3919                 mro_changes = 3;
3920
3921                 /* Set aside the old stash, so we can reset isa caches on
3922                    its subclasses. */
3923                 if((old_stash = GvHV(dstr)))
3924                     /* Make sure we do not lose it early. */
3925                     SvREFCNT_inc_simple_void_NN(
3926                      sv_2mortal((SV *)old_stash)
3927                     );
3928             }
3929         }
3930
3931         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3932     }
3933
3934     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3935      * so temporarily protect it */
3936     ENTER;
3937     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3938     gp_free(MUTABLE_GV(dstr));
3939     GvINTRO_off(dstr);          /* one-shot flag */
3940     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3941     LEAVE;
3942
3943     if (SvTAINTED(sstr))
3944         SvTAINT(dstr);
3945     if (GvIMPORTED(dstr) != GVf_IMPORTED
3946         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3947         {
3948             GvIMPORTED_on(dstr);
3949         }
3950     GvMULTI_on(dstr);
3951     if(mro_changes == 2) {
3952       if (GvAV((const GV *)sstr)) {
3953         MAGIC *mg;
3954         SV * const sref = (SV *)GvAV((const GV *)dstr);
3955         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3956             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3957                 AV * const ary = newAV();
3958                 av_push(ary, mg->mg_obj); /* takes the refcount */
3959                 mg->mg_obj = (SV *)ary;
3960             }
3961             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3962         }
3963         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3964       }
3965       mro_isa_changed_in(GvSTASH(dstr));
3966     }
3967     else if(mro_changes == 3) {
3968         HV * const stash = GvHV(dstr);
3969         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3970             mro_package_moved(
3971                 stash, old_stash,
3972                 (GV *)dstr, 0
3973             );
3974     }
3975     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3976     if (GvIO(dstr) && dtype == SVt_PVGV) {
3977         DEBUG_o(Perl_deb(aTHX_
3978                         "glob_assign_glob clearing PL_stashcache\n"));
3979         /* It's a cache. It will rebuild itself quite happily.
3980            It's a lot of effort to work out exactly which key (or keys)
3981            might be invalidated by the creation of the this file handle.
3982          */
3983         hv_clear(PL_stashcache);
3984     }
3985     return;
3986 }
3987
3988 void
3989 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3990 {
3991     SV * const sref = SvRV(sstr);
3992     SV *dref;
3993     const int intro = GvINTRO(dstr);
3994     SV **location;
3995     U8 import_flag = 0;
3996     const U32 stype = SvTYPE(sref);
3997
3998     PERL_ARGS_ASSERT_GV_SETREF;
3999
4000     if (intro) {
4001         GvINTRO_off(dstr);      /* one-shot flag */
4002         GvLINE(dstr) = CopLINE(PL_curcop);
4003         GvEGV(dstr) = MUTABLE_GV(dstr);
4004     }
4005     GvMULTI_on(dstr);
4006     switch (stype) {
4007     case SVt_PVCV:
4008         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4009         import_flag = GVf_IMPORTED_CV;
4010         goto common;
4011     case SVt_PVHV:
4012         location = (SV **) &GvHV(dstr);
4013         import_flag = GVf_IMPORTED_HV;
4014         goto common;
4015     case SVt_PVAV:
4016         location = (SV **) &GvAV(dstr);
4017         import_flag = GVf_IMPORTED_AV;
4018         goto common;
4019     case SVt_PVIO:
4020         location = (SV **) &GvIOp(dstr);
4021         goto common;
4022     case SVt_PVFM:
4023         location = (SV **) &GvFORM(dstr);
4024         goto common;
4025     default:
4026         location = &GvSV(dstr);
4027         import_flag = GVf_IMPORTED_SV;
4028     common:
4029         if (intro) {
4030             if (stype == SVt_PVCV) {
4031                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4032                 if (GvCVGEN(dstr)) {
4033                     SvREFCNT_dec(GvCV(dstr));
4034                     GvCV_set(dstr, NULL);
4035                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4036                 }
4037             }
4038             /* SAVEt_GVSLOT takes more room on the savestack and has more
4039                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4040                leave_scope needs access to the GV so it can reset method
4041                caches.  We must use SAVEt_GVSLOT whenever the type is
4042                SVt_PVCV, even if the stash is anonymous, as the stash may
4043                gain a name somehow before leave_scope. */
4044             if (stype == SVt_PVCV) {
4045                 /* There is no save_pushptrptrptr.  Creating it for this
4046                    one call site would be overkill.  So inline the ss add
4047                    routines here. */
4048                 dSS_ADD;
4049                 SS_ADD_PTR(dstr);
4050                 SS_ADD_PTR(location);
4051                 SS_ADD_PTR(SvREFCNT_inc(*location));
4052                 SS_ADD_UV(SAVEt_GVSLOT);
4053                 SS_ADD_END(4);
4054             }
4055             else SAVEGENERICSV(*location);
4056         }
4057         dref = *location;
4058         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4059             CV* const cv = MUTABLE_CV(*location);
4060             if (cv) {
4061                 if (!GvCVGEN((const GV *)dstr) &&
4062                     (CvROOT(cv) || CvXSUB(cv)) &&
4063                     /* redundant check that avoids creating the extra SV
4064                        most of the time: */
4065                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4066                     {
4067                         SV * const new_const_sv =
4068                             CvCONST((const CV *)sref)
4069                                  ? cv_const_sv((const CV *)sref)
4070                                  : NULL;
4071                         report_redefined_cv(
4072                            sv_2mortal(Perl_newSVpvf(aTHX_
4073                                 "%"HEKf"::%"HEKf,
4074                                 HEKfARG(
4075                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4076                                 ),
4077                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4078                            )),
4079                            cv,
4080                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4081                         );
4082                     }
4083                 if (!intro)
4084                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4085                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4086                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4087                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4088             }
4089             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4090             GvASSUMECV_on(dstr);
4091             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4092                 if (intro && GvREFCNT(dstr) > 1) {
4093                     /* temporary remove extra savestack's ref */
4094                     --GvREFCNT(dstr);
4095                     gv_method_changed(dstr);
4096                     ++GvREFCNT(dstr);
4097                 }
4098                 else gv_method_changed(dstr);
4099             }
4100         }
4101         *location = SvREFCNT_inc_simple_NN(sref);
4102         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4103             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4104             GvFLAGS(dstr) |= import_flag;
4105         }
4106
4107         if (stype == SVt_PVHV) {
4108             const char * const name = GvNAME((GV*)dstr);
4109             const STRLEN len = GvNAMELEN(dstr);
4110             if (
4111                 (
4112                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4113                 || (len == 1 && name[0] == ':')
4114                 )
4115              && (!dref || HvENAME_get(dref))
4116             ) {
4117                 mro_package_moved(
4118                     (HV *)sref, (HV *)dref,
4119                     (GV *)dstr, 0
4120                 );
4121             }
4122         }
4123         else if (
4124             stype == SVt_PVAV && sref != dref
4125          && strEQ(GvNAME((GV*)dstr), "ISA")
4126          /* The stash may have been detached from the symbol table, so
4127             check its name before doing anything. */
4128          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4129         ) {
4130             MAGIC *mg;
4131             MAGIC * const omg = dref && SvSMAGICAL(dref)
4132                                  ? mg_find(dref, PERL_MAGIC_isa)
4133                                  : NULL;
4134             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4135                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4136                     AV * const ary = newAV();
4137                     av_push(ary, mg->mg_obj); /* takes the refcount */
4138                     mg->mg_obj = (SV *)ary;
4139                 }
4140                 if (omg) {
4141                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4142                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4143                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4144                         while (items--)
4145                             av_push(
4146                              (AV *)mg->mg_obj,
4147                              SvREFCNT_inc_simple_NN(*svp++)
4148                             );
4149                     }
4150                     else
4151                         av_push(
4152                          (AV *)mg->mg_obj,
4153                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4154                         );
4155                 }
4156                 else
4157                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4158             }
4159             else
4160             {
4161                 SSize_t i;
4162                 sv_magic(
4163                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4164                 );
4165                 for (i = 0; i <= AvFILL(sref); ++i) {
4166                     SV **elem = av_fetch ((AV*)sref, i, 0);
4167                     if (elem) {
4168                         sv_magic(
4169                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4170                         );
4171                     }
4172                 }
4173                 mg = mg_find(sref, PERL_MAGIC_isa);
4174             }
4175             /* Since the *ISA assignment could have affected more than
4176                one stash, don't call mro_isa_changed_in directly, but let
4177                magic_clearisa do it for us, as it already has the logic for
4178                dealing with globs vs arrays of globs. */
4179             assert(mg);
4180             Perl_magic_clearisa(aTHX_ NULL, mg);
4181         }
4182         else if (stype == SVt_PVIO) {
4183             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4184             /* It's a cache. It will rebuild itself quite happily.
4185                It's a lot of effort to work out exactly which key (or keys)
4186                might be invalidated by the creation of the this file handle.
4187             */
4188             hv_clear(PL_stashcache);
4189         }
4190         break;
4191     }
4192     if (!intro) SvREFCNT_dec(dref);
4193     if (SvTAINTED(sstr))
4194         SvTAINT(dstr);
4195     return;
4196 }
4197
4198
4199
4200
4201 #ifdef PERL_DEBUG_READONLY_COW
4202 # include <sys/mman.h>
4203
4204 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4205 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4206 # endif
4207
4208 void
4209 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4210 {
4211     struct perl_memory_debug_header * const header =
4212         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4213     const MEM_SIZE len = header->size;
4214     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4215 # ifdef PERL_TRACK_MEMPOOL
4216     if (!header->readonly) header->readonly = 1;
4217 # endif
4218     if (mprotect(header, len, PROT_READ))
4219         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4220                          header, len, errno);
4221 }
4222
4223 static void
4224 S_sv_buf_to_rw(pTHX_ SV *sv)
4225 {
4226     struct perl_memory_debug_header * const header =
4227         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4228     const MEM_SIZE len = header->size;
4229     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4230     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4231         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4232                          header, len, errno);
4233 # ifdef PERL_TRACK_MEMPOOL
4234     header->readonly = 0;
4235 # endif
4236 }
4237
4238 #else
4239 # define sv_buf_to_ro(sv)       NOOP
4240 # define sv_buf_to_rw(sv)       NOOP
4241 #endif
4242
4243 void
4244 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4245 {
4246     U32 sflags;
4247     int dtype;
4248     svtype stype;
4249     unsigned int both_type;
4250
4251     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4252
4253     if (UNLIKELY( sstr == dstr ))
4254         return;
4255
4256     if (UNLIKELY( !sstr ))
4257         sstr = &PL_sv_undef;
4258
4259     stype = SvTYPE(sstr);
4260     dtype = SvTYPE(dstr);
4261     both_type = (stype | dtype);
4262
4263     /* with these values, we can check that both SVs are NULL/IV (and not
4264      * freed) just by testing the or'ed types */
4265     STATIC_ASSERT_STMT(SVt_NULL == 0);
4266     STATIC_ASSERT_STMT(SVt_IV   == 1);
4267     if (both_type <= 1) {
4268         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4269          * special-casing */
4270         U32 sflags;
4271         U32 new_dflags;
4272
4273         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4274         if (SvREADONLY(dstr))
4275             Perl_croak_no_modify();
4276         if (SvROK(dstr))
4277             sv_unref_flags(dstr, 0);
4278
4279         assert(!SvGMAGICAL(sstr));
4280         assert(!SvGMAGICAL(dstr));
4281
4282         sflags = SvFLAGS(sstr);
4283         if (sflags & (SVf_IOK|SVf_ROK)) {
4284             SET_SVANY_FOR_BODYLESS_IV(dstr);
4285             new_dflags = SVt_IV;
4286
4287             if (sflags & SVf_ROK) {
4288                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4289                 new_dflags |= SVf_ROK;
4290             }
4291             else {
4292                 /* both src and dst are <= SVt_IV, so sv_any points to the
4293                  * head; so access the head directly
4294                  */
4295                 assert(    &(sstr->sv_u.svu_iv)
4296                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4297                 assert(    &(dstr->sv_u.svu_iv)
4298                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4299                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4300                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4301             }
4302         }
4303         else {
4304             new_dflags = dtype; /* turn off everything except the type */
4305         }
4306         SvFLAGS(dstr) = new_dflags;
4307
4308         return;
4309     }
4310
4311     if (UNLIKELY(both_type == SVTYPEMASK)) {
4312         if (SvIS_FREED(dstr)) {
4313             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4314                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4315         }
4316         if (SvIS_FREED(sstr)) {
4317             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4318                        (void*)sstr, (void*)dstr);
4319         }
4320     }
4321
4322
4323
4324     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4325     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4326
4327     /* There's a lot of redundancy below but we're going for speed here */
4328
4329     switch (stype) {
4330     case SVt_NULL:
4331       undef_sstr:
4332         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4333             (void)SvOK_off(dstr);
4334             return;
4335         }
4336         break;
4337     case SVt_IV:
4338         if (SvIOK(sstr)) {
4339             switch (dtype) {
4340             case SVt_NULL:
4341                 /* For performance, we inline promoting to type SVt_IV. */
4342                 /* We're starting from SVt_NULL, so provided that define is
4343                  * actual 0, we don't have to unset any SV type flags
4344                  * to promote to SVt_IV. */
4345                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4346                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4347                 SvFLAGS(dstr) |= SVt_IV;
4348                 break;
4349             case SVt_NV:
4350             case SVt_PV:
4351                 sv_upgrade(dstr, SVt_PVIV);
4352                 break;
4353             case SVt_PVGV:
4354             case SVt_PVLV:
4355                 goto end_of_first_switch;
4356             }
4357             (void)SvIOK_only(dstr);
4358             SvIV_set(dstr,  SvIVX(sstr));
4359             if (SvIsUV(sstr))
4360                 SvIsUV_on(dstr);
4361             /* SvTAINTED can only be true if the SV has taint magic, which in
4362                turn means that the SV type is PVMG (or greater). This is the
4363                case statement for SVt_IV, so this cannot be true (whatever gcov
4364                may say).  */
4365             assert(!SvTAINTED(sstr));
4366             return;
4367         }
4368         if (!SvROK(sstr))
4369             goto undef_sstr;
4370         if (dtype < SVt_PV && dtype != SVt_IV)
4371             sv_upgrade(dstr, SVt_IV);
4372         break;
4373
4374     case SVt_NV:
4375         if (LIKELY( SvNOK(sstr) )) {
4376             switch (dtype) {
4377             case SVt_NULL:
4378             case SVt_IV:
4379                 sv_upgrade(dstr, SVt_NV);
4380                 break;
4381             case SVt_PV:
4382             case SVt_PVIV:
4383                 sv_upgrade(dstr, SVt_PVNV);
4384                 break;
4385             case SVt_PVGV:
4386             case SVt_PVLV:
4387                 goto end_of_first_switch;
4388             }
4389             SvNV_set(dstr, SvNVX(sstr));
4390             (void)SvNOK_only(dstr);
4391             /* SvTAINTED can only be true if the SV has taint magic, which in
4392                turn means that the SV type is PVMG (or greater). This is the
4393                case statement for SVt_NV, so this cannot be true (whatever gcov
4394                may say).  */
4395             assert(!SvTAINTED(sstr));
4396             return;
4397         }
4398         goto undef_sstr;
4399
4400     case SVt_PV:
4401         if (dtype < SVt_PV)
4402             sv_upgrade(dstr, SVt_PV);
4403         break;
4404     case SVt_PVIV:
4405         if (dtype < SVt_PVIV)
4406             sv_upgrade(dstr, SVt_PVIV);
4407         break;
4408     case SVt_PVNV:
4409         if (dtype < SVt_PVNV)
4410             sv_upgrade(dstr, SVt_PVNV);
4411         break;
4412     default:
4413         {
4414         const char * const type = sv_reftype(sstr,0);
4415         if (PL_op)
4416             /* diag_listed_as: Bizarre copy of %s */
4417             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4418         else
4419             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4420         }
4421         NOT_REACHED; /* NOTREACHED */
4422
4423     case SVt_REGEXP:
4424       upgregexp:
4425         if (dtype < SVt_REGEXP)
4426         {
4427             if (dtype >= SVt_PV) {
4428                 SvPV_free(dstr);
4429                 SvPV_set(dstr, 0);
4430                 SvLEN_set(dstr, 0);
4431                 SvCUR_set(dstr, 0);
4432             }
4433             sv_upgrade(dstr, SVt_REGEXP);
4434         }
4435         break;
4436
4437         case SVt_INVLIST:
4438     case SVt_PVLV:
4439     case SVt_PVGV:
4440     case SVt_PVMG:
4441         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4442             mg_get(sstr);
4443             if (SvTYPE(sstr) != stype)
4444                 stype = SvTYPE(sstr);
4445         }
4446         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4447                     glob_assign_glob(dstr, sstr, dtype);
4448                     return;
4449         }
4450         if (stype == SVt_PVLV)
4451         {
4452             if (isREGEXP(sstr)) goto upgregexp;
4453             SvUPGRADE(dstr, SVt_PVNV);
4454         }
4455         else
4456             SvUPGRADE(dstr, (svtype)stype);
4457     }
4458  end_of_first_switch:
4459
4460     /* dstr may have been upgraded.  */
4461     dtype = SvTYPE(dstr);
4462     sflags = SvFLAGS(sstr);
4463
4464     if (UNLIKELY( dtype == SVt_PVCV )) {
4465         /* Assigning to a subroutine sets the prototype.  */
4466         if (SvOK(sstr)) {
4467             STRLEN len;
4468             const char *const ptr = SvPV_const(sstr, len);
4469
4470             SvGROW(dstr, len + 1);
4471             Copy(ptr, SvPVX(dstr), len + 1, char);
4472             SvCUR_set(dstr, len);
4473             SvPOK_only(dstr);
4474             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4475             CvAUTOLOAD_off(dstr);
4476         } else {
4477             SvOK_off(dstr);
4478         }
4479     }
4480     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4481              || dtype == SVt_PVFM))
4482     {
4483         const char * const type = sv_reftype(dstr,0);
4484         if (PL_op)
4485             /* diag_listed_as: Cannot copy to %s */
4486             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4487         else
4488             Perl_croak(aTHX_ "Cannot copy to %s", type);
4489     } else if (sflags & SVf_ROK) {
4490         if (isGV_with_GP(dstr)
4491             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4492             sstr = SvRV(sstr);
4493             if (sstr == dstr) {
4494                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4495                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4496                 {
4497                     GvIMPORTED_on(dstr);
4498                 }
4499                 GvMULTI_on(dstr);
4500                 return;
4501             }
4502             glob_assign_glob(dstr, sstr, dtype);
4503             return;
4504         }
4505
4506         if (dtype >= SVt_PV) {
4507             if (isGV_with_GP(dstr)) {
4508                 gv_setref(dstr, sstr);
4509                 return;
4510             }
4511             if (SvPVX_const(dstr)) {
4512                 SvPV_free(dstr);
4513                 SvLEN_set(dstr, 0);
4514                 SvCUR_set(dstr, 0);
4515             }
4516         }
4517         (void)SvOK_off(dstr);
4518         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4519         SvFLAGS(dstr) |= sflags & SVf_ROK;
4520         assert(!(sflags & SVp_NOK));
4521         assert(!(sflags & SVp_IOK));
4522         assert(!(sflags & SVf_NOK));
4523         assert(!(sflags & SVf_IOK));
4524     }
4525     else if (isGV_with_GP(dstr)) {
4526         if (!(sflags & SVf_OK)) {
4527             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4528                            "Undefined value assigned to typeglob");
4529         }
4530         else {
4531             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4532             if (dstr != (const SV *)gv) {
4533                 const char * const name = GvNAME((const GV *)dstr);
4534                 const STRLEN len = GvNAMELEN(dstr);
4535                 HV *old_stash = NULL;
4536                 bool reset_isa = FALSE;
4537                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4538                  || (len == 1 && name[0] == ':')) {
4539                     /* Set aside the old stash, so we can reset isa caches
4540                        on its subclasses. */
4541                     if((old_stash = GvHV(dstr))) {
4542                         /* Make sure we do not lose it early. */
4543                         SvREFCNT_inc_simple_void_NN(
4544                          sv_2mortal((SV *)old_stash)
4545                         );
4546                     }
4547                     reset_isa = TRUE;
4548                 }
4549
4550                 if (GvGP(dstr)) {
4551                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4552                     gp_free(MUTABLE_GV(dstr));
4553                 }
4554                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4555
4556                 if (reset_isa) {
4557                     HV * const stash = GvHV(dstr);
4558                     if(
4559                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4560                     )
4561                         mro_package_moved(
4562                          stash, old_stash,
4563                          (GV *)dstr, 0
4564                         );
4565                 }
4566             }
4567         }
4568     }
4569     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4570           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4571         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4572     }
4573     else if (sflags & SVp_POK) {
4574         const STRLEN cur = SvCUR(sstr);
4575         const STRLEN len = SvLEN(sstr);
4576
4577         /*
4578          * We have three basic ways to copy the string:
4579          *
4580          *  1. Swipe
4581          *  2. Copy-on-write
4582          *  3. Actual copy
4583          * 
4584          * Which we choose is based on various factors.  The following
4585          * things are listed in order of speed, fastest to slowest:
4586          *  - Swipe
4587          *  - Copying a short string
4588          *  - Copy-on-write bookkeeping
4589          *  - malloc
4590          *  - Copying a long string
4591          * 
4592          * We swipe the string (steal the string buffer) if the SV on the
4593          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4594          * big win on long strings.  It should be a win on short strings if
4595          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4596          * slow things down, as SvPVX_const(sstr) would have been freed
4597          * soon anyway.
4598          * 
4599          * We also steal the buffer from a PADTMP (operator target) if it
4600          * is â€˜long enough’.  For short strings, a swipe does not help
4601          * here, as it causes more malloc calls the next time the target
4602          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4603          * be allocated it is still not worth swiping PADTMPs for short
4604          * strings, as the savings here are small.
4605          * 
4606          * If swiping is not an option, then we see whether it is
4607          * worth using copy-on-write.  If the lhs already has a buf-
4608          * fer big enough and the string is short, we skip it and fall back
4609          * to method 3, since memcpy is faster for short strings than the
4610          * later bookkeeping overhead that copy-on-write entails.
4611
4612          * If the rhs is not a copy-on-write string yet, then we also
4613          * consider whether the buffer is too large relative to the string
4614          * it holds.  Some operations such as readline allocate a large
4615          * buffer in the expectation of reusing it.  But turning such into
4616          * a COW buffer is counter-productive because it increases memory
4617          * usage by making readline allocate a new large buffer the sec-
4618          * ond time round.  So, if the buffer is too large, again, we use
4619          * method 3 (copy).
4620          * 
4621          * Finally, if there is no buffer on the left, or the buffer is too 
4622          * small, then we use copy-on-write and make both SVs share the
4623          * string buffer.
4624          *
4625          */
4626
4627         /* Whichever path we take through the next code, we want this true,
4628            and doing it now facilitates the COW check.  */
4629         (void)SvPOK_only(dstr);
4630
4631         if (
4632                  (              /* Either ... */
4633                                 /* slated for free anyway (and not COW)? */
4634                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4635                                 /* or a swipable TARG */
4636                  || ((sflags &
4637                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4638                        == SVs_PADTMP
4639                                 /* whose buffer is worth stealing */
4640                      && CHECK_COWBUF_THRESHOLD(cur,len)
4641                     )
4642                  ) &&
4643                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4644                  (!(flags & SV_NOSTEAL)) &&
4645                                         /* and we're allowed to steal temps */
4646                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4647                  len)             /* and really is a string */
4648         {       /* Passes the swipe test.  */
4649             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4650                 SvPV_free(dstr);
4651             SvPV_set(dstr, SvPVX_mutable(sstr));
4652             SvLEN_set(dstr, SvLEN(sstr));
4653             SvCUR_set(dstr, SvCUR(sstr));
4654
4655             SvTEMP_off(dstr);
4656             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4657             SvPV_set(sstr, NULL);
4658             SvLEN_set(sstr, 0);
4659             SvCUR_set(sstr, 0);
4660             SvTEMP_off(sstr);
4661         }
4662         else if (flags & SV_COW_SHARED_HASH_KEYS
4663               &&
4664 #ifdef PERL_COPY_ON_WRITE
4665                  (sflags & SVf_IsCOW
4666                    ? (!len ||
4667                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4668                           /* If this is a regular (non-hek) COW, only so
4669                              many COW "copies" are possible. */
4670                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4671                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4672                      && !(SvFLAGS(dstr) & SVf_BREAK)
4673                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4674                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4675                     ))
4676 #else
4677                  sflags & SVf_IsCOW
4678               && !(SvFLAGS(dstr) & SVf_BREAK)
4679 #endif
4680             ) {
4681             /* Either it's a shared hash key, or it's suitable for
4682                copy-on-write.  */
4683             if (DEBUG_C_TEST) {
4684                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4685                 sv_dump(sstr);
4686                 sv_dump(dstr);
4687             }
4688 #ifdef PERL_ANY_COW
4689             if (!(sflags & SVf_IsCOW)) {
4690                     SvIsCOW_on(sstr);
4691                     CowREFCNT(sstr) = 0;
4692             }
4693 #endif
4694             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4695                 SvPV_free(dstr);
4696             }
4697
4698 #ifdef PERL_ANY_COW
4699             if (len) {
4700                     if (sflags & SVf_IsCOW) {
4701                         sv_buf_to_rw(sstr);
4702                     }
4703                     CowREFCNT(sstr)++;
4704                     SvPV_set(dstr, SvPVX_mutable(sstr));
4705                     sv_buf_to_ro(sstr);
4706             } else
4707 #endif
4708             {
4709                     /* SvIsCOW_shared_hash */
4710                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4711                                           "Copy on write: Sharing hash\n"));
4712
4713                     assert (SvTYPE(dstr) >= SVt_PV);
4714                     SvPV_set(dstr,
4715                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4716             }
4717             SvLEN_set(dstr, len);
4718             SvCUR_set(dstr, cur);
4719             SvIsCOW_on(dstr);
4720         } else {
4721             /* Failed the swipe test, and we cannot do copy-on-write either.
4722                Have to copy the string.  */
4723             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4724             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4725             SvCUR_set(dstr, cur);
4726             *SvEND(dstr) = '\0';
4727         }
4728         if (sflags & SVp_NOK) {
4729             SvNV_set(dstr, SvNVX(sstr));
4730         }
4731         if (sflags & SVp_IOK) {
4732             SvIV_set(dstr, SvIVX(sstr));
4733             /* Must do this otherwise some other overloaded use of 0x80000000
4734                gets confused. I guess SVpbm_VALID */
4735             if (sflags & SVf_IVisUV)
4736                 SvIsUV_on(dstr);
4737         }
4738         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4739         {
4740             const MAGIC * const smg = SvVSTRING_mg(sstr);
4741             if (smg) {
4742                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4743                          smg->mg_ptr, smg->mg_len);
4744                 SvRMAGICAL_on(dstr);
4745             }
4746         }
4747     }
4748     else if (sflags & (SVp_IOK|SVp_NOK)) {
4749         (void)SvOK_off(dstr);
4750         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4751         if (sflags & SVp_IOK) {
4752             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4753             SvIV_set(dstr, SvIVX(sstr));
4754         }
4755         if (sflags & SVp_NOK) {
4756             SvNV_set(dstr, SvNVX(sstr));
4757         }
4758     }
4759     else {
4760         if (isGV_with_GP(sstr)) {
4761             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4762         }
4763         else
4764             (void)SvOK_off(dstr);
4765     }
4766     if (SvTAINTED(sstr))
4767         SvTAINT(dstr);
4768 }
4769
4770 /*
4771 =for apidoc sv_setsv_mg
4772
4773 Like C<sv_setsv>, but also handles 'set' magic.
4774
4775 =cut
4776 */
4777
4778 void
4779 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4780 {
4781     PERL_ARGS_ASSERT_SV_SETSV_MG;
4782
4783     sv_setsv(dstr,sstr);
4784     SvSETMAGIC(dstr);
4785 }
4786
4787 #ifdef PERL_ANY_COW
4788 #  define SVt_COW SVt_PV
4789 SV *
4790 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4791 {
4792     STRLEN cur = SvCUR(sstr);
4793     STRLEN len = SvLEN(sstr);
4794     char *new_pv;
4795 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4796     const bool already = cBOOL(SvIsCOW(sstr));
4797 #endif
4798
4799     PERL_ARGS_ASSERT_SV_SETSV_COW;
4800
4801     if (DEBUG_C_TEST) {
4802         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4803                       (void*)sstr, (void*)dstr);
4804         sv_dump(sstr);
4805         if (dstr)
4806                     sv_dump(dstr);
4807     }
4808
4809     if (dstr) {
4810         if (SvTHINKFIRST(dstr))
4811             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4812         else if (SvPVX_const(dstr))
4813             Safefree(SvPVX_mutable(dstr));
4814     }
4815     else
4816         new_SV(dstr);
4817     SvUPGRADE(dstr, SVt_COW);
4818
4819     assert (SvPOK(sstr));
4820     assert (SvPOKp(sstr));
4821
4822     if (SvIsCOW(sstr)) {
4823
4824         if (SvLEN(sstr) == 0) {
4825             /* source is a COW shared hash key.  */
4826             DEBUG_C(PerlIO_printf(Perl_debug_log,
4827                                   "Fast copy on write: Sharing hash\n"));
4828             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4829             goto common_exit;
4830         }
4831         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4832         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4833     } else {
4834         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4835         SvUPGRADE(sstr, SVt_COW);
4836         SvIsCOW_on(sstr);
4837         DEBUG_C(PerlIO_printf(Perl_debug_log,
4838                               "Fast copy on write: Converting sstr to COW\n"));
4839         CowREFCNT(sstr) = 0;    
4840     }
4841 #  ifdef PERL_DEBUG_READONLY_COW
4842     if (already) sv_buf_to_rw(sstr);
4843 #  endif
4844     CowREFCNT(sstr)++;  
4845     new_pv = SvPVX_mutable(sstr);
4846     sv_buf_to_ro(sstr);
4847
4848   common_exit:
4849     SvPV_set(dstr, new_pv);
4850     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4851     if (SvUTF8(sstr))
4852         SvUTF8_on(dstr);
4853     SvLEN_set(dstr, len);
4854     SvCUR_set(dstr, cur);
4855     if (DEBUG_C_TEST) {
4856         sv_dump(dstr);
4857     }
4858     return dstr;
4859 }
4860 #endif
4861
4862 /*
4863 =for apidoc sv_setpvn
4864
4865 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4866 The C<len> parameter indicates the number of
4867 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4868 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4869
4870 =cut
4871 */
4872
4873 void
4874 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4875 {
4876     char *dptr;
4877
4878     PERL_ARGS_ASSERT_SV_SETPVN;
4879
4880     SV_CHECK_THINKFIRST_COW_DROP(sv);
4881     if (!ptr) {
4882         (void)SvOK_off(sv);
4883         return;
4884     }
4885     else {
4886         /* len is STRLEN which is unsigned, need to copy to signed */
4887         const IV iv = len;
4888         if (iv < 0)
4889             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4890                        IVdf, iv);
4891     }
4892     SvUPGRADE(sv, SVt_PV);
4893
4894     dptr = SvGROW(sv, len + 1);
4895     Move(ptr,dptr,len,char);
4896     dptr[len] = '\0';
4897     SvCUR_set(sv, len);
4898     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4899     SvTAINT(sv);
4900     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4901 }
4902
4903 /*
4904 =for apidoc sv_setpvn_mg
4905
4906 Like C<sv_setpvn>, but also handles 'set' magic.
4907
4908 =cut
4909 */
4910
4911 void
4912 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4913 {
4914     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4915
4916     sv_setpvn(sv,ptr,len);
4917     SvSETMAGIC(sv);
4918 }
4919
4920 /*
4921 =for apidoc sv_setpv
4922
4923 Copies a string into an SV.  The string must be terminated with a C<NUL>
4924 character.
4925 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4926
4927 =cut
4928 */
4929
4930 void
4931 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4932 {
4933     STRLEN len;
4934
4935     PERL_ARGS_ASSERT_SV_SETPV;
4936
4937     SV_CHECK_THINKFIRST_COW_DROP(sv);
4938     if (!ptr) {
4939         (void)SvOK_off(sv);
4940         return;
4941     }
4942     len = strlen(ptr);
4943     SvUPGRADE(sv, SVt_PV);
4944
4945     SvGROW(sv, len + 1);
4946     Move(ptr,SvPVX(sv),len+1,char);
4947     SvCUR_set(sv, len);
4948     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4949     SvTAINT(sv);
4950     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4951 }
4952
4953 /*
4954 =for apidoc sv_setpv_mg
4955
4956 Like C<sv_setpv>, but also handles 'set' magic.
4957
4958 =cut
4959 */
4960
4961 void
4962 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4963 {
4964     PERL_ARGS_ASSERT_SV_SETPV_MG;
4965
4966     sv_setpv(sv,ptr);
4967     SvSETMAGIC(sv);
4968 }
4969
4970 void
4971 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4972 {
4973     PERL_ARGS_ASSERT_SV_SETHEK;
4974
4975     if (!hek) {
4976         return;
4977     }
4978
4979     if (HEK_LEN(hek) == HEf_SVKEY) {
4980         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4981         return;
4982     } else {
4983         const int flags = HEK_FLAGS(hek);
4984         if (flags & HVhek_WASUTF8) {
4985             STRLEN utf8_len = HEK_LEN(hek);
4986             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4987             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4988             SvUTF8_on(sv);
4989             return;
4990         } else if (flags & HVhek_UNSHARED) {
4991             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4992             if (HEK_UTF8(hek))
4993                 SvUTF8_on(sv);
4994             else SvUTF8_off(sv);
4995             return;
4996         }
4997         {
4998             SV_CHECK_THINKFIRST_COW_DROP(sv);
4999             SvUPGRADE(sv, SVt_PV);
5000             SvPV_free(sv);
5001             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5002             SvCUR_set(sv, HEK_LEN(hek));
5003             SvLEN_set(sv, 0);
5004             SvIsCOW_on(sv);
5005             SvPOK_on(sv);
5006             if (HEK_UTF8(hek))
5007                 SvUTF8_on(sv);
5008             else SvUTF8_off(sv);
5009             return;
5010         }
5011     }
5012 }
5013
5014
5015 /*
5016 =for apidoc sv_usepvn_flags
5017
5018 Tells an SV to use C<ptr> to find its string value.  Normally the
5019 string is stored inside the SV, but sv_usepvn allows the SV to use an
5020 outside string.  C<ptr> should point to memory that was allocated
5021 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5022 the start of a C<Newx>-ed block of memory, and not a pointer to the
5023 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5024 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5025 string length, C<len>, must be supplied.  By default this function
5026 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5027 so that pointer should not be freed or used by the programmer after
5028 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5029 that pointer (e.g. ptr + 1) be used.
5030
5031 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5032 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5033 and the realloc
5034 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5035 C<len>, and already meets the requirements for storing in C<SvPVX>).
5036
5037 =cut
5038 */
5039
5040 void
5041 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5042 {
5043     STRLEN allocate;
5044
5045     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5046
5047     SV_CHECK_THINKFIRST_COW_DROP(sv);
5048     SvUPGRADE(sv, SVt_PV);
5049     if (!ptr) {
5050         (void)SvOK_off(sv);
5051         if (flags & SV_SMAGIC)
5052             SvSETMAGIC(sv);
5053         return;
5054     }
5055     if (SvPVX_const(sv))
5056         SvPV_free(sv);
5057
5058 #ifdef DEBUGGING
5059     if (flags & SV_HAS_TRAILING_NUL)
5060         assert(ptr[len] == '\0');
5061 #endif
5062
5063     allocate = (flags & SV_HAS_TRAILING_NUL)
5064         ? len + 1 :
5065 #ifdef Perl_safesysmalloc_size
5066         len + 1;
5067 #else 
5068         PERL_STRLEN_ROUNDUP(len + 1);
5069 #endif
5070     if (flags & SV_HAS_TRAILING_NUL) {
5071         /* It's long enough - do nothing.
5072            Specifically Perl_newCONSTSUB is relying on this.  */
5073     } else {
5074 #ifdef DEBUGGING
5075         /* Force a move to shake out bugs in callers.  */
5076         char *new_ptr = (char*)safemalloc(allocate);
5077         Copy(ptr, new_ptr, len, char);
5078         PoisonFree(ptr,len,char);
5079         Safefree(ptr);
5080         ptr = new_ptr;
5081 #else
5082         ptr = (char*) saferealloc (ptr, allocate);
5083 #endif
5084     }
5085 #ifdef Perl_safesysmalloc_size
5086     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5087 #else
5088     SvLEN_set(sv, allocate);
5089 #endif
5090     SvCUR_set(sv, len);
5091     SvPV_set(sv, ptr);
5092     if (!(flags & SV_HAS_TRAILING_NUL)) {
5093         ptr[len] = '\0';
5094     }
5095     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5096     SvTAINT(sv);
5097     if (flags & SV_SMAGIC)
5098         SvSETMAGIC(sv);
5099 }
5100
5101 /*
5102 =for apidoc sv_force_normal_flags
5103
5104 Undo various types of fakery on an SV, where fakery means
5105 "more than" a string: if the PV is a shared string, make
5106 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5107 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5108 we do the copy, and is also used locally; if this is a
5109 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5110 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5111 C<SvPOK_off> rather than making a copy.  (Used where this
5112 scalar is about to be set to some other value.)  In addition,
5113 the C<flags> parameter gets passed to C<sv_unref_flags()>
5114 when unreffing.  C<sv_force_normal> calls this function
5115 with flags set to 0.
5116
5117 This function is expected to be used to signal to perl that this SV is
5118 about to be written to, and any extra book-keeping needs to be taken care
5119 of.  Hence, it croaks on read-only values.
5120
5121 =cut
5122 */
5123
5124 static void
5125 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5126 {
5127     assert(SvIsCOW(sv));
5128     {
5129 #ifdef PERL_ANY_COW
5130         const char * const pvx = SvPVX_const(sv);
5131         const STRLEN len = SvLEN(sv);
5132         const STRLEN cur = SvCUR(sv);
5133
5134         if (DEBUG_C_TEST) {
5135                 PerlIO_printf(Perl_debug_log,
5136                               "Copy on write: Force normal %ld\n",
5137                               (long) flags);
5138                 sv_dump(sv);
5139         }
5140         SvIsCOW_off(sv);
5141 # ifdef PERL_COPY_ON_WRITE
5142         if (len) {
5143             /* Must do this first, since the CowREFCNT uses SvPVX and
5144             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5145             the only owner left of the buffer. */
5146             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5147             {
5148                 U8 cowrefcnt = CowREFCNT(sv);
5149                 if(cowrefcnt != 0) {
5150                     cowrefcnt--;
5151                     CowREFCNT(sv) = cowrefcnt;
5152                     sv_buf_to_ro(sv);
5153                     goto copy_over;
5154                 }
5155             }
5156             /* Else we are the only owner of the buffer. */
5157         }
5158         else
5159 # endif
5160         {
5161             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5162             copy_over:
5163             SvPV_set(sv, NULL);
5164             SvCUR_set(sv, 0);
5165             SvLEN_set(sv, 0);
5166             if (flags & SV_COW_DROP_PV) {
5167                 /* OK, so we don't need to copy our buffer.  */
5168                 SvPOK_off(sv);
5169             } else {
5170                 SvGROW(sv, cur + 1);
5171                 Move(pvx,SvPVX(sv),cur,char);
5172                 SvCUR_set(sv, cur);
5173                 *SvEND(sv) = '\0';
5174             }
5175             if (len) {
5176             } else {
5177                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5178             }
5179             if (DEBUG_C_TEST) {
5180                 sv_dump(sv);
5181             }
5182         }
5183 #else
5184             const char * const pvx = SvPVX_const(sv);
5185             const STRLEN len = SvCUR(sv);
5186             SvIsCOW_off(sv);
5187             SvPV_set(sv, NULL);
5188             SvLEN_set(sv, 0);
5189             if (flags & SV_COW_DROP_PV) {
5190                 /* OK, so we don't need to copy our buffer.  */
5191                 SvPOK_off(sv);
5192             } else {
5193                 SvGROW(sv, len + 1);
5194                 Move(pvx,SvPVX(sv),len,char);
5195                 *SvEND(sv) = '\0';
5196             }
5197             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5198 #endif
5199     }
5200 }
5201
5202 void
5203 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5204 {
5205     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5206
5207     if (SvREADONLY(sv))
5208         Perl_croak_no_modify();
5209     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5210         S_sv_uncow(aTHX_ sv, flags);
5211     if (SvROK(sv))
5212         sv_unref_flags(sv, flags);
5213     else if (SvFAKE(sv) && isGV_with_GP(sv))
5214         sv_unglob(sv, flags);
5215     else if (SvFAKE(sv) && isREGEXP(sv)) {
5216         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5217            to sv_unglob. We only need it here, so inline it.  */
5218         const bool islv = SvTYPE(sv) == SVt_PVLV;
5219         const svtype new_type =
5220           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5221         SV *const temp = newSV_type(new_type);
5222         regexp *const temp_p = ReANY((REGEXP *)sv);
5223
5224         if (new_type == SVt_PVMG) {
5225             SvMAGIC_set(temp, SvMAGIC(sv));
5226             SvMAGIC_set(sv, NULL);
5227             SvSTASH_set(temp, SvSTASH(sv));
5228             SvSTASH_set(sv, NULL);
5229         }
5230         if (!islv) SvCUR_set(temp, SvCUR(sv));
5231         /* Remember that SvPVX is in the head, not the body.  But
5232            RX_WRAPPED is in the body. */
5233         assert(ReANY((REGEXP *)sv)->mother_re);
5234         /* Their buffer is already owned by someone else. */
5235         if (flags & SV_COW_DROP_PV) {
5236             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5237                zeroed body.  For SVt_PVLV, it should have been set to 0
5238                before turning into a regexp. */
5239             assert(!SvLEN(islv ? sv : temp));
5240             sv->sv_u.svu_pv = 0;
5241         }
5242         else {
5243             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5244             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5245             SvPOK_on(sv);
5246         }
5247
5248         /* Now swap the rest of the bodies. */
5249
5250         SvFAKE_off(sv);
5251         if (!islv) {
5252             SvFLAGS(sv) &= ~SVTYPEMASK;
5253             SvFLAGS(sv) |= new_type;
5254             SvANY(sv) = SvANY(temp);
5255         }
5256
5257         SvFLAGS(temp) &= ~(SVTYPEMASK);
5258         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5259         SvANY(temp) = temp_p;
5260         temp->sv_u.svu_rx = (regexp *)temp_p;
5261
5262         SvREFCNT_dec_NN(temp);
5263     }
5264     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5265 }
5266
5267 /*
5268 =for apidoc sv_chop
5269
5270 Efficient removal of characters from the beginning of the string buffer.
5271 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5272 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5273 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5274 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5275
5276 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5277 refer to the same chunk of data.
5278
5279 The unfortunate similarity of this function's name to that of Perl's C<chop>
5280 operator is strictly coincidental.  This function works from the left;
5281 C<chop> works from the right.
5282
5283 =cut
5284 */
5285
5286 void
5287 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5288 {
5289     STRLEN delta;
5290     STRLEN old_delta;
5291     U8 *p;
5292 #ifdef DEBUGGING
5293     const U8 *evacp;
5294     STRLEN evacn;
5295 #endif
5296     STRLEN max_delta;
5297
5298     PERL_ARGS_ASSERT_SV_CHOP;
5299
5300     if (!ptr || !SvPOKp(sv))
5301         return;
5302     delta = ptr - SvPVX_const(sv);
5303     if (!delta) {
5304         /* Nothing to do.  */
5305         return;
5306     }
5307     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5308     if (delta > max_delta)
5309         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5310                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5311     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5312     SV_CHECK_THINKFIRST(sv);
5313     SvPOK_only_UTF8(sv);
5314
5315     if (!SvOOK(sv)) {
5316         if (!SvLEN(sv)) { /* make copy of shared string */
5317             const char *pvx = SvPVX_const(sv);
5318             const STRLEN len = SvCUR(sv);
5319             SvGROW(sv, len + 1);
5320             Move(pvx,SvPVX(sv),len,char);
5321             *SvEND(sv) = '\0';
5322         }
5323         SvOOK_on(sv);
5324         old_delta = 0;
5325     } else {
5326         SvOOK_offset(sv, old_delta);
5327     }
5328     SvLEN_set(sv, SvLEN(sv) - delta);
5329     SvCUR_set(sv, SvCUR(sv) - delta);
5330     SvPV_set(sv, SvPVX(sv) + delta);
5331
5332     p = (U8 *)SvPVX_const(sv);
5333
5334 #ifdef DEBUGGING
5335     /* how many bytes were evacuated?  we will fill them with sentinel
5336        bytes, except for the part holding the new offset of course. */
5337     evacn = delta;
5338     if (old_delta)
5339         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5340     assert(evacn);
5341     assert(evacn <= delta + old_delta);
5342     evacp = p - evacn;
5343 #endif
5344
5345     /* This sets 'delta' to the accumulated value of all deltas so far */
5346     delta += old_delta;
5347     assert(delta);
5348
5349     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5350      * the string; otherwise store a 0 byte there and store 'delta' just prior
5351      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5352      * portion of the chopped part of the string */
5353     if (delta < 0x100) {
5354         *--p = (U8) delta;
5355     } else {
5356         *--p = 0;
5357         p -= sizeof(STRLEN);
5358         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5359     }
5360
5361 #ifdef DEBUGGING
5362     /* Fill the preceding buffer with sentinals to verify that no-one is
5363        using it.  */
5364     while (p > evacp) {
5365         --p;
5366         *p = (U8)PTR2UV(p);
5367     }
5368 #endif
5369 }
5370
5371 /*
5372 =for apidoc sv_catpvn
5373
5374 Concatenates the string onto the end of the string which is in the SV.
5375 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5376 status set, then the bytes appended should be valid UTF-8.
5377 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5378
5379 =for apidoc sv_catpvn_flags
5380
5381 Concatenates the string onto the end of the string which is in the SV.  The
5382 C<len> indicates number of bytes to copy.
5383
5384 By default, the string appended is assumed to be valid UTF-8 if the SV has
5385 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5386 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5387 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5388 string appended will be upgraded to UTF-8 if necessary.
5389
5390 If C<flags> has the C<SV_SMAGIC> bit set, will
5391 C<mg_set> on C<dsv> afterwards if appropriate.
5392 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5393 in terms of this function.
5394
5395 =cut
5396 */
5397
5398 void
5399 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5400 {
5401     STRLEN dlen;
5402     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5403
5404     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5405     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5406
5407     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5408       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5409          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5410          dlen = SvCUR(dsv);
5411       }
5412       else SvGROW(dsv, dlen + slen + 1);
5413       if (sstr == dstr)
5414         sstr = SvPVX_const(dsv);
5415       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5416       SvCUR_set(dsv, SvCUR(dsv) + slen);
5417     }
5418     else {
5419         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5420         const char * const send = sstr + slen;
5421         U8 *d;
5422
5423         /* Something this code does not account for, which I think is
5424            impossible; it would require the same pv to be treated as
5425            bytes *and* utf8, which would indicate a bug elsewhere. */
5426         assert(sstr != dstr);
5427
5428         SvGROW(dsv, dlen + slen * 2 + 1);
5429         d = (U8 *)SvPVX(dsv) + dlen;
5430
5431         while (sstr < send) {
5432             append_utf8_from_native_byte(*sstr, &d);
5433             sstr++;
5434         }
5435         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5436     }
5437     *SvEND(dsv) = '\0';
5438     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5439     SvTAINT(dsv);
5440     if (flags & SV_SMAGIC)
5441         SvSETMAGIC(dsv);
5442 }
5443
5444 /*
5445 =for apidoc sv_catsv
5446
5447 Concatenates the string from SV C<ssv> onto the end of the string in SV
5448 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5449 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5450 and C<L</sv_catsv_nomg>>.
5451
5452 =for apidoc sv_catsv_flags
5453
5454 Concatenates the string from SV C<ssv> onto the end of the string in SV
5455 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5456 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5457 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5458 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5459 and C<sv_catsv_mg> are implemented in terms of this function.
5460
5461 =cut */
5462
5463 void
5464 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5465 {
5466     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5467
5468     if (ssv) {
5469         STRLEN slen;
5470         const char *spv = SvPV_flags_const(ssv, slen, flags);
5471         if (flags & SV_GMAGIC)
5472                 SvGETMAGIC(dsv);
5473         sv_catpvn_flags(dsv, spv, slen,
5474                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5475         if (flags & SV_SMAGIC)
5476                 SvSETMAGIC(dsv);
5477     }
5478 }
5479
5480 /*
5481 =for apidoc sv_catpv
5482
5483 Concatenates the C<NUL>-terminated string onto the end of the string which is
5484 in the SV.
5485 If the SV has the UTF-8 status set, then the bytes appended should be
5486 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5487 C<L</sv_catpv_mg>>.
5488
5489 =cut */
5490
5491 void
5492 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5493 {
5494     STRLEN len;
5495     STRLEN tlen;
5496     char *junk;
5497
5498     PERL_ARGS_ASSERT_SV_CATPV;
5499
5500     if (!ptr)
5501         return;
5502     junk = SvPV_force(sv, tlen);
5503     len = strlen(ptr);
5504     SvGROW(sv, tlen + len + 1);
5505     if (ptr == junk)
5506         ptr = SvPVX_const(sv);
5507     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5508     SvCUR_set(sv, SvCUR(sv) + len);
5509     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5510     SvTAINT(sv);
5511 }
5512
5513 /*
5514 =for apidoc sv_catpv_flags
5515
5516 Concatenates the C<NUL>-terminated string onto the end of the string which is
5517 in the SV.
5518 If the SV has the UTF-8 status set, then the bytes appended should
5519 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5520 on the modified SV if appropriate.
5521
5522 =cut
5523 */
5524
5525 void
5526 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5527 {
5528     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5529     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5530 }
5531
5532 /*
5533 =for apidoc sv_catpv_mg
5534
5535 Like C<sv_catpv>, but also handles 'set' magic.
5536
5537 =cut
5538 */
5539
5540 void
5541 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5542 {
5543     PERL_ARGS_ASSERT_SV_CATPV_MG;
5544
5545     sv_catpv(sv,ptr);
5546     SvSETMAGIC(sv);
5547 }
5548
5549 /*
5550 =for apidoc newSV
5551
5552 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5553 bytes of preallocated string space the SV should have.  An extra byte for a
5554 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5555 space is allocated.)  The reference count for the new SV is set to 1.
5556
5557 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5558 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5559 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5560 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5561 modules supporting older perls.
5562
5563 =cut
5564 */
5565
5566 SV *
5567 Perl_newSV(pTHX_ const STRLEN len)
5568 {
5569     SV *sv;
5570
5571     new_SV(sv);
5572     if (len) {
5573         sv_grow(sv, len + 1);
5574     }
5575     return sv;
5576 }
5577 /*
5578 =for apidoc sv_magicext
5579
5580 Adds magic to an SV, upgrading it if necessary.  Applies the
5581 supplied C<vtable> and returns a pointer to the magic added.
5582
5583 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5584 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5585 one instance of the same C<how>.
5586
5587 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5588 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5589 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5590 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5591
5592 (This is now used as a subroutine by C<sv_magic>.)
5593
5594 =cut
5595 */
5596 MAGIC * 
5597 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5598                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5599 {
5600     MAGIC* mg;
5601
5602     PERL_ARGS_ASSERT_SV_MAGICEXT;
5603
5604     SvUPGRADE(sv, SVt_PVMG);
5605     Newxz(mg, 1, MAGIC);
5606     mg->mg_moremagic = SvMAGIC(sv);
5607     SvMAGIC_set(sv, mg);
5608
5609     /* Sometimes a magic contains a reference loop, where the sv and
5610        object refer to each other.  To prevent a reference loop that
5611        would prevent such objects being freed, we look for such loops
5612        and if we find one we avoid incrementing the object refcount.
5613
5614        Note we cannot do this to avoid self-tie loops as intervening RV must
5615        have its REFCNT incremented to keep it in existence.
5616
5617     */
5618     if (!obj || obj == sv ||
5619         how == PERL_MAGIC_arylen ||
5620         how == PERL_MAGIC_symtab ||
5621         (SvTYPE(obj) == SVt_PVGV &&
5622             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5623              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5624              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5625     {
5626         mg->mg_obj = obj;
5627     }
5628     else {
5629         mg->mg_obj = SvREFCNT_inc_simple(obj);
5630         mg->mg_flags |= MGf_REFCOUNTED;
5631     }
5632
5633     /* Normal self-ties simply pass a null object, and instead of
5634        using mg_obj directly, use the SvTIED_obj macro to produce a
5635        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5636        with an RV obj pointing to the glob containing the PVIO.  In
5637        this case, to avoid a reference loop, we need to weaken the
5638        reference.
5639     */
5640
5641     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5642         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5643     {
5644       sv_rvweaken(obj);
5645     }
5646
5647     mg->mg_type = how;
5648     mg->mg_len = namlen;
5649     if (name) {
5650         if (namlen > 0)
5651             mg->mg_ptr = savepvn(name, namlen);
5652         else if (namlen == HEf_SVKEY) {
5653             /* Yes, this is casting away const. This is only for the case of
5654                HEf_SVKEY. I think we need to document this aberation of the
5655                constness of the API, rather than making name non-const, as
5656                that change propagating outwards a long way.  */
5657             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5658         } else
5659             mg->mg_ptr = (char *) name;
5660     }
5661     mg->mg_virtual = (MGVTBL *) vtable;
5662
5663     mg_magical(sv);
5664     return mg;
5665 }
5666
5667 MAGIC *
5668 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5669 {
5670     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5671     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5672         /* This sv is only a delegate.  //g magic must be attached to
5673            its target. */
5674         vivify_defelem(sv);
5675         sv = LvTARG(sv);
5676     }
5677     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5678                        &PL_vtbl_mglob, 0, 0);
5679 }
5680
5681 /*
5682 =for apidoc sv_magic
5683
5684 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5685 necessary, then adds a new magic item of type C<how> to the head of the
5686 magic list.
5687
5688 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5689 handling of the C<name> and C<namlen> arguments.
5690
5691 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5692 to add more than one instance of the same C<how>.
5693
5694 =cut
5695 */
5696
5697 void
5698 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5699              const char *const name, const I32 namlen)
5700 {
5701     const MGVTBL *vtable;
5702     MAGIC* mg;
5703     unsigned int flags;
5704     unsigned int vtable_index;
5705
5706     PERL_ARGS_ASSERT_SV_MAGIC;
5707
5708     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5709         || ((flags = PL_magic_data[how]),
5710             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5711             > magic_vtable_max))
5712         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5713
5714     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5715        Useful for attaching extension internal data to perl vars.
5716        Note that multiple extensions may clash if magical scalars
5717        etc holding private data from one are passed to another. */
5718
5719     vtable = (vtable_index == magic_vtable_max)
5720         ? NULL : PL_magic_vtables + vtable_index;
5721
5722     if (SvREADONLY(sv)) {
5723         if (
5724             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5725            )
5726         {
5727             Perl_croak_no_modify();
5728         }
5729     }
5730     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5731         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5732             /* sv_magic() refuses to add a magic of the same 'how' as an
5733                existing one
5734              */
5735             if (how == PERL_MAGIC_taint)
5736                 mg->mg_len |= 1;
5737             return;
5738         }
5739     }
5740
5741     /* Force pos to be stored as characters, not bytes. */
5742     if (SvMAGICAL(sv) && DO_UTF8(sv)
5743       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5744       && mg->mg_len != -1
5745       && mg->mg_flags & MGf_BYTES) {
5746         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5747                                                SV_CONST_RETURN);
5748         mg->mg_flags &= ~MGf_BYTES;
5749     }
5750
5751     /* Rest of work is done else where */
5752     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5753
5754     switch (how) {
5755     case PERL_MAGIC_taint:
5756         mg->mg_len = 1;
5757         break;
5758     case PERL_MAGIC_ext:
5759     case PERL_MAGIC_dbfile:
5760         SvRMAGICAL_on(sv);
5761         break;
5762     }
5763 }
5764
5765 static int
5766 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5767 {
5768     MAGIC* mg;
5769     MAGIC** mgp;
5770
5771     assert(flags <= 1);
5772
5773     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5774         return 0;
5775     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5776     for (mg = *mgp; mg; mg = *mgp) {
5777         const MGVTBL* const virt = mg->mg_virtual;
5778         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5779             *mgp = mg->mg_moremagic;
5780             if (virt && virt->svt_free)
5781                 virt->svt_free(aTHX_ sv, mg);
5782             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5783                 if (mg->mg_len > 0)
5784                     Safefree(mg->mg_ptr);
5785                 else if (mg->mg_len == HEf_SVKEY)
5786                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5787                 else if (mg->mg_type == PERL_MAGIC_utf8)
5788                     Safefree(mg->mg_ptr);
5789             }
5790             if (mg->mg_flags & MGf_REFCOUNTED)
5791                 SvREFCNT_dec(mg->mg_obj);
5792             Safefree(mg);
5793         }
5794         else
5795             mgp = &mg->mg_moremagic;
5796     }
5797     if (SvMAGIC(sv)) {
5798         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5799             mg_magical(sv);     /*    else fix the flags now */
5800     }
5801     else
5802         SvMAGICAL_off(sv);
5803
5804     return 0;
5805 }
5806
5807 /*
5808 =for apidoc sv_unmagic
5809
5810 Removes all magic of type C<type> from an SV.
5811
5812 =cut
5813 */
5814
5815 int
5816 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5817 {
5818     PERL_ARGS_ASSERT_SV_UNMAGIC;
5819     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5820 }
5821
5822 /*
5823 =for apidoc sv_unmagicext
5824
5825 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5826
5827 =cut
5828 */
5829
5830 int
5831 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5832 {
5833     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5834     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5835 }
5836
5837 /*
5838 =for apidoc sv_rvweaken
5839
5840 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5841 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5842 push a back-reference to this RV onto the array of backreferences
5843 associated with that magic.  If the RV is magical, set magic will be
5844 called after the RV is cleared.
5845
5846 =cut
5847 */
5848
5849 SV *
5850 Perl_sv_rvweaken(pTHX_ SV *const sv)
5851 {
5852     SV *tsv;
5853
5854     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5855
5856     if (!SvOK(sv))  /* let undefs pass */
5857         return sv;
5858     if (!SvROK(sv))
5859         Perl_croak(aTHX_ "Can't weaken a nonreference");
5860     else if (SvWEAKREF(sv)) {
5861         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5862         return sv;
5863     }
5864     else if (SvREADONLY(sv)) croak_no_modify();
5865     tsv = SvRV(sv);
5866     Perl_sv_add_backref(aTHX_ tsv, sv);
5867     SvWEAKREF_on(sv);
5868     SvREFCNT_dec_NN(tsv);
5869     return sv;
5870 }
5871
5872 /*
5873 =for apidoc sv_get_backrefs
5874
5875 If C<sv> is the target of a weak reference then it returns the back
5876 references structure associated with the sv; otherwise return C<NULL>.
5877
5878 When returning a non-null result the type of the return is relevant. If it
5879 is an AV then the elements of the AV are the weak reference RVs which
5880 point at this item. If it is any other type then the item itself is the
5881 weak reference.
5882
5883 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5884 C<Perl_sv_kill_backrefs()>
5885
5886 =cut
5887 */
5888
5889 SV *
5890 Perl_sv_get_backrefs(SV *const sv)
5891 {
5892     SV *backrefs= NULL;
5893
5894     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5895
5896     /* find slot to store array or singleton backref */
5897
5898     if (SvTYPE(sv) == SVt_PVHV) {
5899         if (SvOOK(sv)) {
5900             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5901             backrefs = (SV *)iter->xhv_backreferences;
5902         }
5903     } else if (SvMAGICAL(sv)) {
5904         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5905         if (mg)
5906             backrefs = mg->mg_obj;
5907     }
5908     return backrefs;
5909 }
5910
5911 /* Give tsv backref magic if it hasn't already got it, then push a
5912  * back-reference to sv onto the array associated with the backref magic.
5913  *
5914  * As an optimisation, if there's only one backref and it's not an AV,
5915  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5916  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5917  * active.)
5918  */
5919
5920 /* A discussion about the backreferences array and its refcount:
5921  *
5922  * The AV holding the backreferences is pointed to either as the mg_obj of
5923  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5924  * xhv_backreferences field. The array is created with a refcount
5925  * of 2. This means that if during global destruction the array gets
5926  * picked on before its parent to have its refcount decremented by the
5927  * random zapper, it won't actually be freed, meaning it's still there for
5928  * when its parent gets freed.
5929  *
5930  * When the parent SV is freed, the extra ref is killed by
5931  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5932  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5933  *
5934  * When a single backref SV is stored directly, it is not reference
5935  * counted.
5936  */
5937
5938 void
5939 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5940 {
5941     SV **svp;
5942     AV *av = NULL;
5943     MAGIC *mg = NULL;
5944
5945     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5946
5947     /* find slot to store array or singleton backref */
5948
5949     if (SvTYPE(tsv) == SVt_PVHV) {
5950         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5951     } else {
5952         if (SvMAGICAL(tsv))
5953             mg = mg_find(tsv, PERL_MAGIC_backref);
5954         if (!mg)
5955             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5956         svp = &(mg->mg_obj);
5957     }
5958
5959     /* create or retrieve the array */
5960
5961     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5962         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5963     ) {
5964         /* create array */
5965         if (mg)
5966             mg->mg_flags |= MGf_REFCOUNTED;
5967         av = newAV();
5968         AvREAL_off(av);
5969         SvREFCNT_inc_simple_void_NN(av);
5970         /* av now has a refcnt of 2; see discussion above */
5971         av_extend(av, *svp ? 2 : 1);
5972         if (*svp) {
5973             /* move single existing backref to the array */
5974             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5975         }
5976         *svp = (SV*)av;
5977     }
5978     else {
5979         av = MUTABLE_AV(*svp);
5980         if (!av) {
5981             /* optimisation: store single backref directly in HvAUX or mg_obj */
5982             *svp = sv;
5983             return;
5984         }
5985         assert(SvTYPE(av) == SVt_PVAV);
5986         if (AvFILLp(av) >= AvMAX(av)) {
5987             av_extend(av, AvFILLp(av)+1);
5988         }
5989     }
5990     /* push new backref */
5991     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5992 }
5993
5994 /* delete a back-reference to ourselves from the backref magic associated
5995  * with the SV we point to.
5996  */
5997
5998 void
5999 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6000 {
6001     SV **svp = NULL;
6002
6003     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6004
6005     if (SvTYPE(tsv) == SVt_PVHV) {
6006         if (SvOOK(tsv))
6007             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6008     }
6009     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6010         /* It's possible for the the last (strong) reference to tsv to have
6011            become freed *before* the last thing holding a weak reference.
6012            If both survive longer than the backreferences array, then when
6013            the referent's reference count drops to 0 and it is freed, it's
6014            not able to chase the backreferences, so they aren't NULLed.
6015
6016            For example, a CV holds a weak reference to its stash. If both the
6017            CV and the stash survive longer than the backreferences array,
6018            and the CV gets picked for the SvBREAK() treatment first,
6019            *and* it turns out that the stash is only being kept alive because
6020            of an our variable in the pad of the CV, then midway during CV
6021            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6022            It ends up pointing to the freed HV. Hence it's chased in here, and
6023            if this block wasn't here, it would hit the !svp panic just below.
6024
6025            I don't believe that "better" destruction ordering is going to help
6026            here - during global destruction there's always going to be the
6027            chance that something goes out of order. We've tried to make it
6028            foolproof before, and it only resulted in evolutionary pressure on
6029            fools. Which made us look foolish for our hubris. :-(
6030         */
6031         return;
6032     }
6033     else {
6034         MAGIC *const mg
6035             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6036         svp =  mg ? &(mg->mg_obj) : NULL;
6037     }
6038
6039     if (!svp)
6040         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6041     if (!*svp) {
6042         /* It's possible that sv is being freed recursively part way through the
6043            freeing of tsv. If this happens, the backreferences array of tsv has
6044            already been freed, and so svp will be NULL. If this is the case,
6045            we should not panic. Instead, nothing needs doing, so return.  */
6046         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6047             return;
6048         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6049                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6050     }
6051
6052     if (SvTYPE(*svp) == SVt_PVAV) {
6053 #ifdef DEBUGGING
6054         int count = 1;
6055 #endif
6056         AV * const av = (AV*)*svp;
6057         SSize_t fill;
6058         assert(!SvIS_FREED(av));
6059         fill = AvFILLp(av);
6060         assert(fill > -1);
6061         svp = AvARRAY(av);
6062         /* for an SV with N weak references to it, if all those
6063          * weak refs are deleted, then sv_del_backref will be called
6064          * N times and O(N^2) compares will be done within the backref
6065          * array. To ameliorate this potential slowness, we:
6066          * 1) make sure this code is as tight as possible;
6067          * 2) when looking for SV, look for it at both the head and tail of the
6068          *    array first before searching the rest, since some create/destroy
6069          *    patterns will cause the backrefs to be freed in order.
6070          */
6071         if (*svp == sv) {
6072             AvARRAY(av)++;
6073             AvMAX(av)--;
6074         }
6075         else {
6076             SV **p = &svp[fill];
6077             SV *const topsv = *p;
6078             if (topsv != sv) {
6079 #ifdef DEBUGGING
6080                 count = 0;
6081 #endif
6082                 while (--p > svp) {
6083                     if (*p == sv) {
6084                         /* We weren't the last entry.
6085                            An unordered list has this property that you
6086                            can take the last element off the end to fill
6087                            the hole, and it's still an unordered list :-)
6088                         */
6089                         *p = topsv;
6090 #ifdef DEBUGGING
6091                         count++;
6092 #else
6093                         break; /* should only be one */
6094 #endif
6095                     }
6096                 }
6097             }
6098         }
6099         assert(count ==1);
6100         AvFILLp(av) = fill-1;
6101     }
6102     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6103         /* freed AV; skip */
6104     }
6105     else {
6106         /* optimisation: only a single backref, stored directly */
6107         if (*svp != sv)
6108             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6109                        (void*)*svp, (void*)sv);
6110         *svp = NULL;
6111     }
6112
6113 }
6114
6115 void
6116 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6117 {
6118     SV **svp;
6119     SV **last;
6120     bool is_array;
6121
6122     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6123
6124     if (!av)
6125         return;
6126
6127     /* after multiple passes through Perl_sv_clean_all() for a thingy
6128      * that has badly leaked, the backref array may have gotten freed,
6129      * since we only protect it against 1 round of cleanup */
6130     if (SvIS_FREED(av)) {
6131         if (PL_in_clean_all) /* All is fair */
6132             return;
6133         Perl_croak(aTHX_
6134                    "panic: magic_killbackrefs (freed backref AV/SV)");
6135     }
6136
6137
6138     is_array = (SvTYPE(av) == SVt_PVAV);
6139     if (is_array) {
6140         assert(!SvIS_FREED(av));
6141         svp = AvARRAY(av);
6142         if (svp)
6143             last = svp + AvFILLp(av);
6144     }
6145     else {
6146         /* optimisation: only a single backref, stored directly */
6147         svp = (SV**)&av;
6148         last = svp;
6149     }
6150
6151     if (svp) {
6152         while (svp <= last) {
6153             if (*svp) {
6154                 SV *const referrer = *svp;
6155                 if (SvWEAKREF(referrer)) {
6156                     /* XXX Should we check that it hasn't changed? */
6157                     assert(SvROK(referrer));
6158                     SvRV_set(referrer, 0);
6159                     SvOK_off(referrer);
6160                     SvWEAKREF_off(referrer);
6161                     SvSETMAGIC(referrer);
6162                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6163                            SvTYPE(referrer) == SVt_PVLV) {
6164                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6165                     /* You lookin' at me?  */
6166                     assert(GvSTASH(referrer));
6167                     assert(GvSTASH(referrer) == (const HV *)sv);
6168                     GvSTASH(referrer) = 0;
6169                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6170                            SvTYPE(referrer) == SVt_PVFM) {
6171                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6172                         /* You lookin' at me?  */
6173                         assert(CvSTASH(referrer));
6174                         assert(CvSTASH(referrer) == (const HV *)sv);
6175                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6176                     }
6177                     else {
6178                         assert(SvTYPE(sv) == SVt_PVGV);
6179                         /* You lookin' at me?  */
6180                         assert(CvGV(referrer));
6181                         assert(CvGV(referrer) == (const GV *)sv);
6182                         anonymise_cv_maybe(MUTABLE_GV(sv),
6183                                                 MUTABLE_CV(referrer));
6184                     }
6185
6186                 } else {
6187                     Perl_croak(aTHX_
6188                                "panic: magic_killbackrefs (flags=%"UVxf")",
6189                                (UV)SvFLAGS(referrer));
6190                 }
6191
6192                 if (is_array)
6193                     *svp = NULL;
6194             }
6195             svp++;
6196         }
6197     }
6198     if (is_array) {
6199         AvFILLp(av) = -1;
6200         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6201     }
6202     return;
6203 }
6204
6205 /*
6206 =for apidoc sv_insert
6207
6208 Inserts a string at the specified offset/length within the SV.  Similar to
6209 the Perl C<substr()> function.  Handles get magic.
6210
6211 =for apidoc sv_insert_flags
6212
6213 Same as C<sv_insert>, but the extra C<flags> are passed to the
6214 C<SvPV_force_flags> that applies to C<bigstr>.
6215
6216 =cut
6217 */
6218
6219 void
6220 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6221 {
6222     char *big;
6223     char *mid;
6224     char *midend;
6225     char *bigend;
6226     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6227     STRLEN curlen;
6228
6229     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6230
6231     SvPV_force_flags(bigstr, curlen, flags);
6232     (void)SvPOK_only_UTF8(bigstr);
6233     if (offset + len > curlen) {
6234         SvGROW(bigstr, offset+len+1);
6235         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6236         SvCUR_set(bigstr, offset+len);
6237     }
6238
6239     SvTAINT(bigstr);
6240     i = littlelen - len;
6241     if (i > 0) {                        /* string might grow */
6242         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6243         mid = big + offset + len;
6244         midend = bigend = big + SvCUR(bigstr);
6245         bigend += i;
6246         *bigend = '\0';
6247         while (midend > mid)            /* shove everything down */
6248             *--bigend = *--midend;
6249         Move(little,big+offset,littlelen,char);
6250         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6251         SvSETMAGIC(bigstr);
6252         return;
6253     }
6254     else if (i == 0) {
6255         Move(little,SvPVX(bigstr)+offset,len,char);
6256         SvSETMAGIC(bigstr);
6257         return;
6258     }
6259
6260     big = SvPVX(bigstr);
6261     mid = big + offset;
6262     midend = mid + len;
6263     bigend = big + SvCUR(bigstr);
6264
6265     if (midend > bigend)
6266         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6267                    midend, bigend);
6268
6269     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6270         if (littlelen) {
6271             Move(little, mid, littlelen,char);
6272             mid += littlelen;
6273         }
6274         i = bigend - midend;
6275         if (i > 0) {
6276             Move(midend, mid, i,char);
6277             mid += i;
6278         }
6279         *mid = '\0';
6280         SvCUR_set(bigstr, mid - big);
6281     }
6282     else if ((i = mid - big)) { /* faster from front */
6283         midend -= littlelen;
6284         mid = midend;
6285         Move(big, midend - i, i, char);
6286         sv_chop(bigstr,midend-i);
6287         if (littlelen)
6288             Move(little, mid, littlelen,char);
6289     }
6290     else if (littlelen) {
6291         midend -= littlelen;
6292         sv_chop(bigstr,midend);
6293         Move(little,midend,littlelen,char);
6294     }
6295     else {
6296         sv_chop(bigstr,midend);
6297     }
6298     SvSETMAGIC(bigstr);
6299 }
6300
6301 /*
6302 =for apidoc sv_replace
6303
6304 Make the first argument a copy of the second, then delete the original.
6305 The target SV physically takes over ownership of the body of the source SV
6306 and inherits its flags; however, the target keeps any magic it owns,
6307 and any magic in the source is discarded.
6308 Note that this is a rather specialist SV copying operation; most of the
6309 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6310
6311 =cut
6312 */
6313
6314 void
6315 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6316 {
6317     const U32 refcnt = SvREFCNT(sv);
6318
6319     PERL_ARGS_ASSERT_SV_REPLACE;
6320
6321     SV_CHECK_THINKFIRST_COW_DROP(sv);
6322     if (SvREFCNT(nsv) != 1) {
6323         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6324                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6325     }
6326     if (SvMAGICAL(sv)) {
6327         if (SvMAGICAL(nsv))
6328             mg_free(nsv);
6329         else
6330             sv_upgrade(nsv, SVt_PVMG);
6331         SvMAGIC_set(nsv, SvMAGIC(sv));
6332         SvFLAGS(nsv) |= SvMAGICAL(sv);
6333         SvMAGICAL_off(sv);
6334         SvMAGIC_set(sv, NULL);
6335     }
6336     SvREFCNT(sv) = 0;
6337     sv_clear(sv);
6338     assert(!SvREFCNT(sv));
6339 #ifdef DEBUG_LEAKING_SCALARS
6340     sv->sv_flags  = nsv->sv_flags;
6341     sv->sv_any    = nsv->sv_any;
6342     sv->sv_refcnt = nsv->sv_refcnt;
6343     sv->sv_u      = nsv->sv_u;
6344 #else
6345     StructCopy(nsv,sv,SV);
6346 #endif
6347     if(SvTYPE(sv) == SVt_IV) {
6348         SET_SVANY_FOR_BODYLESS_IV(sv);
6349     }
6350         
6351
6352     SvREFCNT(sv) = refcnt;
6353     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6354     SvREFCNT(nsv) = 0;
6355     del_SV(nsv);
6356 }
6357
6358 /* We're about to free a GV which has a CV that refers back to us.
6359  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6360  * field) */
6361
6362 STATIC void
6363 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6364 {
6365     SV *gvname;
6366     GV *anongv;
6367
6368     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6369
6370     /* be assertive! */
6371     assert(SvREFCNT(gv) == 0);
6372     assert(isGV(gv) && isGV_with_GP(gv));
6373     assert(GvGP(gv));
6374     assert(!CvANON(cv));
6375     assert(CvGV(cv) == gv);
6376     assert(!CvNAMED(cv));
6377
6378     /* will the CV shortly be freed by gp_free() ? */
6379     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6380         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6381         return;
6382     }
6383
6384     /* if not, anonymise: */
6385     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6386                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6387                     : newSVpvn_flags( "__ANON__", 8, 0 );
6388     sv_catpvs(gvname, "::__ANON__");
6389     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6390     SvREFCNT_dec_NN(gvname);
6391
6392     CvANON_on(cv);
6393     CvCVGV_RC_on(cv);
6394     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6395 }
6396
6397
6398 /*
6399 =for apidoc sv_clear
6400
6401 Clear an SV: call any destructors, free up any memory used by the body,
6402 and free the body itself.  The SV's head is I<not> freed, although
6403 its type is set to all 1's so that it won't inadvertently be assumed
6404 to be live during global destruction etc.
6405 This function should only be called when C<REFCNT> is zero.  Most of the time
6406 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6407 instead.
6408
6409 =cut
6410 */
6411
6412 void
6413 Perl_sv_clear(pTHX_ SV *const orig_sv)
6414 {
6415     dVAR;
6416     HV *stash;
6417     U32 type;
6418     const struct body_details *sv_type_details;
6419     SV* iter_sv = NULL;
6420     SV* next_sv = NULL;
6421     SV *sv = orig_sv;
6422     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6423                               Not strictly necessary */
6424
6425     PERL_ARGS_ASSERT_SV_CLEAR;
6426
6427     /* within this loop, sv is the SV currently being freed, and
6428      * iter_sv is the most recent AV or whatever that's being iterated
6429      * over to provide more SVs */
6430
6431     while (sv) {
6432
6433         type = SvTYPE(sv);
6434
6435         assert(SvREFCNT(sv) == 0);
6436         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6437
6438         if (type <= SVt_IV) {
6439             /* See the comment in sv.h about the collusion between this
6440              * early return and the overloading of the NULL slots in the
6441              * size table.  */
6442             if (SvROK(sv))
6443                 goto free_rv;
6444             SvFLAGS(sv) &= SVf_BREAK;
6445             SvFLAGS(sv) |= SVTYPEMASK;
6446             goto free_head;
6447         }
6448
6449         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6450            for another purpose  */
6451         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6452
6453         if (type >= SVt_PVMG) {
6454             if (SvOBJECT(sv)) {
6455                 if (!curse(sv, 1)) goto get_next_sv;
6456                 type = SvTYPE(sv); /* destructor may have changed it */
6457             }
6458             /* Free back-references before magic, in case the magic calls
6459              * Perl code that has weak references to sv. */
6460             if (type == SVt_PVHV) {
6461                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6462                 if (SvMAGIC(sv))
6463                     mg_free(sv);
6464             }
6465             else if (SvMAGIC(sv)) {
6466                 /* Free back-references before other types of magic. */
6467                 sv_unmagic(sv, PERL_MAGIC_backref);
6468                 mg_free(sv);
6469             }
6470             SvMAGICAL_off(sv);
6471         }
6472         switch (type) {
6473             /* case SVt_INVLIST: */
6474         case SVt_PVIO:
6475             if (IoIFP(sv) &&
6476                 IoIFP(sv) != PerlIO_stdin() &&
6477                 IoIFP(sv) != PerlIO_stdout() &&
6478                 IoIFP(sv) != PerlIO_stderr() &&
6479                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6480             {
6481                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6482                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6483                           IoTYPE(sv) == IoTYPE_RDWR   ||
6484                           IoTYPE(sv) == IoTYPE_APPEND));
6485             }
6486             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6487                 PerlDir_close(IoDIRP(sv));
6488             IoDIRP(sv) = (DIR*)NULL;
6489             Safefree(IoTOP_NAME(sv));
6490             Safefree(IoFMT_NAME(sv));
6491             Safefree(IoBOTTOM_NAME(sv));
6492             if ((const GV *)sv == PL_statgv)
6493                 PL_statgv = NULL;
6494             goto freescalar;
6495         case SVt_REGEXP:
6496             /* FIXME for plugins */
6497           freeregexp:
6498             pregfree2((REGEXP*) sv);
6499             goto freescalar;
6500         case SVt_PVCV:
6501         case SVt_PVFM:
6502             cv_undef(MUTABLE_CV(sv));
6503             /* If we're in a stash, we don't own a reference to it.
6504              * However it does have a back reference to us, which needs to
6505              * be cleared.  */
6506             if ((stash = CvSTASH(sv)))
6507                 sv_del_backref(MUTABLE_SV(stash), sv);
6508             goto freescalar;
6509         case SVt_PVHV:
6510             if (PL_last_swash_hv == (const HV *)sv) {
6511                 PL_last_swash_hv = NULL;
6512             }
6513             if (HvTOTALKEYS((HV*)sv) > 0) {
6514                 const HEK *hek;
6515                 /* this statement should match the one at the beginning of
6516                  * hv_undef_flags() */
6517                 if (   PL_phase != PERL_PHASE_DESTRUCT
6518                     && (hek = HvNAME_HEK((HV*)sv)))
6519                 {
6520                     if (PL_stashcache) {
6521                         DEBUG_o(Perl_deb(aTHX_
6522                             "sv_clear clearing PL_stashcache for '%"HEKf
6523                             "'\n",
6524                              HEKfARG(hek)));
6525                         (void)hv_deletehek(PL_stashcache,
6526                                            hek, G_DISCARD);
6527                     }
6528                     hv_name_set((HV*)sv, NULL, 0, 0);
6529                 }
6530
6531                 /* save old iter_sv in unused SvSTASH field */
6532                 assert(!SvOBJECT(sv));
6533                 SvSTASH(sv) = (HV*)iter_sv;
6534                 iter_sv = sv;
6535
6536                 /* save old hash_index in unused SvMAGIC field */
6537                 assert(!SvMAGICAL(sv));
6538                 assert(!SvMAGIC(sv));
6539                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6540                 hash_index = 0;
6541
6542                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6543                 goto get_next_sv; /* process this new sv */
6544             }
6545             /* free empty hash */
6546             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6547             assert(!HvARRAY((HV*)sv));
6548             break;
6549         case SVt_PVAV:
6550             {
6551                 AV* av = MUTABLE_AV(sv);
6552                 if (PL_comppad == av) {
6553                     PL_comppad = NULL;
6554                     PL_curpad = NULL;
6555                 }
6556                 if (AvREAL(av) && AvFILLp(av) > -1) {
6557                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6558                     /* save old iter_sv in top-most slot of AV,
6559                      * and pray that it doesn't get wiped in the meantime */
6560                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6561                     iter_sv = sv;
6562                     goto get_next_sv; /* process this new sv */
6563                 }
6564                 Safefree(AvALLOC(av));
6565             }
6566
6567             break;
6568         case SVt_PVLV:
6569             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6570                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6571                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6572                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6573             }
6574             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6575                 SvREFCNT_dec(LvTARG(sv));
6576             if (isREGEXP(sv)) goto freeregexp;
6577             /* FALLTHROUGH */
6578         case SVt_PVGV:
6579             if (isGV_with_GP(sv)) {
6580                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6581                    && HvENAME_get(stash))
6582                     mro_method_changed_in(stash);
6583                 gp_free(MUTABLE_GV(sv));
6584                 if (GvNAME_HEK(sv))
6585                     unshare_hek(GvNAME_HEK(sv));
6586                 /* If we're in a stash, we don't own a reference to it.
6587                  * However it does have a back reference to us, which
6588                  * needs to be cleared.  */
6589                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6590                         sv_del_backref(MUTABLE_SV(stash), sv);
6591             }
6592             /* FIXME. There are probably more unreferenced pointers to SVs
6593              * in the interpreter struct that we should check and tidy in
6594              * a similar fashion to this:  */
6595             /* See also S_sv_unglob, which does the same thing. */
6596             if ((const GV *)sv == PL_last_in_gv)
6597                 PL_last_in_gv = NULL;
6598             else if ((const GV *)sv == PL_statgv)
6599                 PL_statgv = NULL;
6600             else if ((const GV *)sv == PL_stderrgv)
6601                 PL_stderrgv = NULL;
6602             /* FALLTHROUGH */
6603         case SVt_PVMG:
6604         case SVt_PVNV:
6605         case SVt_PVIV:
6606         case SVt_INVLIST:
6607         case SVt_PV:
6608           freescalar:
6609             /* Don't bother with SvOOK_off(sv); as we're only going to
6610              * free it.  */
6611             if (SvOOK(sv)) {
6612                 STRLEN offset;
6613                 SvOOK_offset(sv, offset);
6614                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6615                 /* Don't even bother with turning off the OOK flag.  */
6616             }
6617             if (SvROK(sv)) {
6618             free_rv:
6619                 {
6620                     SV * const target = SvRV(sv);
6621                     if (SvWEAKREF(sv))
6622                         sv_del_backref(target, sv);
6623                     else
6624                         next_sv = target;
6625                 }
6626             }
6627 #ifdef PERL_ANY_COW
6628             else if (SvPVX_const(sv)
6629                      && !(SvTYPE(sv) == SVt_PVIO
6630                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6631             {
6632                 if (SvIsCOW(sv)) {
6633                     if (DEBUG_C_TEST) {
6634                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6635                         sv_dump(sv);
6636                     }
6637                     if (SvLEN(sv)) {
6638                         if (CowREFCNT(sv)) {
6639                             sv_buf_to_rw(sv);
6640                             CowREFCNT(sv)--;
6641                             sv_buf_to_ro(sv);
6642                             SvLEN_set(sv, 0);
6643                         }
6644                     } else {
6645                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6646                     }
6647
6648                 }
6649                 if (SvLEN(sv)) {
6650                     Safefree(SvPVX_mutable(sv));
6651                 }
6652             }
6653 #else
6654             else if (SvPVX_const(sv) && SvLEN(sv)
6655                      && !(SvTYPE(sv) == SVt_PVIO
6656                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6657                 Safefree(SvPVX_mutable(sv));
6658             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6659                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6660             }
6661 #endif
6662             break;
6663         case SVt_NV:
6664             break;
6665         }
6666
6667       free_body:
6668
6669         SvFLAGS(sv) &= SVf_BREAK;
6670         SvFLAGS(sv) |= SVTYPEMASK;
6671
6672         sv_type_details = bodies_by_type + type;
6673         if (sv_type_details->arena) {
6674             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6675                      &PL_body_roots[type]);
6676         }
6677         else if (sv_type_details->body_size) {
6678             safefree(SvANY(sv));
6679         }
6680
6681       free_head:
6682         /* caller is responsible for freeing the head of the original sv */
6683         if (sv != orig_sv && !SvREFCNT(sv))
6684             del_SV(sv);
6685
6686         /* grab and free next sv, if any */
6687       get_next_sv:
6688         while (1) {
6689             sv = NULL;
6690             if (next_sv) {
6691                 sv = next_sv;
6692                 next_sv = NULL;
6693             }
6694             else if (!iter_sv) {
6695                 break;
6696             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6697                 AV *const av = (AV*)iter_sv;
6698                 if (AvFILLp(av) > -1) {
6699                     sv = AvARRAY(av)[AvFILLp(av)--];
6700                 }
6701                 else { /* no more elements of current AV to free */
6702                     sv = iter_sv;
6703                     type = SvTYPE(sv);
6704                     /* restore previous value, squirrelled away */
6705                     iter_sv = AvARRAY(av)[AvMAX(av)];
6706                     Safefree(AvALLOC(av));
6707                     goto free_body;
6708                 }
6709             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6710                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6711                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6712                     /* no more elements of current HV to free */
6713                     sv = iter_sv;
6714                     type = SvTYPE(sv);
6715                     /* Restore previous values of iter_sv and hash_index,
6716                      * squirrelled away */
6717                     assert(!SvOBJECT(sv));
6718                     iter_sv = (SV*)SvSTASH(sv);
6719                     assert(!SvMAGICAL(sv));
6720                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6721 #ifdef DEBUGGING
6722                     /* perl -DA does not like rubbish in SvMAGIC. */
6723                     SvMAGIC_set(sv, 0);
6724 #endif
6725
6726                     /* free any remaining detritus from the hash struct */
6727                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6728                     assert(!HvARRAY((HV*)sv));
6729                     goto free_body;
6730                 }
6731             }
6732
6733             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6734
6735             if (!sv)
6736                 continue;
6737             if (!SvREFCNT(sv)) {
6738                 sv_free(sv);
6739                 continue;
6740             }
6741             if (--(SvREFCNT(sv)))
6742                 continue;
6743 #ifdef DEBUGGING
6744             if (SvTEMP(sv)) {
6745                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6746                          "Attempt to free temp prematurely: SV 0x%"UVxf
6747                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6748                 continue;
6749             }
6750 #endif
6751             if (SvIMMORTAL(sv)) {
6752                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6753                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6754                 continue;
6755             }
6756             break;
6757         } /* while 1 */
6758
6759     } /* while sv */
6760 }
6761
6762 /* This routine curses the sv itself, not the object referenced by sv. So
6763    sv does not have to be ROK. */
6764
6765 static bool
6766 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6767     PERL_ARGS_ASSERT_CURSE;
6768     assert(SvOBJECT(sv));
6769
6770     if (PL_defstash &&  /* Still have a symbol table? */
6771         SvDESTROYABLE(sv))
6772     {
6773         dSP;
6774         HV* stash;
6775         do {
6776           stash = SvSTASH(sv);
6777           assert(SvTYPE(stash) == SVt_PVHV);
6778           if (HvNAME(stash)) {
6779             CV* destructor = NULL;
6780             struct mro_meta *meta;
6781
6782             assert (SvOOK(stash));
6783
6784             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6785                          HvNAME(stash)) );
6786
6787             /* don't make this an initialization above the assert, since it needs
6788                an AUX structure */
6789             meta = HvMROMETA(stash);
6790             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6791                 destructor = meta->destroy;
6792                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6793                              (void *)destructor, HvNAME(stash)) );
6794             }
6795             else {
6796                 bool autoload = FALSE;
6797                 GV *gv =
6798                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6799                 if (gv)
6800                     destructor = GvCV(gv);
6801                 if (!destructor) {
6802                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6803                                          GV_AUTOLOAD_ISMETHOD);
6804                     if (gv)
6805                         destructor = GvCV(gv);
6806                     if (destructor)
6807                         autoload = TRUE;
6808                 }
6809                 /* we don't cache AUTOLOAD for DESTROY, since this code
6810                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6811                    equivalent for XS AUTOLOADs */
6812                 if (!autoload) {
6813                     meta->destroy_gen = PL_sub_generation;
6814                     meta->destroy = destructor;
6815
6816                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6817                                       (void *)destructor, HvNAME(stash)) );
6818                 }
6819                 else {
6820                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6821                                       HvNAME(stash)) );
6822                 }
6823             }
6824             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6825             if (destructor
6826                 /* A constant subroutine can have no side effects, so
6827                    don't bother calling it.  */
6828                 && !CvCONST(destructor)
6829                 /* Don't bother calling an empty destructor or one that
6830                    returns immediately. */
6831                 && (CvISXSUB(destructor)
6832                 || (CvSTART(destructor)
6833                     && (CvSTART(destructor)->op_next->op_type
6834                                         != OP_LEAVESUB)
6835                     && (CvSTART(destructor)->op_next->op_type
6836                                         != OP_PUSHMARK
6837                         || CvSTART(destructor)->op_next->op_next->op_type
6838                                         != OP_RETURN
6839                        )
6840                    ))
6841                )
6842             {
6843                 SV* const tmpref = newRV(sv);
6844                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6845                 ENTER;
6846                 PUSHSTACKi(PERLSI_DESTROY);
6847                 EXTEND(SP, 2);
6848                 PUSHMARK(SP);
6849                 PUSHs(tmpref);
6850                 PUTBACK;
6851                 call_sv(MUTABLE_SV(destructor),
6852                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6853                 POPSTACK;
6854                 SPAGAIN;
6855                 LEAVE;
6856                 if(SvREFCNT(tmpref) < 2) {
6857                     /* tmpref is not kept alive! */
6858                     SvREFCNT(sv)--;
6859                     SvRV_set(tmpref, NULL);
6860                     SvROK_off(tmpref);
6861                 }
6862                 SvREFCNT_dec_NN(tmpref);
6863             }
6864           }
6865         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6866
6867
6868         if (check_refcnt && SvREFCNT(sv)) {
6869             if (PL_in_clean_objs)
6870                 Perl_croak(aTHX_
6871                   "DESTROY created new reference to dead object '%"HEKf"'",
6872                    HEKfARG(HvNAME_HEK(stash)));
6873             /* DESTROY gave object new lease on life */
6874             return FALSE;
6875         }
6876     }
6877
6878     if (SvOBJECT(sv)) {
6879         HV * const stash = SvSTASH(sv);
6880         /* Curse before freeing the stash, as freeing the stash could cause
6881            a recursive call into S_curse. */
6882         SvOBJECT_off(sv);       /* Curse the object. */
6883         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6884         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6885     }
6886     return TRUE;
6887 }
6888
6889 /*
6890 =for apidoc sv_newref
6891
6892 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6893 instead.
6894
6895 =cut
6896 */
6897
6898 SV *
6899 Perl_sv_newref(pTHX_ SV *const sv)
6900 {
6901     PERL_UNUSED_CONTEXT;
6902     if (sv)
6903         (SvREFCNT(sv))++;
6904     return sv;
6905 }
6906
6907 /*
6908 =for apidoc sv_free
6909
6910 Decrement an SV's reference count, and if it drops to zero, call
6911 C<sv_clear> to invoke destructors and free up any memory used by
6912 the body; finally, deallocating the SV's head itself.
6913 Normally called via a wrapper macro C<SvREFCNT_dec>.
6914
6915 =cut
6916 */
6917
6918 void
6919 Perl_sv_free(pTHX_ SV *const sv)
6920 {
6921     SvREFCNT_dec(sv);
6922 }
6923
6924
6925 /* Private helper function for SvREFCNT_dec().
6926  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6927
6928 void
6929 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6930 {
6931     dVAR;
6932
6933     PERL_ARGS_ASSERT_SV_FREE2;
6934
6935     if (LIKELY( rc == 1 )) {
6936         /* normal case */
6937         SvREFCNT(sv) = 0;
6938
6939 #ifdef DEBUGGING
6940         if (SvTEMP(sv)) {
6941             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6942                              "Attempt to free temp prematurely: SV 0x%"UVxf
6943                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6944             return;
6945         }
6946 #endif
6947         if (SvIMMORTAL(sv)) {
6948             /* make sure SvREFCNT(sv)==0 happens very seldom */
6949             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6950             return;
6951         }
6952         sv_clear(sv);
6953         if (! SvREFCNT(sv)) /* may have have been resurrected */
6954             del_SV(sv);
6955         return;
6956     }
6957
6958     /* handle exceptional cases */
6959
6960     assert(rc == 0);
6961
6962     if (SvFLAGS(sv) & SVf_BREAK)
6963         /* this SV's refcnt has been artificially decremented to
6964          * trigger cleanup */
6965         return;
6966     if (PL_in_clean_all) /* All is fair */
6967         return;
6968     if (SvIMMORTAL(sv)) {
6969         /* make sure SvREFCNT(sv)==0 happens very seldom */
6970         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6971         return;
6972     }
6973     if (ckWARN_d(WARN_INTERNAL)) {
6974 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6975         Perl_dump_sv_child(aTHX_ sv);
6976 #else
6977     #ifdef DEBUG_LEAKING_SCALARS
6978         sv_dump(sv);
6979     #endif
6980 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6981         if (PL_warnhook == PERL_WARNHOOK_FATAL
6982             || ckDEAD(packWARN(WARN_INTERNAL))) {
6983             /* Don't let Perl_warner cause us to escape our fate:  */
6984             abort();
6985         }
6986 #endif
6987         /* This may not return:  */
6988         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6989                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6990                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6991 #endif
6992     }
6993 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6994     abort();
6995 #endif
6996
6997 }
6998
6999
7000 /*
7001 =for apidoc sv_len
7002
7003 Returns the length of the string in the SV.  Handles magic and type
7004 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7005 gives raw access to the C<xpv_cur> slot.
7006
7007 =cut
7008 */
7009
7010 STRLEN
7011 Perl_sv_len(pTHX_ SV *const sv)
7012 {
7013     STRLEN len;
7014
7015     if (!sv)
7016         return 0;
7017
7018     (void)SvPV_const(sv, len);
7019     return len;
7020 }
7021
7022 /*
7023 =for apidoc sv_len_utf8
7024
7025 Returns the number of characters in the string in an SV, counting wide
7026 UTF-8 bytes as a single character.  Handles magic and type coercion.
7027
7028 =cut
7029 */
7030
7031 /*
7032  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7033  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7034  * (Note that the mg_len is not the length of the mg_ptr field.
7035  * This allows the cache to store the character length of the string without
7036  * needing to malloc() extra storage to attach to the mg_ptr.)
7037  *
7038  */
7039
7040 STRLEN
7041 Perl_sv_len_utf8(pTHX_ SV *const sv)
7042 {
7043     if (!sv)
7044         return 0;
7045
7046     SvGETMAGIC(sv);
7047     return sv_len_utf8_nomg(sv);
7048 }
7049
7050 STRLEN
7051 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7052 {
7053     STRLEN len;
7054     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7055
7056     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7057
7058     if (PL_utf8cache && SvUTF8(sv)) {
7059             STRLEN ulen;
7060             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7061
7062             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7063                 if (mg->mg_len != -1)
7064                     ulen = mg->mg_len;
7065                 else {
7066                     /* We can use the offset cache for a headstart.
7067                        The longer value is stored in the first pair.  */
7068                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7069
7070                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7071                                                        s + len);
7072                 }
7073                 
7074                 if (PL_utf8cache < 0) {
7075                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7076                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7077                 }
7078             }
7079             else {
7080                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7081                 utf8_mg_len_cache_update(sv, &mg, ulen);
7082             }
7083             return ulen;
7084     }
7085     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7086 }
7087
7088 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7089    offset.  */
7090 static STRLEN
7091 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7092                       STRLEN *const uoffset_p, bool *const at_end)
7093 {
7094     const U8 *s = start;
7095     STRLEN uoffset = *uoffset_p;
7096
7097     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7098
7099     while (s < send && uoffset) {
7100         --uoffset;
7101         s += UTF8SKIP(s);
7102     }
7103     if (s == send) {
7104         *at_end = TRUE;
7105     }
7106     else if (s > send) {
7107         *at_end = TRUE;
7108         /* This is the existing behaviour. Possibly it should be a croak, as
7109            it's actually a bounds error  */
7110         s = send;
7111     }
7112     *uoffset_p -= uoffset;
7113     return s - start;
7114 }
7115
7116 /* Given the length of the string in both bytes and UTF-8 characters, decide
7117    whether to walk forwards or backwards to find the byte corresponding to
7118    the passed in UTF-8 offset.  */
7119 static STRLEN
7120 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7121                     STRLEN uoffset, const STRLEN uend)
7122 {
7123     STRLEN backw = uend - uoffset;
7124
7125     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7126
7127     if (uoffset < 2 * backw) {
7128         /* The assumption is that going forwards is twice the speed of going
7129            forward (that's where the 2 * backw comes from).
7130            (The real figure of course depends on the UTF-8 data.)  */
7131         const U8 *s = start;
7132
7133         while (s < send && uoffset--)
7134             s += UTF8SKIP(s);
7135         assert (s <= send);
7136         if (s > send)
7137             s = send;
7138         return s - start;
7139     }
7140
7141     while (backw--) {
7142         send--;
7143         while (UTF8_IS_CONTINUATION(*send))
7144             send--;
7145     }
7146     return send - start;
7147 }
7148
7149 /* For the string representation of the given scalar, find the byte
7150    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7151    give another position in the string, *before* the sought offset, which
7152    (which is always true, as 0, 0 is a valid pair of positions), which should
7153    help reduce the amount of linear searching.
7154    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7155    will be used to reduce the amount of linear searching. The cache will be
7156    created if necessary, and the found value offered to it for update.  */
7157 static STRLEN
7158 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7159                     const U8 *const send, STRLEN uoffset,
7160                     STRLEN uoffset0, STRLEN boffset0)
7161 {
7162     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7163     bool found = FALSE;
7164     bool at_end = FALSE;
7165
7166     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7167
7168     assert (uoffset >= uoffset0);
7169
7170     if (!uoffset)
7171         return 0;
7172
7173     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7174         && PL_utf8cache
7175         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7176                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7177         if ((*mgp)->mg_ptr) {
7178             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7179             if (cache[0] == uoffset) {
7180                 /* An exact match. */
7181                 return cache[1];
7182             }
7183             if (cache[2] == uoffset) {
7184                 /* An exact match. */
7185                 return cache[3];
7186             }
7187
7188             if (cache[0] < uoffset) {
7189                 /* The cache already knows part of the way.   */
7190                 if (cache[0] > uoffset0) {
7191                     /* The cache knows more than the passed in pair  */
7192                     uoffset0 = cache[0];
7193                     boffset0 = cache[1];
7194                 }
7195                 if ((*mgp)->mg_len != -1) {
7196                     /* And we know the end too.  */
7197                     boffset = boffset0
7198                         + sv_pos_u2b_midway(start + boffset0, send,
7199                                               uoffset - uoffset0,
7200                                               (*mgp)->mg_len - uoffset0);
7201                 } else {
7202                     uoffset -= uoffset0;
7203                     boffset = boffset0
7204                         + sv_pos_u2b_forwards(start + boffset0,
7205                                               send, &uoffset, &at_end);
7206                     uoffset += uoffset0;
7207                 }
7208             }
7209             else if (cache[2] < uoffset) {
7210                 /* We're between the two cache entries.  */
7211                 if (cache[2] > uoffset0) {
7212                     /* and the cache knows more than the passed in pair  */
7213                     uoffset0 = cache[2];
7214                     boffset0 = cache[3];
7215                 }
7216
7217                 boffset = boffset0
7218                     + sv_pos_u2b_midway(start + boffset0,
7219                                           start + cache[1],
7220                                           uoffset - uoffset0,
7221                                           cache[0] - uoffset0);
7222             } else {
7223                 boffset = boffset0
7224                     + sv_pos_u2b_midway(start + boffset0,
7225                                           start + cache[3],
7226                                           uoffset - uoffset0,
7227                                           cache[2] - uoffset0);
7228             }
7229             found = TRUE;
7230         }
7231         else if ((*mgp)->mg_len != -1) {
7232             /* If we can take advantage of a passed in offset, do so.  */
7233             /* In fact, offset0 is either 0, or less than offset, so don't
7234                need to worry about the other possibility.  */
7235             boffset = boffset0
7236                 + sv_pos_u2b_midway(start + boffset0, send,
7237                                       uoffset - uoffset0,
7238                                       (*mgp)->mg_len - uoffset0);
7239             found = TRUE;
7240         }
7241     }
7242
7243     if (!found || PL_utf8cache < 0) {
7244         STRLEN real_boffset;
7245         uoffset -= uoffset0;
7246         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7247                                                       send, &uoffset, &at_end);
7248         uoffset += uoffset0;
7249
7250         if (found && PL_utf8cache < 0)
7251             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7252                                        real_boffset, sv);
7253         boffset = real_boffset;
7254     }
7255
7256     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7257         if (at_end)
7258             utf8_mg_len_cache_update(sv, mgp, uoffset);
7259         else
7260             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7261     }
7262     return boffset;
7263 }
7264
7265
7266 /*
7267 =for apidoc sv_pos_u2b_flags
7268
7269 Converts the offset from a count of UTF-8 chars from
7270 the start of the string, to a count of the equivalent number of bytes; if
7271 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7272 C<offset>, rather than from the start
7273 of the string.  Handles type coercion.
7274 C<flags> is passed to C<SvPV_flags>, and usually should be
7275 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7276
7277 =cut
7278 */
7279
7280 /*
7281  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7282  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7283  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7284  *
7285  */
7286
7287 STRLEN
7288 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7289                       U32 flags)
7290 {
7291     const U8 *start;
7292     STRLEN len;
7293     STRLEN boffset;
7294
7295     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7296
7297     start = (U8*)SvPV_flags(sv, len, flags);
7298     if (len) {
7299         const U8 * const send = start + len;
7300         MAGIC *mg = NULL;
7301         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7302
7303         if (lenp
7304             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7305                         is 0, and *lenp is already set to that.  */) {
7306             /* Convert the relative offset to absolute.  */
7307             const STRLEN uoffset2 = uoffset + *lenp;
7308             const STRLEN boffset2
7309                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7310                                       uoffset, boffset) - boffset;
7311
7312             *lenp = boffset2;
7313         }
7314     } else {
7315         if (lenp)
7316             *lenp = 0;
7317         boffset = 0;
7318     }
7319
7320     return boffset;
7321 }
7322
7323 /*
7324 =for apidoc sv_pos_u2b
7325
7326 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7327 the start of the string, to a count of the equivalent number of bytes; if
7328 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7329 the offset, rather than from the start of the string.  Handles magic and
7330 type coercion.
7331
7332 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7333 than 2Gb.
7334
7335 =cut
7336 */
7337
7338 /*
7339  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7340  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7341  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7342  *
7343  */
7344
7345 /* This function is subject to size and sign problems */
7346
7347 void
7348 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7349 {
7350     PERL_ARGS_ASSERT_SV_POS_U2B;
7351
7352     if (lenp) {
7353         STRLEN ulen = (STRLEN)*lenp;
7354         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7355                                          SV_GMAGIC|SV_CONST_RETURN);
7356         *lenp = (I32)ulen;
7357     } else {
7358         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7359                                          SV_GMAGIC|SV_CONST_RETURN);
7360     }
7361 }
7362
7363 static void
7364 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7365                            const STRLEN ulen)
7366 {
7367     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7368     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7369         return;
7370
7371     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7372                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7373         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7374     }
7375     assert(*mgp);
7376
7377     (*mgp)->mg_len = ulen;
7378 }
7379
7380 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7381    byte length pairing. The (byte) length of the total SV is passed in too,
7382    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7383    may not have updated SvCUR, so we can't rely on reading it directly.
7384
7385    The proffered utf8/byte length pairing isn't used if the cache already has
7386    two pairs, and swapping either for the proffered pair would increase the
7387    RMS of the intervals between known byte offsets.
7388
7389    The cache itself consists of 4 STRLEN values
7390    0: larger UTF-8 offset
7391    1: corresponding byte offset
7392    2: smaller UTF-8 offset
7393    3: corresponding byte offset
7394
7395    Unused cache pairs have the value 0, 0.
7396    Keeping the cache "backwards" means that the invariant of
7397    cache[0] >= cache[2] is maintained even with empty slots, which means that
7398    the code that uses it doesn't need to worry if only 1 entry has actually
7399    been set to non-zero.  It also makes the "position beyond the end of the
7400    cache" logic much simpler, as the first slot is always the one to start
7401    from.   
7402 */
7403 static void
7404 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7405                            const STRLEN utf8, const STRLEN blen)
7406 {
7407     STRLEN *cache;
7408
7409     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7410
7411     if (SvREADONLY(sv))
7412         return;
7413
7414     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7415                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7416         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7417                            0);
7418         (*mgp)->mg_len = -1;
7419     }
7420     assert(*mgp);
7421
7422     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7423         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7424         (*mgp)->mg_ptr = (char *) cache;
7425     }
7426     assert(cache);
7427
7428     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7429         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7430            a pointer.  Note that we no longer cache utf8 offsets on refer-
7431            ences, but this check is still a good idea, for robustness.  */
7432         const U8 *start = (const U8 *) SvPVX_const(sv);
7433         const STRLEN realutf8 = utf8_length(start, start + byte);
7434
7435         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7436                                    sv);
7437     }
7438
7439     /* Cache is held with the later position first, to simplify the code
7440        that deals with unbounded ends.  */
7441        
7442     ASSERT_UTF8_CACHE(cache);
7443     if (cache[1] == 0) {
7444         /* Cache is totally empty  */
7445         cache[0] = utf8;
7446         cache[1] = byte;
7447     } else if (cache[3] == 0) {
7448         if (byte > cache[1]) {
7449             /* New one is larger, so goes first.  */
7450             cache[2] = cache[0];
7451             cache[3] = cache[1];
7452             cache[0] = utf8;
7453             cache[1] = byte;
7454         } else {
7455             cache[2] = utf8;
7456             cache[3] = byte;
7457         }
7458     } else {
7459 /* float casts necessary? XXX */
7460 #define THREEWAY_SQUARE(a,b,c,d) \
7461             ((float)((d) - (c))) * ((float)((d) - (c))) \
7462             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7463                + ((float)((b) - (a))) * ((float)((b) - (a)))
7464
7465         /* Cache has 2 slots in use, and we know three potential pairs.
7466            Keep the two that give the lowest RMS distance. Do the
7467            calculation in bytes simply because we always know the byte
7468            length.  squareroot has the same ordering as the positive value,
7469            so don't bother with the actual square root.  */
7470         if (byte > cache[1]) {
7471             /* New position is after the existing pair of pairs.  */
7472             const float keep_earlier
7473                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7474             const float keep_later
7475                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7476
7477             if (keep_later < keep_earlier) {
7478                 cache[2] = cache[0];
7479                 cache[3] = cache[1];
7480             }
7481             cache[0] = utf8;
7482             cache[1] = byte;
7483         }
7484         else {
7485             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7486             float b, c, keep_earlier;
7487             if (byte > cache[3]) {
7488                 /* New position is between the existing pair of pairs.  */
7489                 b = (float)cache[3];
7490                 c = (float)byte;
7491             } else {
7492                 /* New position is before the existing pair of pairs.  */
7493                 b = (float)byte;
7494                 c = (float)cache[3];
7495             }
7496             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7497             if (byte > cache[3]) {
7498                 if (keep_later < keep_earlier) {
7499                     cache[2] = utf8;
7500                     cache[3] = byte;
7501                 }
7502                 else {
7503                     cache[0] = utf8;
7504                     cache[1] = byte;
7505                 }
7506             }
7507             else {
7508                 if (! (keep_later < keep_earlier)) {
7509                     cache[0] = cache[2];
7510                     cache[1] = cache[3];
7511                 }
7512                 cache[2] = utf8;
7513                 cache[3] = byte;
7514             }
7515         }
7516     }
7517     ASSERT_UTF8_CACHE(cache);
7518 }
7519
7520 /* We already know all of the way, now we may be able to walk back.  The same
7521    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7522    backward is half the speed of walking forward. */
7523 static STRLEN
7524 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7525                     const U8 *end, STRLEN endu)
7526 {
7527     const STRLEN forw = target - s;
7528     STRLEN backw = end - target;
7529
7530     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7531
7532     if (forw < 2 * backw) {
7533         return utf8_length(s, target);
7534     }
7535
7536     while (end > target) {
7537         end--;
7538         while (UTF8_IS_CONTINUATION(*end)) {
7539             end--;
7540         }
7541         endu--;
7542     }
7543     return endu;
7544 }
7545
7546 /*
7547 =for apidoc sv_pos_b2u_flags
7548
7549 Converts C<offset> from a count of bytes from the start of the string, to
7550 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7551 C<flags> is passed to C<SvPV_flags>, and usually should be
7552 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7553
7554 =cut
7555 */
7556
7557 /*
7558  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7559  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7560  * and byte offsets.
7561  *
7562  */
7563 STRLEN
7564 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7565 {
7566     const U8* s;
7567     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7568     STRLEN blen;
7569     MAGIC* mg = NULL;
7570     const U8* send;
7571     bool found = FALSE;
7572
7573     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7574
7575     s = (const U8*)SvPV_flags(sv, blen, flags);
7576
7577     if (blen < offset)
7578         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7579                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7580
7581     send = s + offset;
7582
7583     if (!SvREADONLY(sv)
7584         && PL_utf8cache
7585         && SvTYPE(sv) >= SVt_PVMG
7586         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7587     {
7588         if (mg->mg_ptr) {
7589             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7590             if (cache[1] == offset) {
7591                 /* An exact match. */
7592                 return cache[0];
7593             }
7594             if (cache[3] == offset) {
7595                 /* An exact match. */
7596                 return cache[2];
7597             }
7598
7599             if (cache[1] < offset) {
7600                 /* We already know part of the way. */
7601                 if (mg->mg_len != -1) {
7602                     /* Actually, we know the end too.  */
7603                     len = cache[0]
7604                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7605                                               s + blen, mg->mg_len - cache[0]);
7606                 } else {
7607                     len = cache[0] + utf8_length(s + cache[1], send);
7608                 }
7609             }
7610             else if (cache[3] < offset) {
7611                 /* We're between the two cached pairs, so we do the calculation
7612                    offset by the byte/utf-8 positions for the earlier pair,
7613                    then add the utf-8 characters from the string start to
7614                    there.  */
7615                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7616                                           s + cache[1], cache[0] - cache[2])
7617                     + cache[2];
7618
7619             }
7620             else { /* cache[3] > offset */
7621                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7622                                           cache[2]);
7623
7624             }
7625             ASSERT_UTF8_CACHE(cache);
7626             found = TRUE;
7627         } else if (mg->mg_len != -1) {
7628             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7629             found = TRUE;
7630         }
7631     }
7632     if (!found || PL_utf8cache < 0) {
7633         const STRLEN real_len = utf8_length(s, send);
7634
7635         if (found && PL_utf8cache < 0)
7636             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7637         len = real_len;
7638     }
7639
7640     if (PL_utf8cache) {
7641         if (blen == offset)
7642             utf8_mg_len_cache_update(sv, &mg, len);
7643         else
7644             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7645     }
7646
7647     return len;
7648 }
7649
7650 /*
7651 =for apidoc sv_pos_b2u
7652
7653 Converts the value pointed to by C<offsetp> from a count of bytes from the
7654 start of the string, to a count of the equivalent number of UTF-8 chars.
7655 Handles magic and type coercion.
7656
7657 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7658 longer than 2Gb.
7659
7660 =cut
7661 */
7662
7663 /*
7664  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7665  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7666  * byte offsets.
7667  *
7668  */
7669 void
7670 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7671 {
7672     PERL_ARGS_ASSERT_SV_POS_B2U;
7673
7674     if (!sv)
7675         return;
7676
7677     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7678                                      SV_GMAGIC|SV_CONST_RETURN);
7679 }
7680
7681 static void
7682 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7683                              STRLEN real, SV *const sv)
7684 {
7685     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7686
7687     /* As this is debugging only code, save space by keeping this test here,
7688        rather than inlining it in all the callers.  */
7689     if (from_cache == real)
7690         return;
7691
7692     /* Need to turn the assertions off otherwise we may recurse infinitely
7693        while printing error messages.  */
7694     SAVEI8(PL_utf8cache);
7695     PL_utf8cache = 0;
7696     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7697                func, (UV) from_cache, (UV) real, SVfARG(sv));
7698 }
7699
7700 /*
7701 =for apidoc sv_eq
7702
7703 Returns a boolean indicating whether the strings in the two SVs are
7704 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7705 coerce its args to strings if necessary.
7706
7707 =for apidoc sv_eq_flags
7708
7709 Returns a boolean indicating whether the strings in the two SVs are
7710 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7711 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7712
7713 =cut
7714 */
7715
7716 I32
7717 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7718 {
7719     const char *pv1;
7720     STRLEN cur1;
7721     const char *pv2;
7722     STRLEN cur2;
7723     I32  eq     = 0;
7724     SV* svrecode = NULL;
7725
7726     if (!sv1) {
7727         pv1 = "";
7728         cur1 = 0;
7729     }
7730     else {
7731         /* if pv1 and pv2 are the same, second SvPV_const call may
7732          * invalidate pv1 (if we are handling magic), so we may need to
7733          * make a copy */
7734         if (sv1 == sv2 && flags & SV_GMAGIC
7735          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7736             pv1 = SvPV_const(sv1, cur1);
7737             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7738         }
7739         pv1 = SvPV_flags_const(sv1, cur1, flags);
7740     }
7741
7742     if (!sv2){
7743         pv2 = "";
7744         cur2 = 0;
7745     }
7746     else
7747         pv2 = SvPV_flags_const(sv2, cur2, flags);
7748
7749     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7750         /* Differing utf8ness.
7751          * Do not UTF8size the comparands as a side-effect. */
7752          if (IN_ENCODING) {
7753               if (SvUTF8(sv1)) {
7754                    svrecode = newSVpvn(pv2, cur2);
7755                    sv_recode_to_utf8(svrecode, _get_encoding());
7756                    pv2 = SvPV_const(svrecode, cur2);
7757               }
7758               else {
7759                    svrecode = newSVpvn(pv1, cur1);
7760                    sv_recode_to_utf8(svrecode, _get_encoding());
7761                    pv1 = SvPV_const(svrecode, cur1);
7762               }
7763               /* Now both are in UTF-8. */
7764               if (cur1 != cur2) {
7765                    SvREFCNT_dec_NN(svrecode);
7766                    return FALSE;
7767               }
7768          }
7769          else {
7770               if (SvUTF8(sv1)) {
7771                   /* sv1 is the UTF-8 one  */
7772                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7773                                         (const U8*)pv1, cur1) == 0;
7774               }
7775               else {
7776                   /* sv2 is the UTF-8 one  */
7777                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7778                                         (const U8*)pv2, cur2) == 0;
7779               }
7780          }
7781     }
7782
7783     if (cur1 == cur2)
7784         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7785         
7786     SvREFCNT_dec(svrecode);
7787
7788     return eq;
7789 }
7790
7791 /*
7792 =for apidoc sv_cmp
7793
7794 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7795 string in C<sv1> is less than, equal to, or greater than the string in
7796 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7797 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7798
7799 =for apidoc sv_cmp_flags
7800
7801 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7802 string in C<sv1> is less than, equal to, or greater than the string in
7803 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7804 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7805 also C<L</sv_cmp_locale_flags>>.
7806
7807 =cut
7808 */
7809
7810 I32
7811 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7812 {
7813     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7814 }
7815
7816 I32
7817 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7818                   const U32 flags)
7819 {
7820     STRLEN cur1, cur2;
7821     const char *pv1, *pv2;
7822     I32  cmp;
7823     SV *svrecode = NULL;
7824
7825     if (!sv1) {
7826         pv1 = "";
7827         cur1 = 0;
7828     }
7829     else
7830         pv1 = SvPV_flags_const(sv1, cur1, flags);
7831
7832     if (!sv2) {
7833         pv2 = "";
7834         cur2 = 0;
7835     }
7836     else
7837         pv2 = SvPV_flags_const(sv2, cur2, flags);
7838
7839     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7840         /* Differing utf8ness.
7841          * Do not UTF8size the comparands as a side-effect. */
7842         if (SvUTF8(sv1)) {
7843             if (IN_ENCODING) {
7844                  svrecode = newSVpvn(pv2, cur2);
7845                  sv_recode_to_utf8(svrecode, _get_encoding());
7846                  pv2 = SvPV_const(svrecode, cur2);
7847             }
7848             else {
7849                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7850                                                    (const U8*)pv1, cur1);
7851                 return retval ? retval < 0 ? -1 : +1 : 0;
7852             }
7853         }
7854         else {
7855             if (IN_ENCODING) {
7856                  svrecode = newSVpvn(pv1, cur1);
7857                  sv_recode_to_utf8(svrecode, _get_encoding());
7858                  pv1 = SvPV_const(svrecode, cur1);
7859             }
7860             else {
7861                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7862                                                   (const U8*)pv2, cur2);
7863                 return retval ? retval < 0 ? -1 : +1 : 0;
7864             }
7865         }
7866     }
7867
7868     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7869
7870     if (!cur1) {
7871         cmp = cur2 ? -1 : 0;
7872     } else if (!cur2) {
7873         cmp = 1;
7874     } else {
7875         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7876
7877 #ifdef EBCDIC
7878         if (! DO_UTF8(sv1)) {
7879 #endif
7880             const I32 retval = memcmp((const void*)pv1,
7881                                       (const void*)pv2,
7882                                       shortest_len);
7883             if (retval) {
7884                 cmp = retval < 0 ? -1 : 1;
7885             } else if (cur1 == cur2) {
7886                 cmp = 0;
7887             } else {
7888                 cmp = cur1 < cur2 ? -1 : 1;
7889             }
7890 #ifdef EBCDIC
7891         }
7892         else {  /* Both are to be treated as UTF-EBCDIC */
7893
7894             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7895              * which remaps code points 0-255.  We therefore generally have to
7896              * unmap back to the original values to get an accurate comparison.
7897              * But we don't have to do that for UTF-8 invariants, as by
7898              * definition, they aren't remapped, nor do we have to do it for
7899              * above-latin1 code points, as they also aren't remapped.  (This
7900              * code also works on ASCII platforms, but the memcmp() above is
7901              * much faster). */
7902
7903             const char *e = pv1 + shortest_len;
7904
7905             /* Find the first bytes that differ between the two strings */
7906             while (pv1 < e && *pv1 == *pv2) {
7907                 pv1++;
7908                 pv2++;
7909             }
7910
7911
7912             if (pv1 == e) { /* Are the same all the way to the end */
7913                 if (cur1 == cur2) {
7914                     cmp = 0;
7915                 } else {
7916                     cmp = cur1 < cur2 ? -1 : 1;
7917                 }
7918             }
7919             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7920                     * in the strings were.  The current bytes may or may not be
7921                     * at the beginning of a character.  But neither or both are
7922                     * (or else earlier bytes would have been different).  And
7923                     * if we are in the middle of a character, the two
7924                     * characters are comprised of the same number of bytes
7925                     * (because in this case the start bytes are the same, and
7926                     * the start bytes encode the character's length). */
7927                  if (UTF8_IS_INVARIANT(*pv1))
7928             {
7929                 /* If both are invariants; can just compare directly */
7930                 if (UTF8_IS_INVARIANT(*pv2)) {
7931                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7932                 }
7933                 else   /* Since *pv1 is invariant, it is the whole character,
7934                           which means it is at the beginning of a character.
7935                           That means pv2 is also at the beginning of a
7936                           character (see earlier comment).  Since it isn't
7937                           invariant, it must be a start byte.  If it starts a
7938                           character whose code point is above 255, that
7939                           character is greater than any single-byte char, which
7940                           *pv1 is */
7941                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7942                 {
7943                     cmp = -1;
7944                 }
7945                 else {
7946                     /* Here, pv2 points to a character composed of 2 bytes
7947                      * whose code point is < 256.  Get its code point and
7948                      * compare with *pv1 */
7949                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7950                            ?  -1
7951                            : 1;
7952                 }
7953             }
7954             else   /* The code point starting at pv1 isn't a single byte */
7955                  if (UTF8_IS_INVARIANT(*pv2))
7956             {
7957                 /* But here, the code point starting at *pv2 is a single byte,
7958                  * and so *pv1 must begin a character, hence is a start byte.
7959                  * If that character is above 255, it is larger than any
7960                  * single-byte char, which *pv2 is */
7961                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
7962                     cmp = 1;
7963                 }
7964                 else {
7965                     /* Here, pv1 points to a character composed of 2 bytes
7966                      * whose code point is < 256.  Get its code point and
7967                      * compare with the single byte character *pv2 */
7968                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
7969                           ?  -1
7970                           : 1;
7971                 }
7972             }
7973             else   /* Here, we've ruled out either *pv1 and *pv2 being
7974                       invariant.  That means both are part of variants, but not
7975                       necessarily at the start of a character */
7976                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
7977                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
7978             {
7979                 /* Here, at least one is the start of a character, which means
7980                  * the other is also a start byte.  And the code point of at
7981                  * least one of the characters is above 255.  It is a
7982                  * characteristic of UTF-EBCDIC that all start bytes for
7983                  * above-latin1 code points are well behaved as far as code
7984                  * point comparisons go, and all are larger than all other
7985                  * start bytes, so the comparison with those is also well
7986                  * behaved */
7987                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7988             }
7989             else {
7990                 /* Here both *pv1 and *pv2 are part of variant characters.
7991                  * They could be both continuations, or both start characters.
7992                  * (One or both could even be an illegal start character (for
7993                  * an overlong) which for the purposes of sorting we treat as
7994                  * legal. */
7995                 if (UTF8_IS_CONTINUATION(*pv1)) {
7996
7997                     /* If they are continuations for code points above 255,
7998                      * then comparing the current byte is sufficient, as there
7999                      * is no remapping of these and so the comparison is
8000                      * well-behaved.   We determine if they are such
8001                      * continuations by looking at the preceding byte.  It
8002                      * could be a start byte, from which we can tell if it is
8003                      * for an above 255 code point.  Or it could be a
8004                      * continuation, which means the character occupies at
8005                      * least 3 bytes, so must be above 255.  */
8006                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8007                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8008                     {
8009                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8010                         goto cmp_done;
8011                     }
8012
8013                     /* Here, the continuations are for code points below 256;
8014                      * back up one to get to the start byte */
8015                     pv1--;
8016                     pv2--;
8017                 }
8018
8019                 /* We need to get the actual native code point of each of these
8020                  * variants in order to compare them */
8021                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8022                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8023                         ? -1
8024                         : 1;
8025             }
8026         }
8027       cmp_done: ;
8028 #endif
8029     }
8030
8031     SvREFCNT_dec(svrecode);
8032
8033     return cmp;
8034 }
8035
8036 /*
8037 =for apidoc sv_cmp_locale
8038
8039 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8040 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8041 if necessary.  See also C<L</sv_cmp>>.
8042
8043 =for apidoc sv_cmp_locale_flags
8044
8045 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8046 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8047 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8048 C<L</sv_cmp_flags>>.
8049
8050 =cut
8051 */
8052
8053 I32
8054 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8055 {
8056     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8057 }
8058
8059 I32
8060 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8061                          const U32 flags)
8062 {
8063 #ifdef USE_LOCALE_COLLATE
8064
8065     char *pv1, *pv2;
8066     STRLEN len1, len2;
8067     I32 retval;
8068
8069     if (PL_collation_standard)
8070         goto raw_compare;
8071
8072     len1 = 0;
8073     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8074     len2 = 0;
8075     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8076
8077     if (!pv1 || !len1) {
8078         if (pv2 && len2)
8079             return -1;
8080         else
8081             goto raw_compare;
8082     }
8083     else {
8084         if (!pv2 || !len2)
8085             return 1;
8086     }
8087
8088     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8089
8090     if (retval)
8091         return retval < 0 ? -1 : 1;
8092
8093     /*
8094      * When the result of collation is equality, that doesn't mean
8095      * that there are no differences -- some locales exclude some
8096      * characters from consideration.  So to avoid false equalities,
8097      * we use the raw string as a tiebreaker.
8098      */
8099
8100   raw_compare:
8101     /* FALLTHROUGH */
8102
8103 #else
8104     PERL_UNUSED_ARG(flags);
8105 #endif /* USE_LOCALE_COLLATE */
8106
8107     return sv_cmp(sv1, sv2);
8108 }
8109
8110
8111 #ifdef USE_LOCALE_COLLATE
8112
8113 /*
8114 =for apidoc sv_collxfrm
8115
8116 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8117 C<L</sv_collxfrm_flags>>.
8118
8119 =for apidoc sv_collxfrm_flags
8120
8121 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8122 flags contain C<SV_GMAGIC>, it handles get-magic.
8123
8124 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8125 scalar data of the variable, but transformed to such a format that a normal
8126 memory comparison can be used to compare the data according to the locale
8127 settings.
8128
8129 =cut
8130 */
8131
8132 char *
8133 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8134 {
8135     MAGIC *mg;
8136
8137     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8138
8139     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8140     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8141         const char *s;
8142         char *xf;
8143         STRLEN len, xlen;
8144
8145         if (mg)
8146             Safefree(mg->mg_ptr);
8147         s = SvPV_flags_const(sv, len, flags);
8148         if ((xf = mem_collxfrm(s, len, &xlen))) {
8149             if (! mg) {
8150                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8151                                  0, 0);
8152                 assert(mg);
8153             }
8154             mg->mg_ptr = xf;
8155             mg->mg_len = xlen;
8156         }
8157         else {
8158             if (mg) {
8159                 mg->mg_ptr = NULL;
8160                 mg->mg_len = -1;
8161             }
8162         }
8163     }
8164     if (mg && mg->mg_ptr) {
8165         *nxp = mg->mg_len;
8166         return mg->mg_ptr + sizeof(PL_collation_ix);
8167     }
8168     else {
8169         *nxp = 0;
8170         return NULL;
8171     }
8172 }
8173
8174 #endif /* USE_LOCALE_COLLATE */
8175
8176 static char *
8177 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8178 {
8179     SV * const tsv = newSV(0);
8180     ENTER;
8181     SAVEFREESV(tsv);
8182     sv_gets(tsv, fp, 0);
8183     sv_utf8_upgrade_nomg(tsv);
8184     SvCUR_set(sv,append);
8185     sv_catsv(sv,tsv);
8186     LEAVE;
8187     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8188 }
8189
8190 static char *
8191 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8192 {
8193     SSize_t bytesread;
8194     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8195       /* Grab the size of the record we're getting */
8196     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8197     
8198     /* Go yank in */
8199 #ifdef __VMS
8200     int fd;
8201     Stat_t st;
8202
8203     /* With a true, record-oriented file on VMS, we need to use read directly
8204      * to ensure that we respect RMS record boundaries.  The user is responsible
8205      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8206      * record size) field.  N.B. This is likely to produce invalid results on
8207      * varying-width character data when a record ends mid-character.
8208      */
8209     fd = PerlIO_fileno(fp);
8210     if (fd != -1
8211         && PerlLIO_fstat(fd, &st) == 0
8212         && (st.st_fab_rfm == FAB$C_VAR
8213             || st.st_fab_rfm == FAB$C_VFC
8214             || st.st_fab_rfm == FAB$C_FIX)) {
8215
8216         bytesread = PerlLIO_read(fd, buffer, recsize);
8217     }
8218     else /* in-memory file from PerlIO::Scalar
8219           * or not a record-oriented file
8220           */
8221 #endif
8222     {
8223         bytesread = PerlIO_read(fp, buffer, recsize);
8224
8225         /* At this point, the logic in sv_get() means that sv will
8226            be treated as utf-8 if the handle is utf8.
8227         */
8228         if (PerlIO_isutf8(fp) && bytesread > 0) {
8229             char *bend = buffer + bytesread;
8230             char *bufp = buffer;
8231             size_t charcount = 0;
8232             bool charstart = TRUE;
8233             STRLEN skip = 0;
8234
8235             while (charcount < recsize) {
8236                 /* count accumulated characters */
8237                 while (bufp < bend) {
8238                     if (charstart) {
8239                         skip = UTF8SKIP(bufp);
8240                     }
8241                     if (bufp + skip > bend) {
8242                         /* partial at the end */
8243                         charstart = FALSE;
8244                         break;
8245                     }
8246                     else {
8247                         ++charcount;
8248                         bufp += skip;
8249                         charstart = TRUE;
8250                     }
8251                 }
8252
8253                 if (charcount < recsize) {
8254                     STRLEN readsize;
8255                     STRLEN bufp_offset = bufp - buffer;
8256                     SSize_t morebytesread;
8257
8258                     /* originally I read enough to fill any incomplete
8259                        character and the first byte of the next
8260                        character if needed, but if there's many
8261                        multi-byte encoded characters we're going to be
8262                        making a read call for every character beyond
8263                        the original read size.
8264
8265                        So instead, read the rest of the character if
8266                        any, and enough bytes to match at least the
8267                        start bytes for each character we're going to
8268                        read.
8269                     */
8270                     if (charstart)
8271                         readsize = recsize - charcount;
8272                     else 
8273                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8274                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8275                     bend = buffer + bytesread;
8276                     morebytesread = PerlIO_read(fp, bend, readsize);
8277                     if (morebytesread <= 0) {
8278                         /* we're done, if we still have incomplete
8279                            characters the check code in sv_gets() will
8280                            warn about them.
8281
8282                            I'd originally considered doing
8283                            PerlIO_ungetc() on all but the lead
8284                            character of the incomplete character, but
8285                            read() doesn't do that, so I don't.
8286                         */
8287                         break;
8288                     }
8289
8290                     /* prepare to scan some more */
8291                     bytesread += morebytesread;
8292                     bend = buffer + bytesread;
8293                     bufp = buffer + bufp_offset;
8294                 }
8295             }
8296         }
8297     }
8298
8299     if (bytesread < 0)
8300         bytesread = 0;
8301     SvCUR_set(sv, bytesread + append);
8302     buffer[bytesread] = '\0';
8303     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8304 }
8305
8306 /*
8307 =for apidoc sv_gets
8308
8309 Get a line from the filehandle and store it into the SV, optionally
8310 appending to the currently-stored string.  If C<append> is not 0, the
8311 line is appended to the SV instead of overwriting it.  C<append> should
8312 be set to the byte offset that the appended string should start at
8313 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8314
8315 =cut
8316 */
8317
8318 char *
8319 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8320 {
8321     const char *rsptr;
8322     STRLEN rslen;
8323     STDCHAR rslast;
8324     STDCHAR *bp;
8325     SSize_t cnt;
8326     int i = 0;
8327     int rspara = 0;
8328
8329     PERL_ARGS_ASSERT_SV_GETS;
8330
8331     if (SvTHINKFIRST(sv))
8332         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8333     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8334        from <>.
8335        However, perlbench says it's slower, because the existing swipe code
8336        is faster than copy on write.
8337        Swings and roundabouts.  */
8338     SvUPGRADE(sv, SVt_PV);
8339
8340     if (append) {
8341         /* line is going to be appended to the existing buffer in the sv */
8342         if (PerlIO_isutf8(fp)) {
8343             if (!SvUTF8(sv)) {
8344                 sv_utf8_upgrade_nomg(sv);
8345                 sv_pos_u2b(sv,&append,0);
8346             }
8347         } else if (SvUTF8(sv)) {
8348             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8349         }
8350     }
8351
8352     SvPOK_only(sv);
8353     if (!append) {
8354         /* not appending - "clear" the string by setting SvCUR to 0,
8355          * the pv is still avaiable. */
8356         SvCUR_set(sv,0);
8357     }
8358     if (PerlIO_isutf8(fp))
8359         SvUTF8_on(sv);
8360
8361     if (IN_PERL_COMPILETIME) {
8362         /* we always read code in line mode */
8363         rsptr = "\n";
8364         rslen = 1;
8365     }
8366     else if (RsSNARF(PL_rs)) {
8367         /* If it is a regular disk file use size from stat() as estimate
8368            of amount we are going to read -- may result in mallocing
8369            more memory than we really need if the layers below reduce
8370            the size we read (e.g. CRLF or a gzip layer).
8371          */
8372         Stat_t st;
8373         int fd = PerlIO_fileno(fp);
8374         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8375             const Off_t offset = PerlIO_tell(fp);
8376             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8377 #ifdef PERL_COPY_ON_WRITE
8378                 /* Add an extra byte for the sake of copy-on-write's
8379                  * buffer reference count. */
8380                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8381 #else
8382                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8383 #endif
8384             }
8385         }
8386         rsptr = NULL;
8387         rslen = 0;
8388     }
8389     else if (RsRECORD(PL_rs)) {
8390         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8391     }
8392     else if (RsPARA(PL_rs)) {
8393         rsptr = "\n\n";
8394         rslen = 2;
8395         rspara = 1;
8396     }
8397     else {
8398         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8399         if (PerlIO_isutf8(fp)) {
8400             rsptr = SvPVutf8(PL_rs, rslen);
8401         }
8402         else {
8403             if (SvUTF8(PL_rs)) {
8404                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8405                     Perl_croak(aTHX_ "Wide character in $/");
8406                 }
8407             }
8408             /* extract the raw pointer to the record separator */
8409             rsptr = SvPV_const(PL_rs, rslen);
8410         }
8411     }
8412
8413     /* rslast is the last character in the record separator
8414      * note we don't use rslast except when rslen is true, so the
8415      * null assign is a placeholder. */
8416     rslast = rslen ? rsptr[rslen - 1] : '\0';
8417
8418     if (rspara) {               /* have to do this both before and after */
8419         do {                    /* to make sure file boundaries work right */
8420             if (PerlIO_eof(fp))
8421                 return 0;
8422             i = PerlIO_getc(fp);
8423             if (i != '\n') {
8424                 if (i == -1)
8425                     return 0;
8426                 PerlIO_ungetc(fp,i);
8427                 break;
8428             }
8429         } while (i != EOF);
8430     }
8431
8432     /* See if we know enough about I/O mechanism to cheat it ! */
8433
8434     /* This used to be #ifdef test - it is made run-time test for ease
8435        of abstracting out stdio interface. One call should be cheap
8436        enough here - and may even be a macro allowing compile
8437        time optimization.
8438      */
8439
8440     if (PerlIO_fast_gets(fp)) {
8441     /*
8442      * We can do buffer based IO operations on this filehandle.
8443      *
8444      * This means we can bypass a lot of subcalls and process
8445      * the buffer directly, it also means we know the upper bound
8446      * on the amount of data we might read of the current buffer
8447      * into our sv. Knowing this allows us to preallocate the pv
8448      * to be able to hold that maximum, which allows us to simplify
8449      * a lot of logic. */
8450
8451     /*
8452      * We're going to steal some values from the stdio struct
8453      * and put EVERYTHING in the innermost loop into registers.
8454      */
8455     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8456     STRLEN bpx;         /* length of the data in the target sv
8457                            used to fix pointers after a SvGROW */
8458     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8459                            of data left in the read-ahead buffer.
8460                            If 0 then the pv buffer can hold the full
8461                            amount left, otherwise this is the amount it
8462                            can hold. */
8463
8464     /* Here is some breathtakingly efficient cheating */
8465
8466     /* When you read the following logic resist the urge to think
8467      * of record separators that are 1 byte long. They are an
8468      * uninteresting special (simple) case.
8469      *
8470      * Instead think of record separators which are at least 2 bytes
8471      * long, and keep in mind that we need to deal with such
8472      * separators when they cross a read-ahead buffer boundary.
8473      *
8474      * Also consider that we need to gracefully deal with separators
8475      * that may be longer than a single read ahead buffer.
8476      *
8477      * Lastly do not forget we want to copy the delimiter as well. We
8478      * are copying all data in the file _up_to_and_including_ the separator
8479      * itself.
8480      *
8481      * Now that you have all that in mind here is what is happening below:
8482      *
8483      * 1. When we first enter the loop we do some memory book keeping to see
8484      * how much free space there is in the target SV. (This sub assumes that
8485      * it is operating on the same SV most of the time via $_ and that it is
8486      * going to be able to reuse the same pv buffer each call.) If there is
8487      * "enough" room then we set "shortbuffered" to how much space there is
8488      * and start reading forward.
8489      *
8490      * 2. When we scan forward we copy from the read-ahead buffer to the target
8491      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8492      * and the end of the of pv, as well as for the "rslast", which is the last
8493      * char of the separator.
8494      *
8495      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8496      * (which has a "complete" record up to the point we saw rslast) and check
8497      * it to see if it matches the separator. If it does we are done. If it doesn't
8498      * we continue on with the scan/copy.
8499      *
8500      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8501      * the IO system to read the next buffer. We do this by doing a getc(), which
8502      * returns a single char read (or EOF), and prefills the buffer, and also
8503      * allows us to find out how full the buffer is.  We use this information to
8504      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8505      * the returned single char into the target sv, and then go back into scan
8506      * forward mode.
8507      *
8508      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8509      * remaining space in the read-buffer.
8510      *
8511      * Note that this code despite its twisty-turny nature is pretty darn slick.
8512      * It manages single byte separators, multi-byte cross boundary separators,
8513      * and cross-read-buffer separators cleanly and efficiently at the cost
8514      * of potentially greatly overallocating the target SV.
8515      *
8516      * Yves
8517      */
8518
8519
8520     /* get the number of bytes remaining in the read-ahead buffer
8521      * on first call on a given fp this will return 0.*/
8522     cnt = PerlIO_get_cnt(fp);
8523
8524     /* make sure we have the room */
8525     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8526         /* Not room for all of it
8527            if we are looking for a separator and room for some
8528          */
8529         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8530             /* just process what we have room for */
8531             shortbuffered = cnt - SvLEN(sv) + append + 1;
8532             cnt -= shortbuffered;
8533         }
8534         else {
8535             /* ensure that the target sv has enough room to hold
8536              * the rest of the read-ahead buffer */
8537             shortbuffered = 0;
8538             /* remember that cnt can be negative */
8539             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8540         }
8541     }
8542     else {
8543         /* we have enough room to hold the full buffer, lets scream */
8544         shortbuffered = 0;
8545     }
8546
8547     /* extract the pointer to sv's string buffer, offset by append as necessary */
8548     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8549     /* extract the point to the read-ahead buffer */
8550     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8551
8552     /* some trace debug output */
8553     DEBUG_P(PerlIO_printf(Perl_debug_log,
8554         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8555     DEBUG_P(PerlIO_printf(Perl_debug_log,
8556         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8557          UVuf"\n",
8558                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8559                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8560
8561     for (;;) {
8562       screamer:
8563         /* if there is stuff left in the read-ahead buffer */
8564         if (cnt > 0) {
8565             /* if there is a separator */
8566             if (rslen) {
8567                 /* loop until we hit the end of the read-ahead buffer */
8568                 while (cnt > 0) {                    /* this     |  eat */
8569                     /* scan forward copying and searching for rslast as we go */
8570                     cnt--;
8571                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8572                         goto thats_all_folks;        /* screams  |  sed :-) */
8573                 }
8574             }
8575             else {
8576                 /* no separator, slurp the full buffer */
8577                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8578                 bp += cnt;                           /* screams  |  dust */
8579                 ptr += cnt;                          /* louder   |  sed :-) */
8580                 cnt = 0;
8581                 assert (!shortbuffered);
8582                 goto cannot_be_shortbuffered;
8583             }
8584         }
8585         
8586         if (shortbuffered) {            /* oh well, must extend */
8587             /* we didnt have enough room to fit the line into the target buffer
8588              * so we must extend the target buffer and keep going */
8589             cnt = shortbuffered;
8590             shortbuffered = 0;
8591             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8592             SvCUR_set(sv, bpx);
8593             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8594             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8595             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8596             continue;
8597         }
8598
8599     cannot_be_shortbuffered:
8600         /* we need to refill the read-ahead buffer if possible */
8601
8602         DEBUG_P(PerlIO_printf(Perl_debug_log,
8603                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8604                               PTR2UV(ptr),(IV)cnt));
8605         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8606
8607         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8608            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8609             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8610             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8611
8612         /*
8613             call PerlIO_getc() to let it prefill the lookahead buffer
8614
8615             This used to call 'filbuf' in stdio form, but as that behaves like
8616             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8617             another abstraction.
8618
8619             Note we have to deal with the char in 'i' if we are not at EOF
8620         */
8621         i   = PerlIO_getc(fp);          /* get more characters */
8622
8623         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8624            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8625             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8626             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8627
8628         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8629         cnt = PerlIO_get_cnt(fp);
8630         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8631         DEBUG_P(PerlIO_printf(Perl_debug_log,
8632             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8633             PTR2UV(ptr),(IV)cnt));
8634
8635         if (i == EOF)                   /* all done for ever? */
8636             goto thats_really_all_folks;
8637
8638         /* make sure we have enough space in the target sv */
8639         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8640         SvCUR_set(sv, bpx);
8641         SvGROW(sv, bpx + cnt + 2);
8642         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8643
8644         /* copy of the char we got from getc() */
8645         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8646
8647         /* make sure we deal with the i being the last character of a separator */
8648         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8649             goto thats_all_folks;
8650     }
8651
8652   thats_all_folks:
8653     /* check if we have actually found the separator - only really applies
8654      * when rslen > 1 */
8655     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8656           memNE((char*)bp - rslen, rsptr, rslen))
8657         goto screamer;                          /* go back to the fray */
8658   thats_really_all_folks:
8659     if (shortbuffered)
8660         cnt += shortbuffered;
8661         DEBUG_P(PerlIO_printf(Perl_debug_log,
8662              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8663     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8664     DEBUG_P(PerlIO_printf(Perl_debug_log,
8665         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8666         "\n",
8667         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8668         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8669     *bp = '\0';
8670     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8671     DEBUG_P(PerlIO_printf(Perl_debug_log,
8672         "Screamer: done, len=%ld, string=|%.*s|\n",
8673         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8674     }
8675    else
8676     {
8677        /*The big, slow, and stupid way. */
8678 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8679         STDCHAR *buf = NULL;
8680         Newx(buf, 8192, STDCHAR);
8681         assert(buf);
8682 #else
8683         STDCHAR buf[8192];
8684 #endif
8685
8686       screamer2:
8687         if (rslen) {
8688             const STDCHAR * const bpe = buf + sizeof(buf);
8689             bp = buf;
8690             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8691                 ; /* keep reading */
8692             cnt = bp - buf;
8693         }
8694         else {
8695             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8696             /* Accommodate broken VAXC compiler, which applies U8 cast to
8697              * both args of ?: operator, causing EOF to change into 255
8698              */
8699             if (cnt > 0)
8700                  i = (U8)buf[cnt - 1];
8701             else
8702                  i = EOF;
8703         }
8704
8705         if (cnt < 0)
8706             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8707         if (append)
8708             sv_catpvn_nomg(sv, (char *) buf, cnt);
8709         else
8710             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8711
8712         if (i != EOF &&                 /* joy */
8713             (!rslen ||
8714              SvCUR(sv) < rslen ||
8715              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8716         {
8717             append = -1;
8718             /*
8719              * If we're reading from a TTY and we get a short read,
8720              * indicating that the user hit his EOF character, we need
8721              * to notice it now, because if we try to read from the TTY
8722              * again, the EOF condition will disappear.
8723              *
8724              * The comparison of cnt to sizeof(buf) is an optimization
8725              * that prevents unnecessary calls to feof().
8726              *
8727              * - jik 9/25/96
8728              */
8729             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8730                 goto screamer2;
8731         }
8732
8733 #ifdef USE_HEAP_INSTEAD_OF_STACK
8734         Safefree(buf);
8735 #endif
8736     }
8737
8738     if (rspara) {               /* have to do this both before and after */
8739         while (i != EOF) {      /* to make sure file boundaries work right */
8740             i = PerlIO_getc(fp);
8741             if (i != '\n') {
8742                 PerlIO_ungetc(fp,i);
8743                 break;
8744             }
8745         }
8746     }
8747
8748     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8749 }
8750
8751 /*
8752 =for apidoc sv_inc
8753
8754 Auto-increment of the value in the SV, doing string to numeric conversion
8755 if necessary.  Handles 'get' magic and operator overloading.
8756
8757 =cut
8758 */
8759
8760 void
8761 Perl_sv_inc(pTHX_ SV *const sv)
8762 {
8763     if (!sv)
8764         return;
8765     SvGETMAGIC(sv);
8766     sv_inc_nomg(sv);
8767 }
8768
8769 /*
8770 =for apidoc sv_inc_nomg
8771
8772 Auto-increment of the value in the SV, doing string to numeric conversion
8773 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8774
8775 =cut
8776 */
8777
8778 void
8779 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8780 {
8781     char *d;
8782     int flags;
8783
8784     if (!sv)
8785         return;
8786     if (SvTHINKFIRST(sv)) {
8787         if (SvREADONLY(sv)) {
8788                 Perl_croak_no_modify();
8789         }
8790         if (SvROK(sv)) {
8791             IV i;
8792             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8793                 return;
8794             i = PTR2IV(SvRV(sv));
8795             sv_unref(sv);
8796             sv_setiv(sv, i);
8797         }
8798         else sv_force_normal_flags(sv, 0);
8799     }
8800     flags = SvFLAGS(sv);
8801     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8802         /* It's (privately or publicly) a float, but not tested as an
8803            integer, so test it to see. */
8804         (void) SvIV(sv);
8805         flags = SvFLAGS(sv);
8806     }
8807     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8808         /* It's publicly an integer, or privately an integer-not-float */
8809 #ifdef PERL_PRESERVE_IVUV
8810       oops_its_int:
8811 #endif
8812         if (SvIsUV(sv)) {
8813             if (SvUVX(sv) == UV_MAX)
8814                 sv_setnv(sv, UV_MAX_P1);
8815             else
8816                 (void)SvIOK_only_UV(sv);
8817                 SvUV_set(sv, SvUVX(sv) + 1);
8818         } else {
8819             if (SvIVX(sv) == IV_MAX)
8820                 sv_setuv(sv, (UV)IV_MAX + 1);
8821             else {
8822                 (void)SvIOK_only(sv);
8823                 SvIV_set(sv, SvIVX(sv) + 1);
8824             }   
8825         }
8826         return;
8827     }
8828     if (flags & SVp_NOK) {
8829         const NV was = SvNVX(sv);
8830         if (LIKELY(!Perl_isinfnan(was)) &&
8831             NV_OVERFLOWS_INTEGERS_AT &&
8832             was >= NV_OVERFLOWS_INTEGERS_AT) {
8833             /* diag_listed_as: Lost precision when %s %f by 1 */
8834             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8835                            "Lost precision when incrementing %" NVff " by 1",
8836                            was);
8837         }
8838         (void)SvNOK_only(sv);
8839         SvNV_set(sv, was + 1.0);
8840         return;
8841     }
8842
8843     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8844     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8845         Perl_croak_no_modify();
8846
8847     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8848         if ((flags & SVTYPEMASK) < SVt_PVIV)
8849             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8850         (void)SvIOK_only(sv);
8851         SvIV_set(sv, 1);
8852         return;
8853     }
8854     d = SvPVX(sv);
8855     while (isALPHA(*d)) d++;
8856     while (isDIGIT(*d)) d++;
8857     if (d < SvEND(sv)) {
8858         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8859 #ifdef PERL_PRESERVE_IVUV
8860         /* Got to punt this as an integer if needs be, but we don't issue
8861            warnings. Probably ought to make the sv_iv_please() that does
8862            the conversion if possible, and silently.  */
8863         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8864             /* Need to try really hard to see if it's an integer.
8865                9.22337203685478e+18 is an integer.
8866                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8867                so $a="9.22337203685478e+18"; $a+0; $a++
8868                needs to be the same as $a="9.22337203685478e+18"; $a++
8869                or we go insane. */
8870         
8871             (void) sv_2iv(sv);
8872             if (SvIOK(sv))
8873                 goto oops_its_int;
8874
8875             /* sv_2iv *should* have made this an NV */
8876             if (flags & SVp_NOK) {
8877                 (void)SvNOK_only(sv);
8878                 SvNV_set(sv, SvNVX(sv) + 1.0);
8879                 return;
8880             }
8881             /* I don't think we can get here. Maybe I should assert this
8882                And if we do get here I suspect that sv_setnv will croak. NWC
8883                Fall through. */
8884             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8885                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8886         }
8887 #endif /* PERL_PRESERVE_IVUV */
8888         if (!numtype && ckWARN(WARN_NUMERIC))
8889             not_incrementable(sv);
8890         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8891         return;
8892     }
8893     d--;
8894     while (d >= SvPVX_const(sv)) {
8895         if (isDIGIT(*d)) {
8896             if (++*d <= '9')
8897                 return;
8898             *(d--) = '0';
8899         }
8900         else {
8901 #ifdef EBCDIC
8902             /* MKS: The original code here died if letters weren't consecutive.
8903              * at least it didn't have to worry about non-C locales.  The
8904              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8905              * arranged in order (although not consecutively) and that only
8906              * [A-Za-z] are accepted by isALPHA in the C locale.
8907              */
8908             if (isALPHA_FOLD_NE(*d, 'z')) {
8909                 do { ++*d; } while (!isALPHA(*d));
8910                 return;
8911             }
8912             *(d--) -= 'z' - 'a';
8913 #else
8914             ++*d;
8915             if (isALPHA(*d))
8916                 return;
8917             *(d--) -= 'z' - 'a' + 1;
8918 #endif
8919         }
8920     }
8921     /* oh,oh, the number grew */
8922     SvGROW(sv, SvCUR(sv) + 2);
8923     SvCUR_set(sv, SvCUR(sv) + 1);
8924     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8925         *d = d[-1];
8926     if (isDIGIT(d[1]))
8927         *d = '1';
8928     else
8929         *d = d[1];
8930 }
8931
8932 /*
8933 =for apidoc sv_dec
8934
8935 Auto-decrement of the value in the SV, doing string to numeric conversion
8936 if necessary.  Handles 'get' magic and operator overloading.
8937
8938 =cut
8939 */
8940
8941 void
8942 Perl_sv_dec(pTHX_ SV *const sv)
8943 {
8944     if (!sv)
8945         return;
8946     SvGETMAGIC(sv);
8947     sv_dec_nomg(sv);
8948 }
8949
8950 /*
8951 =for apidoc sv_dec_nomg
8952
8953 Auto-decrement of the value in the SV, doing string to numeric conversion
8954 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8955
8956 =cut
8957 */
8958
8959 void
8960 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8961 {
8962     int flags;
8963
8964     if (!sv)
8965         return;
8966     if (SvTHINKFIRST(sv)) {
8967         if (SvREADONLY(sv)) {
8968                 Perl_croak_no_modify();
8969         }
8970         if (SvROK(sv)) {
8971             IV i;
8972             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8973                 return;
8974             i = PTR2IV(SvRV(sv));
8975             sv_unref(sv);
8976             sv_setiv(sv, i);
8977         }
8978         else sv_force_normal_flags(sv, 0);
8979     }
8980     /* Unlike sv_inc we don't have to worry about string-never-numbers
8981        and keeping them magic. But we mustn't warn on punting */
8982     flags = SvFLAGS(sv);
8983     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8984         /* It's publicly an integer, or privately an integer-not-float */
8985 #ifdef PERL_PRESERVE_IVUV
8986       oops_its_int:
8987 #endif
8988         if (SvIsUV(sv)) {
8989             if (SvUVX(sv) == 0) {
8990                 (void)SvIOK_only(sv);
8991                 SvIV_set(sv, -1);
8992             }
8993             else {
8994                 (void)SvIOK_only_UV(sv);
8995                 SvUV_set(sv, SvUVX(sv) - 1);
8996             }   
8997         } else {
8998             if (SvIVX(sv) == IV_MIN) {
8999                 sv_setnv(sv, (NV)IV_MIN);
9000                 goto oops_its_num;
9001             }
9002             else {
9003                 (void)SvIOK_only(sv);
9004                 SvIV_set(sv, SvIVX(sv) - 1);
9005             }   
9006         }
9007         return;
9008     }
9009     if (flags & SVp_NOK) {
9010     oops_its_num:
9011         {
9012             const NV was = SvNVX(sv);
9013             if (LIKELY(!Perl_isinfnan(was)) &&
9014                 NV_OVERFLOWS_INTEGERS_AT &&
9015                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9016                 /* diag_listed_as: Lost precision when %s %f by 1 */
9017                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9018                                "Lost precision when decrementing %" NVff " by 1",
9019                                was);
9020             }
9021             (void)SvNOK_only(sv);
9022             SvNV_set(sv, was - 1.0);
9023             return;
9024         }
9025     }
9026
9027     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9028     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9029         Perl_croak_no_modify();
9030
9031     if (!(flags & SVp_POK)) {
9032         if ((flags & SVTYPEMASK) < SVt_PVIV)
9033             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9034         SvIV_set(sv, -1);
9035         (void)SvIOK_only(sv);
9036         return;
9037     }
9038 #ifdef PERL_PRESERVE_IVUV
9039     {
9040         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9041         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9042             /* Need to try really hard to see if it's an integer.
9043                9.22337203685478e+18 is an integer.
9044                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9045                so $a="9.22337203685478e+18"; $a+0; $a--
9046                needs to be the same as $a="9.22337203685478e+18"; $a--
9047                or we go insane. */
9048         
9049             (void) sv_2iv(sv);
9050             if (SvIOK(sv))
9051                 goto oops_its_int;
9052
9053             /* sv_2iv *should* have made this an NV */
9054             if (flags & SVp_NOK) {
9055                 (void)SvNOK_only(sv);
9056                 SvNV_set(sv, SvNVX(sv) - 1.0);
9057                 return;
9058             }
9059             /* I don't think we can get here. Maybe I should assert this
9060                And if we do get here I suspect that sv_setnv will croak. NWC
9061                Fall through. */
9062             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
9063                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9064         }
9065     }
9066 #endif /* PERL_PRESERVE_IVUV */
9067     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9068 }
9069
9070 /* this define is used to eliminate a chunk of duplicated but shared logic
9071  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9072  * used anywhere but here - yves
9073  */
9074 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9075     STMT_START {      \
9076         SSize_t ix = ++PL_tmps_ix;              \
9077         if (UNLIKELY(ix >= PL_tmps_max))        \
9078             ix = tmps_grow_p(ix);                       \
9079         PL_tmps_stack[ix] = (AnSv); \
9080     } STMT_END
9081
9082 /*
9083 =for apidoc sv_mortalcopy
9084
9085 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9086 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9087 explicit call to C<FREETMPS>, or by an implicit call at places such as
9088 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9089
9090 =cut
9091 */
9092
9093 /* Make a string that will exist for the duration of the expression
9094  * evaluation.  Actually, it may have to last longer than that, but
9095  * hopefully we won't free it until it has been assigned to a
9096  * permanent location. */
9097
9098 SV *
9099 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9100 {
9101     SV *sv;
9102
9103     if (flags & SV_GMAGIC)
9104         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9105     new_SV(sv);
9106     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9107     PUSH_EXTEND_MORTAL__SV_C(sv);
9108     SvTEMP_on(sv);
9109     return sv;
9110 }
9111
9112 /*
9113 =for apidoc sv_newmortal
9114
9115 Creates a new null SV which is mortal.  The reference count of the SV is
9116 set to 1.  It will be destroyed "soon", either by an explicit call to
9117 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9118 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9119
9120 =cut
9121 */
9122
9123 SV *
9124 Perl_sv_newmortal(pTHX)
9125 {
9126     SV *sv;
9127
9128     new_SV(sv);
9129     SvFLAGS(sv) = SVs_TEMP;
9130     PUSH_EXTEND_MORTAL__SV_C(sv);
9131     return sv;
9132 }
9133
9134
9135 /*
9136 =for apidoc newSVpvn_flags
9137
9138 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9139 characters) into it.  The reference count for the
9140 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9141 string.  You are responsible for ensuring that the source string is at least
9142 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9143 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9144 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9145 returning.  If C<SVf_UTF8> is set, C<s>
9146 is considered to be in UTF-8 and the
9147 C<SVf_UTF8> flag will be set on the new SV.
9148 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9149
9150     #define newSVpvn_utf8(s, len, u)                    \
9151         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9152
9153 =cut
9154 */
9155
9156 SV *
9157 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9158 {
9159     SV *sv;
9160
9161     /* All the flags we don't support must be zero.
9162        And we're new code so I'm going to assert this from the start.  */
9163     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9164     new_SV(sv);
9165     sv_setpvn(sv,s,len);
9166
9167     /* This code used to do a sv_2mortal(), however we now unroll the call to
9168      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9169      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9170      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9171      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9172      * means that we eliminate quite a few steps than it looks - Yves
9173      * (explaining patch by gfx) */
9174
9175     SvFLAGS(sv) |= flags;
9176
9177     if(flags & SVs_TEMP){
9178         PUSH_EXTEND_MORTAL__SV_C(sv);
9179     }
9180
9181     return sv;
9182 }
9183
9184 /*
9185 =for apidoc sv_2mortal
9186
9187 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9188 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9189 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9190 string buffer can be "stolen" if this SV is copied.  See also
9191 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9192
9193 =cut
9194 */
9195
9196 SV *
9197 Perl_sv_2mortal(pTHX_ SV *const sv)
9198 {
9199     dVAR;
9200     if (!sv)
9201         return sv;
9202     if (SvIMMORTAL(sv))
9203         return sv;
9204     PUSH_EXTEND_MORTAL__SV_C(sv);
9205     SvTEMP_on(sv);
9206     return sv;
9207 }
9208
9209 /*
9210 =for apidoc newSVpv
9211
9212 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9213 characters) into it.  The reference count for the
9214 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9215 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9216 C<NUL> characters and has to have a terminating C<NUL> byte).
9217
9218 For efficiency, consider using C<newSVpvn> instead.
9219
9220 =cut
9221 */
9222
9223 SV *
9224 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9225 {
9226     SV *sv;
9227
9228     new_SV(sv);
9229     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9230     return sv;
9231 }
9232
9233 /*
9234 =for apidoc newSVpvn
9235
9236 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9237 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9238 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9239 are responsible for ensuring that the source buffer is at least
9240 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9241 undefined.
9242
9243 =cut
9244 */
9245
9246 SV *
9247 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9248 {
9249     SV *sv;
9250     new_SV(sv);
9251     sv_setpvn(sv,buffer,len);
9252     return sv;
9253 }
9254
9255 /*
9256 =for apidoc newSVhek
9257
9258 Creates a new SV from the hash key structure.  It will generate scalars that
9259 point to the shared string table where possible.  Returns a new (undefined)
9260 SV if C<hek> is NULL.
9261
9262 =cut
9263 */
9264
9265 SV *
9266 Perl_newSVhek(pTHX_ const HEK *const hek)
9267 {
9268     if (!hek) {
9269         SV *sv;
9270
9271         new_SV(sv);
9272         return sv;
9273     }
9274
9275     if (HEK_LEN(hek) == HEf_SVKEY) {
9276         return newSVsv(*(SV**)HEK_KEY(hek));
9277     } else {
9278         const int flags = HEK_FLAGS(hek);
9279         if (flags & HVhek_WASUTF8) {
9280             /* Trouble :-)
9281                Andreas would like keys he put in as utf8 to come back as utf8
9282             */
9283             STRLEN utf8_len = HEK_LEN(hek);
9284             SV * const sv = newSV_type(SVt_PV);
9285             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9286             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9287             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9288             SvUTF8_on (sv);
9289             return sv;
9290         } else if (flags & HVhek_UNSHARED) {
9291             /* A hash that isn't using shared hash keys has to have
9292                the flag in every key so that we know not to try to call
9293                share_hek_hek on it.  */
9294
9295             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9296             if (HEK_UTF8(hek))
9297                 SvUTF8_on (sv);
9298             return sv;
9299         }
9300         /* This will be overwhelminly the most common case.  */
9301         {
9302             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9303                more efficient than sharepvn().  */
9304             SV *sv;
9305
9306             new_SV(sv);
9307             sv_upgrade(sv, SVt_PV);
9308             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9309             SvCUR_set(sv, HEK_LEN(hek));
9310             SvLEN_set(sv, 0);
9311             SvIsCOW_on(sv);
9312             SvPOK_on(sv);
9313             if (HEK_UTF8(hek))
9314                 SvUTF8_on(sv);
9315             return sv;
9316         }
9317     }
9318 }
9319
9320 /*
9321 =for apidoc newSVpvn_share
9322
9323 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9324 table.  If the string does not already exist in the table, it is
9325 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9326 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9327 is non-zero, that value is used; otherwise the hash is computed.
9328 The string's hash can later be retrieved from the SV
9329 with the C<SvSHARED_HASH()> macro.  The idea here is
9330 that as the string table is used for shared hash keys these strings will have
9331 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9332
9333 =cut
9334 */
9335
9336 SV *
9337 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9338 {
9339     dVAR;
9340     SV *sv;
9341     bool is_utf8 = FALSE;
9342     const char *const orig_src = src;
9343
9344     if (len < 0) {
9345         STRLEN tmplen = -len;
9346         is_utf8 = TRUE;
9347         /* See the note in hv.c:hv_fetch() --jhi */
9348         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9349         len = tmplen;
9350     }
9351     if (!hash)
9352         PERL_HASH(hash, src, len);
9353     new_SV(sv);
9354     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9355        changes here, update it there too.  */
9356     sv_upgrade(sv, SVt_PV);
9357     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9358     SvCUR_set(sv, len);
9359     SvLEN_set(sv, 0);
9360     SvIsCOW_on(sv);
9361     SvPOK_on(sv);
9362     if (is_utf8)
9363         SvUTF8_on(sv);
9364     if (src != orig_src)
9365         Safefree(src);
9366     return sv;
9367 }
9368
9369 /*
9370 =for apidoc newSVpv_share
9371
9372 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9373 string/length pair.
9374
9375 =cut
9376 */
9377
9378 SV *
9379 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9380 {
9381     return newSVpvn_share(src, strlen(src), hash);
9382 }
9383
9384 #if defined(PERL_IMPLICIT_CONTEXT)
9385
9386 /* pTHX_ magic can't cope with varargs, so this is a no-context
9387  * version of the main function, (which may itself be aliased to us).
9388  * Don't access this version directly.
9389  */
9390
9391 SV *
9392 Perl_newSVpvf_nocontext(const char *const pat, ...)
9393 {
9394     dTHX;
9395     SV *sv;
9396     va_list args;
9397
9398     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9399
9400     va_start(args, pat);
9401     sv = vnewSVpvf(pat, &args);
9402     va_end(args);
9403     return sv;
9404 }
9405 #endif
9406
9407 /*
9408 =for apidoc newSVpvf
9409
9410 Creates a new SV and initializes it with the string formatted like
9411 C<sv_catpvf>.
9412
9413 =cut
9414 */
9415
9416 SV *
9417 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9418 {
9419     SV *sv;
9420     va_list args;
9421
9422     PERL_ARGS_ASSERT_NEWSVPVF;
9423
9424     va_start(args, pat);
9425     sv = vnewSVpvf(pat, &args);
9426     va_end(args);
9427     return sv;
9428 }
9429
9430 /* backend for newSVpvf() and newSVpvf_nocontext() */
9431
9432 SV *
9433 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9434 {
9435     SV *sv;
9436
9437     PERL_ARGS_ASSERT_VNEWSVPVF;
9438
9439     new_SV(sv);
9440     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9441     return sv;
9442 }
9443
9444 /*
9445 =for apidoc newSVnv
9446
9447 Creates a new SV and copies a floating point value into it.
9448 The reference count for the SV is set to 1.
9449
9450 =cut
9451 */
9452
9453 SV *
9454 Perl_newSVnv(pTHX_ const NV n)
9455 {
9456     SV *sv;
9457
9458     new_SV(sv);
9459     sv_setnv(sv,n);
9460     return sv;
9461 }
9462
9463 /*
9464 =for apidoc newSViv
9465
9466 Creates a new SV and copies an integer into it.  The reference count for the
9467 SV is set to 1.
9468
9469 =cut
9470 */
9471
9472 SV *
9473 Perl_newSViv(pTHX_ const IV i)
9474 {
9475     SV *sv;
9476
9477     new_SV(sv);
9478
9479     /* Inlining ONLY the small relevant subset of sv_setiv here
9480      * for performance. Makes a significant difference. */
9481
9482     /* We're starting from SVt_FIRST, so provided that's
9483      * actual 0, we don't have to unset any SV type flags
9484      * to promote to SVt_IV. */
9485     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9486
9487     SET_SVANY_FOR_BODYLESS_IV(sv);
9488     SvFLAGS(sv) |= SVt_IV;
9489     (void)SvIOK_on(sv);
9490
9491     SvIV_set(sv, i);
9492     SvTAINT(sv);
9493
9494     return sv;
9495 }
9496
9497 /*
9498 =for apidoc newSVuv
9499
9500 Creates a new SV and copies an unsigned integer into it.
9501 The reference count for the SV is set to 1.
9502
9503 =cut
9504 */
9505
9506 SV *
9507 Perl_newSVuv(pTHX_ const UV u)
9508 {
9509     SV *sv;
9510
9511     /* Inlining ONLY the small relevant subset of sv_setuv here
9512      * for performance. Makes a significant difference. */
9513
9514     /* Using ivs is more efficient than using uvs - see sv_setuv */
9515     if (u <= (UV)IV_MAX) {
9516         return newSViv((IV)u);
9517     }
9518
9519     new_SV(sv);
9520
9521     /* We're starting from SVt_FIRST, so provided that's
9522      * actual 0, we don't have to unset any SV type flags
9523      * to promote to SVt_IV. */
9524     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9525
9526     SET_SVANY_FOR_BODYLESS_IV(sv);
9527     SvFLAGS(sv) |= SVt_IV;
9528     (void)SvIOK_on(sv);
9529     (void)SvIsUV_on(sv);
9530
9531     SvUV_set(sv, u);
9532     SvTAINT(sv);
9533
9534     return sv;
9535 }
9536
9537 /*
9538 =for apidoc newSV_type
9539
9540 Creates a new SV, of the type specified.  The reference count for the new SV
9541 is set to 1.
9542
9543 =cut
9544 */
9545
9546 SV *
9547 Perl_newSV_type(pTHX_ const svtype type)
9548 {
9549     SV *sv;
9550
9551     new_SV(sv);
9552     ASSUME(SvTYPE(sv) == SVt_FIRST);
9553     if(type != SVt_FIRST)
9554         sv_upgrade(sv, type);
9555     return sv;
9556 }
9557
9558 /*
9559 =for apidoc newRV_noinc
9560
9561 Creates an RV wrapper for an SV.  The reference count for the original
9562 SV is B<not> incremented.
9563
9564 =cut
9565 */
9566
9567 SV *
9568 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9569 {
9570     SV *sv;
9571
9572     PERL_ARGS_ASSERT_NEWRV_NOINC;
9573
9574     new_SV(sv);
9575
9576     /* We're starting from SVt_FIRST, so provided that's
9577      * actual 0, we don't have to unset any SV type flags
9578      * to promote to SVt_IV. */
9579     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9580
9581     SET_SVANY_FOR_BODYLESS_IV(sv);
9582     SvFLAGS(sv) |= SVt_IV;
9583     SvROK_on(sv);
9584     SvIV_set(sv, 0);
9585
9586     SvTEMP_off(tmpRef);
9587     SvRV_set(sv, tmpRef);
9588
9589     return sv;
9590 }
9591
9592 /* newRV_inc is the official function name to use now.
9593  * newRV_inc is in fact #defined to newRV in sv.h
9594  */
9595
9596 SV *
9597 Perl_newRV(pTHX_ SV *const sv)
9598 {
9599     PERL_ARGS_ASSERT_NEWRV;
9600
9601     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9602 }
9603
9604 /*
9605 =for apidoc newSVsv
9606
9607 Creates a new SV which is an exact duplicate of the original SV.
9608 (Uses C<sv_setsv>.)
9609
9610 =cut
9611 */
9612
9613 SV *
9614 Perl_newSVsv(pTHX_ SV *const old)
9615 {
9616     SV *sv;
9617
9618     if (!old)
9619         return NULL;
9620     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9621         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9622         return NULL;
9623     }
9624     /* Do this here, otherwise we leak the new SV if this croaks. */
9625     SvGETMAGIC(old);
9626     new_SV(sv);
9627     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9628        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9629     sv_setsv_flags(sv, old, SV_NOSTEAL);
9630     return sv;
9631 }
9632
9633 /*
9634 =for apidoc sv_reset
9635
9636 Underlying implementation for the C<reset> Perl function.
9637 Note that the perl-level function is vaguely deprecated.
9638
9639 =cut
9640 */
9641
9642 void
9643 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9644 {
9645     PERL_ARGS_ASSERT_SV_RESET;
9646
9647     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9648 }
9649
9650 void
9651 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9652 {
9653     char todo[PERL_UCHAR_MAX+1];
9654     const char *send;
9655
9656     if (!stash || SvTYPE(stash) != SVt_PVHV)
9657         return;
9658
9659     if (!s) {           /* reset ?? searches */
9660         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9661         if (mg) {
9662             const U32 count = mg->mg_len / sizeof(PMOP**);
9663             PMOP **pmp = (PMOP**) mg->mg_ptr;
9664             PMOP *const *const end = pmp + count;
9665
9666             while (pmp < end) {
9667 #ifdef USE_ITHREADS
9668                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9669 #else
9670                 (*pmp)->op_pmflags &= ~PMf_USED;
9671 #endif
9672                 ++pmp;
9673             }
9674         }
9675         return;
9676     }
9677
9678     /* reset variables */
9679
9680     if (!HvARRAY(stash))
9681         return;
9682
9683     Zero(todo, 256, char);
9684     send = s + len;
9685     while (s < send) {
9686         I32 max;
9687         I32 i = (unsigned char)*s;
9688         if (s[1] == '-') {
9689             s += 2;
9690         }
9691         max = (unsigned char)*s++;
9692         for ( ; i <= max; i++) {
9693             todo[i] = 1;
9694         }
9695         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9696             HE *entry;
9697             for (entry = HvARRAY(stash)[i];
9698                  entry;
9699                  entry = HeNEXT(entry))
9700             {
9701                 GV *gv;
9702                 SV *sv;
9703
9704                 if (!todo[(U8)*HeKEY(entry)])
9705                     continue;
9706                 gv = MUTABLE_GV(HeVAL(entry));
9707                 sv = GvSV(gv);
9708                 if (sv && !SvREADONLY(sv)) {
9709                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9710                     if (!isGV(sv)) SvOK_off(sv);
9711                 }
9712                 if (GvAV(gv)) {
9713                     av_clear(GvAV(gv));
9714                 }
9715                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9716                     hv_clear(GvHV(gv));
9717                 }
9718             }
9719         }
9720     }
9721 }
9722
9723 /*
9724 =for apidoc sv_2io
9725
9726 Using various gambits, try to get an IO from an SV: the IO slot if its a
9727 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9728 named after the PV if we're a string.
9729
9730 'Get' magic is ignored on the C<sv> passed in, but will be called on
9731 C<SvRV(sv)> if C<sv> is an RV.
9732
9733 =cut
9734 */
9735
9736 IO*
9737 Perl_sv_2io(pTHX_ SV *const sv)
9738 {
9739     IO* io;
9740     GV* gv;
9741
9742     PERL_ARGS_ASSERT_SV_2IO;
9743
9744     switch (SvTYPE(sv)) {
9745     case SVt_PVIO:
9746         io = MUTABLE_IO(sv);
9747         break;
9748     case SVt_PVGV:
9749     case SVt_PVLV:
9750         if (isGV_with_GP(sv)) {
9751             gv = MUTABLE_GV(sv);
9752             io = GvIO(gv);
9753             if (!io)
9754                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9755                                     HEKfARG(GvNAME_HEK(gv)));
9756             break;
9757         }
9758         /* FALLTHROUGH */
9759     default:
9760         if (!SvOK(sv))
9761             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9762         if (SvROK(sv)) {
9763             SvGETMAGIC(SvRV(sv));
9764             return sv_2io(SvRV(sv));
9765         }
9766         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9767         if (gv)
9768             io = GvIO(gv);
9769         else
9770             io = 0;
9771         if (!io) {
9772             SV *newsv = sv;
9773             if (SvGMAGICAL(sv)) {
9774                 newsv = sv_newmortal();
9775                 sv_setsv_nomg(newsv, sv);
9776             }
9777             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9778         }
9779         break;
9780     }
9781     return io;
9782 }
9783
9784 /*
9785 =for apidoc sv_2cv
9786
9787 Using various gambits, try to get a CV from an SV; in addition, try if
9788 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9789 The flags in C<lref> are passed to C<gv_fetchsv>.
9790
9791 =cut
9792 */
9793
9794 CV *
9795 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9796 {
9797     GV *gv = NULL;
9798     CV *cv = NULL;
9799
9800     PERL_ARGS_ASSERT_SV_2CV;
9801
9802     if (!sv) {
9803         *st = NULL;
9804         *gvp = NULL;
9805         return NULL;
9806     }
9807     switch (SvTYPE(sv)) {
9808     case SVt_PVCV:
9809         *st = CvSTASH(sv);
9810         *gvp = NULL;
9811         return MUTABLE_CV(sv);
9812     case SVt_PVHV:
9813     case SVt_PVAV:
9814         *st = NULL;
9815         *gvp = NULL;
9816         return NULL;
9817     default:
9818         SvGETMAGIC(sv);
9819         if (SvROK(sv)) {
9820             if (SvAMAGIC(sv))
9821                 sv = amagic_deref_call(sv, to_cv_amg);
9822
9823             sv = SvRV(sv);
9824             if (SvTYPE(sv) == SVt_PVCV) {
9825                 cv = MUTABLE_CV(sv);
9826                 *gvp = NULL;
9827                 *st = CvSTASH(cv);
9828                 return cv;
9829             }
9830             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9831                 gv = MUTABLE_GV(sv);
9832             else
9833                 Perl_croak(aTHX_ "Not a subroutine reference");
9834         }
9835         else if (isGV_with_GP(sv)) {
9836             gv = MUTABLE_GV(sv);
9837         }
9838         else {
9839             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9840         }
9841         *gvp = gv;
9842         if (!gv) {
9843             *st = NULL;
9844             return NULL;
9845         }
9846         /* Some flags to gv_fetchsv mean don't really create the GV  */
9847         if (!isGV_with_GP(gv)) {
9848             *st = NULL;
9849             return NULL;
9850         }
9851         *st = GvESTASH(gv);
9852         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9853             /* XXX this is probably not what they think they're getting.
9854              * It has the same effect as "sub name;", i.e. just a forward
9855              * declaration! */
9856             newSTUB(gv,0);
9857         }
9858         return GvCVu(gv);
9859     }
9860 }
9861
9862 /*
9863 =for apidoc sv_true
9864
9865 Returns true if the SV has a true value by Perl's rules.
9866 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9867 instead use an in-line version.
9868
9869 =cut
9870 */
9871
9872 I32
9873 Perl_sv_true(pTHX_ SV *const sv)
9874 {
9875     if (!sv)
9876         return 0;
9877     if (SvPOK(sv)) {
9878         const XPV* const tXpv = (XPV*)SvANY(sv);
9879         if (tXpv &&
9880                 (tXpv->xpv_cur > 1 ||
9881                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9882             return 1;
9883         else
9884             return 0;
9885     }
9886     else {
9887         if (SvIOK(sv))
9888             return SvIVX(sv) != 0;
9889         else {
9890             if (SvNOK(sv))
9891                 return SvNVX(sv) != 0.0;
9892             else
9893                 return sv_2bool(sv);
9894         }
9895     }
9896 }
9897
9898 /*
9899 =for apidoc sv_pvn_force
9900
9901 Get a sensible string out of the SV somehow.
9902 A private implementation of the C<SvPV_force> macro for compilers which
9903 can't cope with complex macro expressions.  Always use the macro instead.
9904
9905 =for apidoc sv_pvn_force_flags
9906
9907 Get a sensible string out of the SV somehow.
9908 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9909 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9910 implemented in terms of this function.
9911 You normally want to use the various wrapper macros instead: see
9912 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
9913
9914 =cut
9915 */
9916
9917 char *
9918 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9919 {
9920     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9921
9922     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9923     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9924         sv_force_normal_flags(sv, 0);
9925
9926     if (SvPOK(sv)) {
9927         if (lp)
9928             *lp = SvCUR(sv);
9929     }
9930     else {
9931         char *s;
9932         STRLEN len;
9933  
9934         if (SvTYPE(sv) > SVt_PVLV
9935             || isGV_with_GP(sv))
9936             /* diag_listed_as: Can't coerce %s to %s in %s */
9937             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9938                 OP_DESC(PL_op));
9939         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9940         if (!s) {
9941           s = (char *)"";
9942         }
9943         if (lp)
9944             *lp = len;
9945
9946         if (SvTYPE(sv) < SVt_PV ||
9947             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9948             if (SvROK(sv))
9949                 sv_unref(sv);
9950             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9951             SvGROW(sv, len + 1);
9952             Move(s,SvPVX(sv),len,char);
9953             SvCUR_set(sv, len);
9954             SvPVX(sv)[len] = '\0';
9955         }
9956         if (!SvPOK(sv)) {
9957             SvPOK_on(sv);               /* validate pointer */
9958             SvTAINT(sv);
9959             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9960                                   PTR2UV(sv),SvPVX_const(sv)));
9961         }
9962     }
9963     (void)SvPOK_only_UTF8(sv);
9964     return SvPVX_mutable(sv);
9965 }
9966
9967 /*
9968 =for apidoc sv_pvbyten_force
9969
9970 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9971 instead.
9972
9973 =cut
9974 */
9975
9976 char *
9977 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9978 {
9979     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9980
9981     sv_pvn_force(sv,lp);
9982     sv_utf8_downgrade(sv,0);
9983     *lp = SvCUR(sv);
9984     return SvPVX(sv);
9985 }
9986
9987 /*
9988 =for apidoc sv_pvutf8n_force
9989
9990 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9991 instead.
9992
9993 =cut
9994 */
9995
9996 char *
9997 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9998 {
9999     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10000
10001     sv_pvn_force(sv,0);
10002     sv_utf8_upgrade_nomg(sv);
10003     *lp = SvCUR(sv);
10004     return SvPVX(sv);
10005 }
10006
10007 /*
10008 =for apidoc sv_reftype
10009
10010 Returns a string describing what the SV is a reference to.
10011
10012 If ob is true and the SV is blessed, the string is the class name,
10013 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10014
10015 =cut
10016 */
10017
10018 const char *
10019 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10020 {
10021     PERL_ARGS_ASSERT_SV_REFTYPE;
10022     if (ob && SvOBJECT(sv)) {
10023         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10024     }
10025     else {
10026         /* WARNING - There is code, for instance in mg.c, that assumes that
10027          * the only reason that sv_reftype(sv,0) would return a string starting
10028          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10029          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10030          * this routine inside other subs, and it saves time.
10031          * Do not change this assumption without searching for "dodgy type check" in
10032          * the code.
10033          * - Yves */
10034         switch (SvTYPE(sv)) {
10035         case SVt_NULL:
10036         case SVt_IV:
10037         case SVt_NV:
10038         case SVt_PV:
10039         case SVt_PVIV:
10040         case SVt_PVNV:
10041         case SVt_PVMG:
10042                                 if (SvVOK(sv))
10043                                     return "VSTRING";
10044                                 if (SvROK(sv))
10045                                     return "REF";
10046                                 else
10047                                     return "SCALAR";
10048
10049         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10050                                 /* tied lvalues should appear to be
10051                                  * scalars for backwards compatibility */
10052                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10053                                     ? "SCALAR" : "LVALUE");
10054         case SVt_PVAV:          return "ARRAY";
10055         case SVt_PVHV:          return "HASH";
10056         case SVt_PVCV:          return "CODE";
10057         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10058                                     ? "GLOB" : "SCALAR");
10059         case SVt_PVFM:          return "FORMAT";
10060         case SVt_PVIO:          return "IO";
10061         case SVt_INVLIST:       return "INVLIST";
10062         case SVt_REGEXP:        return "REGEXP";
10063         default:                return "UNKNOWN";
10064         }
10065     }
10066 }
10067
10068 /*
10069 =for apidoc sv_ref
10070
10071 Returns a SV describing what the SV passed in is a reference to.
10072
10073 dst can be a SV to be set to the description or NULL, in which case a
10074 mortal SV is returned.
10075
10076 If ob is true and the SV is blessed, the description is the class
10077 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10078
10079 =cut
10080 */
10081
10082 SV *
10083 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10084 {
10085     PERL_ARGS_ASSERT_SV_REF;
10086
10087     if (!dst)
10088         dst = sv_newmortal();
10089
10090     if (ob && SvOBJECT(sv)) {
10091         HvNAME_get(SvSTASH(sv))
10092                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10093                     : sv_setpvn(dst, "__ANON__", 8);
10094     }
10095     else {
10096         const char * reftype = sv_reftype(sv, 0);
10097         sv_setpv(dst, reftype);
10098     }
10099     return dst;
10100 }
10101
10102 /*
10103 =for apidoc sv_isobject
10104
10105 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10106 object.  If the SV is not an RV, or if the object is not blessed, then this
10107 will return false.
10108
10109 =cut
10110 */
10111
10112 int
10113 Perl_sv_isobject(pTHX_ SV *sv)
10114 {
10115     if (!sv)
10116         return 0;
10117     SvGETMAGIC(sv);
10118     if (!SvROK(sv))
10119         return 0;
10120     sv = SvRV(sv);
10121     if (!SvOBJECT(sv))
10122         return 0;
10123     return 1;
10124 }
10125
10126 /*
10127 =for apidoc sv_isa
10128
10129 Returns a boolean indicating whether the SV is blessed into the specified
10130 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10131 an inheritance relationship.
10132
10133 =cut
10134 */
10135
10136 int
10137 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10138 {
10139     const char *hvname;
10140
10141     PERL_ARGS_ASSERT_SV_ISA;
10142
10143     if (!sv)
10144         return 0;
10145     SvGETMAGIC(sv);
10146     if (!SvROK(sv))
10147         return 0;
10148     sv = SvRV(sv);
10149     if (!SvOBJECT(sv))
10150         return 0;
10151     hvname = HvNAME_get(SvSTASH(sv));
10152     if (!hvname)
10153         return 0;
10154
10155     return strEQ(hvname, name);
10156 }
10157
10158 /*
10159 =for apidoc newSVrv
10160
10161 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10162 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10163 SV will be blessed in the specified package.  The new SV is returned and its
10164 reference count is 1.  The reference count 1 is owned by C<rv>.
10165
10166 =cut
10167 */
10168
10169 SV*
10170 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10171 {
10172     SV *sv;
10173
10174     PERL_ARGS_ASSERT_NEWSVRV;
10175
10176     new_SV(sv);
10177
10178     SV_CHECK_THINKFIRST_COW_DROP(rv);
10179
10180     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10181         const U32 refcnt = SvREFCNT(rv);
10182         SvREFCNT(rv) = 0;
10183         sv_clear(rv);
10184         SvFLAGS(rv) = 0;
10185         SvREFCNT(rv) = refcnt;
10186
10187         sv_upgrade(rv, SVt_IV);
10188     } else if (SvROK(rv)) {
10189         SvREFCNT_dec(SvRV(rv));
10190     } else {
10191         prepare_SV_for_RV(rv);
10192     }
10193
10194     SvOK_off(rv);
10195     SvRV_set(rv, sv);
10196     SvROK_on(rv);
10197
10198     if (classname) {
10199         HV* const stash = gv_stashpv(classname, GV_ADD);
10200         (void)sv_bless(rv, stash);
10201     }
10202     return sv;
10203 }
10204
10205 SV *
10206 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10207 {
10208     SV * const lv = newSV_type(SVt_PVLV);
10209     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10210     LvTYPE(lv) = 'y';
10211     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10212     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10213     LvSTARGOFF(lv) = ix;
10214     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10215     return lv;
10216 }
10217
10218 /*
10219 =for apidoc sv_setref_pv
10220
10221 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10222 argument will be upgraded to an RV.  That RV will be modified to point to
10223 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10224 into the SV.  The C<classname> argument indicates the package for the
10225 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10226 will have a reference count of 1, and the RV will be returned.
10227
10228 Do not use with other Perl types such as HV, AV, SV, CV, because those
10229 objects will become corrupted by the pointer copy process.
10230
10231 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10232
10233 =cut
10234 */
10235
10236 SV*
10237 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10238 {
10239     PERL_ARGS_ASSERT_SV_SETREF_PV;
10240
10241     if (!pv) {
10242         sv_setsv(rv, &PL_sv_undef);
10243         SvSETMAGIC(rv);
10244     }
10245     else
10246         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10247     return rv;
10248 }
10249
10250 /*
10251 =for apidoc sv_setref_iv
10252
10253 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10254 argument will be upgraded to an RV.  That RV will be modified to point to
10255 the new SV.  The C<classname> argument indicates the package for the
10256 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10257 will have a reference count of 1, and the RV will be returned.
10258
10259 =cut
10260 */
10261
10262 SV*
10263 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10264 {
10265     PERL_ARGS_ASSERT_SV_SETREF_IV;
10266
10267     sv_setiv(newSVrv(rv,classname), iv);
10268     return rv;
10269 }
10270
10271 /*
10272 =for apidoc sv_setref_uv
10273
10274 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10275 argument will be upgraded to an RV.  That RV will be modified to point to
10276 the new SV.  The C<classname> argument indicates the package for the
10277 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10278 will have a reference count of 1, and the RV will be returned.
10279
10280 =cut
10281 */
10282
10283 SV*
10284 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10285 {
10286     PERL_ARGS_ASSERT_SV_SETREF_UV;
10287
10288     sv_setuv(newSVrv(rv,classname), uv);
10289     return rv;
10290 }
10291
10292 /*
10293 =for apidoc sv_setref_nv
10294
10295 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10296 argument will be upgraded to an RV.  That RV will be modified to point to
10297 the new SV.  The C<classname> argument indicates the package for the
10298 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10299 will have a reference count of 1, and the RV will be returned.
10300
10301 =cut
10302 */
10303
10304 SV*
10305 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10306 {
10307     PERL_ARGS_ASSERT_SV_SETREF_NV;
10308
10309     sv_setnv(newSVrv(rv,classname), nv);
10310     return rv;
10311 }
10312
10313 /*
10314 =for apidoc sv_setref_pvn
10315
10316 Copies a string into a new SV, optionally blessing the SV.  The length of the
10317 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10318 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10319 argument indicates the package for the blessing.  Set C<classname> to
10320 C<NULL> to avoid the blessing.  The new SV will have a reference count
10321 of 1, and the RV will be returned.
10322
10323 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10324
10325 =cut
10326 */
10327
10328 SV*
10329 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10330                    const char *const pv, const STRLEN n)
10331 {
10332     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10333
10334     sv_setpvn(newSVrv(rv,classname), pv, n);
10335     return rv;
10336 }
10337
10338 /*
10339 =for apidoc sv_bless
10340
10341 Blesses an SV into a specified package.  The SV must be an RV.  The package
10342 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10343 of the SV is unaffected.
10344
10345 =cut
10346 */
10347
10348 SV*
10349 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10350 {
10351     SV *tmpRef;
10352     HV *oldstash = NULL;
10353
10354     PERL_ARGS_ASSERT_SV_BLESS;
10355
10356     SvGETMAGIC(sv);
10357     if (!SvROK(sv))
10358         Perl_croak(aTHX_ "Can't bless non-reference value");
10359     tmpRef = SvRV(sv);
10360     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10361         if (SvREADONLY(tmpRef))
10362             Perl_croak_no_modify();
10363         if (SvOBJECT(tmpRef)) {
10364             oldstash = SvSTASH(tmpRef);
10365         }
10366     }
10367     SvOBJECT_on(tmpRef);
10368     SvUPGRADE(tmpRef, SVt_PVMG);
10369     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10370     SvREFCNT_dec(oldstash);
10371
10372     if(SvSMAGICAL(tmpRef))
10373         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10374             mg_set(tmpRef);
10375
10376
10377
10378     return sv;
10379 }
10380
10381 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10382  * as it is after unglobbing it.
10383  */
10384
10385 PERL_STATIC_INLINE void
10386 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10387 {
10388     void *xpvmg;
10389     HV *stash;
10390     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10391
10392     PERL_ARGS_ASSERT_SV_UNGLOB;
10393
10394     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10395     SvFAKE_off(sv);
10396     if (!(flags & SV_COW_DROP_PV))
10397         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10398
10399     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10400     if (GvGP(sv)) {
10401         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10402            && HvNAME_get(stash))
10403             mro_method_changed_in(stash);
10404         gp_free(MUTABLE_GV(sv));
10405     }
10406     if (GvSTASH(sv)) {
10407         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10408         GvSTASH(sv) = NULL;
10409     }
10410     GvMULTI_off(sv);
10411     if (GvNAME_HEK(sv)) {
10412         unshare_hek(GvNAME_HEK(sv));
10413     }
10414     isGV_with_GP_off(sv);
10415
10416     if(SvTYPE(sv) == SVt_PVGV) {
10417         /* need to keep SvANY(sv) in the right arena */
10418         xpvmg = new_XPVMG();
10419         StructCopy(SvANY(sv), xpvmg, XPVMG);
10420         del_XPVGV(SvANY(sv));
10421         SvANY(sv) = xpvmg;
10422
10423         SvFLAGS(sv) &= ~SVTYPEMASK;
10424         SvFLAGS(sv) |= SVt_PVMG;
10425     }
10426
10427     /* Intentionally not calling any local SET magic, as this isn't so much a
10428        set operation as merely an internal storage change.  */
10429     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10430     else sv_setsv_flags(sv, temp, 0);
10431
10432     if ((const GV *)sv == PL_last_in_gv)
10433         PL_last_in_gv = NULL;
10434     else if ((const GV *)sv == PL_statgv)
10435         PL_statgv = NULL;
10436 }
10437
10438 /*
10439 =for apidoc sv_unref_flags
10440
10441 Unsets the RV status of the SV, and decrements the reference count of
10442 whatever was being referenced by the RV.  This can almost be thought of
10443 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10444 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10445 (otherwise the decrementing is conditional on the reference count being
10446 different from one or the reference being a readonly SV).
10447 See C<L</SvROK_off>>.
10448
10449 =cut
10450 */
10451
10452 void
10453 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10454 {
10455     SV* const target = SvRV(ref);
10456
10457     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10458
10459     if (SvWEAKREF(ref)) {
10460         sv_del_backref(target, ref);
10461         SvWEAKREF_off(ref);
10462         SvRV_set(ref, NULL);
10463         return;
10464     }
10465     SvRV_set(ref, NULL);
10466     SvROK_off(ref);
10467     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10468        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10469     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10470         SvREFCNT_dec_NN(target);
10471     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10472         sv_2mortal(target);     /* Schedule for freeing later */
10473 }
10474
10475 /*
10476 =for apidoc sv_untaint
10477
10478 Untaint an SV.  Use C<SvTAINTED_off> instead.
10479
10480 =cut
10481 */
10482
10483 void
10484 Perl_sv_untaint(pTHX_ SV *const sv)
10485 {
10486     PERL_ARGS_ASSERT_SV_UNTAINT;
10487     PERL_UNUSED_CONTEXT;
10488
10489     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10490         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10491         if (mg)
10492             mg->mg_len &= ~1;
10493     }
10494 }
10495
10496 /*
10497 =for apidoc sv_tainted
10498
10499 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10500
10501 =cut
10502 */
10503
10504 bool
10505 Perl_sv_tainted(pTHX_ SV *const sv)
10506 {
10507     PERL_ARGS_ASSERT_SV_TAINTED;
10508     PERL_UNUSED_CONTEXT;
10509
10510     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10511         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10512         if (mg && (mg->mg_len & 1) )
10513             return TRUE;
10514     }
10515     return FALSE;
10516 }
10517
10518 /*
10519 =for apidoc sv_setpviv
10520
10521 Copies an integer into the given SV, also updating its string value.
10522 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10523
10524 =cut
10525 */
10526
10527 void
10528 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10529 {
10530     char buf[TYPE_CHARS(UV)];
10531     char *ebuf;
10532     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10533
10534     PERL_ARGS_ASSERT_SV_SETPVIV;
10535
10536     sv_setpvn(sv, ptr, ebuf - ptr);
10537 }
10538
10539 /*
10540 =for apidoc sv_setpviv_mg
10541
10542 Like C<sv_setpviv>, but also handles 'set' magic.
10543
10544 =cut
10545 */
10546
10547 void
10548 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10549 {
10550     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10551
10552     sv_setpviv(sv, iv);
10553     SvSETMAGIC(sv);
10554 }
10555
10556 #if defined(PERL_IMPLICIT_CONTEXT)
10557
10558 /* pTHX_ magic can't cope with varargs, so this is a no-context
10559  * version of the main function, (which may itself be aliased to us).
10560  * Don't access this version directly.
10561  */
10562
10563 void
10564 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10565 {
10566     dTHX;
10567     va_list args;
10568
10569     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10570
10571     va_start(args, pat);
10572     sv_vsetpvf(sv, pat, &args);
10573     va_end(args);
10574 }
10575
10576 /* pTHX_ magic can't cope with varargs, so this is a no-context
10577  * version of the main function, (which may itself be aliased to us).
10578  * Don't access this version directly.
10579  */
10580
10581 void
10582 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10583 {
10584     dTHX;
10585     va_list args;
10586
10587     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10588
10589     va_start(args, pat);
10590     sv_vsetpvf_mg(sv, pat, &args);
10591     va_end(args);
10592 }
10593 #endif
10594
10595 /*
10596 =for apidoc sv_setpvf
10597
10598 Works like C<sv_catpvf> but copies the text into the SV instead of
10599 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10600
10601 =cut
10602 */
10603
10604 void
10605 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10606 {
10607     va_list args;
10608
10609     PERL_ARGS_ASSERT_SV_SETPVF;
10610
10611     va_start(args, pat);
10612     sv_vsetpvf(sv, pat, &args);
10613     va_end(args);
10614 }
10615
10616 /*
10617 =for apidoc sv_vsetpvf
10618
10619 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10620 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10621
10622 Usually used via its frontend C<sv_setpvf>.
10623
10624 =cut
10625 */
10626
10627 void
10628 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10629 {
10630     PERL_ARGS_ASSERT_SV_VSETPVF;
10631
10632     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10633 }
10634
10635 /*
10636 =for apidoc sv_setpvf_mg
10637
10638 Like C<sv_setpvf>, but also handles 'set' magic.
10639
10640 =cut
10641 */
10642
10643 void
10644 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10645 {
10646     va_list args;
10647
10648     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10649
10650     va_start(args, pat);
10651     sv_vsetpvf_mg(sv, pat, &args);
10652     va_end(args);
10653 }
10654
10655 /*
10656 =for apidoc sv_vsetpvf_mg
10657
10658 Like C<sv_vsetpvf>, but also handles 'set' magic.
10659
10660 Usually used via its frontend C<sv_setpvf_mg>.
10661
10662 =cut
10663 */
10664
10665 void
10666 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10667 {
10668     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10669
10670     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10671     SvSETMAGIC(sv);
10672 }
10673
10674 #if defined(PERL_IMPLICIT_CONTEXT)
10675
10676 /* pTHX_ magic can't cope with varargs, so this is a no-context
10677  * version of the main function, (which may itself be aliased to us).
10678  * Don't access this version directly.
10679  */
10680
10681 void
10682 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10683 {
10684     dTHX;
10685     va_list args;
10686
10687     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10688
10689     va_start(args, pat);
10690     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10691     va_end(args);
10692 }
10693
10694 /* pTHX_ magic can't cope with varargs, so this is a no-context
10695  * version of the main function, (which may itself be aliased to us).
10696  * Don't access this version directly.
10697  */
10698
10699 void
10700 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10701 {
10702     dTHX;
10703     va_list args;
10704
10705     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10706
10707     va_start(args, pat);
10708     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10709     SvSETMAGIC(sv);
10710     va_end(args);
10711 }
10712 #endif
10713
10714 /*
10715 =for apidoc sv_catpvf
10716
10717 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10718 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10719 variable argument list, argument reordering is not supported.
10720 If the appended data contains "wide" characters
10721 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10722 and characters >255 formatted with C<%c>), the original SV might get
10723 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10724 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10725 valid UTF-8; if the original SV was bytes, the pattern should be too.
10726
10727 =cut */
10728
10729 void
10730 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10731 {
10732     va_list args;
10733
10734     PERL_ARGS_ASSERT_SV_CATPVF;
10735
10736     va_start(args, pat);
10737     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10738     va_end(args);
10739 }
10740
10741 /*
10742 =for apidoc sv_vcatpvf
10743
10744 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10745 variable argument list, and appends the formatted
10746 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10747
10748 Usually used via its frontend C<sv_catpvf>.
10749
10750 =cut
10751 */
10752
10753 void
10754 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10755 {
10756     PERL_ARGS_ASSERT_SV_VCATPVF;
10757
10758     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10759 }
10760
10761 /*
10762 =for apidoc sv_catpvf_mg
10763
10764 Like C<sv_catpvf>, but also handles 'set' magic.
10765
10766 =cut
10767 */
10768
10769 void
10770 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10771 {
10772     va_list args;
10773
10774     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10775
10776     va_start(args, pat);
10777     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10778     SvSETMAGIC(sv);
10779     va_end(args);
10780 }
10781
10782 /*
10783 =for apidoc sv_vcatpvf_mg
10784
10785 Like C<sv_vcatpvf>, but also handles 'set' magic.
10786
10787 Usually used via its frontend C<sv_catpvf_mg>.
10788
10789 =cut
10790 */
10791
10792 void
10793 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10794 {
10795     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10796
10797     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10798     SvSETMAGIC(sv);
10799 }
10800
10801 /*
10802 =for apidoc sv_vsetpvfn
10803
10804 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10805 appending it.
10806
10807 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10808
10809 =cut
10810 */
10811
10812 void
10813 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10814                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10815 {
10816     PERL_ARGS_ASSERT_SV_VSETPVFN;
10817
10818     sv_setpvs(sv, "");
10819     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10820 }
10821
10822
10823 /*
10824  * Warn of missing argument to sprintf. The value used in place of such
10825  * arguments should be &PL_sv_no; an undefined value would yield
10826  * inappropriate "use of uninit" warnings [perl #71000].
10827  */
10828 STATIC void
10829 S_warn_vcatpvfn_missing_argument(pTHX) {
10830     if (ckWARN(WARN_MISSING)) {
10831         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10832                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10833     }
10834 }
10835
10836
10837 STATIC I32
10838 S_expect_number(pTHX_ char **const pattern)
10839 {
10840     I32 var = 0;
10841
10842     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10843
10844     switch (**pattern) {
10845     case '1': case '2': case '3':
10846     case '4': case '5': case '6':
10847     case '7': case '8': case '9':
10848         var = *(*pattern)++ - '0';
10849         while (isDIGIT(**pattern)) {
10850             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10851             if (tmp < var)
10852                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10853             var = tmp;
10854         }
10855     }
10856     return var;
10857 }
10858
10859 STATIC char *
10860 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10861 {
10862     const int neg = nv < 0;
10863     UV uv;
10864
10865     PERL_ARGS_ASSERT_F0CONVERT;
10866
10867     if (UNLIKELY(Perl_isinfnan(nv))) {
10868         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10869         *len = n;
10870         return endbuf - n;
10871     }
10872     if (neg)
10873         nv = -nv;
10874     if (nv < UV_MAX) {
10875         char *p = endbuf;
10876         nv += 0.5;
10877         uv = (UV)nv;
10878         if (uv & 1 && uv == nv)
10879             uv--;                       /* Round to even */
10880         do {
10881             const unsigned dig = uv % 10;
10882             *--p = '0' + dig;
10883         } while (uv /= 10);
10884         if (neg)
10885             *--p = '-';
10886         *len = endbuf - p;
10887         return p;
10888     }
10889     return NULL;
10890 }
10891
10892
10893 /*
10894 =for apidoc sv_vcatpvfn
10895
10896 =for apidoc sv_vcatpvfn_flags
10897
10898 Processes its arguments like C<vsprintf> and appends the formatted output
10899 to an SV.  Uses an array of SVs if the C-style variable argument list is
10900 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
10901 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10902 C<va_list> argument list with a format string that uses argument reordering
10903 will yield an exception.
10904
10905 When running with taint checks enabled, indicates via
10906 C<maybe_tainted> if results are untrustworthy (often due to the use of
10907 locales).
10908
10909 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
10910
10911 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10912
10913 =cut
10914 */
10915
10916 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10917                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10918                         vec_utf8 = DO_UTF8(vecsv);
10919
10920 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10921
10922 void
10923 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10924                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10925 {
10926     PERL_ARGS_ASSERT_SV_VCATPVFN;
10927
10928     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10929 }
10930
10931 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10932 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10933  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10934  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10935  * after the first 1023 zero bits.
10936  *
10937  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10938  * of dynamically growing buffer might be better, start at just 16 bytes
10939  * (for example) and grow only when necessary.  Or maybe just by looking
10940  * at the exponents of the two doubles? */
10941 #  define DOUBLEDOUBLE_MAXBITS 2098
10942 #endif
10943
10944 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10945  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10946  * per xdigit.  For the double-double case, this can be rather many.
10947  * The non-double-double-long-double overshoots since all bits of NV
10948  * are not mantissa bits, there are also exponent bits. */
10949 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10950 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
10951 #else
10952 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10953 #endif
10954
10955 /* If we do not have a known long double format, (including not using
10956  * long doubles, or long doubles being equal to doubles) then we will
10957  * fall back to the ldexp/frexp route, with which we can retrieve at
10958  * most as many bits as our widest unsigned integer type is.  We try
10959  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10960  *
10961  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10962  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10963  */
10964 #if defined(HAS_QUAD) && defined(Uquad_t)
10965 #  define MANTISSATYPE Uquad_t
10966 #  define MANTISSASIZE 8
10967 #else
10968 #  define MANTISSATYPE UV
10969 #  define MANTISSASIZE UVSIZE
10970 #endif
10971
10972 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10973 #  define HEXTRACT_LITTLE_ENDIAN
10974 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10975 #  define HEXTRACT_BIG_ENDIAN
10976 #else
10977 #  define HEXTRACT_MIX_ENDIAN
10978 #endif
10979
10980 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10981  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10982  * are being extracted from (either directly from the long double in-memory
10983  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10984  * is used to update the exponent.  vhex is the pointer to the beginning
10985  * of the output buffer (of VHEX_SIZE).
10986  *
10987  * The tricky part is that S_hextract() needs to be called twice:
10988  * the first time with vend as NULL, and the second time with vend as
10989  * the pointer returned by the first call.  What happens is that on
10990  * the first round the output size is computed, and the intended
10991  * extraction sanity checked.  On the second round the actual output
10992  * (the extraction of the hexadecimal values) takes place.
10993  * Sanity failures cause fatal failures during both rounds. */
10994 STATIC U8*
10995 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10996 {
10997     U8* v = vhex;
10998     int ix;
10999     int ixmin = 0, ixmax = 0;
11000
11001     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
11002      * and elsewhere. */
11003
11004     /* These macros are just to reduce typos, they have multiple
11005      * repetitions below, but usually only one (or sometimes two)
11006      * of them is really being used. */
11007     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11008 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11009 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11010 #define HEXTRACT_OUTPUT(ix) \
11011     STMT_START { \
11012       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11013    } STMT_END
11014 #define HEXTRACT_COUNT(ix, c) \
11015     STMT_START { \
11016       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11017    } STMT_END
11018 #define HEXTRACT_BYTE(ix) \
11019     STMT_START { \
11020       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11021    } STMT_END
11022 #define HEXTRACT_LO_NYBBLE(ix) \
11023     STMT_START { \
11024       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11025    } STMT_END
11026     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11027      * to make it look less odd when the top bits of a NV
11028      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11029      * order bits can be in the "low nybble" of a byte. */
11030 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11031 #define HEXTRACT_BYTES_LE(a, b) \
11032     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11033 #define HEXTRACT_BYTES_BE(a, b) \
11034     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11035 #define HEXTRACT_IMPLICIT_BIT(nv) \
11036     STMT_START { \
11037         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11038    } STMT_END
11039
11040 /* Most formats do.  Those which don't should undef this. */
11041 #define HEXTRACT_HAS_IMPLICIT_BIT
11042 /* Many formats do.  Those which don't should undef this. */
11043 #define HEXTRACT_HAS_TOP_NYBBLE
11044
11045     /* HEXTRACTSIZE is the maximum number of xdigits. */
11046 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11047 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11048 #else
11049 #  define HEXTRACTSIZE 2 * NVSIZE
11050 #endif
11051
11052     const U8* vmaxend = vhex + HEXTRACTSIZE;
11053     PERL_UNUSED_VAR(ix); /* might happen */
11054     (void)Perl_frexp(PERL_ABS(nv), exponent);
11055     if (vend && (vend <= vhex || vend > vmaxend)) {
11056         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11057         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11058     }
11059     {
11060         /* First check if using long doubles. */
11061 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11062 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11063         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11064          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
11065         /* The bytes 13..0 are the mantissa/fraction,
11066          * the 15,14 are the sign+exponent. */
11067         const U8* nvp = (const U8*)(&nv);
11068         HEXTRACT_IMPLICIT_BIT(nv);
11069 #   undef HEXTRACT_HAS_TOP_NYBBLE
11070         HEXTRACT_BYTES_LE(13, 0);
11071 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11072         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11073          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11074         /* The bytes 2..15 are the mantissa/fraction,
11075          * the 0,1 are the sign+exponent. */
11076         const U8* nvp = (const U8*)(&nv);
11077         HEXTRACT_IMPLICIT_BIT(nv);
11078 #   undef HEXTRACT_HAS_TOP_NYBBLE
11079         HEXTRACT_BYTES_BE(2, 15);
11080 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11081         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11082          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
11083          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
11084          * meaning that 2 or 6 bytes are empty padding. */
11085         /* The bytes 7..0 are the mantissa/fraction */
11086         const U8* nvp = (const U8*)(&nv);
11087 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11088 #    undef HEXTRACT_HAS_TOP_NYBBLE
11089         HEXTRACT_BYTES_LE(7, 0);
11090 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11091         /* Does this format ever happen? (Wikipedia says the Motorola
11092          * 6888x math coprocessors used format _like_ this but padded
11093          * to 96 bits with 16 unused bits between the exponent and the
11094          * mantissa.) */
11095         const U8* nvp = (const U8*)(&nv);
11096 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11097 #    undef HEXTRACT_HAS_TOP_NYBBLE
11098         HEXTRACT_BYTES_BE(0, 7);
11099 #  else
11100 #    define HEXTRACT_FALLBACK
11101         /* Double-double format: two doubles next to each other.
11102          * The first double is the high-order one, exactly like
11103          * it would be for a "lone" double.  The second double
11104          * is shifted down using the exponent so that that there
11105          * are no common bits.  The tricky part is that the value
11106          * of the double-double is the SUM of the two doubles and
11107          * the second one can be also NEGATIVE.
11108          *
11109          * Because of this tricky construction the bytewise extraction we
11110          * use for the other long double formats doesn't work, we must
11111          * extract the values bit by bit.
11112          *
11113          * The little-endian double-double is used .. somewhere?
11114          *
11115          * The big endian double-double is used in e.g. PPC/Power (AIX)
11116          * and MIPS (SGI).
11117          *
11118          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11119          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11120          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11121          */
11122 #  endif
11123 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11124         /* Using normal doubles, not long doubles.
11125          *
11126          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11127          * bytes, since we might need to handle printf precision, and
11128          * also need to insert the radix. */
11129 #  if NVSIZE == 8
11130 #    ifdef HEXTRACT_LITTLE_ENDIAN
11131         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11132         const U8* nvp = (const U8*)(&nv);
11133         HEXTRACT_IMPLICIT_BIT(nv);
11134         HEXTRACT_TOP_NYBBLE(6);
11135         HEXTRACT_BYTES_LE(5, 0);
11136 #    elif defined(HEXTRACT_BIG_ENDIAN)
11137         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11138         const U8* nvp = (const U8*)(&nv);
11139         HEXTRACT_IMPLICIT_BIT(nv);
11140         HEXTRACT_TOP_NYBBLE(1);
11141         HEXTRACT_BYTES_BE(2, 7);
11142 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11143         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11144         const U8* nvp = (const U8*)(&nv);
11145         HEXTRACT_IMPLICIT_BIT(nv);
11146         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11147         HEXTRACT_BYTE(1); /* 5 */
11148         HEXTRACT_BYTE(0); /* 4 */
11149         HEXTRACT_BYTE(7); /* 3 */
11150         HEXTRACT_BYTE(6); /* 2 */
11151         HEXTRACT_BYTE(5); /* 1 */
11152         HEXTRACT_BYTE(4); /* 0 */
11153 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11154         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11155         const U8* nvp = (const U8*)(&nv);
11156         HEXTRACT_IMPLICIT_BIT(nv);
11157         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11158         HEXTRACT_BYTE(6); /* 5 */
11159         HEXTRACT_BYTE(7); /* 4 */
11160         HEXTRACT_BYTE(0); /* 3 */
11161         HEXTRACT_BYTE(1); /* 2 */
11162         HEXTRACT_BYTE(2); /* 1 */
11163         HEXTRACT_BYTE(3); /* 0 */
11164 #    else
11165 #      define HEXTRACT_FALLBACK
11166 #    endif
11167 #  else
11168 #    define HEXTRACT_FALLBACK
11169 #  endif
11170 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11171 #  ifdef HEXTRACT_FALLBACK
11172 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11173         /* The fallback is used for the double-double format, and
11174          * for unknown long double formats, and for unknown double
11175          * formats, or in general unknown NV formats. */
11176         if (nv == (NV)0.0) {
11177             if (vend)
11178                 *v++ = 0;
11179             else
11180                 v++;
11181             *exponent = 0;
11182         }
11183         else {
11184             NV d = nv < 0 ? -nv : nv;
11185             NV e = (NV)1.0;
11186             U8 ha = 0x0; /* hexvalue accumulator */
11187             U8 hd = 0x8; /* hexvalue digit */
11188
11189             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11190              * this is essentially manual frexp(). Multiplying by 0.5 and
11191              * doubling should be lossless in binary floating point. */
11192
11193             *exponent = 1;
11194
11195             while (e > d) {
11196                 e *= (NV)0.5;
11197                 (*exponent)--;
11198             }
11199             /* Now d >= e */
11200
11201             while (d >= e + e) {
11202                 e += e;
11203                 (*exponent)++;
11204             }
11205             /* Now e <= d < 2*e */
11206
11207             /* First extract the leading hexdigit (the implicit bit). */
11208             if (d >= e) {
11209                 d -= e;
11210                 if (vend)
11211                     *v++ = 1;
11212                 else
11213                     v++;
11214             }
11215             else {
11216                 if (vend)
11217                     *v++ = 0;
11218                 else
11219                     v++;
11220             }
11221             e *= (NV)0.5;
11222
11223             /* Then extract the remaining hexdigits. */
11224             while (d > (NV)0.0) {
11225                 if (d >= e) {
11226                     ha |= hd;
11227                     d -= e;
11228                 }
11229                 if (hd == 1) {
11230                     /* Output or count in groups of four bits,
11231                      * that is, when the hexdigit is down to one. */
11232                     if (vend)
11233                         *v++ = ha;
11234                     else
11235                         v++;
11236                     /* Reset the hexvalue. */
11237                     ha = 0x0;
11238                     hd = 0x8;
11239                 }
11240                 else
11241                     hd >>= 1;
11242                 e *= (NV)0.5;
11243             }
11244
11245             /* Flush possible pending hexvalue. */
11246             if (ha) {
11247                 if (vend)
11248                     *v++ = ha;
11249                 else
11250                     v++;
11251             }
11252         }
11253 #  endif
11254     }
11255     /* Croak for various reasons: if the output pointer escaped the
11256      * output buffer, if the extraction index escaped the extraction
11257      * buffer, or if the ending output pointer didn't match the
11258      * previously computed value. */
11259     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11260         /* For double-double the ixmin and ixmax stay at zero,
11261          * which is convenient since the HEXTRACTSIZE is tricky
11262          * for double-double. */
11263         ixmin < 0 || ixmax >= NVSIZE ||
11264         (vend && v != vend)) {
11265         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11266         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11267     }
11268     return v;
11269 }
11270
11271 /* Helper for sv_vcatpvfn_flags().  */
11272 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11273     STMT_START {                                       \
11274         if (in_range)                                  \
11275             (var) = (expr);                            \
11276         else {                                         \
11277             (var) = &PL_sv_no; /* [perl #71000] */     \
11278             arg_missing = TRUE;                        \
11279         }                                              \
11280     } STMT_END
11281
11282 void
11283 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11284                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11285                        const U32 flags)
11286 {
11287     char *p;
11288     char *q;
11289     const char *patend;
11290     STRLEN origlen;
11291     I32 svix = 0;
11292     static const char nullstr[] = "(null)";
11293     SV *argsv = NULL;
11294     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11295     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11296     SV *nsv = NULL;
11297     /* Times 4: a decimal digit takes more than 3 binary digits.
11298      * NV_DIG: mantissa takes than many decimal digits.
11299      * Plus 32: Playing safe. */
11300     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11301     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11302     bool hexfp = FALSE; /* hexadecimal floating point? */
11303
11304     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11305
11306     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11307     PERL_UNUSED_ARG(maybe_tainted);
11308
11309     if (flags & SV_GMAGIC)
11310         SvGETMAGIC(sv);
11311
11312     /* no matter what, this is a string now */
11313     (void)SvPV_force_nomg(sv, origlen);
11314
11315     /* special-case "", "%s", and "%-p" (SVf - see below) */
11316     if (patlen == 0) {
11317         if (svmax && ckWARN(WARN_REDUNDANT))
11318             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11319                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11320         return;
11321     }
11322     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11323         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11324             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11325                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11326
11327         if (args) {
11328             const char * const s = va_arg(*args, char*);
11329             sv_catpv_nomg(sv, s ? s : nullstr);
11330         }
11331         else if (svix < svmax) {
11332             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11333             SvGETMAGIC(*svargs);
11334             sv_catsv_nomg(sv, *svargs);
11335         }
11336         else
11337             S_warn_vcatpvfn_missing_argument(aTHX);
11338         return;
11339     }
11340     if (args && patlen == 3 && pat[0] == '%' &&
11341                 pat[1] == '-' && pat[2] == 'p') {
11342         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11343             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11344                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11345         argsv = MUTABLE_SV(va_arg(*args, void*));
11346         sv_catsv_nomg(sv, argsv);
11347         return;
11348     }
11349
11350 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11351     /* special-case "%.<number>[gf]" */
11352     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11353          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11354         unsigned digits = 0;
11355         const char *pp;
11356
11357         pp = pat + 2;
11358         while (*pp >= '0' && *pp <= '9')
11359             digits = 10 * digits + (*pp++ - '0');
11360
11361         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11362            format the first argument and WARN_REDUNDANT if svmax > 1?
11363            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11364         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11365             const NV nv = SvNV(*svargs);
11366             if (LIKELY(!Perl_isinfnan(nv))) {
11367                 if (*pp == 'g') {
11368                     /* Add check for digits != 0 because it seems that some
11369                        gconverts are buggy in this case, and we don't yet have
11370                        a Configure test for this.  */
11371                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11372                         /* 0, point, slack */
11373                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11374                         SNPRINTF_G(nv, ebuf, size, digits);
11375                         sv_catpv_nomg(sv, ebuf);
11376                         if (*ebuf)      /* May return an empty string for digits==0 */
11377                             return;
11378                     }
11379                 } else if (!digits) {
11380                     STRLEN l;
11381
11382                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11383                         sv_catpvn_nomg(sv, p, l);
11384                         return;
11385                     }
11386                 }
11387             }
11388         }
11389     }
11390 #endif /* !USE_LONG_DOUBLE */
11391
11392     if (!args && svix < svmax && DO_UTF8(*svargs))
11393         has_utf8 = TRUE;
11394
11395     patend = (char*)pat + patlen;
11396     for (p = (char*)pat; p < patend; p = q) {
11397         bool alt = FALSE;
11398         bool left = FALSE;
11399         bool vectorize = FALSE;
11400         bool vectorarg = FALSE;
11401         bool vec_utf8 = FALSE;
11402         char fill = ' ';
11403         char plus = 0;
11404         char intsize = 0;
11405         STRLEN width = 0;
11406         STRLEN zeros = 0;
11407         bool has_precis = FALSE;
11408         STRLEN precis = 0;
11409         const I32 osvix = svix;
11410         bool is_utf8 = FALSE;  /* is this item utf8?   */
11411         bool used_explicit_ix = FALSE;
11412         bool arg_missing = FALSE;
11413 #ifdef HAS_LDBL_SPRINTF_BUG
11414         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11415            with sfio - Allen <allens@cpan.org> */
11416         bool fix_ldbl_sprintf_bug = FALSE;
11417 #endif
11418
11419         char esignbuf[4];
11420         U8 utf8buf[UTF8_MAXBYTES+1];
11421         STRLEN esignlen = 0;
11422
11423         const char *eptr = NULL;
11424         const char *fmtstart;
11425         STRLEN elen = 0;
11426         SV *vecsv = NULL;
11427         const U8 *vecstr = NULL;
11428         STRLEN veclen = 0;
11429         char c = 0;
11430         int i;
11431         unsigned base = 0;
11432         IV iv = 0;
11433         UV uv = 0;
11434         /* We need a long double target in case HAS_LONG_DOUBLE,
11435          * even without USE_LONG_DOUBLE, so that we can printf with
11436          * long double formats, even without NV being long double.
11437          * But we call the target 'fv' instead of 'nv', since most of
11438          * the time it is not (most compilers these days recognize
11439          * "long double", even if only as a synonym for "double").
11440         */
11441 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11442         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11443         long double fv;
11444 #  ifdef Perl_isfinitel
11445 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11446 #  endif
11447 #  define FV_GF PERL_PRIgldbl
11448 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11449        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11450 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11451                                            double _dv = nv;  \
11452                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11453                               } STMT_END
11454 #    else
11455 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11456 #    endif
11457 #else
11458         NV fv;
11459 #  define FV_GF NVgf
11460 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11461 #endif
11462 #ifndef FV_ISFINITE
11463 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11464 #endif
11465         NV nv;
11466         STRLEN have;
11467         STRLEN need;
11468         STRLEN gap;
11469         const char *dotstr = ".";
11470         STRLEN dotstrlen = 1;
11471         I32 efix = 0; /* explicit format parameter index */
11472         I32 ewix = 0; /* explicit width index */
11473         I32 epix = 0; /* explicit precision index */
11474         I32 evix = 0; /* explicit vector index */
11475         bool asterisk = FALSE;
11476         bool infnan = FALSE;
11477
11478         /* echo everything up to the next format specification */
11479         for (q = p; q < patend && *q != '%'; ++q) ;
11480         if (q > p) {
11481             if (has_utf8 && !pat_utf8)
11482                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11483             else
11484                 sv_catpvn_nomg(sv, p, q - p);
11485             p = q;
11486         }
11487         if (q++ >= patend)
11488             break;
11489
11490         fmtstart = q;
11491
11492 /*
11493     We allow format specification elements in this order:
11494         \d+\$              explicit format parameter index
11495         [-+ 0#]+           flags
11496         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11497         0                  flag (as above): repeated to allow "v02"     
11498         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11499         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11500         [hlqLV]            size
11501     [%bcdefginopsuxDFOUX] format (mandatory)
11502 */
11503
11504         if (args) {
11505 /*  
11506         As of perl5.9.3, printf format checking is on by default.
11507         Internally, perl uses %p formats to provide an escape to
11508         some extended formatting.  This block deals with those
11509         extensions: if it does not match, (char*)q is reset and
11510         the normal format processing code is used.
11511
11512         Currently defined extensions are:
11513                 %p              include pointer address (standard)      
11514                 %-p     (SVf)   include an SV (previously %_)
11515                 %-<num>p        include an SV with precision <num>      
11516                 %2p             include a HEK
11517                 %3p             include a HEK with precision of 256
11518                 %4p             char* preceded by utf8 flag and length
11519                 %<num>p         (where num is 1 or > 4) reserved for future
11520                                 extensions
11521
11522         Robin Barker 2005-07-14 (but modified since)
11523
11524                 %1p     (VDf)   removed.  RMB 2007-10-19
11525 */
11526             char* r = q; 
11527             bool sv = FALSE;    
11528             STRLEN n = 0;
11529             if (*q == '-')
11530                 sv = *q++;
11531             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11532                 /* The argument has already gone through cBOOL, so the cast
11533                    is safe. */
11534                 is_utf8 = (bool)va_arg(*args, int);
11535                 elen = va_arg(*args, UV);
11536                 /* if utf8 length is larger than 0x7ffff..., then it might
11537                  * have been a signed value that wrapped */
11538                 if (elen  > ((~(STRLEN)0) >> 1)) {
11539                     assert(0); /* in DEBUGGING build we want to crash */
11540                     elen= 0; /* otherwise we want to treat this as an empty string */
11541                 }
11542                 eptr = va_arg(*args, char *);
11543                 q += sizeof(UTF8f)-1;
11544                 goto string;
11545             }
11546             n = expect_number(&q);
11547             if (*q++ == 'p') {
11548                 if (sv) {                       /* SVf */
11549                     if (n) {
11550                         precis = n;
11551                         has_precis = TRUE;
11552                     }
11553                     argsv = MUTABLE_SV(va_arg(*args, void*));
11554                     eptr = SvPV_const(argsv, elen);
11555                     if (DO_UTF8(argsv))
11556                         is_utf8 = TRUE;
11557                     goto string;
11558                 }
11559                 else if (n==2 || n==3) {        /* HEKf */
11560                     HEK * const hek = va_arg(*args, HEK *);
11561                     eptr = HEK_KEY(hek);
11562                     elen = HEK_LEN(hek);
11563                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11564                     if (n==3) precis = 256, has_precis = TRUE;
11565                     goto string;
11566                 }
11567                 else if (n) {
11568                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11569                                      "internal %%<num>p might conflict with future printf extensions");
11570                 }
11571             }
11572             q = r; 
11573         }
11574
11575         if ( (width = expect_number(&q)) ) {
11576             if (*q == '$') {
11577                 if (args)
11578                     Perl_croak_nocontext(
11579                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11580                 ++q;
11581                 efix = width;
11582                 used_explicit_ix = TRUE;
11583             } else {
11584                 goto gotwidth;
11585             }
11586         }
11587
11588         /* FLAGS */
11589
11590         while (*q) {
11591             switch (*q) {
11592             case ' ':
11593             case '+':
11594                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11595                     q++;
11596                 else
11597                     plus = *q++;
11598                 continue;
11599
11600             case '-':
11601                 left = TRUE;
11602                 q++;
11603                 continue;
11604
11605             case '0':
11606                 fill = *q++;
11607                 continue;
11608
11609             case '#':
11610                 alt = TRUE;
11611                 q++;
11612                 continue;
11613
11614             default:
11615                 break;
11616             }
11617             break;
11618         }
11619
11620       tryasterisk:
11621         if (*q == '*') {
11622             q++;
11623             if ( (ewix = expect_number(&q)) ) {
11624                 if (*q++ == '$') {
11625                     if (args)
11626                         Perl_croak_nocontext(
11627                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11628                     used_explicit_ix = TRUE;
11629                 } else
11630                     goto unknown;
11631             }
11632             asterisk = TRUE;
11633         }
11634         if (*q == 'v') {
11635             q++;
11636             if (vectorize)
11637                 goto unknown;
11638             if ((vectorarg = asterisk)) {
11639                 evix = ewix;
11640                 ewix = 0;
11641                 asterisk = FALSE;
11642             }
11643             vectorize = TRUE;
11644             goto tryasterisk;
11645         }
11646
11647         if (!asterisk)
11648         {
11649             if( *q == '0' )
11650                 fill = *q++;
11651             width = expect_number(&q);
11652         }
11653
11654         if (vectorize && vectorarg) {
11655             /* vectorizing, but not with the default "." */
11656             if (args)
11657                 vecsv = va_arg(*args, SV*);
11658             else if (evix) {
11659                 FETCH_VCATPVFN_ARGUMENT(
11660                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11661             } else {
11662                 FETCH_VCATPVFN_ARGUMENT(
11663                     vecsv, svix < svmax, svargs[svix++]);
11664             }
11665             dotstr = SvPV_const(vecsv, dotstrlen);
11666             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11667                bad with tied or overloaded values that return UTF8.  */
11668             if (DO_UTF8(vecsv))
11669                 is_utf8 = TRUE;
11670             else if (has_utf8) {
11671                 vecsv = sv_mortalcopy(vecsv);
11672                 sv_utf8_upgrade(vecsv);
11673                 dotstr = SvPV_const(vecsv, dotstrlen);
11674                 is_utf8 = TRUE;
11675             }               
11676         }
11677
11678         if (asterisk) {
11679             if (args)
11680                 i = va_arg(*args, int);
11681             else
11682                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11683                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11684             left |= (i < 0);
11685             width = (i < 0) ? -i : i;
11686         }
11687       gotwidth:
11688
11689         /* PRECISION */
11690
11691         if (*q == '.') {
11692             q++;
11693             if (*q == '*') {
11694                 q++;
11695                 if ( (epix = expect_number(&q)) ) {
11696                     if (*q++ == '$') {
11697                         if (args)
11698                             Perl_croak_nocontext(
11699                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11700                         used_explicit_ix = TRUE;
11701                     } else
11702                         goto unknown;
11703                 }
11704                 if (args)
11705                     i = va_arg(*args, int);
11706                 else {
11707                     SV *precsv;
11708                     if (epix)
11709                         FETCH_VCATPVFN_ARGUMENT(
11710                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11711                     else
11712                         FETCH_VCATPVFN_ARGUMENT(
11713                             precsv, svix < svmax, svargs[svix++]);
11714                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11715                 }
11716                 precis = i;
11717                 has_precis = !(i < 0);
11718             }
11719             else {
11720                 precis = 0;
11721                 while (isDIGIT(*q))
11722                     precis = precis * 10 + (*q++ - '0');
11723                 has_precis = TRUE;
11724             }
11725         }
11726
11727         if (vectorize) {
11728             if (args) {
11729                 VECTORIZE_ARGS
11730             }
11731             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11732                 vecsv = svargs[efix ? efix-1 : svix++];
11733                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11734                 vec_utf8 = DO_UTF8(vecsv);
11735
11736                 /* if this is a version object, we need to convert
11737                  * back into v-string notation and then let the
11738                  * vectorize happen normally
11739                  */
11740                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11741                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11742                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11743                         "vector argument not supported with alpha versions");
11744                         goto vdblank;
11745                     }
11746                     vecsv = sv_newmortal();
11747                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11748                                  vecsv);
11749                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11750                     vec_utf8 = DO_UTF8(vecsv);
11751                 }
11752             }
11753             else {
11754               vdblank:
11755                 vecstr = (U8*)"";
11756                 veclen = 0;
11757             }
11758         }
11759
11760         /* SIZE */
11761
11762         switch (*q) {
11763 #ifdef WIN32
11764         case 'I':                       /* Ix, I32x, and I64x */
11765 #  ifdef USE_64_BIT_INT
11766             if (q[1] == '6' && q[2] == '4') {
11767                 q += 3;
11768                 intsize = 'q';
11769                 break;
11770             }
11771 #  endif
11772             if (q[1] == '3' && q[2] == '2') {
11773                 q += 3;
11774                 break;
11775             }
11776 #  ifdef USE_64_BIT_INT
11777             intsize = 'q';
11778 #  endif
11779             q++;
11780             break;
11781 #endif
11782 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11783     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11784         case 'L':                       /* Ld */
11785             /* FALLTHROUGH */
11786 #  ifdef USE_QUADMATH
11787         case 'Q':
11788             /* FALLTHROUGH */
11789 #  endif
11790 #  if IVSIZE >= 8
11791         case 'q':                       /* qd */
11792 #  endif
11793             intsize = 'q';
11794             q++;
11795             break;
11796 #endif
11797         case 'l':
11798             ++q;
11799 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11800     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11801             if (*q == 'l') {    /* lld, llf */
11802                 intsize = 'q';
11803                 ++q;
11804             }
11805             else
11806 #endif
11807                 intsize = 'l';
11808             break;
11809         case 'h':
11810             if (*++q == 'h') {  /* hhd, hhu */
11811                 intsize = 'c';
11812                 ++q;
11813             }
11814             else
11815                 intsize = 'h';
11816             break;
11817         case 'V':
11818         case 'z':
11819         case 't':
11820 #ifdef I_STDINT
11821         case 'j':
11822 #endif
11823             intsize = *q++;
11824             break;
11825         }
11826
11827         /* CONVERSION */
11828
11829         if (*q == '%') {
11830             eptr = q++;
11831             elen = 1;
11832             if (vectorize) {
11833                 c = '%';
11834                 goto unknown;
11835             }
11836             goto string;
11837         }
11838
11839         if (!vectorize && !args) {
11840             if (efix) {
11841                 const I32 i = efix-1;
11842                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11843             } else {
11844                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11845                                         svargs[svix++]);
11846             }
11847         }
11848
11849         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11850             /* XXX va_arg(*args) case? need peek, use va_copy? */
11851             SvGETMAGIC(argsv);
11852             if (UNLIKELY(SvAMAGIC(argsv)))
11853                 argsv = sv_2num(argsv);
11854             infnan = UNLIKELY(isinfnansv(argsv));
11855         }
11856
11857         switch (c = *q++) {
11858
11859             /* STRINGS */
11860
11861         case 'c':
11862             if (vectorize)
11863                 goto unknown;
11864             if (infnan)
11865                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11866                            /* no va_arg() case */
11867                            SvNV_nomg(argsv), (int)c);
11868             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11869             if ((uv > 255 ||
11870                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11871                 && !IN_BYTES) {
11872                 eptr = (char*)utf8buf;
11873                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11874                 is_utf8 = TRUE;
11875             }
11876             else {
11877                 c = (char)uv;
11878                 eptr = &c;
11879                 elen = 1;
11880             }
11881             goto string;
11882
11883         case 's':
11884             if (vectorize)
11885                 goto unknown;
11886             if (args) {
11887                 eptr = va_arg(*args, char*);
11888                 if (eptr)
11889                     elen = strlen(eptr);
11890                 else {
11891                     eptr = (char *)nullstr;
11892                     elen = sizeof nullstr - 1;
11893                 }
11894             }
11895             else {
11896                 eptr = SvPV_const(argsv, elen);
11897                 if (DO_UTF8(argsv)) {
11898                     STRLEN old_precis = precis;
11899                     if (has_precis && precis < elen) {
11900                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11901                         STRLEN p = precis > ulen ? ulen : precis;
11902                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11903                                                         /* sticks at end */
11904                     }
11905                     if (width) { /* fudge width (can't fudge elen) */
11906                         if (has_precis && precis < elen)
11907                             width += precis - old_precis;
11908                         else
11909                             width +=
11910                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11911                     }
11912                     is_utf8 = TRUE;
11913                 }
11914             }
11915
11916         string:
11917             if (has_precis && precis < elen)
11918                 elen = precis;
11919             break;
11920
11921             /* INTEGERS */
11922
11923         case 'p':
11924             if (infnan) {
11925                 goto floating_point;
11926             }
11927             if (alt || vectorize)
11928                 goto unknown;
11929             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11930             base = 16;
11931             goto integer;
11932
11933         case 'D':
11934 #ifdef IV_IS_QUAD
11935             intsize = 'q';
11936 #else
11937             intsize = 'l';
11938 #endif
11939             /* FALLTHROUGH */
11940         case 'd':
11941         case 'i':
11942             if (infnan) {
11943                 goto floating_point;
11944             }
11945             if (vectorize) {
11946                 STRLEN ulen;
11947                 if (!veclen)
11948                     goto donevalidconversion;
11949                 if (vec_utf8)
11950                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11951                                         UTF8_ALLOW_ANYUV);
11952                 else {
11953                     uv = *vecstr;
11954                     ulen = 1;
11955                 }
11956                 vecstr += ulen;
11957                 veclen -= ulen;
11958                 if (plus)
11959                      esignbuf[esignlen++] = plus;
11960             }
11961             else if (args) {
11962                 switch (intsize) {
11963                 case 'c':       iv = (char)va_arg(*args, int); break;
11964                 case 'h':       iv = (short)va_arg(*args, int); break;
11965                 case 'l':       iv = va_arg(*args, long); break;
11966                 case 'V':       iv = va_arg(*args, IV); break;
11967                 case 'z':       iv = va_arg(*args, SSize_t); break;
11968 #ifdef HAS_PTRDIFF_T
11969                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11970 #endif
11971                 default:        iv = va_arg(*args, int); break;
11972 #ifdef I_STDINT
11973                 case 'j':       iv = va_arg(*args, intmax_t); break;
11974 #endif
11975                 case 'q':
11976 #if IVSIZE >= 8
11977                                 iv = va_arg(*args, Quad_t); break;
11978 #else
11979                                 goto unknown;
11980 #endif
11981                 }
11982             }
11983             else {
11984                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11985                 switch (intsize) {
11986                 case 'c':       iv = (char)tiv; break;
11987                 case 'h':       iv = (short)tiv; break;
11988                 case 'l':       iv = (long)tiv; break;
11989                 case 'V':
11990                 default:        iv = tiv; break;
11991                 case 'q':
11992 #if IVSIZE >= 8
11993                                 iv = (Quad_t)tiv; break;
11994 #else
11995                                 goto unknown;
11996 #endif
11997                 }
11998             }
11999             if ( !vectorize )   /* we already set uv above */
12000             {
12001                 if (iv >= 0) {
12002                     uv = iv;
12003                     if (plus)
12004                         esignbuf[esignlen++] = plus;
12005                 }
12006                 else {
12007                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12008                     esignbuf[esignlen++] = '-';
12009                 }
12010             }
12011             base = 10;
12012             goto integer;
12013
12014         case 'U':
12015 #ifdef IV_IS_QUAD
12016             intsize = 'q';
12017 #else
12018             intsize = 'l';
12019 #endif
12020             /* FALLTHROUGH */
12021         case 'u':
12022             base = 10;
12023             goto uns_integer;
12024
12025         case 'B':
12026         case 'b':
12027             base = 2;
12028             goto uns_integer;
12029
12030         case 'O':
12031 #ifdef IV_IS_QUAD
12032             intsize = 'q';
12033 #else
12034             intsize = 'l';
12035 #endif
12036             /* FALLTHROUGH */
12037         case 'o':
12038             base = 8;
12039             goto uns_integer;
12040
12041         case 'X':
12042         case 'x':
12043             base = 16;
12044
12045         uns_integer:
12046             if (infnan) {
12047                 goto floating_point;
12048             }
12049             if (vectorize) {
12050                 STRLEN ulen;
12051         vector:
12052                 if (!veclen)
12053                     goto donevalidconversion;
12054                 if (vec_utf8)
12055                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12056                                         UTF8_ALLOW_ANYUV);
12057                 else {
12058                     uv = *vecstr;
12059                     ulen = 1;
12060                 }
12061                 vecstr += ulen;
12062                 veclen -= ulen;
12063             }
12064             else if (args) {
12065                 switch (intsize) {
12066                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12067                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12068                 case 'l':  uv = va_arg(*args, unsigned long); break;
12069                 case 'V':  uv = va_arg(*args, UV); break;
12070                 case 'z':  uv = va_arg(*args, Size_t); break;
12071 #ifdef HAS_PTRDIFF_T
12072                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12073 #endif
12074 #ifdef I_STDINT
12075                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12076 #endif
12077                 default:   uv = va_arg(*args, unsigned); break;
12078                 case 'q':
12079 #if IVSIZE >= 8
12080                            uv = va_arg(*args, Uquad_t); break;
12081 #else
12082                            goto unknown;
12083 #endif
12084                 }
12085             }
12086             else {
12087                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12088                 switch (intsize) {
12089                 case 'c':       uv = (unsigned char)tuv; break;
12090                 case 'h':       uv = (unsigned short)tuv; break;
12091                 case 'l':       uv = (unsigned long)tuv; break;
12092                 case 'V':
12093                 default:        uv = tuv; break;
12094                 case 'q':
12095 #if IVSIZE >= 8
12096                                 uv = (Uquad_t)tuv; break;
12097 #else
12098                                 goto unknown;
12099 #endif
12100                 }
12101             }
12102
12103         integer:
12104             {
12105                 char *ptr = ebuf + sizeof ebuf;
12106                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12107                 unsigned dig;
12108                 zeros = 0;
12109
12110                 switch (base) {
12111                 case 16:
12112                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12113                     do {
12114                         dig = uv & 15;
12115                         *--ptr = p[dig];
12116                     } while (uv >>= 4);
12117                     if (tempalt) {
12118                         esignbuf[esignlen++] = '0';
12119                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12120                     }
12121                     break;
12122                 case 8:
12123                     do {
12124                         dig = uv & 7;
12125                         *--ptr = '0' + dig;
12126                     } while (uv >>= 3);
12127                     if (alt && *ptr != '0')
12128                         *--ptr = '0';
12129                     break;
12130                 case 2:
12131                     do {
12132                         dig = uv & 1;
12133                         *--ptr = '0' + dig;
12134                     } while (uv >>= 1);
12135                     if (tempalt) {
12136                         esignbuf[esignlen++] = '0';
12137                         esignbuf[esignlen++] = c;
12138                     }
12139                     break;
12140                 default:                /* it had better be ten or less */
12141                     do {
12142                         dig = uv % base;
12143                         *--ptr = '0' + dig;
12144                     } while (uv /= base);
12145                     break;
12146                 }
12147                 elen = (ebuf + sizeof ebuf) - ptr;
12148                 eptr = ptr;
12149                 if (has_precis) {
12150                     if (precis > elen)
12151                         zeros = precis - elen;
12152                     else if (precis == 0 && elen == 1 && *eptr == '0'
12153                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12154                         elen = 0;
12155
12156                 /* a precision nullifies the 0 flag. */
12157                     if (fill == '0')
12158                         fill = ' ';
12159                 }
12160             }
12161             break;
12162
12163             /* FLOATING POINT */
12164
12165         floating_point:
12166
12167         case 'F':
12168             c = 'f';            /* maybe %F isn't supported here */
12169             /* FALLTHROUGH */
12170         case 'e': case 'E':
12171         case 'f':
12172         case 'g': case 'G':
12173         case 'a': case 'A':
12174             if (vectorize)
12175                 goto unknown;
12176
12177             /* This is evil, but floating point is even more evil */
12178
12179             /* for SV-style calling, we can only get NV
12180                for C-style calling, we assume %f is double;
12181                for simplicity we allow any of %Lf, %llf, %qf for long double
12182             */
12183             switch (intsize) {
12184             case 'V':
12185 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12186                 intsize = 'q';
12187 #endif
12188                 break;
12189 /* [perl #20339] - we should accept and ignore %lf rather than die */
12190             case 'l':
12191                 /* FALLTHROUGH */
12192             default:
12193 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12194                 intsize = args ? 0 : 'q';
12195 #endif
12196                 break;
12197             case 'q':
12198 #if defined(HAS_LONG_DOUBLE)
12199                 break;
12200 #else
12201                 /* FALLTHROUGH */
12202 #endif
12203             case 'c':
12204             case 'h':
12205             case 'z':
12206             case 't':
12207             case 'j':
12208                 goto unknown;
12209             }
12210
12211             /* Now we need (long double) if intsize == 'q', else (double). */
12212             if (args) {
12213                 /* Note: do not pull NVs off the va_list with va_arg()
12214                  * (pull doubles instead) because if you have a build
12215                  * with long doubles, you would always be pulling long
12216                  * doubles, which would badly break anyone using only
12217                  * doubles (i.e. the majority of builds). In other
12218                  * words, you cannot mix doubles and long doubles.
12219                  * The only case where you can pull off long doubles
12220                  * is when the format specifier explicitly asks so with
12221                  * e.g. "%Lg". */
12222 #ifdef USE_QUADMATH
12223                 fv = intsize == 'q' ?
12224                     va_arg(*args, NV) : va_arg(*args, double);
12225                 nv = fv;
12226 #elif LONG_DOUBLESIZE > DOUBLESIZE
12227                 if (intsize == 'q') {
12228                     fv = va_arg(*args, long double);
12229                     nv = fv;
12230                 } else {
12231                     nv = va_arg(*args, double);
12232                     NV_TO_FV(nv, fv);
12233                 }
12234 #else
12235                 nv = va_arg(*args, double);
12236                 fv = nv;
12237 #endif
12238             }
12239             else
12240             {
12241                 if (!infnan) SvGETMAGIC(argsv);
12242                 nv = SvNV_nomg(argsv);
12243                 NV_TO_FV(nv, fv);
12244             }
12245
12246             need = 0;
12247             /* frexp() (or frexpl) has some unspecified behaviour for
12248              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12249             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12250                 i = PERL_INT_MIN;
12251                 (void)Perl_frexp((NV)fv, &i);
12252                 if (i == PERL_INT_MIN)
12253                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12254                 /* Do not set hexfp earlier since we want to printf
12255                  * Inf/NaN for Inf/NaN, not their hexfp. */
12256                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12257                 if (UNLIKELY(hexfp)) {
12258                     /* This seriously overshoots in most cases, but
12259                      * better the undershooting.  Firstly, all bytes
12260                      * of the NV are not mantissa, some of them are
12261                      * exponent.  Secondly, for the reasonably common
12262                      * long doubles case, the "80-bit extended", two
12263                      * or six bytes of the NV are unused. */
12264                     need +=
12265                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12266                         2 + /* "0x" */
12267                         1 + /* the very unlikely carry */
12268                         1 + /* "1" */
12269                         1 + /* "." */
12270                         2 * NVSIZE + /* 2 hexdigits for each byte */
12271                         2 + /* "p+" */
12272                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12273                         1;   /* \0 */
12274 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12275                     /* However, for the "double double", we need more.
12276                      * Since each double has their own exponent, the
12277                      * doubles may float (haha) rather far from each
12278                      * other, and the number of required bits is much
12279                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12280                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12281                      *
12282                      * Need 2 hexdigits for each byte. */
12283                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12284                     /* the size for the exponent already added */
12285 #endif
12286 #ifdef USE_LOCALE_NUMERIC
12287                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12288                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12289                             need += SvLEN(PL_numeric_radix_sv);
12290                         RESTORE_LC_NUMERIC();
12291 #endif
12292                 }
12293                 else if (i > 0) {
12294                     need = BIT_DIGITS(i);
12295                 } /* if i < 0, the number of digits is hard to predict. */
12296             }
12297             need += has_precis ? precis : 6; /* known default */
12298
12299             if (need < width)
12300                 need = width;
12301
12302 #ifdef HAS_LDBL_SPRINTF_BUG
12303             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12304                with sfio - Allen <allens@cpan.org> */
12305
12306 #  ifdef DBL_MAX
12307 #    define MY_DBL_MAX DBL_MAX
12308 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12309 #    if DOUBLESIZE >= 8
12310 #      define MY_DBL_MAX 1.7976931348623157E+308L
12311 #    else
12312 #      define MY_DBL_MAX 3.40282347E+38L
12313 #    endif
12314 #  endif
12315
12316 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12317 #    define MY_DBL_MAX_BUG 1L
12318 #  else
12319 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12320 #  endif
12321
12322 #  ifdef DBL_MIN
12323 #    define MY_DBL_MIN DBL_MIN
12324 #  else  /* XXX guessing! -Allen */
12325 #    if DOUBLESIZE >= 8
12326 #      define MY_DBL_MIN 2.2250738585072014E-308L
12327 #    else
12328 #      define MY_DBL_MIN 1.17549435E-38L
12329 #    endif
12330 #  endif
12331
12332             if ((intsize == 'q') && (c == 'f') &&
12333                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12334                 (need < DBL_DIG)) {
12335                 /* it's going to be short enough that
12336                  * long double precision is not needed */
12337
12338                 if ((fv <= 0L) && (fv >= -0L))
12339                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12340                 else {
12341                     /* would use Perl_fp_class as a double-check but not
12342                      * functional on IRIX - see perl.h comments */
12343
12344                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12345                         /* It's within the range that a double can represent */
12346 #if defined(DBL_MAX) && !defined(DBL_MIN)
12347                         if ((fv >= ((long double)1/DBL_MAX)) ||
12348                             (fv <= (-(long double)1/DBL_MAX)))
12349 #endif
12350                         fix_ldbl_sprintf_bug = TRUE;
12351                     }
12352                 }
12353                 if (fix_ldbl_sprintf_bug == TRUE) {
12354                     double temp;
12355
12356                     intsize = 0;
12357                     temp = (double)fv;
12358                     fv = (NV)temp;
12359                 }
12360             }
12361
12362 #  undef MY_DBL_MAX
12363 #  undef MY_DBL_MAX_BUG
12364 #  undef MY_DBL_MIN
12365
12366 #endif /* HAS_LDBL_SPRINTF_BUG */
12367
12368             need += 20; /* fudge factor */
12369             if (PL_efloatsize < need) {
12370                 Safefree(PL_efloatbuf);
12371                 PL_efloatsize = need + 20; /* more fudge */
12372                 Newx(PL_efloatbuf, PL_efloatsize, char);
12373                 PL_efloatbuf[0] = '\0';
12374             }
12375
12376             if ( !(width || left || plus || alt) && fill != '0'
12377                  && has_precis && intsize != 'q'        /* Shortcuts */
12378                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12379                 /* See earlier comment about buggy Gconvert when digits,
12380                    aka precis is 0  */
12381                 if ( c == 'g' && precis ) {
12382                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12383                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12384                     /* May return an empty string for digits==0 */
12385                     if (*PL_efloatbuf) {
12386                         elen = strlen(PL_efloatbuf);
12387                         goto float_converted;
12388                     }
12389                 } else if ( c == 'f' && !precis ) {
12390                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12391                         break;
12392                 }
12393             }
12394
12395             if (UNLIKELY(hexfp)) {
12396                 /* Hexadecimal floating point. */
12397                 char* p = PL_efloatbuf;
12398                 U8 vhex[VHEX_SIZE];
12399                 U8* v = vhex; /* working pointer to vhex */
12400                 U8* vend; /* pointer to one beyond last digit of vhex */
12401                 U8* vfnz = NULL; /* first non-zero */
12402                 U8* vlnz = NULL; /* last non-zero */
12403                 const bool lower = (c == 'a');
12404                 /* At output the values of vhex (up to vend) will
12405                  * be mapped through the xdig to get the actual
12406                  * human-readable xdigits. */
12407                 const char* xdig = PL_hexdigit;
12408                 int zerotail = 0; /* how many extra zeros to append */
12409                 int exponent = 0; /* exponent of the floating point input */
12410                 bool hexradix = FALSE; /* should we output the radix */
12411
12412                 /* XXX: denormals, NaN, Inf.
12413                  *
12414                  * For example with denormals, (assuming the vanilla
12415                  * 64-bit double): the exponent is zero. 1xp-1074 is
12416                  * the smallest denormal and the smallest double, it
12417                  * should be output as 0x0.0000000000001p-1022 to
12418                  * match its internal structure. */
12419
12420                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12421                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12422
12423 #if NVSIZE > DOUBLESIZE
12424 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12425                 /* In this case there is an implicit bit,
12426                  * and therefore the exponent is shifted shift by one. */
12427                 exponent--;
12428 #  else
12429                 /* In this case there is no implicit bit,
12430                  * and the exponent is shifted by the first xdigit. */
12431                 exponent -= 4;
12432 #  endif
12433 #endif
12434
12435                 if (fv < 0
12436                     || Perl_signbit(nv)
12437                   )
12438                     *p++ = '-';
12439                 else if (plus)
12440                     *p++ = plus;
12441                 *p++ = '0';
12442                 if (lower) {
12443                     *p++ = 'x';
12444                 }
12445                 else {
12446                     *p++ = 'X';
12447                     xdig += 16; /* Use uppercase hex. */
12448                 }
12449
12450                 /* Find the first non-zero xdigit. */
12451                 for (v = vhex; v < vend; v++) {
12452                     if (*v) {
12453                         vfnz = v;
12454                         break;
12455                     }
12456                 }
12457
12458                 if (vfnz) {
12459                     /* Find the last non-zero xdigit. */
12460                     for (v = vend - 1; v >= vhex; v--) {
12461                         if (*v) {
12462                             vlnz = v;
12463                             break;
12464                         }
12465                     }
12466
12467 #if NVSIZE == DOUBLESIZE
12468                     if (fv != 0.0)
12469                         exponent--;
12470 #endif
12471
12472                     if (precis > 0) {
12473                         if ((SSize_t)(precis + 1) < vend - vhex) {
12474                             bool round;
12475
12476                             v = vhex + precis + 1;
12477                             /* Round away from zero: if the tail
12478                              * beyond the precis xdigits is equal to
12479                              * or greater than 0x8000... */
12480                             round = *v > 0x8;
12481                             if (!round && *v == 0x8) {
12482                                 for (v++; v < vend; v++) {
12483                                     if (*v) {
12484                                         round = TRUE;
12485                                         break;
12486                                     }
12487                                 }
12488                             }
12489                             if (round) {
12490                                 for (v = vhex + precis; v >= vhex; v--) {
12491                                     if (*v < 0xF) {
12492                                         (*v)++;
12493                                         break;
12494                                     }
12495                                     *v = 0;
12496                                     if (v == vhex) {
12497                                         /* If the carry goes all the way to
12498                                          * the front, we need to output
12499                                          * a single '1'. This goes against
12500                                          * the "xdigit and then radix"
12501                                          * but since this is "cannot happen"
12502                                          * category, that is probably good. */
12503                                         *p++ = xdig[1];
12504                                     }
12505                                 }
12506                             }
12507                             /* The new effective "last non zero". */
12508                             vlnz = vhex + precis;
12509                         }
12510                         else {
12511                             zerotail = precis - (vlnz - vhex);
12512                         }
12513                     }
12514
12515                     v = vhex;
12516                     *p++ = xdig[*v++];
12517
12518                     /* If there are non-zero xdigits, the radix
12519                      * is output after the first one. */
12520                     if (vfnz < vlnz) {
12521                       hexradix = TRUE;
12522                     }
12523                 }
12524                 else {
12525                     *p++ = '0';
12526                     exponent = 0;
12527                     zerotail = precis;
12528                 }
12529
12530                 /* The radix is always output if precis, or if alt. */
12531                 if (precis > 0 || alt) {
12532                   hexradix = TRUE;
12533                 }
12534
12535                 if (hexradix) {
12536 #ifndef USE_LOCALE_NUMERIC
12537                         *p++ = '.';
12538 #else
12539                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12540                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12541                             STRLEN n;
12542                             const char* r = SvPV(PL_numeric_radix_sv, n);
12543                             Copy(r, p, n, char);
12544                             p += n;
12545                         }
12546                         else {
12547                             *p++ = '.';
12548                         }
12549                         RESTORE_LC_NUMERIC();
12550 #endif
12551                 }
12552
12553                 if (vlnz) {
12554                     while (v <= vlnz)
12555                         *p++ = xdig[*v++];
12556                 }
12557
12558                 if (zerotail > 0) {
12559                   while (zerotail--) {
12560                     *p++ = '0';
12561                   }
12562                 }
12563
12564                 elen = p - PL_efloatbuf;
12565                 elen += my_snprintf(p, PL_efloatsize - elen,
12566                                     "%c%+d", lower ? 'p' : 'P',
12567                                     exponent);
12568
12569                 if (elen < width) {
12570                     if (left) {
12571                         /* Pad the back with spaces. */
12572                         memset(PL_efloatbuf + elen, ' ', width - elen);
12573                     }
12574                     else if (fill == '0') {
12575                         /* Insert the zeros between the "0x" and
12576                          * the digits, otherwise we end up with
12577                          * "0000xHHH..." */
12578                         STRLEN nzero = width - elen;
12579                         char* zerox = PL_efloatbuf + 2;
12580                         Move(zerox, zerox + nzero,  elen - 2, char);
12581                         memset(zerox, fill, nzero);
12582                     }
12583                     else {
12584                         /* Move it to the right. */
12585                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12586                              elen, char);
12587                         /* Pad the front with spaces. */
12588                         memset(PL_efloatbuf, ' ', width - elen);
12589                     }
12590                     elen = width;
12591                 }
12592             }
12593             else {
12594                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12595                 if (elen) {
12596                     /* Not affecting infnan output: precision, alt, fill. */
12597                     if (elen < width) {
12598                         if (left) {
12599                             /* Pack the back with spaces. */
12600                             memset(PL_efloatbuf + elen, ' ', width - elen);
12601                         } else {
12602                             /* Move it to the right. */
12603                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12604                                  elen, char);
12605                             /* Pad the front with spaces. */
12606                             memset(PL_efloatbuf, ' ', width - elen);
12607                         }
12608                         elen = width;
12609                     }
12610                 }
12611             }
12612
12613             if (elen == 0) {
12614                 char *ptr = ebuf + sizeof ebuf;
12615                 *--ptr = '\0';
12616                 *--ptr = c;
12617 #if defined(USE_QUADMATH)
12618                 if (intsize == 'q') {
12619                     /* "g" -> "Qg" */
12620                     *--ptr = 'Q';
12621                 }
12622                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12623 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12624                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12625                  * not USE_LONG_DOUBLE and NVff.  In other words,
12626                  * this needs to work without USE_LONG_DOUBLE. */
12627                 if (intsize == 'q') {
12628                     /* Copy the one or more characters in a long double
12629                      * format before the 'base' ([efgEFG]) character to
12630                      * the format string. */
12631                     static char const ldblf[] = PERL_PRIfldbl;
12632                     char const *p = ldblf + sizeof(ldblf) - 3;
12633                     while (p >= ldblf) { *--ptr = *p--; }
12634                 }
12635 #endif
12636                 if (has_precis) {
12637                     base = precis;
12638                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12639                     *--ptr = '.';
12640                 }
12641                 if (width) {
12642                     base = width;
12643                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12644                 }
12645                 if (fill == '0')
12646                     *--ptr = fill;
12647                 if (left)
12648                     *--ptr = '-';
12649                 if (plus)
12650                     *--ptr = plus;
12651                 if (alt)
12652                     *--ptr = '#';
12653                 *--ptr = '%';
12654
12655                 /* No taint.  Otherwise we are in the strange situation
12656                  * where printf() taints but print($float) doesn't.
12657                  * --jhi */
12658
12659                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12660
12661                 /* hopefully the above makes ptr a very constrained format
12662                  * that is safe to use, even though it's not literal */
12663                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12664 #ifdef USE_QUADMATH
12665                 {
12666                     const char* qfmt = quadmath_format_single(ptr);
12667                     if (!qfmt)
12668                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12669                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12670                                              qfmt, nv);
12671                     if ((IV)elen == -1)
12672                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12673                     if (qfmt != ptr)
12674                         Safefree(qfmt);
12675                 }
12676 #elif defined(HAS_LONG_DOUBLE)
12677                 elen = ((intsize == 'q')
12678                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12679                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12680 #else
12681                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12682 #endif
12683                 GCC_DIAG_RESTORE;
12684             }
12685
12686         float_converted:
12687             eptr = PL_efloatbuf;
12688             assert((IV)elen > 0); /* here zero elen is bad */
12689
12690 #ifdef USE_LOCALE_NUMERIC
12691             /* If the decimal point character in the string is UTF-8, make the
12692              * output utf8 */
12693             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12694                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12695             {
12696                 is_utf8 = TRUE;
12697             }
12698 #endif
12699
12700             break;
12701
12702             /* SPECIAL */
12703
12704         case 'n':
12705             if (vectorize)
12706                 goto unknown;
12707             i = SvCUR(sv) - origlen;
12708             if (args) {
12709                 switch (intsize) {
12710                 case 'c':       *(va_arg(*args, char*)) = i; break;
12711                 case 'h':       *(va_arg(*args, short*)) = i; break;
12712                 default:        *(va_arg(*args, int*)) = i; break;
12713                 case 'l':       *(va_arg(*args, long*)) = i; break;
12714                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12715                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12716 #ifdef HAS_PTRDIFF_T
12717                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12718 #endif
12719 #ifdef I_STDINT
12720                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12721 #endif
12722                 case 'q':
12723 #if IVSIZE >= 8
12724                                 *(va_arg(*args, Quad_t*)) = i; break;
12725 #else
12726                                 goto unknown;
12727 #endif
12728                 }
12729             }
12730             else
12731                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12732             goto donevalidconversion;
12733
12734             /* UNKNOWN */
12735
12736         default:
12737       unknown:
12738             if (!args
12739                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12740                 && ckWARN(WARN_PRINTF))
12741             {
12742                 SV * const msg = sv_newmortal();
12743                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12744                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12745                 if (fmtstart < patend) {
12746                     const char * const fmtend = q < patend ? q : patend;
12747                     const char * f;
12748                     sv_catpvs(msg, "\"%");
12749                     for (f = fmtstart; f < fmtend; f++) {
12750                         if (isPRINT(*f)) {
12751                             sv_catpvn_nomg(msg, f, 1);
12752                         } else {
12753                             Perl_sv_catpvf(aTHX_ msg,
12754                                            "\\%03"UVof, (UV)*f & 0xFF);
12755                         }
12756                     }
12757                     sv_catpvs(msg, "\"");
12758                 } else {
12759                     sv_catpvs(msg, "end of string");
12760                 }
12761                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12762             }
12763
12764             /* output mangled stuff ... */
12765             if (c == '\0')
12766                 --q;
12767             eptr = p;
12768             elen = q - p;
12769
12770             /* ... right here, because formatting flags should not apply */
12771             SvGROW(sv, SvCUR(sv) + elen + 1);
12772             p = SvEND(sv);
12773             Copy(eptr, p, elen, char);
12774             p += elen;
12775             *p = '\0';
12776             SvCUR_set(sv, p - SvPVX_const(sv));
12777             svix = osvix;
12778             continue;   /* not "break" */
12779         }
12780
12781         if (is_utf8 != has_utf8) {
12782             if (is_utf8) {
12783                 if (SvCUR(sv))
12784                     sv_utf8_upgrade(sv);
12785             }
12786             else {
12787                 const STRLEN old_elen = elen;
12788                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12789                 sv_utf8_upgrade(nsv);
12790                 eptr = SvPVX_const(nsv);
12791                 elen = SvCUR(nsv);
12792
12793                 if (width) { /* fudge width (can't fudge elen) */
12794                     width += elen - old_elen;
12795                 }
12796                 is_utf8 = TRUE;
12797             }
12798         }
12799
12800         /* signed value that's wrapped? */
12801         assert(elen  <= ((~(STRLEN)0) >> 1));
12802         have = esignlen + zeros + elen;
12803         if (have < zeros)
12804             croak_memory_wrap();
12805
12806         need = (have > width ? have : width);
12807         gap = need - have;
12808
12809         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12810             croak_memory_wrap();
12811         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12812         p = SvEND(sv);
12813         if (esignlen && fill == '0') {
12814             int i;
12815             for (i = 0; i < (int)esignlen; i++)
12816                 *p++ = esignbuf[i];
12817         }
12818         if (gap && !left) {
12819             memset(p, fill, gap);
12820             p += gap;
12821         }
12822         if (esignlen && fill != '0') {
12823             int i;
12824             for (i = 0; i < (int)esignlen; i++)
12825                 *p++ = esignbuf[i];
12826         }
12827         if (zeros) {
12828             int i;
12829             for (i = zeros; i; i--)
12830                 *p++ = '0';
12831         }
12832         if (elen) {
12833             Copy(eptr, p, elen, char);
12834             p += elen;
12835         }
12836         if (gap && left) {
12837             memset(p, ' ', gap);
12838             p += gap;
12839         }
12840         if (vectorize) {
12841             if (veclen) {
12842                 Copy(dotstr, p, dotstrlen, char);
12843                 p += dotstrlen;
12844             }
12845             else
12846                 vectorize = FALSE;              /* done iterating over vecstr */
12847         }
12848         if (is_utf8)
12849             has_utf8 = TRUE;
12850         if (has_utf8)
12851             SvUTF8_on(sv);
12852         *p = '\0';
12853         SvCUR_set(sv, p - SvPVX_const(sv));
12854         if (vectorize) {
12855             esignlen = 0;
12856             goto vector;
12857         }
12858
12859       donevalidconversion:
12860         if (used_explicit_ix)
12861             no_redundant_warning = TRUE;
12862         if (arg_missing)
12863             S_warn_vcatpvfn_missing_argument(aTHX);
12864     }
12865
12866     /* Now that we've consumed all our printf format arguments (svix)
12867      * do we have things left on the stack that we didn't use?
12868      */
12869     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12870         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12871                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12872     }
12873
12874     SvTAINT(sv);
12875
12876     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12877                                each iteration. */
12878 }
12879
12880 /* =========================================================================
12881
12882 =head1 Cloning an interpreter
12883
12884 =cut
12885
12886 All the macros and functions in this section are for the private use of
12887 the main function, perl_clone().
12888
12889 The foo_dup() functions make an exact copy of an existing foo thingy.
12890 During the course of a cloning, a hash table is used to map old addresses
12891 to new addresses.  The table is created and manipulated with the
12892 ptr_table_* functions.
12893
12894  * =========================================================================*/
12895
12896
12897 #if defined(USE_ITHREADS)
12898
12899 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12900 #ifndef GpREFCNT_inc
12901 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12902 #endif
12903
12904
12905 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12906    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12907    If this changes, please unmerge ss_dup.
12908    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12909 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12910 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12911 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12912 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12913 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12914 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12915 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12916 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12917 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12918 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12919 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12920 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12921 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12922
12923 /* clone a parser */
12924
12925 yy_parser *
12926 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12927 {
12928     yy_parser *parser;
12929
12930     PERL_ARGS_ASSERT_PARSER_DUP;
12931
12932     if (!proto)
12933         return NULL;
12934
12935     /* look for it in the table first */
12936     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12937     if (parser)
12938         return parser;
12939
12940     /* create anew and remember what it is */
12941     Newxz(parser, 1, yy_parser);
12942     ptr_table_store(PL_ptr_table, proto, parser);
12943
12944     /* XXX these not yet duped */
12945     parser->old_parser = NULL;
12946     parser->stack = NULL;
12947     parser->ps = NULL;
12948     parser->stack_size = 0;
12949     /* XXX parser->stack->state = 0; */
12950
12951     /* XXX eventually, just Copy() most of the parser struct ? */
12952
12953     parser->lex_brackets = proto->lex_brackets;
12954     parser->lex_casemods = proto->lex_casemods;
12955     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12956                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12957     parser->lex_casestack = savepvn(proto->lex_casestack,
12958                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12959     parser->lex_defer   = proto->lex_defer;
12960     parser->lex_dojoin  = proto->lex_dojoin;
12961     parser->lex_formbrack = proto->lex_formbrack;
12962     parser->lex_inpat   = proto->lex_inpat;
12963     parser->lex_inwhat  = proto->lex_inwhat;
12964     parser->lex_op      = proto->lex_op;
12965     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12966     parser->lex_starts  = proto->lex_starts;
12967     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12968     parser->multi_close = proto->multi_close;
12969     parser->multi_open  = proto->multi_open;
12970     parser->multi_start = proto->multi_start;
12971     parser->multi_end   = proto->multi_end;
12972     parser->preambled   = proto->preambled;
12973     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12974     parser->linestr     = sv_dup_inc(proto->linestr, param);
12975     parser->expect      = proto->expect;
12976     parser->copline     = proto->copline;
12977     parser->last_lop_op = proto->last_lop_op;
12978     parser->lex_state   = proto->lex_state;
12979     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12980     /* rsfp_filters entries have fake IoDIRP() */
12981     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12982     parser->in_my       = proto->in_my;
12983     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12984     parser->error_count = proto->error_count;
12985
12986
12987     parser->linestr     = sv_dup_inc(proto->linestr, param);
12988
12989     {
12990         char * const ols = SvPVX(proto->linestr);
12991         char * const ls  = SvPVX(parser->linestr);
12992
12993         parser->bufptr      = ls + (proto->bufptr >= ols ?
12994                                     proto->bufptr -  ols : 0);
12995         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12996                                     proto->oldbufptr -  ols : 0);
12997         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12998                                     proto->oldoldbufptr -  ols : 0);
12999         parser->linestart   = ls + (proto->linestart >= ols ?
13000                                     proto->linestart -  ols : 0);
13001         parser->last_uni    = ls + (proto->last_uni >= ols ?
13002                                     proto->last_uni -  ols : 0);
13003         parser->last_lop    = ls + (proto->last_lop >= ols ?
13004                                     proto->last_lop -  ols : 0);
13005
13006         parser->bufend      = ls + SvCUR(parser->linestr);
13007     }
13008
13009     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13010
13011
13012     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13013     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13014     parser->nexttoke    = proto->nexttoke;
13015
13016     /* XXX should clone saved_curcop here, but we aren't passed
13017      * proto_perl; so do it in perl_clone_using instead */
13018
13019     return parser;
13020 }
13021
13022
13023 /* duplicate a file handle */
13024
13025 PerlIO *
13026 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13027 {
13028     PerlIO *ret;
13029
13030     PERL_ARGS_ASSERT_FP_DUP;
13031     PERL_UNUSED_ARG(type);
13032
13033     if (!fp)
13034         return (PerlIO*)NULL;
13035
13036     /* look for it in the table first */
13037     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13038     if (ret)
13039         return ret;
13040
13041     /* create anew and remember what it is */
13042 #ifdef __amigaos4__
13043     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13044 #else
13045     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13046 #endif
13047     ptr_table_store(PL_ptr_table, fp, ret);
13048     return ret;
13049 }
13050
13051 /* duplicate a directory handle */
13052
13053 DIR *
13054 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13055 {
13056     DIR *ret;
13057
13058 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13059     DIR *pwd;
13060     const Direntry_t *dirent;
13061     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13062     char *name = NULL;
13063     STRLEN len = 0;
13064     long pos;
13065 #endif
13066
13067     PERL_UNUSED_CONTEXT;
13068     PERL_ARGS_ASSERT_DIRP_DUP;
13069
13070     if (!dp)
13071         return (DIR*)NULL;
13072
13073     /* look for it in the table first */
13074     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13075     if (ret)
13076         return ret;
13077
13078 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13079
13080     PERL_UNUSED_ARG(param);
13081
13082     /* create anew */
13083
13084     /* open the current directory (so we can switch back) */
13085     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13086
13087     /* chdir to our dir handle and open the present working directory */
13088     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13089         PerlDir_close(pwd);
13090         return (DIR *)NULL;
13091     }
13092     /* Now we should have two dir handles pointing to the same dir. */
13093
13094     /* Be nice to the calling code and chdir back to where we were. */
13095     /* XXX If this fails, then what? */
13096     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13097
13098     /* We have no need of the pwd handle any more. */
13099     PerlDir_close(pwd);
13100
13101 #ifdef DIRNAMLEN
13102 # define d_namlen(d) (d)->d_namlen
13103 #else
13104 # define d_namlen(d) strlen((d)->d_name)
13105 #endif
13106     /* Iterate once through dp, to get the file name at the current posi-
13107        tion. Then step back. */
13108     pos = PerlDir_tell(dp);
13109     if ((dirent = PerlDir_read(dp))) {
13110         len = d_namlen(dirent);
13111         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13112             /* If the len is somehow magically longer than the
13113              * maximum length of the directory entry, even though
13114              * we could fit it in a buffer, we could not copy it
13115              * from the dirent.  Bail out. */
13116             PerlDir_close(ret);
13117             return (DIR*)NULL;
13118         }
13119         if (len <= sizeof smallbuf) name = smallbuf;
13120         else Newx(name, len, char);
13121         Move(dirent->d_name, name, len, char);
13122     }
13123     PerlDir_seek(dp, pos);
13124
13125     /* Iterate through the new dir handle, till we find a file with the
13126        right name. */
13127     if (!dirent) /* just before the end */
13128         for(;;) {
13129             pos = PerlDir_tell(ret);
13130             if (PerlDir_read(ret)) continue; /* not there yet */
13131             PerlDir_seek(ret, pos); /* step back */
13132             break;
13133         }
13134     else {
13135         const long pos0 = PerlDir_tell(ret);
13136         for(;;) {
13137             pos = PerlDir_tell(ret);
13138             if ((dirent = PerlDir_read(ret))) {
13139                 if (len == (STRLEN)d_namlen(dirent)
13140                     && memEQ(name, dirent->d_name, len)) {
13141                     /* found it */
13142                     PerlDir_seek(ret, pos); /* step back */
13143                     break;
13144                 }
13145                 /* else we are not there yet; keep iterating */
13146             }
13147             else { /* This is not meant to happen. The best we can do is
13148                       reset the iterator to the beginning. */
13149                 PerlDir_seek(ret, pos0);
13150                 break;
13151             }
13152         }
13153     }
13154 #undef d_namlen
13155
13156     if (name && name != smallbuf)
13157         Safefree(name);
13158 #endif
13159
13160 #ifdef WIN32
13161     ret = win32_dirp_dup(dp, param);
13162 #endif
13163
13164     /* pop it in the pointer table */
13165     if (ret)
13166         ptr_table_store(PL_ptr_table, dp, ret);
13167
13168     return ret;
13169 }
13170
13171 /* duplicate a typeglob */
13172
13173 GP *
13174 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13175 {
13176     GP *ret;
13177
13178     PERL_ARGS_ASSERT_GP_DUP;
13179
13180     if (!gp)
13181         return (GP*)NULL;
13182     /* look for it in the table first */
13183     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13184     if (ret)
13185         return ret;
13186
13187     /* create anew and remember what it is */
13188     Newxz(ret, 1, GP);
13189     ptr_table_store(PL_ptr_table, gp, ret);
13190
13191     /* clone */
13192     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13193        on Newxz() to do this for us.  */
13194     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13195     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13196     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13197     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13198     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13199     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13200     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13201     ret->gp_cvgen       = gp->gp_cvgen;
13202     ret->gp_line        = gp->gp_line;
13203     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13204     return ret;
13205 }
13206
13207 /* duplicate a chain of magic */
13208
13209 MAGIC *
13210 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13211 {
13212     MAGIC *mgret = NULL;
13213     MAGIC **mgprev_p = &mgret;
13214
13215     PERL_ARGS_ASSERT_MG_DUP;
13216
13217     for (; mg; mg = mg->mg_moremagic) {
13218         MAGIC *nmg;
13219
13220         if ((param->flags & CLONEf_JOIN_IN)
13221                 && mg->mg_type == PERL_MAGIC_backref)
13222             /* when joining, we let the individual SVs add themselves to
13223              * backref as needed. */
13224             continue;
13225
13226         Newx(nmg, 1, MAGIC);
13227         *mgprev_p = nmg;
13228         mgprev_p = &(nmg->mg_moremagic);
13229
13230         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13231            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13232            from the original commit adding Perl_mg_dup() - revision 4538.
13233            Similarly there is the annotation "XXX random ptr?" next to the
13234            assignment to nmg->mg_ptr.  */
13235         *nmg = *mg;
13236
13237         /* FIXME for plugins
13238         if (nmg->mg_type == PERL_MAGIC_qr) {
13239             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13240         }
13241         else
13242         */
13243         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13244                           ? nmg->mg_type == PERL_MAGIC_backref
13245                                 /* The backref AV has its reference
13246                                  * count deliberately bumped by 1 */
13247                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13248                                                     nmg->mg_obj, param))
13249                                 : sv_dup_inc(nmg->mg_obj, param)
13250                           : sv_dup(nmg->mg_obj, param);
13251
13252         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13253             if (nmg->mg_len > 0) {
13254                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13255                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13256                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13257                 {
13258                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13259                     sv_dup_inc_multiple((SV**)(namtp->table),
13260                                         (SV**)(namtp->table), NofAMmeth, param);
13261                 }
13262             }
13263             else if (nmg->mg_len == HEf_SVKEY)
13264                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13265         }
13266         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13267             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13268         }
13269     }
13270     return mgret;
13271 }
13272
13273 #endif /* USE_ITHREADS */
13274
13275 struct ptr_tbl_arena {
13276     struct ptr_tbl_arena *next;
13277     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13278 };
13279
13280 /* create a new pointer-mapping table */
13281
13282 PTR_TBL_t *
13283 Perl_ptr_table_new(pTHX)
13284 {
13285     PTR_TBL_t *tbl;
13286     PERL_UNUSED_CONTEXT;
13287
13288     Newx(tbl, 1, PTR_TBL_t);
13289     tbl->tbl_max        = 511;
13290     tbl->tbl_items      = 0;
13291     tbl->tbl_arena      = NULL;
13292     tbl->tbl_arena_next = NULL;
13293     tbl->tbl_arena_end  = NULL;
13294     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13295     return tbl;
13296 }
13297
13298 #define PTR_TABLE_HASH(ptr) \
13299   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13300
13301 /* map an existing pointer using a table */
13302
13303 STATIC PTR_TBL_ENT_t *
13304 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13305 {
13306     PTR_TBL_ENT_t *tblent;
13307     const UV hash = PTR_TABLE_HASH(sv);
13308
13309     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13310
13311     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13312     for (; tblent; tblent = tblent->next) {
13313         if (tblent->oldval == sv)
13314             return tblent;
13315     }
13316     return NULL;
13317 }
13318
13319 void *
13320 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13321 {
13322     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13323
13324     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13325     PERL_UNUSED_CONTEXT;
13326
13327     return tblent ? tblent->newval : NULL;
13328 }
13329
13330 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13331  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13332  * the core's typical use of ptr_tables in thread cloning. */
13333
13334 void
13335 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13336 {
13337     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13338
13339     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13340     PERL_UNUSED_CONTEXT;
13341
13342     if (tblent) {
13343         tblent->newval = newsv;
13344     } else {
13345         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13346
13347         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13348             struct ptr_tbl_arena *new_arena;
13349
13350             Newx(new_arena, 1, struct ptr_tbl_arena);
13351             new_arena->next = tbl->tbl_arena;
13352             tbl->tbl_arena = new_arena;
13353             tbl->tbl_arena_next = new_arena->array;
13354             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13355         }
13356
13357         tblent = tbl->tbl_arena_next++;
13358
13359         tblent->oldval = oldsv;
13360         tblent->newval = newsv;
13361         tblent->next = tbl->tbl_ary[entry];
13362         tbl->tbl_ary[entry] = tblent;
13363         tbl->tbl_items++;
13364         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13365             ptr_table_split(tbl);
13366     }
13367 }
13368
13369 /* double the hash bucket size of an existing ptr table */
13370
13371 void
13372 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13373 {
13374     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13375     const UV oldsize = tbl->tbl_max + 1;
13376     UV newsize = oldsize * 2;
13377     UV i;
13378
13379     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13380     PERL_UNUSED_CONTEXT;
13381
13382     Renew(ary, newsize, PTR_TBL_ENT_t*);
13383     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13384     tbl->tbl_max = --newsize;
13385     tbl->tbl_ary = ary;
13386     for (i=0; i < oldsize; i++, ary++) {
13387         PTR_TBL_ENT_t **entp = ary;
13388         PTR_TBL_ENT_t *ent = *ary;
13389         PTR_TBL_ENT_t **curentp;
13390         if (!ent)
13391             continue;
13392         curentp = ary + oldsize;
13393         do {
13394             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13395                 *entp = ent->next;
13396                 ent->next = *curentp;
13397                 *curentp = ent;
13398             }
13399             else
13400                 entp = &ent->next;
13401             ent = *entp;
13402         } while (ent);
13403     }
13404 }
13405
13406 /* remove all the entries from a ptr table */
13407 /* Deprecated - will be removed post 5.14 */
13408
13409 void
13410 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13411 {
13412     PERL_UNUSED_CONTEXT;
13413     if (tbl && tbl->tbl_items) {
13414         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13415
13416         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13417
13418         while (arena) {
13419             struct ptr_tbl_arena *next = arena->next;
13420
13421             Safefree(arena);
13422             arena = next;
13423         };
13424
13425         tbl->tbl_items = 0;
13426         tbl->tbl_arena = NULL;
13427         tbl->tbl_arena_next = NULL;
13428         tbl->tbl_arena_end = NULL;
13429     }
13430 }
13431
13432 /* clear and free a ptr table */
13433
13434 void
13435 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13436 {
13437     struct ptr_tbl_arena *arena;
13438
13439     PERL_UNUSED_CONTEXT;
13440
13441     if (!tbl) {
13442         return;
13443     }
13444
13445     arena = tbl->tbl_arena;
13446
13447     while (arena) {
13448         struct ptr_tbl_arena *next = arena->next;
13449
13450         Safefree(arena);
13451         arena = next;
13452     }
13453
13454     Safefree(tbl->tbl_ary);
13455     Safefree(tbl);
13456 }
13457
13458 #if defined(USE_ITHREADS)
13459
13460 void
13461 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13462 {
13463     PERL_ARGS_ASSERT_RVPV_DUP;
13464
13465     assert(!isREGEXP(sstr));
13466     if (SvROK(sstr)) {
13467         if (SvWEAKREF(sstr)) {
13468             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13469             if (param->flags & CLONEf_JOIN_IN) {
13470                 /* if joining, we add any back references individually rather
13471                  * than copying the whole backref array */
13472                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13473             }
13474         }
13475         else
13476             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13477     }
13478     else if (SvPVX_const(sstr)) {
13479         /* Has something there */
13480         if (SvLEN(sstr)) {
13481             /* Normal PV - clone whole allocated space */
13482             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13483             /* sstr may not be that normal, but actually copy on write.
13484                But we are a true, independent SV, so:  */
13485             SvIsCOW_off(dstr);
13486         }
13487         else {
13488             /* Special case - not normally malloced for some reason */
13489             if (isGV_with_GP(sstr)) {
13490                 /* Don't need to do anything here.  */
13491             }
13492             else if ((SvIsCOW(sstr))) {
13493                 /* A "shared" PV - clone it as "shared" PV */
13494                 SvPV_set(dstr,
13495                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13496                                          param)));
13497             }
13498             else {
13499                 /* Some other special case - random pointer */
13500                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13501             }
13502         }
13503     }
13504     else {
13505         /* Copy the NULL */
13506         SvPV_set(dstr, NULL);
13507     }
13508 }
13509
13510 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13511 static SV **
13512 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13513                       SSize_t items, CLONE_PARAMS *const param)
13514 {
13515     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13516
13517     while (items-- > 0) {
13518         *dest++ = sv_dup_inc(*source++, param);
13519     }
13520
13521     return dest;
13522 }
13523
13524 /* duplicate an SV of any type (including AV, HV etc) */
13525
13526 static SV *
13527 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13528 {
13529     dVAR;
13530     SV *dstr;
13531
13532     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13533
13534     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13535 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13536         abort();
13537 #endif
13538         return NULL;
13539     }
13540     /* look for it in the table first */
13541     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13542     if (dstr)
13543         return dstr;
13544
13545     if(param->flags & CLONEf_JOIN_IN) {
13546         /** We are joining here so we don't want do clone
13547             something that is bad **/
13548         if (SvTYPE(sstr) == SVt_PVHV) {
13549             const HEK * const hvname = HvNAME_HEK(sstr);
13550             if (hvname) {
13551                 /** don't clone stashes if they already exist **/
13552                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13553                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13554                 ptr_table_store(PL_ptr_table, sstr, dstr);
13555                 return dstr;
13556             }
13557         }
13558         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13559             HV *stash = GvSTASH(sstr);
13560             const HEK * hvname;
13561             if (stash && (hvname = HvNAME_HEK(stash))) {
13562                 /** don't clone GVs if they already exist **/
13563                 SV **svp;
13564                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13565                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13566                 svp = hv_fetch(
13567                         stash, GvNAME(sstr),
13568                         GvNAMEUTF8(sstr)
13569                             ? -GvNAMELEN(sstr)
13570                             :  GvNAMELEN(sstr),
13571                         0
13572                       );
13573                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13574                     ptr_table_store(PL_ptr_table, sstr, *svp);
13575                     return *svp;
13576                 }
13577             }
13578         }
13579     }
13580
13581     /* create anew and remember what it is */
13582     new_SV(dstr);
13583
13584 #ifdef DEBUG_LEAKING_SCALARS
13585     dstr->sv_debug_optype = sstr->sv_debug_optype;
13586     dstr->sv_debug_line = sstr->sv_debug_line;
13587     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13588     dstr->sv_debug_parent = (SV*)sstr;
13589     FREE_SV_DEBUG_FILE(dstr);
13590     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13591 #endif
13592
13593     ptr_table_store(PL_ptr_table, sstr, dstr);
13594
13595     /* clone */
13596     SvFLAGS(dstr)       = SvFLAGS(sstr);
13597     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13598     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13599
13600 #ifdef DEBUGGING
13601     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13602         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13603                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13604 #endif
13605
13606     /* don't clone objects whose class has asked us not to */
13607     if (SvOBJECT(sstr)
13608      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13609     {
13610         SvFLAGS(dstr) = 0;
13611         return dstr;
13612     }
13613
13614     switch (SvTYPE(sstr)) {
13615     case SVt_NULL:
13616         SvANY(dstr)     = NULL;
13617         break;
13618     case SVt_IV:
13619         SET_SVANY_FOR_BODYLESS_IV(dstr);
13620         if(SvROK(sstr)) {
13621             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13622         } else {
13623             SvIV_set(dstr, SvIVX(sstr));
13624         }
13625         break;
13626     case SVt_NV:
13627 #if NVSIZE <= IVSIZE
13628         SET_SVANY_FOR_BODYLESS_NV(dstr);
13629 #else
13630         SvANY(dstr)     = new_XNV();
13631 #endif
13632         SvNV_set(dstr, SvNVX(sstr));
13633         break;
13634     default:
13635         {
13636             /* These are all the types that need complex bodies allocating.  */
13637             void *new_body;
13638             const svtype sv_type = SvTYPE(sstr);
13639             const struct body_details *const sv_type_details
13640                 = bodies_by_type + sv_type;
13641
13642             switch (sv_type) {
13643             default:
13644                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13645                 break;
13646
13647             case SVt_PVGV:
13648             case SVt_PVIO:
13649             case SVt_PVFM:
13650             case SVt_PVHV:
13651             case SVt_PVAV:
13652             case SVt_PVCV:
13653             case SVt_PVLV:
13654             case SVt_REGEXP:
13655             case SVt_PVMG:
13656             case SVt_PVNV:
13657             case SVt_PVIV:
13658             case SVt_INVLIST:
13659             case SVt_PV:
13660                 assert(sv_type_details->body_size);
13661                 if (sv_type_details->arena) {
13662                     new_body_inline(new_body, sv_type);
13663                     new_body
13664                         = (void*)((char*)new_body - sv_type_details->offset);
13665                 } else {
13666                     new_body = new_NOARENA(sv_type_details);
13667                 }
13668             }
13669             assert(new_body);
13670             SvANY(dstr) = new_body;
13671
13672 #ifndef PURIFY
13673             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13674                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13675                  sv_type_details->copy, char);
13676 #else
13677             Copy(((char*)SvANY(sstr)),
13678                  ((char*)SvANY(dstr)),
13679                  sv_type_details->body_size + sv_type_details->offset, char);
13680 #endif
13681
13682             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13683                 && !isGV_with_GP(dstr)
13684                 && !isREGEXP(dstr)
13685                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13686                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13687
13688             /* The Copy above means that all the source (unduplicated) pointers
13689                are now in the destination.  We can check the flags and the
13690                pointers in either, but it's possible that there's less cache
13691                missing by always going for the destination.
13692                FIXME - instrument and check that assumption  */
13693             if (sv_type >= SVt_PVMG) {
13694                 if (SvMAGIC(dstr))
13695                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13696                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13697                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13698                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13699             }
13700
13701             /* The cast silences a GCC warning about unhandled types.  */
13702             switch ((int)sv_type) {
13703             case SVt_PV:
13704                 break;
13705             case SVt_PVIV:
13706                 break;
13707             case SVt_PVNV:
13708                 break;
13709             case SVt_PVMG:
13710                 break;
13711             case SVt_REGEXP:
13712               duprex:
13713                 /* FIXME for plugins */
13714                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13715                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13716                 break;
13717             case SVt_PVLV:
13718                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13719                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13720                     LvTARG(dstr) = dstr;
13721                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13722                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13723                 else
13724                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13725                 if (isREGEXP(sstr)) goto duprex;
13726             case SVt_PVGV:
13727                 /* non-GP case already handled above */
13728                 if(isGV_with_GP(sstr)) {
13729                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13730                     /* Don't call sv_add_backref here as it's going to be
13731                        created as part of the magic cloning of the symbol
13732                        table--unless this is during a join and the stash
13733                        is not actually being cloned.  */
13734                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13735                        at the point of this comment.  */
13736                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13737                     if (param->flags & CLONEf_JOIN_IN)
13738                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13739                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13740                     (void)GpREFCNT_inc(GvGP(dstr));
13741                 }
13742                 break;
13743             case SVt_PVIO:
13744                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13745                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13746                     /* I have no idea why fake dirp (rsfps)
13747                        should be treated differently but otherwise
13748                        we end up with leaks -- sky*/
13749                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13750                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13751                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13752                 } else {
13753                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13754                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13755                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13756                     if (IoDIRP(dstr)) {
13757                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13758                     } else {
13759                         NOOP;
13760                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13761                     }
13762                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13763                 }
13764                 if (IoOFP(dstr) == IoIFP(sstr))
13765                     IoOFP(dstr) = IoIFP(dstr);
13766                 else
13767                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13768                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13769                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13770                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13771                 break;
13772             case SVt_PVAV:
13773                 /* avoid cloning an empty array */
13774                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13775                     SV **dst_ary, **src_ary;
13776                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13777
13778                     src_ary = AvARRAY((const AV *)sstr);
13779                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13780                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13781                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13782                     AvALLOC((const AV *)dstr) = dst_ary;
13783                     if (AvREAL((const AV *)sstr)) {
13784                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13785                                                       param);
13786                     }
13787                     else {
13788                         while (items-- > 0)
13789                             *dst_ary++ = sv_dup(*src_ary++, param);
13790                     }
13791                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13792                     while (items-- > 0) {
13793                         *dst_ary++ = NULL;
13794                     }
13795                 }
13796                 else {
13797                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13798                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13799                     AvMAX(  (const AV *)dstr)   = -1;
13800                     AvFILLp((const AV *)dstr)   = -1;
13801                 }
13802                 break;
13803             case SVt_PVHV:
13804                 if (HvARRAY((const HV *)sstr)) {
13805                     STRLEN i = 0;
13806                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13807                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13808                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13809                     char *darray;
13810                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13811                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13812                         char);
13813                     HvARRAY(dstr) = (HE**)darray;
13814                     while (i <= sxhv->xhv_max) {
13815                         const HE * const source = HvARRAY(sstr)[i];
13816                         HvARRAY(dstr)[i] = source
13817                             ? he_dup(source, sharekeys, param) : 0;
13818                         ++i;
13819                     }
13820                     if (SvOOK(sstr)) {
13821                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13822                         struct xpvhv_aux * const daux = HvAUX(dstr);
13823                         /* This flag isn't copied.  */
13824                         SvOOK_on(dstr);
13825
13826                         if (saux->xhv_name_count) {
13827                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13828                             const I32 count
13829                              = saux->xhv_name_count < 0
13830                                 ? -saux->xhv_name_count
13831                                 :  saux->xhv_name_count;
13832                             HEK **shekp = sname + count;
13833                             HEK **dhekp;
13834                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13835                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13836                             while (shekp-- > sname) {
13837                                 dhekp--;
13838                                 *dhekp = hek_dup(*shekp, param);
13839                             }
13840                         }
13841                         else {
13842                             daux->xhv_name_u.xhvnameu_name
13843                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13844                                           param);
13845                         }
13846                         daux->xhv_name_count = saux->xhv_name_count;
13847
13848                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13849                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13850 #ifdef PERL_HASH_RANDOMIZE_KEYS
13851                         daux->xhv_rand = saux->xhv_rand;
13852                         daux->xhv_last_rand = saux->xhv_last_rand;
13853 #endif
13854                         daux->xhv_riter = saux->xhv_riter;
13855                         daux->xhv_eiter = saux->xhv_eiter
13856                             ? he_dup(saux->xhv_eiter,
13857                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13858                         /* backref array needs refcnt=2; see sv_add_backref */
13859                         daux->xhv_backreferences =
13860                             (param->flags & CLONEf_JOIN_IN)
13861                                 /* when joining, we let the individual GVs and
13862                                  * CVs add themselves to backref as
13863                                  * needed. This avoids pulling in stuff
13864                                  * that isn't required, and simplifies the
13865                                  * case where stashes aren't cloned back
13866                                  * if they already exist in the parent
13867                                  * thread */
13868                             ? NULL
13869                             : saux->xhv_backreferences
13870                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13871                                     ? MUTABLE_AV(SvREFCNT_inc(
13872                                           sv_dup_inc((const SV *)
13873                                             saux->xhv_backreferences, param)))
13874                                     : MUTABLE_AV(sv_dup((const SV *)
13875                                             saux->xhv_backreferences, param))
13876                                 : 0;
13877
13878                         daux->xhv_mro_meta = saux->xhv_mro_meta
13879                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13880                             : 0;
13881
13882                         /* Record stashes for possible cloning in Perl_clone(). */
13883                         if (HvNAME(sstr))
13884                             av_push(param->stashes, dstr);
13885                     }
13886                 }
13887                 else
13888                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13889                 break;
13890             case SVt_PVCV:
13891                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13892                     CvDEPTH(dstr) = 0;
13893                 }
13894                 /* FALLTHROUGH */
13895             case SVt_PVFM:
13896                 /* NOTE: not refcounted */
13897                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13898                     hv_dup(CvSTASH(dstr), param);
13899                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13900                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13901                 if (!CvISXSUB(dstr)) {
13902                     OP_REFCNT_LOCK;
13903                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13904                     OP_REFCNT_UNLOCK;
13905                     CvSLABBED_off(dstr);
13906                 } else if (CvCONST(dstr)) {
13907                     CvXSUBANY(dstr).any_ptr =
13908                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13909                 }
13910                 assert(!CvSLABBED(dstr));
13911                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13912                 if (CvNAMED(dstr))
13913                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13914                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13915                 /* don't dup if copying back - CvGV isn't refcounted, so the
13916                  * duped GV may never be freed. A bit of a hack! DAPM */
13917                 else
13918                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13919                     CvCVGV_RC(dstr)
13920                     ? gv_dup_inc(CvGV(sstr), param)
13921                     : (param->flags & CLONEf_JOIN_IN)
13922                         ? NULL
13923                         : gv_dup(CvGV(sstr), param);
13924
13925                 if (!CvISXSUB(sstr)) {
13926                     PADLIST * padlist = CvPADLIST(sstr);
13927                     if(padlist)
13928                         padlist = padlist_dup(padlist, param);
13929                     CvPADLIST_set(dstr, padlist);
13930                 } else
13931 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13932                     PoisonPADLIST(dstr);
13933
13934                 CvOUTSIDE(dstr) =
13935                     CvWEAKOUTSIDE(sstr)
13936                     ? cv_dup(    CvOUTSIDE(dstr), param)
13937                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13938                 break;
13939             }
13940         }
13941     }
13942
13943     return dstr;
13944  }
13945
13946 SV *
13947 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13948 {
13949     PERL_ARGS_ASSERT_SV_DUP_INC;
13950     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13951 }
13952
13953 SV *
13954 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13955 {
13956     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13957     PERL_ARGS_ASSERT_SV_DUP;
13958
13959     /* Track every SV that (at least initially) had a reference count of 0.
13960        We need to do this by holding an actual reference to it in this array.
13961        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13962        (akin to the stashes hash, and the perl stack), we come unstuck if
13963        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13964        thread) is manipulated in a CLONE method, because CLONE runs before the
13965        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13966        (and fix things up by giving each a reference via the temps stack).
13967        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13968        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13969        before the walk of unreferenced happens and a reference to that is SV
13970        added to the temps stack. At which point we have the same SV considered
13971        to be in use, and free to be re-used. Not good.
13972     */
13973     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13974         assert(param->unreferenced);
13975         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13976     }
13977
13978     return dstr;
13979 }
13980
13981 /* duplicate a context */
13982
13983 PERL_CONTEXT *
13984 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13985 {
13986     PERL_CONTEXT *ncxs;
13987
13988     PERL_ARGS_ASSERT_CX_DUP;
13989
13990     if (!cxs)
13991         return (PERL_CONTEXT*)NULL;
13992
13993     /* look for it in the table first */
13994     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13995     if (ncxs)
13996         return ncxs;
13997
13998     /* create anew and remember what it is */
13999     Newx(ncxs, max + 1, PERL_CONTEXT);
14000     ptr_table_store(PL_ptr_table, cxs, ncxs);
14001     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14002
14003     while (ix >= 0) {
14004         PERL_CONTEXT * const ncx = &ncxs[ix];
14005         if (CxTYPE(ncx) == CXt_SUBST) {
14006             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14007         }
14008         else {
14009             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14010             switch (CxTYPE(ncx)) {
14011             case CXt_SUB:
14012                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14013                 if(CxHASARGS(ncx)){
14014                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14015                 } else {
14016                     ncx->blk_sub.savearray = NULL;
14017                 }
14018                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14019                                            ncx->blk_sub.prevcomppad);
14020                 break;
14021             case CXt_EVAL:
14022                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14023                                                       param);
14024                 /* XXX should this sv_dup_inc? Or only if SvSCREAM ???? */
14025                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14026                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14027                 /* XXX what do do with cur_top_env ???? */
14028                 break;
14029             case CXt_LOOP_LAZYSV:
14030                 ncx->blk_loop.state_u.lazysv.end
14031                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14032                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14033                    duplication code instead.
14034                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14035                    actually being the same function, and (2) order
14036                    equivalence of the two unions.
14037                    We can assert the later [but only at run time :-(]  */
14038                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14039                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14040                 /* FALLTHROUGH */
14041             case CXt_LOOP_ARY:
14042                 ncx->blk_loop.state_u.ary.ary
14043                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14044                 /* FALLTHROUGH */
14045             case CXt_LOOP_LIST:
14046             case CXt_LOOP_LAZYIV:
14047                 /* code common to all 'for' CXt_LOOP_* types */
14048                 ncx->blk_loop.itersave =
14049                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14050                 if (CxPADLOOP(ncx)) {
14051                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14052                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14053                     ncx->blk_loop.oldcomppad =
14054                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14055                                                 ncx->blk_loop.oldcomppad);
14056                     ncx->blk_loop.itervar_u.svp =
14057                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14058                 }
14059                 else {
14060                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14061                      * alias (for \$x (...)) - relies on gv_dup being the
14062                      * same as sv_dup */
14063                     ncx->blk_loop.itervar_u.gv
14064                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14065                                     param);
14066                 }
14067                 break;
14068             case CXt_LOOP_PLAIN:
14069                 break;
14070             case CXt_FORMAT:
14071                 ncx->blk_format.prevcomppad =
14072                         (PAD*)ptr_table_fetch(PL_ptr_table,
14073                                            ncx->blk_format.prevcomppad);
14074                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14075                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14076                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14077                                                      param);
14078                 break;
14079             case CXt_GIVEN:
14080                 ncx->blk_givwhen.defsv_save =
14081                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14082                 break;
14083             case CXt_BLOCK:
14084             case CXt_NULL:
14085             case CXt_WHEN:
14086                 break;
14087             }
14088         }
14089         --ix;
14090     }
14091     return ncxs;
14092 }
14093
14094 /* duplicate a stack info structure */
14095
14096 PERL_SI *
14097 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14098 {
14099     PERL_SI *nsi;
14100
14101     PERL_ARGS_ASSERT_SI_DUP;
14102
14103     if (!si)
14104         return (PERL_SI*)NULL;
14105
14106     /* look for it in the table first */
14107     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14108     if (nsi)
14109         return nsi;
14110
14111     /* create anew and remember what it is */
14112     Newxz(nsi, 1, PERL_SI);
14113     ptr_table_store(PL_ptr_table, si, nsi);
14114
14115     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14116     nsi->si_cxix        = si->si_cxix;
14117     nsi->si_cxmax       = si->si_cxmax;
14118     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14119     nsi->si_type        = si->si_type;
14120     nsi->si_prev        = si_dup(si->si_prev, param);
14121     nsi->si_next        = si_dup(si->si_next, param);
14122     nsi->si_markoff     = si->si_markoff;
14123
14124     return nsi;
14125 }
14126
14127 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14128 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14129 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14130 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14131 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14132 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14133 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14134 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14135 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14136 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14137 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14138 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14139 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14140 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14141 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14142 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14143
14144 /* XXXXX todo */
14145 #define pv_dup_inc(p)   SAVEPV(p)
14146 #define pv_dup(p)       SAVEPV(p)
14147 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14148
14149 /* map any object to the new equivent - either something in the
14150  * ptr table, or something in the interpreter structure
14151  */
14152
14153 void *
14154 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14155 {
14156     void *ret;
14157
14158     PERL_ARGS_ASSERT_ANY_DUP;
14159
14160     if (!v)
14161         return (void*)NULL;
14162
14163     /* look for it in the table first */
14164     ret = ptr_table_fetch(PL_ptr_table, v);
14165     if (ret)
14166         return ret;
14167
14168     /* see if it is part of the interpreter structure */
14169     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14170         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14171     else {
14172         ret = v;
14173     }
14174
14175     return ret;
14176 }
14177
14178 /* duplicate the save stack */
14179
14180 ANY *
14181 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14182 {
14183     dVAR;
14184     ANY * const ss      = proto_perl->Isavestack;
14185     const I32 max       = proto_perl->Isavestack_max;
14186     I32 ix              = proto_perl->Isavestack_ix;
14187     ANY *nss;
14188     const SV *sv;
14189     const GV *gv;
14190     const AV *av;
14191     const HV *hv;
14192     void* ptr;
14193     int intval;
14194     long longval;
14195     GP *gp;
14196     IV iv;
14197     I32 i;
14198     char *c = NULL;
14199     void (*dptr) (void*);
14200     void (*dxptr) (pTHX_ void*);
14201
14202     PERL_ARGS_ASSERT_SS_DUP;
14203
14204     Newxz(nss, max, ANY);
14205
14206     while (ix > 0) {
14207         const UV uv = POPUV(ss,ix);
14208         const U8 type = (U8)uv & SAVE_MASK;
14209
14210         TOPUV(nss,ix) = uv;
14211         switch (type) {
14212         case SAVEt_CLEARSV:
14213         case SAVEt_CLEARPADRANGE:
14214             break;
14215         case SAVEt_HELEM:               /* hash element */
14216         case SAVEt_SV:                  /* scalar reference */
14217             sv = (const SV *)POPPTR(ss,ix);
14218             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14219             /* FALLTHROUGH */
14220         case SAVEt_ITEM:                        /* normal string */
14221         case SAVEt_GVSV:                        /* scalar slot in GV */
14222             sv = (const SV *)POPPTR(ss,ix);
14223             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14224             if (type == SAVEt_SV)
14225                 break;
14226             /* FALLTHROUGH */
14227         case SAVEt_FREESV:
14228         case SAVEt_MORTALIZESV:
14229         case SAVEt_READONLY_OFF:
14230             sv = (const SV *)POPPTR(ss,ix);
14231             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14232             break;
14233         case SAVEt_FREEPADNAME:
14234             ptr = POPPTR(ss,ix);
14235             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14236             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14237             break;
14238         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14239             c = (char*)POPPTR(ss,ix);
14240             TOPPTR(nss,ix) = savesharedpv(c);
14241             ptr = POPPTR(ss,ix);
14242             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14243             break;
14244         case SAVEt_GENERIC_SVREF:               /* generic sv */
14245         case SAVEt_SVREF:                       /* scalar reference */
14246             sv = (const SV *)POPPTR(ss,ix);
14247             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14248             if (type == SAVEt_SVREF)
14249                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14250             ptr = POPPTR(ss,ix);
14251             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14252             break;
14253         case SAVEt_GVSLOT:              /* any slot in GV */
14254             sv = (const SV *)POPPTR(ss,ix);
14255             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14256             ptr = POPPTR(ss,ix);
14257             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14258             sv = (const SV *)POPPTR(ss,ix);
14259             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14260             break;
14261         case SAVEt_HV:                          /* hash reference */
14262         case SAVEt_AV:                          /* array reference */
14263             sv = (const SV *) POPPTR(ss,ix);
14264             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14265             /* FALLTHROUGH */
14266         case SAVEt_COMPPAD:
14267         case SAVEt_NSTAB:
14268             sv = (const SV *) POPPTR(ss,ix);
14269             TOPPTR(nss,ix) = sv_dup(sv, param);
14270             break;
14271         case SAVEt_INT:                         /* int reference */
14272             ptr = POPPTR(ss,ix);
14273             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14274             intval = (int)POPINT(ss,ix);
14275             TOPINT(nss,ix) = intval;
14276             break;
14277         case SAVEt_LONG:                        /* long reference */
14278             ptr = POPPTR(ss,ix);
14279             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14280             longval = (long)POPLONG(ss,ix);
14281             TOPLONG(nss,ix) = longval;
14282             break;
14283         case SAVEt_I32:                         /* I32 reference */
14284             ptr = POPPTR(ss,ix);
14285             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14286             i = POPINT(ss,ix);
14287             TOPINT(nss,ix) = i;
14288             break;
14289         case SAVEt_IV:                          /* IV reference */
14290         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14291             ptr = POPPTR(ss,ix);
14292             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14293             iv = POPIV(ss,ix);
14294             TOPIV(nss,ix) = iv;
14295             break;
14296         case SAVEt_TMPSFLOOR:
14297             iv = POPIV(ss,ix);
14298             TOPIV(nss,ix) = iv;
14299             break;
14300         case SAVEt_HPTR:                        /* HV* reference */
14301         case SAVEt_APTR:                        /* AV* reference */
14302         case SAVEt_SPTR:                        /* SV* reference */
14303             ptr = POPPTR(ss,ix);
14304             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14305             sv = (const SV *)POPPTR(ss,ix);
14306             TOPPTR(nss,ix) = sv_dup(sv, param);
14307             break;
14308         case SAVEt_VPTR:                        /* random* reference */
14309             ptr = POPPTR(ss,ix);
14310             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14311             /* FALLTHROUGH */
14312         case SAVEt_INT_SMALL:
14313         case SAVEt_I32_SMALL:
14314         case SAVEt_I16:                         /* I16 reference */
14315         case SAVEt_I8:                          /* I8 reference */
14316         case SAVEt_BOOL:
14317             ptr = POPPTR(ss,ix);
14318             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14319             break;
14320         case SAVEt_GENERIC_PVREF:               /* generic char* */
14321         case SAVEt_PPTR:                        /* char* reference */
14322             ptr = POPPTR(ss,ix);
14323             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14324             c = (char*)POPPTR(ss,ix);
14325             TOPPTR(nss,ix) = pv_dup(c);
14326             break;
14327         case SAVEt_GP:                          /* scalar reference */
14328             gp = (GP*)POPPTR(ss,ix);
14329             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14330             (void)GpREFCNT_inc(gp);
14331             gv = (const GV *)POPPTR(ss,ix);
14332             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14333             break;
14334         case SAVEt_FREEOP:
14335             ptr = POPPTR(ss,ix);
14336             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14337                 /* these are assumed to be refcounted properly */
14338                 OP *o;
14339                 switch (((OP*)ptr)->op_type) {
14340                 case OP_LEAVESUB:
14341                 case OP_LEAVESUBLV:
14342                 case OP_LEAVEEVAL:
14343                 case OP_LEAVE:
14344                 case OP_SCOPE:
14345                 case OP_LEAVEWRITE:
14346                     TOPPTR(nss,ix) = ptr;
14347                     o = (OP*)ptr;
14348                     OP_REFCNT_LOCK;
14349                     (void) OpREFCNT_inc(o);
14350                     OP_REFCNT_UNLOCK;
14351                     break;
14352                 default:
14353                     TOPPTR(nss,ix) = NULL;
14354                     break;
14355                 }
14356             }
14357             else
14358                 TOPPTR(nss,ix) = NULL;
14359             break;
14360         case SAVEt_FREECOPHH:
14361             ptr = POPPTR(ss,ix);
14362             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14363             break;
14364         case SAVEt_ADELETE:
14365             av = (const AV *)POPPTR(ss,ix);
14366             TOPPTR(nss,ix) = av_dup_inc(av, param);
14367             i = POPINT(ss,ix);
14368             TOPINT(nss,ix) = i;
14369             break;
14370         case SAVEt_DELETE:
14371             hv = (const HV *)POPPTR(ss,ix);
14372             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14373             i = POPINT(ss,ix);
14374             TOPINT(nss,ix) = i;
14375             /* FALLTHROUGH */
14376         case SAVEt_FREEPV:
14377             c = (char*)POPPTR(ss,ix);
14378             TOPPTR(nss,ix) = pv_dup_inc(c);
14379             break;
14380         case SAVEt_STACK_POS:           /* Position on Perl stack */
14381             i = POPINT(ss,ix);
14382             TOPINT(nss,ix) = i;
14383             break;
14384         case SAVEt_DESTRUCTOR:
14385             ptr = POPPTR(ss,ix);
14386             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14387             dptr = POPDPTR(ss,ix);
14388             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14389                                         any_dup(FPTR2DPTR(void *, dptr),
14390                                                 proto_perl));
14391             break;
14392         case SAVEt_DESTRUCTOR_X:
14393             ptr = POPPTR(ss,ix);
14394             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14395             dxptr = POPDXPTR(ss,ix);
14396             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14397                                          any_dup(FPTR2DPTR(void *, dxptr),
14398                                                  proto_perl));
14399             break;
14400         case SAVEt_REGCONTEXT:
14401         case SAVEt_ALLOC:
14402             ix -= uv >> SAVE_TIGHT_SHIFT;
14403             break;
14404         case SAVEt_AELEM:               /* array element */
14405             sv = (const SV *)POPPTR(ss,ix);
14406             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14407             i = POPINT(ss,ix);
14408             TOPINT(nss,ix) = i;
14409             av = (const AV *)POPPTR(ss,ix);
14410             TOPPTR(nss,ix) = av_dup_inc(av, param);
14411             break;
14412         case SAVEt_OP:
14413             ptr = POPPTR(ss,ix);
14414             TOPPTR(nss,ix) = ptr;
14415             break;
14416         case SAVEt_HINTS:
14417             ptr = POPPTR(ss,ix);
14418             ptr = cophh_copy((COPHH*)ptr);
14419             TOPPTR(nss,ix) = ptr;
14420             i = POPINT(ss,ix);
14421             TOPINT(nss,ix) = i;
14422             if (i & HINT_LOCALIZE_HH) {
14423                 hv = (const HV *)POPPTR(ss,ix);
14424                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14425             }
14426             break;
14427         case SAVEt_PADSV_AND_MORTALIZE:
14428             longval = (long)POPLONG(ss,ix);
14429             TOPLONG(nss,ix) = longval;
14430             ptr = POPPTR(ss,ix);
14431             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14432             sv = (const SV *)POPPTR(ss,ix);
14433             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14434             break;
14435         case SAVEt_SET_SVFLAGS:
14436             i = POPINT(ss,ix);
14437             TOPINT(nss,ix) = i;
14438             i = POPINT(ss,ix);
14439             TOPINT(nss,ix) = i;
14440             sv = (const SV *)POPPTR(ss,ix);
14441             TOPPTR(nss,ix) = sv_dup(sv, param);
14442             break;
14443         case SAVEt_COMPILE_WARNINGS:
14444             ptr = POPPTR(ss,ix);
14445             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14446             break;
14447         case SAVEt_PARSER:
14448             ptr = POPPTR(ss,ix);
14449             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14450             break;
14451         default:
14452             Perl_croak(aTHX_
14453                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14454         }
14455     }
14456
14457     return nss;
14458 }
14459
14460
14461 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14462  * flag to the result. This is done for each stash before cloning starts,
14463  * so we know which stashes want their objects cloned */
14464
14465 static void
14466 do_mark_cloneable_stash(pTHX_ SV *const sv)
14467 {
14468     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14469     if (hvname) {
14470         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14471         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14472         if (cloner && GvCV(cloner)) {
14473             dSP;
14474             UV status;
14475
14476             ENTER;
14477             SAVETMPS;
14478             PUSHMARK(SP);
14479             mXPUSHs(newSVhek(hvname));
14480             PUTBACK;
14481             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14482             SPAGAIN;
14483             status = POPu;
14484             PUTBACK;
14485             FREETMPS;
14486             LEAVE;
14487             if (status)
14488                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14489         }
14490     }
14491 }
14492
14493
14494
14495 /*
14496 =for apidoc perl_clone
14497
14498 Create and return a new interpreter by cloning the current one.
14499
14500 C<perl_clone> takes these flags as parameters:
14501
14502 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14503 without it we only clone the data and zero the stacks,
14504 with it we copy the stacks and the new perl interpreter is
14505 ready to run at the exact same point as the previous one.
14506 The pseudo-fork code uses C<COPY_STACKS> while the
14507 threads->create doesn't.
14508
14509 C<CLONEf_KEEP_PTR_TABLE> -
14510 C<perl_clone> keeps a ptr_table with the pointer of the old
14511 variable as a key and the new variable as a value,
14512 this allows it to check if something has been cloned and not
14513 clone it again but rather just use the value and increase the
14514 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14515 the ptr_table using the function
14516 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14517 reason to keep it around is if you want to dup some of your own
14518 variable who are outside the graph perl scans, an example of this
14519 code is in F<threads.xs> create.
14520
14521 C<CLONEf_CLONE_HOST> -
14522 This is a win32 thing, it is ignored on unix, it tells perls
14523 win32host code (which is c++) to clone itself, this is needed on
14524 win32 if you want to run two threads at the same time,
14525 if you just want to do some stuff in a separate perl interpreter
14526 and then throw it away and return to the original one,
14527 you don't need to do anything.
14528
14529 =cut
14530 */
14531
14532 /* XXX the above needs expanding by someone who actually understands it ! */
14533 EXTERN_C PerlInterpreter *
14534 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14535
14536 PerlInterpreter *
14537 perl_clone(PerlInterpreter *proto_perl, UV flags)
14538 {
14539    dVAR;
14540 #ifdef PERL_IMPLICIT_SYS
14541
14542     PERL_ARGS_ASSERT_PERL_CLONE;
14543
14544    /* perlhost.h so we need to call into it
14545    to clone the host, CPerlHost should have a c interface, sky */
14546
14547 #ifndef __amigaos4__
14548    if (flags & CLONEf_CLONE_HOST) {
14549        return perl_clone_host(proto_perl,flags);
14550    }
14551 #endif
14552    return perl_clone_using(proto_perl, flags,
14553                             proto_perl->IMem,
14554                             proto_perl->IMemShared,
14555                             proto_perl->IMemParse,
14556                             proto_perl->IEnv,
14557                             proto_perl->IStdIO,
14558                             proto_perl->ILIO,
14559                             proto_perl->IDir,
14560                             proto_perl->ISock,
14561                             proto_perl->IProc);
14562 }
14563
14564 PerlInterpreter *
14565 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14566                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14567                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14568                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14569                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14570                  struct IPerlProc* ipP)
14571 {
14572     /* XXX many of the string copies here can be optimized if they're
14573      * constants; they need to be allocated as common memory and just
14574      * their pointers copied. */
14575
14576     IV i;
14577     CLONE_PARAMS clone_params;
14578     CLONE_PARAMS* const param = &clone_params;
14579
14580     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14581
14582     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14583 #else           /* !PERL_IMPLICIT_SYS */
14584     IV i;
14585     CLONE_PARAMS clone_params;
14586     CLONE_PARAMS* param = &clone_params;
14587     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14588
14589     PERL_ARGS_ASSERT_PERL_CLONE;
14590 #endif          /* PERL_IMPLICIT_SYS */
14591
14592     /* for each stash, determine whether its objects should be cloned */
14593     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14594     PERL_SET_THX(my_perl);
14595
14596 #ifdef DEBUGGING
14597     PoisonNew(my_perl, 1, PerlInterpreter);
14598     PL_op = NULL;
14599     PL_curcop = NULL;
14600     PL_defstash = NULL; /* may be used by perl malloc() */
14601     PL_markstack = 0;
14602     PL_scopestack = 0;
14603     PL_scopestack_name = 0;
14604     PL_savestack = 0;
14605     PL_savestack_ix = 0;
14606     PL_savestack_max = -1;
14607     PL_sig_pending = 0;
14608     PL_parser = NULL;
14609     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14610     Zero(&PL_padname_undef, 1, PADNAME);
14611     Zero(&PL_padname_const, 1, PADNAME);
14612 #  ifdef DEBUG_LEAKING_SCALARS
14613     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14614 #  endif
14615 #  ifdef PERL_TRACE_OPS
14616     Zero(PL_op_exec_cnt, OP_max+2, UV);
14617 #  endif
14618 #else   /* !DEBUGGING */
14619     Zero(my_perl, 1, PerlInterpreter);
14620 #endif  /* DEBUGGING */
14621
14622 #ifdef PERL_IMPLICIT_SYS
14623     /* host pointers */
14624     PL_Mem              = ipM;
14625     PL_MemShared        = ipMS;
14626     PL_MemParse         = ipMP;
14627     PL_Env              = ipE;
14628     PL_StdIO            = ipStd;
14629     PL_LIO              = ipLIO;
14630     PL_Dir              = ipD;
14631     PL_Sock             = ipS;
14632     PL_Proc             = ipP;
14633 #endif          /* PERL_IMPLICIT_SYS */
14634
14635
14636     param->flags = flags;
14637     /* Nothing in the core code uses this, but we make it available to
14638        extensions (using mg_dup).  */
14639     param->proto_perl = proto_perl;
14640     /* Likely nothing will use this, but it is initialised to be consistent
14641        with Perl_clone_params_new().  */
14642     param->new_perl = my_perl;
14643     param->unreferenced = NULL;
14644
14645
14646     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14647
14648     PL_body_arenas = NULL;
14649     Zero(&PL_body_roots, 1, PL_body_roots);
14650     
14651     PL_sv_count         = 0;
14652     PL_sv_root          = NULL;
14653     PL_sv_arenaroot     = NULL;
14654
14655     PL_debug            = proto_perl->Idebug;
14656
14657     /* dbargs array probably holds garbage */
14658     PL_dbargs           = NULL;
14659
14660     PL_compiling = proto_perl->Icompiling;
14661
14662     /* pseudo environmental stuff */
14663     PL_origargc         = proto_perl->Iorigargc;
14664     PL_origargv         = proto_perl->Iorigargv;
14665
14666 #ifndef NO_TAINT_SUPPORT
14667     /* Set tainting stuff before PerlIO_debug can possibly get called */
14668     PL_tainting         = proto_perl->Itainting;
14669     PL_taint_warn       = proto_perl->Itaint_warn;
14670 #else
14671     PL_tainting         = FALSE;
14672     PL_taint_warn       = FALSE;
14673 #endif
14674
14675     PL_minus_c          = proto_perl->Iminus_c;
14676
14677     PL_localpatches     = proto_perl->Ilocalpatches;
14678     PL_splitstr         = proto_perl->Isplitstr;
14679     PL_minus_n          = proto_perl->Iminus_n;
14680     PL_minus_p          = proto_perl->Iminus_p;
14681     PL_minus_l          = proto_perl->Iminus_l;
14682     PL_minus_a          = proto_perl->Iminus_a;
14683     PL_minus_E          = proto_perl->Iminus_E;
14684     PL_minus_F          = proto_perl->Iminus_F;
14685     PL_doswitches       = proto_perl->Idoswitches;
14686     PL_dowarn           = proto_perl->Idowarn;
14687 #ifdef PERL_SAWAMPERSAND
14688     PL_sawampersand     = proto_perl->Isawampersand;
14689 #endif
14690     PL_unsafe           = proto_perl->Iunsafe;
14691     PL_perldb           = proto_perl->Iperldb;
14692     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14693     PL_exit_flags       = proto_perl->Iexit_flags;
14694
14695     /* XXX time(&PL_basetime) when asked for? */
14696     PL_basetime         = proto_perl->Ibasetime;
14697
14698     PL_maxsysfd         = proto_perl->Imaxsysfd;
14699     PL_statusvalue      = proto_perl->Istatusvalue;
14700 #ifdef __VMS
14701     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14702 #else
14703     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14704 #endif
14705
14706     /* RE engine related */
14707     PL_regmatch_slab    = NULL;
14708     PL_reg_curpm        = NULL;
14709
14710     PL_sub_generation   = proto_perl->Isub_generation;
14711
14712     /* funky return mechanisms */
14713     PL_forkprocess      = proto_perl->Iforkprocess;
14714
14715     /* internal state */
14716     PL_maxo             = proto_perl->Imaxo;
14717
14718     PL_main_start       = proto_perl->Imain_start;
14719     PL_eval_root        = proto_perl->Ieval_root;
14720     PL_eval_start       = proto_perl->Ieval_start;
14721
14722     PL_filemode         = proto_perl->Ifilemode;
14723     PL_lastfd           = proto_perl->Ilastfd;
14724     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14725     PL_Argv             = NULL;
14726     PL_Cmd              = NULL;
14727     PL_gensym           = proto_perl->Igensym;
14728
14729     PL_laststatval      = proto_perl->Ilaststatval;
14730     PL_laststype        = proto_perl->Ilaststype;
14731     PL_mess_sv          = NULL;
14732
14733     PL_profiledata      = NULL;
14734
14735     PL_generation       = proto_perl->Igeneration;
14736
14737     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14738     PL_in_clean_all     = proto_perl->Iin_clean_all;
14739
14740     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14741     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14742     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14743     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14744     PL_nomemok          = proto_perl->Inomemok;
14745     PL_an               = proto_perl->Ian;
14746     PL_evalseq          = proto_perl->Ievalseq;
14747     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14748     PL_origalen         = proto_perl->Iorigalen;
14749
14750     PL_sighandlerp      = proto_perl->Isighandlerp;
14751
14752     PL_runops           = proto_perl->Irunops;
14753
14754     PL_subline          = proto_perl->Isubline;
14755
14756     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14757
14758 #ifdef FCRYPT
14759     PL_cryptseen        = proto_perl->Icryptseen;
14760 #endif
14761
14762 #ifdef USE_LOCALE_COLLATE
14763     PL_collation_ix     = proto_perl->Icollation_ix;
14764     PL_collation_standard       = proto_perl->Icollation_standard;
14765     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14766     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14767 #endif /* USE_LOCALE_COLLATE */
14768
14769 #ifdef USE_LOCALE_NUMERIC
14770     PL_numeric_standard = proto_perl->Inumeric_standard;
14771     PL_numeric_local    = proto_perl->Inumeric_local;
14772 #endif /* !USE_LOCALE_NUMERIC */
14773
14774     /* Did the locale setup indicate UTF-8? */
14775     PL_utf8locale       = proto_perl->Iutf8locale;
14776     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14777     /* Unicode features (see perlrun/-C) */
14778     PL_unicode          = proto_perl->Iunicode;
14779
14780     /* Pre-5.8 signals control */
14781     PL_signals          = proto_perl->Isignals;
14782
14783     /* times() ticks per second */
14784     PL_clocktick        = proto_perl->Iclocktick;
14785
14786     /* Recursion stopper for PerlIO_find_layer */
14787     PL_in_load_module   = proto_perl->Iin_load_module;
14788
14789     /* sort() routine */
14790     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14791
14792     /* Not really needed/useful since the reenrant_retint is "volatile",
14793      * but do it for consistency's sake. */
14794     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14795
14796     /* Hooks to shared SVs and locks. */
14797     PL_sharehook        = proto_perl->Isharehook;
14798     PL_lockhook         = proto_perl->Ilockhook;
14799     PL_unlockhook       = proto_perl->Iunlockhook;
14800     PL_threadhook       = proto_perl->Ithreadhook;
14801     PL_destroyhook      = proto_perl->Idestroyhook;
14802     PL_signalhook       = proto_perl->Isignalhook;
14803
14804     PL_globhook         = proto_perl->Iglobhook;
14805
14806     /* swatch cache */
14807     PL_last_swash_hv    = NULL; /* reinits on demand */
14808     PL_last_swash_klen  = 0;
14809     PL_last_swash_key[0]= '\0';
14810     PL_last_swash_tmps  = (U8*)NULL;
14811     PL_last_swash_slen  = 0;
14812
14813     PL_srand_called     = proto_perl->Isrand_called;
14814     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14815
14816     if (flags & CLONEf_COPY_STACKS) {
14817         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14818         PL_tmps_ix              = proto_perl->Itmps_ix;
14819         PL_tmps_max             = proto_perl->Itmps_max;
14820         PL_tmps_floor           = proto_perl->Itmps_floor;
14821
14822         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14823          * NOTE: unlike the others! */
14824         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14825         PL_scopestack_max       = proto_perl->Iscopestack_max;
14826
14827         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14828          * NOTE: unlike the others! */
14829         PL_savestack_ix         = proto_perl->Isavestack_ix;
14830         PL_savestack_max        = proto_perl->Isavestack_max;
14831     }
14832
14833     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14834     PL_top_env          = &PL_start_env;
14835
14836     PL_op               = proto_perl->Iop;
14837
14838     PL_Sv               = NULL;
14839     PL_Xpv              = (XPV*)NULL;
14840     my_perl->Ina        = proto_perl->Ina;
14841
14842     PL_statbuf          = proto_perl->Istatbuf;
14843     PL_statcache        = proto_perl->Istatcache;
14844
14845 #ifndef NO_TAINT_SUPPORT
14846     PL_tainted          = proto_perl->Itainted;
14847 #else
14848     PL_tainted          = FALSE;
14849 #endif
14850     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14851
14852     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14853
14854     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14855     PL_restartop        = proto_perl->Irestartop;
14856     PL_in_eval          = proto_perl->Iin_eval;
14857     PL_delaymagic       = proto_perl->Idelaymagic;
14858     PL_phase            = proto_perl->Iphase;
14859     PL_localizing       = proto_perl->Ilocalizing;
14860
14861     PL_hv_fetch_ent_mh  = NULL;
14862     PL_modcount         = proto_perl->Imodcount;
14863     PL_lastgotoprobe    = NULL;
14864     PL_dumpindent       = proto_perl->Idumpindent;
14865
14866     PL_efloatbuf        = NULL;         /* reinits on demand */
14867     PL_efloatsize       = 0;                    /* reinits on demand */
14868
14869     /* regex stuff */
14870
14871     PL_colorset         = 0;            /* reinits PL_colors[] */
14872     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14873
14874     /* Pluggable optimizer */
14875     PL_peepp            = proto_perl->Ipeepp;
14876     PL_rpeepp           = proto_perl->Irpeepp;
14877     /* op_free() hook */
14878     PL_opfreehook       = proto_perl->Iopfreehook;
14879
14880 #ifdef USE_REENTRANT_API
14881     /* XXX: things like -Dm will segfault here in perlio, but doing
14882      *  PERL_SET_CONTEXT(proto_perl);
14883      * breaks too many other things
14884      */
14885     Perl_reentrant_init(aTHX);
14886 #endif
14887
14888     /* create SV map for pointer relocation */
14889     PL_ptr_table = ptr_table_new();
14890
14891     /* initialize these special pointers as early as possible */
14892     init_constants();
14893     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14894     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14895     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14896     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14897                     &PL_padname_const);
14898
14899     /* create (a non-shared!) shared string table */
14900     PL_strtab           = newHV();
14901     HvSHAREKEYS_off(PL_strtab);
14902     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14903     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14904
14905     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14906
14907     /* This PV will be free'd special way so must set it same way op.c does */
14908     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14909     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14910
14911     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14912     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14913     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14914     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14915
14916     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14917     /* This makes no difference to the implementation, as it always pushes
14918        and shifts pointers to other SVs without changing their reference
14919        count, with the array becoming empty before it is freed. However, it
14920        makes it conceptually clear what is going on, and will avoid some
14921        work inside av.c, filling slots between AvFILL() and AvMAX() with
14922        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14923     AvREAL_off(param->stashes);
14924
14925     if (!(flags & CLONEf_COPY_STACKS)) {
14926         param->unreferenced = newAV();
14927     }
14928
14929 #ifdef PERLIO_LAYERS
14930     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14931     PerlIO_clone(aTHX_ proto_perl, param);
14932 #endif
14933
14934     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14935     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14936     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14937     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14938     PL_xsubfilename     = proto_perl->Ixsubfilename;
14939     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14940     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14941
14942     /* switches */
14943     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14944     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14945     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14946
14947     /* magical thingies */
14948
14949     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14950     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14951
14952     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14953     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14954     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14955
14956    
14957     /* Clone the regex array */
14958     /* ORANGE FIXME for plugins, probably in the SV dup code.
14959        newSViv(PTR2IV(CALLREGDUPE(
14960        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14961     */
14962     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14963     PL_regex_pad = AvARRAY(PL_regex_padav);
14964
14965     PL_stashpadmax      = proto_perl->Istashpadmax;
14966     PL_stashpadix       = proto_perl->Istashpadix ;
14967     Newx(PL_stashpad, PL_stashpadmax, HV *);
14968     {
14969         PADOFFSET o = 0;
14970         for (; o < PL_stashpadmax; ++o)
14971             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14972     }
14973
14974     /* shortcuts to various I/O objects */
14975     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14976     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14977     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14978     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14979     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14980     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14981     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14982
14983     /* shortcuts to regexp stuff */
14984     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14985
14986     /* shortcuts to misc objects */
14987     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14988
14989     /* shortcuts to debugging objects */
14990     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14991     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14992     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14993     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14994     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14995     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14996     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14997
14998     /* symbol tables */
14999     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15000     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15001     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15002     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15003     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15004
15005     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15006     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15007     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15008     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15009     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15010     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15011     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15012     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15013     PL_savebegin        = proto_perl->Isavebegin;
15014
15015     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15016
15017     /* subprocess state */
15018     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15019
15020     if (proto_perl->Iop_mask)
15021         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15022     else
15023         PL_op_mask      = NULL;
15024     /* PL_asserting        = proto_perl->Iasserting; */
15025
15026     /* current interpreter roots */
15027     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15028     OP_REFCNT_LOCK;
15029     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15030     OP_REFCNT_UNLOCK;
15031
15032     /* runtime control stuff */
15033     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15034
15035     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15036
15037     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15038
15039     /* interpreter atexit processing */
15040     PL_exitlistlen      = proto_perl->Iexitlistlen;
15041     if (PL_exitlistlen) {
15042         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15043         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15044     }
15045     else
15046         PL_exitlist     = (PerlExitListEntry*)NULL;
15047
15048     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15049     if (PL_my_cxt_size) {
15050         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15051         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15052 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15053         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15054         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15055 #endif
15056     }
15057     else {
15058         PL_my_cxt_list  = (void**)NULL;
15059 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15060         PL_my_cxt_keys  = (const char**)NULL;
15061 #endif
15062     }
15063     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15064     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15065     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15066     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15067
15068     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15069
15070     PAD_CLONE_VARS(proto_perl, param);
15071
15072 #ifdef HAVE_INTERP_INTERN
15073     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15074 #endif
15075
15076     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15077
15078 #ifdef PERL_USES_PL_PIDSTATUS
15079     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15080 #endif
15081     PL_osname           = SAVEPV(proto_perl->Iosname);
15082     PL_parser           = parser_dup(proto_perl->Iparser, param);
15083
15084     /* XXX this only works if the saved cop has already been cloned */
15085     if (proto_perl->Iparser) {
15086         PL_parser->saved_curcop = (COP*)any_dup(
15087                                     proto_perl->Iparser->saved_curcop,
15088                                     proto_perl);
15089     }
15090
15091     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15092
15093 #ifdef USE_LOCALE_CTYPE
15094     /* Should we warn if uses locale? */
15095     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15096 #endif
15097
15098 #ifdef USE_LOCALE_COLLATE
15099     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15100 #endif /* USE_LOCALE_COLLATE */
15101
15102 #ifdef USE_LOCALE_NUMERIC
15103     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15104     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15105 #endif /* !USE_LOCALE_NUMERIC */
15106
15107     /* Unicode inversion lists */
15108     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15109     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15110     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15111     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15112
15113     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15114     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15115
15116     /* utf8 character class swashes */
15117     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15118         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15119     }
15120     for (i = 0; i < POSIX_CC_COUNT; i++) {
15121         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15122     }
15123     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15124     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15125     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15126     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15127     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15128     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15129     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15130     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15131     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15132     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15133     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15134     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15135     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15136     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15137     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15138     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15139     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15140
15141     if (proto_perl->Ipsig_pend) {
15142         Newxz(PL_psig_pend, SIG_SIZE, int);
15143     }
15144     else {
15145         PL_psig_pend    = (int*)NULL;
15146     }
15147
15148     if (proto_perl->Ipsig_name) {
15149         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15150         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15151                             param);
15152         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15153     }
15154     else {
15155         PL_psig_ptr     = (SV**)NULL;
15156         PL_psig_name    = (SV**)NULL;
15157     }
15158
15159     if (flags & CLONEf_COPY_STACKS) {
15160         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15161         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15162                             PL_tmps_ix+1, param);
15163
15164         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15165         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15166         Newxz(PL_markstack, i, I32);
15167         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15168                                                   - proto_perl->Imarkstack);
15169         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15170                                                   - proto_perl->Imarkstack);
15171         Copy(proto_perl->Imarkstack, PL_markstack,
15172              PL_markstack_ptr - PL_markstack + 1, I32);
15173
15174         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15175          * NOTE: unlike the others! */
15176         Newxz(PL_scopestack, PL_scopestack_max, I32);
15177         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15178
15179 #ifdef DEBUGGING
15180         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15181         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15182 #endif
15183         /* reset stack AV to correct length before its duped via
15184          * PL_curstackinfo */
15185         AvFILLp(proto_perl->Icurstack) =
15186                             proto_perl->Istack_sp - proto_perl->Istack_base;
15187
15188         /* NOTE: si_dup() looks at PL_markstack */
15189         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15190
15191         /* PL_curstack          = PL_curstackinfo->si_stack; */
15192         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15193         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15194
15195         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15196         PL_stack_base           = AvARRAY(PL_curstack);
15197         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15198                                                    - proto_perl->Istack_base);
15199         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15200
15201         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15202         PL_savestack            = ss_dup(proto_perl, param);
15203     }
15204     else {
15205         init_stacks();
15206         ENTER;                  /* perl_destruct() wants to LEAVE; */
15207     }
15208
15209     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15210     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15211
15212     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15213     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15214     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15215     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15216     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15217     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15218
15219     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15220
15221     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15222     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15223     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15224
15225     PL_stashcache       = newHV();
15226
15227     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15228                                             proto_perl->Iwatchaddr);
15229     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15230     if (PL_debug && PL_watchaddr) {
15231         PerlIO_printf(Perl_debug_log,
15232           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15233           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15234           PTR2UV(PL_watchok));
15235     }
15236
15237     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15238     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15239     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15240
15241     /* Call the ->CLONE method, if it exists, for each of the stashes
15242        identified by sv_dup() above.
15243     */
15244     while(av_tindex(param->stashes) != -1) {
15245         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15246         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15247         if (cloner && GvCV(cloner)) {
15248             dSP;
15249             ENTER;
15250             SAVETMPS;
15251             PUSHMARK(SP);
15252             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15253             PUTBACK;
15254             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15255             FREETMPS;
15256             LEAVE;
15257         }
15258     }
15259
15260     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15261         ptr_table_free(PL_ptr_table);
15262         PL_ptr_table = NULL;
15263     }
15264
15265     if (!(flags & CLONEf_COPY_STACKS)) {
15266         unreferenced_to_tmp_stack(param->unreferenced);
15267     }
15268
15269     SvREFCNT_dec(param->stashes);
15270
15271     /* orphaned? eg threads->new inside BEGIN or use */
15272     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15273         SvREFCNT_inc_simple_void(PL_compcv);
15274         SAVEFREESV(PL_compcv);
15275     }
15276
15277     return my_perl;
15278 }
15279
15280 static void
15281 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15282 {
15283     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15284     
15285     if (AvFILLp(unreferenced) > -1) {
15286         SV **svp = AvARRAY(unreferenced);
15287         SV **const last = svp + AvFILLp(unreferenced);
15288         SSize_t count = 0;
15289
15290         do {
15291             if (SvREFCNT(*svp) == 1)
15292                 ++count;
15293         } while (++svp <= last);
15294
15295         EXTEND_MORTAL(count);
15296         svp = AvARRAY(unreferenced);
15297
15298         do {
15299             if (SvREFCNT(*svp) == 1) {
15300                 /* Our reference is the only one to this SV. This means that
15301                    in this thread, the scalar effectively has a 0 reference.
15302                    That doesn't work (cleanup never happens), so donate our
15303                    reference to it onto the save stack. */
15304                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15305             } else {
15306                 /* As an optimisation, because we are already walking the
15307                    entire array, instead of above doing either
15308                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15309                    release our reference to the scalar, so that at the end of
15310                    the array owns zero references to the scalars it happens to
15311                    point to. We are effectively converting the array from
15312                    AvREAL() on to AvREAL() off. This saves the av_clear()
15313                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15314                    walking the array a second time.  */
15315                 SvREFCNT_dec(*svp);
15316             }
15317
15318         } while (++svp <= last);
15319         AvREAL_off(unreferenced);
15320     }
15321     SvREFCNT_dec_NN(unreferenced);
15322 }
15323
15324 void
15325 Perl_clone_params_del(CLONE_PARAMS *param)
15326 {
15327     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15328        happy: */
15329     PerlInterpreter *const to = param->new_perl;
15330     dTHXa(to);
15331     PerlInterpreter *const was = PERL_GET_THX;
15332
15333     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15334
15335     if (was != to) {
15336         PERL_SET_THX(to);
15337     }
15338
15339     SvREFCNT_dec(param->stashes);
15340     if (param->unreferenced)
15341         unreferenced_to_tmp_stack(param->unreferenced);
15342
15343     Safefree(param);
15344
15345     if (was != to) {
15346         PERL_SET_THX(was);
15347     }
15348 }
15349
15350 CLONE_PARAMS *
15351 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15352 {
15353     dVAR;
15354     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15355        does a dTHX; to get the context from thread local storage.
15356        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15357        a version that passes in my_perl.  */
15358     PerlInterpreter *const was = PERL_GET_THX;
15359     CLONE_PARAMS *param;
15360
15361     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15362
15363     if (was != to) {
15364         PERL_SET_THX(to);
15365     }
15366
15367     /* Given that we've set the context, we can do this unshared.  */
15368     Newx(param, 1, CLONE_PARAMS);
15369
15370     param->flags = 0;
15371     param->proto_perl = from;
15372     param->new_perl = to;
15373     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15374     AvREAL_off(param->stashes);
15375     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15376
15377     if (was != to) {
15378         PERL_SET_THX(was);
15379     }
15380     return param;
15381 }
15382
15383 #endif /* USE_ITHREADS */
15384
15385 void
15386 Perl_init_constants(pTHX)
15387 {
15388     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15389     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15390     SvANY(&PL_sv_undef)         = NULL;
15391
15392     SvANY(&PL_sv_no)            = new_XPVNV();
15393     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15394     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15395                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15396                                   |SVp_POK|SVf_POK;
15397
15398     SvANY(&PL_sv_yes)           = new_XPVNV();
15399     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15400     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15401                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15402                                   |SVp_POK|SVf_POK;
15403
15404     SvPV_set(&PL_sv_no, (char*)PL_No);
15405     SvCUR_set(&PL_sv_no, 0);
15406     SvLEN_set(&PL_sv_no, 0);
15407     SvIV_set(&PL_sv_no, 0);
15408     SvNV_set(&PL_sv_no, 0);
15409
15410     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15411     SvCUR_set(&PL_sv_yes, 1);
15412     SvLEN_set(&PL_sv_yes, 0);
15413     SvIV_set(&PL_sv_yes, 1);
15414     SvNV_set(&PL_sv_yes, 1);
15415
15416     PadnamePV(&PL_padname_const) = (char *)PL_No;
15417 }
15418
15419 /*
15420 =head1 Unicode Support
15421
15422 =for apidoc sv_recode_to_utf8
15423
15424 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15425 of C<sv> is assumed to be octets in that encoding, and C<sv>
15426 will be converted into Unicode (and UTF-8).
15427
15428 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15429 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15430 an C<Encode::XS> Encoding object, bad things will happen.
15431 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15432
15433 The PV of C<sv> is returned.
15434
15435 =cut */
15436
15437 char *
15438 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15439 {
15440     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15441
15442     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15443         SV *uni;
15444         STRLEN len;
15445         const char *s;
15446         dSP;
15447         SV *nsv = sv;
15448         ENTER;
15449         PUSHSTACK;
15450         SAVETMPS;
15451         if (SvPADTMP(nsv)) {
15452             nsv = sv_newmortal();
15453             SvSetSV_nosteal(nsv, sv);
15454         }
15455         save_re_context();
15456         PUSHMARK(sp);
15457         EXTEND(SP, 3);
15458         PUSHs(encoding);
15459         PUSHs(nsv);
15460 /*
15461   NI-S 2002/07/09
15462   Passing sv_yes is wrong - it needs to be or'ed set of constants
15463   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15464   remove converted chars from source.
15465
15466   Both will default the value - let them.
15467
15468         XPUSHs(&PL_sv_yes);
15469 */
15470         PUTBACK;
15471         call_method("decode", G_SCALAR);
15472         SPAGAIN;
15473         uni = POPs;
15474         PUTBACK;
15475         s = SvPV_const(uni, len);
15476         if (s != SvPVX_const(sv)) {
15477             SvGROW(sv, len + 1);
15478             Move(s, SvPVX(sv), len + 1, char);
15479             SvCUR_set(sv, len);
15480         }
15481         FREETMPS;
15482         POPSTACK;
15483         LEAVE;
15484         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15485             /* clear pos and any utf8 cache */
15486             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15487             if (mg)
15488                 mg->mg_len = -1;
15489             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15490                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15491         }
15492         SvUTF8_on(sv);
15493         return SvPVX(sv);
15494     }
15495     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15496 }
15497
15498 /*
15499 =for apidoc sv_cat_decode
15500
15501 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15502 assumed to be octets in that encoding and decoding the input starts
15503 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15504 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15505 when the string C<tstr> appears in decoding output or the input ends on
15506 the PV of C<ssv>.  The value which C<offset> points will be modified
15507 to the last input position on C<ssv>.
15508
15509 Returns TRUE if the terminator was found, else returns FALSE.
15510
15511 =cut */
15512
15513 bool
15514 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15515                    SV *ssv, int *offset, char *tstr, int tlen)
15516 {
15517     bool ret = FALSE;
15518
15519     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15520
15521     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15522         SV *offsv;
15523         dSP;
15524         ENTER;
15525         SAVETMPS;
15526         save_re_context();
15527         PUSHMARK(sp);
15528         EXTEND(SP, 6);
15529         PUSHs(encoding);
15530         PUSHs(dsv);
15531         PUSHs(ssv);
15532         offsv = newSViv(*offset);
15533         mPUSHs(offsv);
15534         mPUSHp(tstr, tlen);
15535         PUTBACK;
15536         call_method("cat_decode", G_SCALAR);
15537         SPAGAIN;
15538         ret = SvTRUE(TOPs);
15539         *offset = SvIV(offsv);
15540         PUTBACK;
15541         FREETMPS;
15542         LEAVE;
15543     }
15544     else
15545         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15546     return ret;
15547
15548 }
15549
15550 /* ---------------------------------------------------------------------
15551  *
15552  * support functions for report_uninit()
15553  */
15554
15555 /* the maxiumum size of array or hash where we will scan looking
15556  * for the undefined element that triggered the warning */
15557
15558 #define FUV_MAX_SEARCH_SIZE 1000
15559
15560 /* Look for an entry in the hash whose value has the same SV as val;
15561  * If so, return a mortal copy of the key. */
15562
15563 STATIC SV*
15564 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15565 {
15566     dVAR;
15567     HE **array;
15568     I32 i;
15569
15570     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15571
15572     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15573                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15574         return NULL;
15575
15576     array = HvARRAY(hv);
15577
15578     for (i=HvMAX(hv); i>=0; i--) {
15579         HE *entry;
15580         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15581             if (HeVAL(entry) != val)
15582                 continue;
15583             if (    HeVAL(entry) == &PL_sv_undef ||
15584                     HeVAL(entry) == &PL_sv_placeholder)
15585                 continue;
15586             if (!HeKEY(entry))
15587                 return NULL;
15588             if (HeKLEN(entry) == HEf_SVKEY)
15589                 return sv_mortalcopy(HeKEY_sv(entry));
15590             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15591         }
15592     }
15593     return NULL;
15594 }
15595
15596 /* Look for an entry in the array whose value has the same SV as val;
15597  * If so, return the index, otherwise return -1. */
15598
15599 STATIC I32
15600 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15601 {
15602     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15603
15604     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15605                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15606         return -1;
15607
15608     if (val != &PL_sv_undef) {
15609         SV ** const svp = AvARRAY(av);
15610         I32 i;
15611
15612         for (i=AvFILLp(av); i>=0; i--)
15613             if (svp[i] == val)
15614                 return i;
15615     }
15616     return -1;
15617 }
15618
15619 /* varname(): return the name of a variable, optionally with a subscript.
15620  * If gv is non-zero, use the name of that global, along with gvtype (one
15621  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15622  * targ.  Depending on the value of the subscript_type flag, return:
15623  */
15624
15625 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15626 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15627 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15628 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15629
15630 SV*
15631 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15632         const SV *const keyname, I32 aindex, int subscript_type)
15633 {
15634
15635     SV * const name = sv_newmortal();
15636     if (gv && isGV(gv)) {
15637         char buffer[2];
15638         buffer[0] = gvtype;
15639         buffer[1] = 0;
15640
15641         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15642
15643         gv_fullname4(name, gv, buffer, 0);
15644
15645         if ((unsigned int)SvPVX(name)[1] <= 26) {
15646             buffer[0] = '^';
15647             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15648
15649             /* Swap the 1 unprintable control character for the 2 byte pretty
15650                version - ie substr($name, 1, 1) = $buffer; */
15651             sv_insert(name, 1, 1, buffer, 2);
15652         }
15653     }
15654     else {
15655         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15656         PADNAME *sv;
15657
15658         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15659
15660         if (!cv || !CvPADLIST(cv))
15661             return NULL;
15662         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15663         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15664         SvUTF8_on(name);
15665     }
15666
15667     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15668         SV * const sv = newSV(0);
15669         *SvPVX(name) = '$';
15670         Perl_sv_catpvf(aTHX_ name, "{%s}",
15671             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15672                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15673         SvREFCNT_dec_NN(sv);
15674     }
15675     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15676         *SvPVX(name) = '$';
15677         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15678     }
15679     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15680         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15681         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15682     }
15683
15684     return name;
15685 }
15686
15687
15688 /*
15689 =for apidoc find_uninit_var
15690
15691 Find the name of the undefined variable (if any) that caused the operator
15692 to issue a "Use of uninitialized value" warning.
15693 If match is true, only return a name if its value matches C<uninit_sv>.
15694 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15695 warning, then following the direct child of the op may yield an
15696 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15697 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15698 the variable name if we get an exact match.
15699 C<desc_p> points to a string pointer holding the description of the op.
15700 This may be updated if needed.
15701
15702 The name is returned as a mortal SV.
15703
15704 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15705 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15706
15707 =cut
15708 */
15709
15710 STATIC SV *
15711 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15712                   bool match, const char **desc_p)
15713 {
15714     dVAR;
15715     SV *sv;
15716     const GV *gv;
15717     const OP *o, *o2, *kid;
15718
15719     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15720
15721     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15722                             uninit_sv == &PL_sv_placeholder)))
15723         return NULL;
15724
15725     switch (obase->op_type) {
15726
15727     case OP_RV2AV:
15728     case OP_RV2HV:
15729     case OP_PADAV:
15730     case OP_PADHV:
15731       {
15732         const bool pad  = (    obase->op_type == OP_PADAV
15733                             || obase->op_type == OP_PADHV
15734                             || obase->op_type == OP_PADRANGE
15735                           );
15736
15737         const bool hash = (    obase->op_type == OP_PADHV
15738                             || obase->op_type == OP_RV2HV
15739                             || (obase->op_type == OP_PADRANGE
15740                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15741                           );
15742         I32 index = 0;
15743         SV *keysv = NULL;
15744         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15745
15746         if (pad) { /* @lex, %lex */
15747             sv = PAD_SVl(obase->op_targ);
15748             gv = NULL;
15749         }
15750         else {
15751             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15752             /* @global, %global */
15753                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15754                 if (!gv)
15755                     break;
15756                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15757             }
15758             else if (obase == PL_op) /* @{expr}, %{expr} */
15759                 return find_uninit_var(cUNOPx(obase)->op_first,
15760                                                 uninit_sv, match, desc_p);
15761             else /* @{expr}, %{expr} as a sub-expression */
15762                 return NULL;
15763         }
15764
15765         /* attempt to find a match within the aggregate */
15766         if (hash) {
15767             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15768             if (keysv)
15769                 subscript_type = FUV_SUBSCRIPT_HASH;
15770         }
15771         else {
15772             index = find_array_subscript((const AV *)sv, uninit_sv);
15773             if (index >= 0)
15774                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15775         }
15776
15777         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15778             break;
15779
15780         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15781                                     keysv, index, subscript_type);
15782       }
15783
15784     case OP_RV2SV:
15785         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15786             /* $global */
15787             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15788             if (!gv || !GvSTASH(gv))
15789                 break;
15790             if (match && (GvSV(gv) != uninit_sv))
15791                 break;
15792             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15793         }
15794         /* ${expr} */
15795         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15796
15797     case OP_PADSV:
15798         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15799             break;
15800         return varname(NULL, '$', obase->op_targ,
15801                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15802
15803     case OP_GVSV:
15804         gv = cGVOPx_gv(obase);
15805         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15806             break;
15807         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15808
15809     case OP_AELEMFAST_LEX:
15810         if (match) {
15811             SV **svp;
15812             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15813             if (!av || SvRMAGICAL(av))
15814                 break;
15815             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15816             if (!svp || *svp != uninit_sv)
15817                 break;
15818         }
15819         return varname(NULL, '$', obase->op_targ,
15820                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15821     case OP_AELEMFAST:
15822         {
15823             gv = cGVOPx_gv(obase);
15824             if (!gv)
15825                 break;
15826             if (match) {
15827                 SV **svp;
15828                 AV *const av = GvAV(gv);
15829                 if (!av || SvRMAGICAL(av))
15830                     break;
15831                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15832                 if (!svp || *svp != uninit_sv)
15833                     break;
15834             }
15835             return varname(gv, '$', 0,
15836                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15837         }
15838         NOT_REACHED; /* NOTREACHED */
15839
15840     case OP_EXISTS:
15841         o = cUNOPx(obase)->op_first;
15842         if (!o || o->op_type != OP_NULL ||
15843                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15844             break;
15845         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15846
15847     case OP_AELEM:
15848     case OP_HELEM:
15849     {
15850         bool negate = FALSE;
15851
15852         if (PL_op == obase)
15853             /* $a[uninit_expr] or $h{uninit_expr} */
15854             return find_uninit_var(cBINOPx(obase)->op_last,
15855                                                 uninit_sv, match, desc_p);
15856
15857         gv = NULL;
15858         o = cBINOPx(obase)->op_first;
15859         kid = cBINOPx(obase)->op_last;
15860
15861         /* get the av or hv, and optionally the gv */
15862         sv = NULL;
15863         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15864             sv = PAD_SV(o->op_targ);
15865         }
15866         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15867                 && cUNOPo->op_first->op_type == OP_GV)
15868         {
15869             gv = cGVOPx_gv(cUNOPo->op_first);
15870             if (!gv)
15871                 break;
15872             sv = o->op_type
15873                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15874         }
15875         if (!sv)
15876             break;
15877
15878         if (kid && kid->op_type == OP_NEGATE) {
15879             negate = TRUE;
15880             kid = cUNOPx(kid)->op_first;
15881         }
15882
15883         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15884             /* index is constant */
15885             SV* kidsv;
15886             if (negate) {
15887                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15888                 sv_catsv(kidsv, cSVOPx_sv(kid));
15889             }
15890             else
15891                 kidsv = cSVOPx_sv(kid);
15892             if (match) {
15893                 if (SvMAGICAL(sv))
15894                     break;
15895                 if (obase->op_type == OP_HELEM) {
15896                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15897                     if (!he || HeVAL(he) != uninit_sv)
15898                         break;
15899                 }
15900                 else {
15901                     SV * const  opsv = cSVOPx_sv(kid);
15902                     const IV  opsviv = SvIV(opsv);
15903                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15904                         negate ? - opsviv : opsviv,
15905                         FALSE);
15906                     if (!svp || *svp != uninit_sv)
15907                         break;
15908                 }
15909             }
15910             if (obase->op_type == OP_HELEM)
15911                 return varname(gv, '%', o->op_targ,
15912                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15913             else
15914                 return varname(gv, '@', o->op_targ, NULL,
15915                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15916                     FUV_SUBSCRIPT_ARRAY);
15917         }
15918         else  {
15919             /* index is an expression;
15920              * attempt to find a match within the aggregate */
15921             if (obase->op_type == OP_HELEM) {
15922                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15923                 if (keysv)
15924                     return varname(gv, '%', o->op_targ,
15925                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15926             }
15927             else {
15928                 const I32 index
15929                     = find_array_subscript((const AV *)sv, uninit_sv);
15930                 if (index >= 0)
15931                     return varname(gv, '@', o->op_targ,
15932                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15933             }
15934             if (match)
15935                 break;
15936             return varname(gv,
15937                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15938                 ? '@' : '%'),
15939                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15940         }
15941         NOT_REACHED; /* NOTREACHED */
15942     }
15943
15944     case OP_MULTIDEREF: {
15945         /* If we were executing OP_MULTIDEREF when the undef warning
15946          * triggered, then it must be one of the index values within
15947          * that triggered it. If not, then the only possibility is that
15948          * the value retrieved by the last aggregate lookup might be the
15949          * culprit. For the former, we set PL_multideref_pc each time before
15950          * using an index, so work though the item list until we reach
15951          * that point. For the latter, just work through the entire item
15952          * list; the last aggregate retrieved will be the candidate.
15953          */
15954
15955         /* the named aggregate, if any */
15956         PADOFFSET agg_targ = 0;
15957         GV       *agg_gv   = NULL;
15958         /* the last-seen index */
15959         UV        index_type;
15960         PADOFFSET index_targ;
15961         GV       *index_gv;
15962         IV        index_const_iv = 0; /* init for spurious compiler warn */
15963         SV       *index_const_sv;
15964         int       depth = 0;  /* how many array/hash lookups we've done */
15965
15966         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15967         UNOP_AUX_item *last = NULL;
15968         UV actions = items->uv;
15969         bool is_hv;
15970
15971         if (PL_op == obase) {
15972             last = PL_multideref_pc;
15973             assert(last >= items && last <= items + items[-1].uv);
15974         }
15975
15976         assert(actions);
15977
15978         while (1) {
15979             is_hv = FALSE;
15980             switch (actions & MDEREF_ACTION_MASK) {
15981
15982             case MDEREF_reload:
15983                 actions = (++items)->uv;
15984                 continue;
15985
15986             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15987                 is_hv = TRUE;
15988                 /* FALLTHROUGH */
15989             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15990                 agg_targ = (++items)->pad_offset;
15991                 agg_gv = NULL;
15992                 break;
15993
15994             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15995                 is_hv = TRUE;
15996                 /* FALLTHROUGH */
15997             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15998                 agg_targ = 0;
15999                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16000                 assert(isGV_with_GP(agg_gv));
16001                 break;
16002
16003             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16004             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16005                 ++items;
16006                 /* FALLTHROUGH */
16007             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16008             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16009                 agg_targ = 0;
16010                 agg_gv   = NULL;
16011                 is_hv    = TRUE;
16012                 break;
16013
16014             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16015             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16016                 ++items;
16017                 /* FALLTHROUGH */
16018             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16019             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16020                 agg_targ = 0;
16021                 agg_gv   = NULL;
16022             } /* switch */
16023
16024             index_targ     = 0;
16025             index_gv       = NULL;
16026             index_const_sv = NULL;
16027
16028             index_type = (actions & MDEREF_INDEX_MASK);
16029             switch (index_type) {
16030             case MDEREF_INDEX_none:
16031                 break;
16032             case MDEREF_INDEX_const:
16033                 if (is_hv)
16034                     index_const_sv = UNOP_AUX_item_sv(++items)
16035                 else
16036                     index_const_iv = (++items)->iv;
16037                 break;
16038             case MDEREF_INDEX_padsv:
16039                 index_targ = (++items)->pad_offset;
16040                 break;
16041             case MDEREF_INDEX_gvsv:
16042                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16043                 assert(isGV_with_GP(index_gv));
16044                 break;
16045             }
16046
16047             if (index_type != MDEREF_INDEX_none)
16048                 depth++;
16049
16050             if (   index_type == MDEREF_INDEX_none
16051                 || (actions & MDEREF_FLAG_last)
16052                 || (last && items == last)
16053             )
16054                 break;
16055
16056             actions >>= MDEREF_SHIFT;
16057         } /* while */
16058
16059         if (PL_op == obase) {
16060             /* index was undef */
16061
16062             *desc_p = (    (actions & MDEREF_FLAG_last)
16063                         && (obase->op_private
16064                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16065                         ?
16066                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16067                                 ? "exists"
16068                                 : "delete"
16069                         : is_hv ? "hash element" : "array element";
16070             assert(index_type != MDEREF_INDEX_none);
16071             if (index_gv)
16072                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16073             if (index_targ)
16074                 return varname(NULL, '$', index_targ,
16075                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16076             assert(is_hv); /* AV index is an IV and can't be undef */
16077             /* can a const HV index ever be undef? */
16078             return NULL;
16079         }
16080
16081         /* the SV returned by pp_multideref() was undef, if anything was */
16082
16083         if (depth != 1)
16084             break;
16085
16086         if (agg_targ)
16087             sv = PAD_SV(agg_targ);
16088         else if (agg_gv)
16089             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16090         else
16091             break;
16092
16093         if (index_type == MDEREF_INDEX_const) {
16094             if (match) {
16095                 if (SvMAGICAL(sv))
16096                     break;
16097                 if (is_hv) {
16098                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16099                     if (!he || HeVAL(he) != uninit_sv)
16100                         break;
16101                 }
16102                 else {
16103                     SV * const * const svp =
16104                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16105                     if (!svp || *svp != uninit_sv)
16106                         break;
16107                 }
16108             }
16109             return is_hv
16110                 ? varname(agg_gv, '%', agg_targ,
16111                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16112                 : varname(agg_gv, '@', agg_targ,
16113                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16114         }
16115         else  {
16116             /* index is an var */
16117             if (is_hv) {
16118                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16119                 if (keysv)
16120                     return varname(agg_gv, '%', agg_targ,
16121                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16122             }
16123             else {
16124                 const I32 index
16125                     = find_array_subscript((const AV *)sv, uninit_sv);
16126                 if (index >= 0)
16127                     return varname(agg_gv, '@', agg_targ,
16128                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16129             }
16130             if (match)
16131                 break;
16132             return varname(agg_gv,
16133                 is_hv ? '%' : '@',
16134                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16135         }
16136         NOT_REACHED; /* NOTREACHED */
16137     }
16138
16139     case OP_AASSIGN:
16140         /* only examine RHS */
16141         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16142                                                                 match, desc_p);
16143
16144     case OP_OPEN:
16145         o = cUNOPx(obase)->op_first;
16146         if (   o->op_type == OP_PUSHMARK
16147            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16148         )
16149             o = OpSIBLING(o);
16150
16151         if (!OpHAS_SIBLING(o)) {
16152             /* one-arg version of open is highly magical */
16153
16154             if (o->op_type == OP_GV) { /* open FOO; */
16155                 gv = cGVOPx_gv(o);
16156                 if (match && GvSV(gv) != uninit_sv)
16157                     break;
16158                 return varname(gv, '$', 0,
16159                             NULL, 0, FUV_SUBSCRIPT_NONE);
16160             }
16161             /* other possibilities not handled are:
16162              * open $x; or open my $x;  should return '${*$x}'
16163              * open expr;               should return '$'.expr ideally
16164              */
16165              break;
16166         }
16167         goto do_op;
16168
16169     /* ops where $_ may be an implicit arg */
16170     case OP_TRANS:
16171     case OP_TRANSR:
16172     case OP_SUBST:
16173     case OP_MATCH:
16174         if ( !(obase->op_flags & OPf_STACKED)) {
16175             if (uninit_sv == DEFSV)
16176                 return newSVpvs_flags("$_", SVs_TEMP);
16177             else if (obase->op_targ
16178                   && uninit_sv == PAD_SVl(obase->op_targ))
16179                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16180                                FUV_SUBSCRIPT_NONE);
16181         }
16182         goto do_op;
16183
16184     case OP_PRTF:
16185     case OP_PRINT:
16186     case OP_SAY:
16187         match = 1; /* print etc can return undef on defined args */
16188         /* skip filehandle as it can't produce 'undef' warning  */
16189         o = cUNOPx(obase)->op_first;
16190         if ((obase->op_flags & OPf_STACKED)
16191             &&
16192                (   o->op_type == OP_PUSHMARK
16193                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16194             o = OpSIBLING(OpSIBLING(o));
16195         goto do_op2;
16196
16197
16198     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16199     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16200
16201         /* the following ops are capable of returning PL_sv_undef even for
16202          * defined arg(s) */
16203
16204     case OP_BACKTICK:
16205     case OP_PIPE_OP:
16206     case OP_FILENO:
16207     case OP_BINMODE:
16208     case OP_TIED:
16209     case OP_GETC:
16210     case OP_SYSREAD:
16211     case OP_SEND:
16212     case OP_IOCTL:
16213     case OP_SOCKET:
16214     case OP_SOCKPAIR:
16215     case OP_BIND:
16216     case OP_CONNECT:
16217     case OP_LISTEN:
16218     case OP_ACCEPT:
16219     case OP_SHUTDOWN:
16220     case OP_SSOCKOPT:
16221     case OP_GETPEERNAME:
16222     case OP_FTRREAD:
16223     case OP_FTRWRITE:
16224     case OP_FTREXEC:
16225     case OP_FTROWNED:
16226     case OP_FTEREAD:
16227     case OP_FTEWRITE:
16228     case OP_FTEEXEC:
16229     case OP_FTEOWNED:
16230     case OP_FTIS:
16231     case OP_FTZERO:
16232     case OP_FTSIZE:
16233     case OP_FTFILE:
16234     case OP_FTDIR:
16235     case OP_FTLINK:
16236     case OP_FTPIPE:
16237     case OP_FTSOCK:
16238     case OP_FTBLK:
16239     case OP_FTCHR:
16240     case OP_FTTTY:
16241     case OP_FTSUID:
16242     case OP_FTSGID:
16243     case OP_FTSVTX:
16244     case OP_FTTEXT:
16245     case OP_FTBINARY:
16246     case OP_FTMTIME:
16247     case OP_FTATIME:
16248     case OP_FTCTIME:
16249     case OP_READLINK:
16250     case OP_OPEN_DIR:
16251     case OP_READDIR:
16252     case OP_TELLDIR:
16253     case OP_SEEKDIR:
16254     case OP_REWINDDIR:
16255     case OP_CLOSEDIR:
16256     case OP_GMTIME:
16257     case OP_ALARM:
16258     case OP_SEMGET:
16259     case OP_GETLOGIN:
16260     case OP_UNDEF:
16261     case OP_SUBSTR:
16262     case OP_AEACH:
16263     case OP_EACH:
16264     case OP_SORT:
16265     case OP_CALLER:
16266     case OP_DOFILE:
16267     case OP_PROTOTYPE:
16268     case OP_NCMP:
16269     case OP_SMARTMATCH:
16270     case OP_UNPACK:
16271     case OP_SYSOPEN:
16272     case OP_SYSSEEK:
16273         match = 1;
16274         goto do_op;
16275
16276     case OP_ENTERSUB:
16277     case OP_GOTO:
16278         /* XXX tmp hack: these two may call an XS sub, and currently
16279           XS subs don't have a SUB entry on the context stack, so CV and
16280           pad determination goes wrong, and BAD things happen. So, just
16281           don't try to determine the value under those circumstances.
16282           Need a better fix at dome point. DAPM 11/2007 */
16283         break;
16284
16285     case OP_FLIP:
16286     case OP_FLOP:
16287     {
16288         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16289         if (gv && GvSV(gv) == uninit_sv)
16290             return newSVpvs_flags("$.", SVs_TEMP);
16291         goto do_op;
16292     }
16293
16294     case OP_POS:
16295         /* def-ness of rval pos() is independent of the def-ness of its arg */
16296         if ( !(obase->op_flags & OPf_MOD))
16297             break;
16298
16299     case OP_SCHOMP:
16300     case OP_CHOMP:
16301         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16302             return newSVpvs_flags("${$/}", SVs_TEMP);
16303         /* FALLTHROUGH */
16304
16305     default:
16306     do_op:
16307         if (!(obase->op_flags & OPf_KIDS))
16308             break;
16309         o = cUNOPx(obase)->op_first;
16310         
16311     do_op2:
16312         if (!o)
16313             break;
16314
16315         /* This loop checks all the kid ops, skipping any that cannot pos-
16316          * sibly be responsible for the uninitialized value; i.e., defined
16317          * constants and ops that return nothing.  If there is only one op
16318          * left that is not skipped, then we *know* it is responsible for
16319          * the uninitialized value.  If there is more than one op left, we
16320          * have to look for an exact match in the while() loop below.
16321          * Note that we skip padrange, because the individual pad ops that
16322          * it replaced are still in the tree, so we work on them instead.
16323          */
16324         o2 = NULL;
16325         for (kid=o; kid; kid = OpSIBLING(kid)) {
16326             const OPCODE type = kid->op_type;
16327             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16328               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16329               || (type == OP_PUSHMARK)
16330               || (type == OP_PADRANGE)
16331             )
16332             continue;
16333
16334             if (o2) { /* more than one found */
16335                 o2 = NULL;
16336                 break;
16337             }
16338             o2 = kid;
16339         }
16340         if (o2)
16341             return find_uninit_var(o2, uninit_sv, match, desc_p);
16342
16343         /* scan all args */
16344         while (o) {
16345             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16346             if (sv)
16347                 return sv;
16348             o = OpSIBLING(o);
16349         }
16350         break;
16351     }
16352     return NULL;
16353 }
16354
16355
16356 /*
16357 =for apidoc report_uninit
16358
16359 Print appropriate "Use of uninitialized variable" warning.
16360
16361 =cut
16362 */
16363
16364 void
16365 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16366 {
16367     const char *desc = NULL;
16368     SV* varname = NULL;
16369
16370     if (PL_op) {
16371         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16372                 ? "join or string"
16373                 : OP_DESC(PL_op);
16374         if (uninit_sv && PL_curpad) {
16375             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16376             if (varname)
16377                 sv_insert(varname, 0, 0, " ", 1);
16378         }
16379     }
16380     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16381         /* we've reached the end of a sort block or sub,
16382          * and the uninit value is probably what that code returned */
16383         desc = "sort";
16384
16385     /* PL_warn_uninit_sv is constant */
16386     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16387     if (desc)
16388         /* diag_listed_as: Use of uninitialized value%s */
16389         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16390                 SVfARG(varname ? varname : &PL_sv_no),
16391                 " in ", desc);
16392     else
16393         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16394                 "", "", "");
16395     GCC_DIAG_RESTORE;
16396 }
16397
16398 /*
16399  * ex: set ts=8 sts=4 sw=4 et:
16400  */