This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
svleak.t: Add test for #123198
[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 #ifdef PERL_OLD_COPY_ON_WRITE
129 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
130 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
131 #endif
132
133 /* ============================================================================
134
135 =head1 Allocation and deallocation of SVs.
136 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
137 sv, av, hv...) contains type and reference count information, and for
138 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
139 contains fields specific to each type.  Some types store all they need
140 in the head, so don't have a body.
141
142 In all but the most memory-paranoid configurations (ex: PURIFY), heads
143 and bodies are allocated out of arenas, which by default are
144 approximately 4K chunks of memory parcelled up into N heads or bodies.
145 Sv-bodies are allocated by their sv-type, guaranteeing size
146 consistency needed to allocate safely from arrays.
147
148 For SV-heads, the first slot in each arena is reserved, and holds a
149 link to the next arena, some flags, and a note of the number of slots.
150 Snaked through each arena chain is a linked list of free items; when
151 this becomes empty, an extra arena is allocated and divided up into N
152 items which are threaded into the free list.
153
154 SV-bodies are similar, but they use arena-sets by default, which
155 separate the link and info from the arena itself, and reclaim the 1st
156 slot in the arena.  SV-bodies are further described later.
157
158 The following global variables are associated with arenas:
159
160  PL_sv_arenaroot     pointer to list of SV arenas
161  PL_sv_root          pointer to list of free SV structures
162
163  PL_body_arenas      head of linked-list of body arenas
164  PL_body_roots[]     array of pointers to list of free bodies of svtype
165                      arrays are indexed by the svtype needed
166
167 A few special SV heads are not allocated from an arena, but are
168 instead directly created in the interpreter structure, eg PL_sv_undef.
169 The size of arenas can be changed from the default by setting
170 PERL_ARENA_SIZE appropriately at compile time.
171
172 The SV arena serves the secondary purpose of allowing still-live SVs
173 to be located and destroyed during final cleanup.
174
175 At the lowest level, the macros new_SV() and del_SV() grab and free
176 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
177 to return the SV to the free list with error checking.) new_SV() calls
178 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
179 SVs in the free list have their SvTYPE field set to all ones.
180
181 At the time of very final cleanup, sv_free_arenas() is called from
182 perl_destruct() to physically free all the arenas allocated since the
183 start of the interpreter.
184
185 The function visit() scans the SV arenas list, and calls a specified
186 function for each SV it finds which is still live - ie which has an SvTYPE
187 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
188 following functions (specified as [function that calls visit()] / [function
189 called by visit() for each SV]):
190
191     sv_report_used() / do_report_used()
192                         dump all remaining SVs (debugging aid)
193
194     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
195                       do_clean_named_io_objs(),do_curse()
196                         Attempt to free all objects pointed to by RVs,
197                         try to do the same for all objects indir-
198                         ectly referenced by typeglobs too, and
199                         then do a final sweep, cursing any
200                         objects that remain.  Called once from
201                         perl_destruct(), prior to calling sv_clean_all()
202                         below.
203
204     sv_clean_all() / do_clean_all()
205                         SvREFCNT_dec(sv) each remaining SV, possibly
206                         triggering an sv_free(). It also sets the
207                         SVf_BREAK flag on the SV to indicate that the
208                         refcnt has been artificially lowered, and thus
209                         stopping sv_free() from giving spurious warnings
210                         about SVs which unexpectedly have a refcnt
211                         of zero.  called repeatedly from perl_destruct()
212                         until there are no SVs left.
213
214 =head2 Arena allocator API Summary
215
216 Private API to rest of sv.c
217
218     new_SV(),  del_SV(),
219
220     new_XPVNV(), del_XPVGV(),
221     etc
222
223 Public API:
224
225     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
226
227 =cut
228
229  * ========================================================================= */
230
231 /*
232  * "A time to plant, and a time to uproot what was planted..."
233  */
234
235 #ifdef PERL_MEM_LOG
236 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
237             Perl_mem_log_new_sv(sv, file, line, func)
238 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
239             Perl_mem_log_del_sv(sv, file, line, func)
240 #else
241 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
242 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
243 #endif
244
245 #ifdef DEBUG_LEAKING_SCALARS
246 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
247         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
248     } STMT_END
249 #  define DEBUG_SV_SERIAL(sv)                                               \
250     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
251             PTR2UV(sv), (long)(sv)->sv_debug_serial))
252 #else
253 #  define FREE_SV_DEBUG_FILE(sv)
254 #  define DEBUG_SV_SERIAL(sv)   NOOP
255 #endif
256
257 #ifdef PERL_POISON
258 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
259 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
260 /* Whilst I'd love to do this, it seems that things like to check on
261    unreferenced scalars
262 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
263 */
264 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
265                                 PoisonNew(&SvREFCNT(sv), 1, U32)
266 #else
267 #  define SvARENA_CHAIN(sv)     SvANY(sv)
268 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
269 #  define POISON_SV_HEAD(sv)
270 #endif
271
272 /* Mark an SV head as unused, and add to free list.
273  *
274  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
275  * its refcount artificially decremented during global destruction, so
276  * there may be dangling pointers to it. The last thing we want in that
277  * case is for it to be reused. */
278
279 #define plant_SV(p) \
280     STMT_START {                                        \
281         const U32 old_flags = SvFLAGS(p);                       \
282         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
283         DEBUG_SV_SERIAL(p);                             \
284         FREE_SV_DEBUG_FILE(p);                          \
285         POISON_SV_HEAD(p);                              \
286         SvFLAGS(p) = SVTYPEMASK;                        \
287         if (!(old_flags & SVf_BREAK)) {         \
288             SvARENA_CHAIN_SET(p, PL_sv_root);   \
289             PL_sv_root = (p);                           \
290         }                                               \
291         --PL_sv_count;                                  \
292     } STMT_END
293
294 #define uproot_SV(p) \
295     STMT_START {                                        \
296         (p) = PL_sv_root;                               \
297         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
298         ++PL_sv_count;                                  \
299     } STMT_END
300
301
302 /* make some more SVs by adding another arena */
303
304 STATIC SV*
305 S_more_sv(pTHX)
306 {
307     SV* sv;
308     char *chunk;                /* must use New here to match call to */
309     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
310     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
311     uproot_SV(sv);
312     return sv;
313 }
314
315 /* new_SV(): return a new, empty SV head */
316
317 #ifdef DEBUG_LEAKING_SCALARS
318 /* provide a real function for a debugger to play with */
319 STATIC SV*
320 S_new_SV(pTHX_ const char *file, int line, const char *func)
321 {
322     SV* sv;
323
324     if (PL_sv_root)
325         uproot_SV(sv);
326     else
327         sv = S_more_sv(aTHX);
328     SvANY(sv) = 0;
329     SvREFCNT(sv) = 1;
330     SvFLAGS(sv) = 0;
331     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
332     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
333                 ? PL_parser->copline
334                 :  PL_curcop
335                     ? CopLINE(PL_curcop)
336                     : 0
337             );
338     sv->sv_debug_inpad = 0;
339     sv->sv_debug_parent = NULL;
340     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
341
342     sv->sv_debug_serial = PL_sv_serial++;
343
344     MEM_LOG_NEW_SV(sv, file, line, func);
345     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
346             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
347
348     return sv;
349 }
350 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
351
352 #else
353 #  define new_SV(p) \
354     STMT_START {                                        \
355         if (PL_sv_root)                                 \
356             uproot_SV(p);                               \
357         else                                            \
358             (p) = S_more_sv(aTHX);                      \
359         SvANY(p) = 0;                                   \
360         SvREFCNT(p) = 1;                                \
361         SvFLAGS(p) = 0;                                 \
362         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
363     } STMT_END
364 #endif
365
366
367 /* del_SV(): return an empty SV head to the free list */
368
369 #ifdef DEBUGGING
370
371 #define del_SV(p) \
372     STMT_START {                                        \
373         if (DEBUG_D_TEST)                               \
374             del_sv(p);                                  \
375         else                                            \
376             plant_SV(p);                                \
377     } STMT_END
378
379 STATIC void
380 S_del_sv(pTHX_ SV *p)
381 {
382     PERL_ARGS_ASSERT_DEL_SV;
383
384     if (DEBUG_D_TEST) {
385         SV* sva;
386         bool ok = 0;
387         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
388             const SV * const sv = sva + 1;
389             const SV * const svend = &sva[SvREFCNT(sva)];
390             if (p >= sv && p < svend) {
391                 ok = 1;
392                 break;
393             }
394         }
395         if (!ok) {
396             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
397                              "Attempt to free non-arena SV: 0x%"UVxf
398                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
399             return;
400         }
401     }
402     plant_SV(p);
403 }
404
405 #else /* ! DEBUGGING */
406
407 #define del_SV(p)   plant_SV(p)
408
409 #endif /* DEBUGGING */
410
411
412 /*
413 =head1 SV Manipulation Functions
414
415 =for apidoc sv_add_arena
416
417 Given a chunk of memory, link it to the head of the list of arenas,
418 and split it into a list of free SVs.
419
420 =cut
421 */
422
423 static void
424 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
425 {
426     SV *const sva = MUTABLE_SV(ptr);
427     SV* sv;
428     SV* svend;
429
430     PERL_ARGS_ASSERT_SV_ADD_ARENA;
431
432     /* The first SV in an arena isn't an SV. */
433     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
434     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
435     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
436
437     PL_sv_arenaroot = sva;
438     PL_sv_root = sva + 1;
439
440     svend = &sva[SvREFCNT(sva) - 1];
441     sv = sva + 1;
442     while (sv < svend) {
443         SvARENA_CHAIN_SET(sv, (sv + 1));
444 #ifdef DEBUGGING
445         SvREFCNT(sv) = 0;
446 #endif
447         /* Must always set typemask because it's always checked in on cleanup
448            when the arenas are walked looking for objects.  */
449         SvFLAGS(sv) = SVTYPEMASK;
450         sv++;
451     }
452     SvARENA_CHAIN_SET(sv, 0);
453 #ifdef DEBUGGING
454     SvREFCNT(sv) = 0;
455 #endif
456     SvFLAGS(sv) = SVTYPEMASK;
457 }
458
459 /* visit(): call the named function for each non-free SV in the arenas
460  * whose flags field matches the flags/mask args. */
461
462 STATIC I32
463 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
464 {
465     SV* sva;
466     I32 visited = 0;
467
468     PERL_ARGS_ASSERT_VISIT;
469
470     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
471         const SV * const svend = &sva[SvREFCNT(sva)];
472         SV* sv;
473         for (sv = sva + 1; sv < svend; ++sv) {
474             if (SvTYPE(sv) != (svtype)SVTYPEMASK
475                     && (sv->sv_flags & mask) == flags
476                     && SvREFCNT(sv))
477             {
478                 (*f)(aTHX_ sv);
479                 ++visited;
480             }
481         }
482     }
483     return visited;
484 }
485
486 #ifdef DEBUGGING
487
488 /* called by sv_report_used() for each live SV */
489
490 static void
491 do_report_used(pTHX_ SV *const sv)
492 {
493     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
494         PerlIO_printf(Perl_debug_log, "****\n");
495         sv_dump(sv);
496     }
497 }
498 #endif
499
500 /*
501 =for apidoc sv_report_used
502
503 Dump the contents of all SVs not yet freed (debugging aid).
504
505 =cut
506 */
507
508 void
509 Perl_sv_report_used(pTHX)
510 {
511 #ifdef DEBUGGING
512     visit(do_report_used, 0, 0);
513 #else
514     PERL_UNUSED_CONTEXT;
515 #endif
516 }
517
518 /* called by sv_clean_objs() for each live SV */
519
520 static void
521 do_clean_objs(pTHX_ SV *const ref)
522 {
523     assert (SvROK(ref));
524     {
525         SV * const target = SvRV(ref);
526         if (SvOBJECT(target)) {
527             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
528             if (SvWEAKREF(ref)) {
529                 sv_del_backref(target, ref);
530                 SvWEAKREF_off(ref);
531                 SvRV_set(ref, NULL);
532             } else {
533                 SvROK_off(ref);
534                 SvRV_set(ref, NULL);
535                 SvREFCNT_dec_NN(target);
536             }
537         }
538     }
539 }
540
541
542 /* clear any slots in a GV which hold objects - except IO;
543  * called by sv_clean_objs() for each live GV */
544
545 static void
546 do_clean_named_objs(pTHX_ SV *const sv)
547 {
548     SV *obj;
549     assert(SvTYPE(sv) == SVt_PVGV);
550     assert(isGV_with_GP(sv));
551     if (!GvGP(sv))
552         return;
553
554     /* freeing GP entries may indirectly free the current GV;
555      * hold onto it while we mess with the GP slots */
556     SvREFCNT_inc(sv);
557
558     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
559         DEBUG_D((PerlIO_printf(Perl_debug_log,
560                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
561         GvSV(sv) = NULL;
562         SvREFCNT_dec_NN(obj);
563     }
564     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
565         DEBUG_D((PerlIO_printf(Perl_debug_log,
566                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
567         GvAV(sv) = NULL;
568         SvREFCNT_dec_NN(obj);
569     }
570     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
571         DEBUG_D((PerlIO_printf(Perl_debug_log,
572                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
573         GvHV(sv) = NULL;
574         SvREFCNT_dec_NN(obj);
575     }
576     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
577         DEBUG_D((PerlIO_printf(Perl_debug_log,
578                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
579         GvCV_set(sv, NULL);
580         SvREFCNT_dec_NN(obj);
581     }
582     SvREFCNT_dec_NN(sv); /* undo the inc above */
583 }
584
585 /* clear any IO slots in a GV which hold objects (except stderr, defout);
586  * called by sv_clean_objs() for each live GV */
587
588 static void
589 do_clean_named_io_objs(pTHX_ SV *const sv)
590 {
591     SV *obj;
592     assert(SvTYPE(sv) == SVt_PVGV);
593     assert(isGV_with_GP(sv));
594     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
595         return;
596
597     SvREFCNT_inc(sv);
598     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
599         DEBUG_D((PerlIO_printf(Perl_debug_log,
600                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
601         GvIOp(sv) = NULL;
602         SvREFCNT_dec_NN(obj);
603     }
604     SvREFCNT_dec_NN(sv); /* undo the inc above */
605 }
606
607 /* Void wrapper to pass to visit() */
608 static void
609 do_curse(pTHX_ SV * const sv) {
610     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
611      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
612         return;
613     if (SvPAD_NAME(sv))
614         return;
615     (void)curse(sv, 0);
616 }
617
618 /*
619 =for apidoc sv_clean_objs
620
621 Attempt to destroy all objects not yet freed.
622
623 =cut
624 */
625
626 void
627 Perl_sv_clean_objs(pTHX)
628 {
629     GV *olddef, *olderr;
630     PL_in_clean_objs = TRUE;
631     visit(do_clean_objs, SVf_ROK, SVf_ROK);
632     /* Some barnacles may yet remain, clinging to typeglobs.
633      * Run the non-IO destructors first: they may want to output
634      * error messages, close files etc */
635     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
636     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
637     /* And if there are some very tenacious barnacles clinging to arrays,
638        closures, or what have you.... */
639     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
640     olddef = PL_defoutgv;
641     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
642     if (olddef && isGV_with_GP(olddef))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
644     olderr = PL_stderrgv;
645     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
646     if (olderr && isGV_with_GP(olderr))
647         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
648     SvREFCNT_dec(olddef);
649     PL_in_clean_objs = FALSE;
650 }
651
652 /* called by sv_clean_all() for each live SV */
653
654 static void
655 do_clean_all(pTHX_ SV *const sv)
656 {
657     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
658         /* don't clean pid table and strtab */
659         return;
660     }
661     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
662     SvFLAGS(sv) |= SVf_BREAK;
663     SvREFCNT_dec_NN(sv);
664 }
665
666 /*
667 =for apidoc sv_clean_all
668
669 Decrement the refcnt of each remaining SV, possibly triggering a
670 cleanup.  This function may have to be called multiple times to free
671 SVs which are in complex self-referential hierarchies.
672
673 =cut
674 */
675
676 I32
677 Perl_sv_clean_all(pTHX)
678 {
679     I32 cleaned;
680     PL_in_clean_all = TRUE;
681     cleaned = visit(do_clean_all, 0,0);
682     return cleaned;
683 }
684
685 /*
686   ARENASETS: a meta-arena implementation which separates arena-info
687   into struct arena_set, which contains an array of struct
688   arena_descs, each holding info for a single arena.  By separating
689   the meta-info from the arena, we recover the 1st slot, formerly
690   borrowed for list management.  The arena_set is about the size of an
691   arena, avoiding the needless malloc overhead of a naive linked-list.
692
693   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
694   memory in the last arena-set (1/2 on average).  In trade, we get
695   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
696   smaller types).  The recovery of the wasted space allows use of
697   small arenas for large, rare body types, by changing array* fields
698   in body_details_by_type[] below.
699 */
700 struct arena_desc {
701     char       *arena;          /* the raw storage, allocated aligned */
702     size_t      size;           /* its size ~4k typ */
703     svtype      utype;          /* bodytype stored in arena */
704 };
705
706 struct arena_set;
707
708 /* Get the maximum number of elements in set[] such that struct arena_set
709    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
710    therefore likely to be 1 aligned memory page.  */
711
712 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
713                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
714
715 struct arena_set {
716     struct arena_set* next;
717     unsigned int   set_size;    /* ie ARENAS_PER_SET */
718     unsigned int   curr;        /* index of next available arena-desc */
719     struct arena_desc set[ARENAS_PER_SET];
720 };
721
722 /*
723 =for apidoc sv_free_arenas
724
725 Deallocate the memory used by all arenas.  Note that all the individual SV
726 heads and bodies within the arenas must already have been freed.
727
728 =cut
729
730 */
731 void
732 Perl_sv_free_arenas(pTHX)
733 {
734     SV* sva;
735     SV* svanext;
736     unsigned int i;
737
738     /* Free arenas here, but be careful about fake ones.  (We assume
739        contiguity of the fake ones with the corresponding real ones.) */
740
741     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
742         svanext = MUTABLE_SV(SvANY(sva));
743         while (svanext && SvFAKE(svanext))
744             svanext = MUTABLE_SV(SvANY(svanext));
745
746         if (!SvFAKE(sva))
747             Safefree(sva);
748     }
749
750     {
751         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
752
753         while (aroot) {
754             struct arena_set *current = aroot;
755             i = aroot->curr;
756             while (i--) {
757                 assert(aroot->set[i].arena);
758                 Safefree(aroot->set[i].arena);
759             }
760             aroot = aroot->next;
761             Safefree(current);
762         }
763     }
764     PL_body_arenas = 0;
765
766     i = PERL_ARENA_ROOTS_SIZE;
767     while (i--)
768         PL_body_roots[i] = 0;
769
770     PL_sv_arenaroot = 0;
771     PL_sv_root = 0;
772 }
773
774 /*
775   Here are mid-level routines that manage the allocation of bodies out
776   of the various arenas.  There are 5 kinds of arenas:
777
778   1. SV-head arenas, which are discussed and handled above
779   2. regular body arenas
780   3. arenas for reduced-size bodies
781   4. Hash-Entry arenas
782
783   Arena types 2 & 3 are chained by body-type off an array of
784   arena-root pointers, which is indexed by svtype.  Some of the
785   larger/less used body types are malloced singly, since a large
786   unused block of them is wasteful.  Also, several svtypes dont have
787   bodies; the data fits into the sv-head itself.  The arena-root
788   pointer thus has a few unused root-pointers (which may be hijacked
789   later for arena types 4,5)
790
791   3 differs from 2 as an optimization; some body types have several
792   unused fields in the front of the structure (which are kept in-place
793   for consistency).  These bodies can be allocated in smaller chunks,
794   because the leading fields arent accessed.  Pointers to such bodies
795   are decremented to point at the unused 'ghost' memory, knowing that
796   the pointers are used with offsets to the real memory.
797
798
799 =head1 SV-Body Allocation
800
801 =cut
802
803 Allocation of SV-bodies is similar to SV-heads, differing as follows;
804 the allocation mechanism is used for many body types, so is somewhat
805 more complicated, it uses arena-sets, and has no need for still-live
806 SV detection.
807
808 At the outermost level, (new|del)_X*V macros return bodies of the
809 appropriate type.  These macros call either (new|del)_body_type or
810 (new|del)_body_allocated macro pairs, depending on specifics of the
811 type.  Most body types use the former pair, the latter pair is used to
812 allocate body types with "ghost fields".
813
814 "ghost fields" are fields that are unused in certain types, and
815 consequently don't need to actually exist.  They are declared because
816 they're part of a "base type", which allows use of functions as
817 methods.  The simplest examples are AVs and HVs, 2 aggregate types
818 which don't use the fields which support SCALAR semantics.
819
820 For these types, the arenas are carved up into appropriately sized
821 chunks, we thus avoid wasted memory for those unaccessed members.
822 When bodies are allocated, we adjust the pointer back in memory by the
823 size of the part not allocated, so it's as if we allocated the full
824 structure.  (But things will all go boom if you write to the part that
825 is "not there", because you'll be overwriting the last members of the
826 preceding structure in memory.)
827
828 We calculate the correction using the STRUCT_OFFSET macro on the first
829 member present.  If the allocated structure is smaller (no initial NV
830 actually allocated) then the net effect is to subtract the size of the NV
831 from the pointer, to return a new pointer as if an initial NV were actually
832 allocated.  (We were using structures named *_allocated for this, but
833 this turned out to be a subtle bug, because a structure without an NV
834 could have a lower alignment constraint, but the compiler is allowed to
835 optimised accesses based on the alignment constraint of the actual pointer
836 to the full structure, for example, using a single 64 bit load instruction
837 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
838
839 This is the same trick as was used for NV and IV bodies.  Ironically it
840 doesn't need to be used for NV bodies any more, because NV is now at
841 the start of the structure.  IV bodies, and also in some builds NV bodies,
842 don't need it either, because they are no longer allocated.
843
844 In turn, the new_body_* allocators call S_new_body(), which invokes
845 new_body_inline macro, which takes a lock, and takes a body off the
846 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
847 necessary to refresh an empty list.  Then the lock is released, and
848 the body is returned.
849
850 Perl_more_bodies allocates a new arena, and carves it up into an array of N
851 bodies, which it strings into a linked list.  It looks up arena-size
852 and body-size from the body_details table described below, thus
853 supporting the multiple body-types.
854
855 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
856 the (new|del)_X*V macros are mapped directly to malloc/free.
857
858 For each sv-type, struct body_details bodies_by_type[] carries
859 parameters which control these aspects of SV handling:
860
861 Arena_size determines whether arenas are used for this body type, and if
862 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
863 zero, forcing individual mallocs and frees.
864
865 Body_size determines how big a body is, and therefore how many fit into
866 each arena.  Offset carries the body-pointer adjustment needed for
867 "ghost fields", and is used in *_allocated macros.
868
869 But its main purpose is to parameterize info needed in
870 Perl_sv_upgrade().  The info here dramatically simplifies the function
871 vs the implementation in 5.8.8, making it table-driven.  All fields
872 are used for this, except for arena_size.
873
874 For the sv-types that have no bodies, arenas are not used, so those
875 PL_body_roots[sv_type] are unused, and can be overloaded.  In
876 something of a special case, SVt_NULL is borrowed for HE arenas;
877 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
878 bodies_by_type[SVt_NULL] slot is not used, as the table is not
879 available in hv.c.
880
881 */
882
883 struct body_details {
884     U8 body_size;       /* Size to allocate  */
885     U8 copy;            /* Size of structure to copy (may be shorter)  */
886     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
887     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
888     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
889     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
890     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
891     U32 arena_size;                 /* Size of arena to allocate */
892 };
893
894 #define HADNV FALSE
895 #define NONV TRUE
896
897
898 #ifdef PURIFY
899 /* With -DPURFIY we allocate everything directly, and don't use arenas.
900    This seems a rather elegant way to simplify some of the code below.  */
901 #define HASARENA FALSE
902 #else
903 #define HASARENA TRUE
904 #endif
905 #define NOARENA FALSE
906
907 /* Size the arenas to exactly fit a given number of bodies.  A count
908    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
909    simplifying the default.  If count > 0, the arena is sized to fit
910    only that many bodies, allowing arenas to be used for large, rare
911    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
912    limited by PERL_ARENA_SIZE, so we can safely oversize the
913    declarations.
914  */
915 #define FIT_ARENA0(body_size)                           \
916     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
917 #define FIT_ARENAn(count,body_size)                     \
918     ( count * body_size <= PERL_ARENA_SIZE)             \
919     ? count * body_size                                 \
920     : FIT_ARENA0 (body_size)
921 #define FIT_ARENA(count,body_size)                      \
922    (U32)(count                                          \
923     ? FIT_ARENAn (count, body_size)                     \
924     : FIT_ARENA0 (body_size))
925
926 /* Calculate the length to copy. Specifically work out the length less any
927    final padding the compiler needed to add.  See the comment in sv_upgrade
928    for why copying the padding proved to be a bug.  */
929
930 #define copy_length(type, last_member) \
931         STRUCT_OFFSET(type, last_member) \
932         + sizeof (((type*)SvANY((const SV *)0))->last_member)
933
934 static const struct body_details bodies_by_type[] = {
935     /* HEs use this offset for their arena.  */
936     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
937
938     /* IVs are in the head, so the allocation size is 0.  */
939     { 0,
940       sizeof(IV), /* This is used to copy out the IV body.  */
941       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
942       NOARENA /* IVS don't need an arena  */, 0
943     },
944
945 #if NVSIZE <= IVSIZE
946     { 0, sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, NOARENA, 0 },
949 #else
950     { sizeof(NV), sizeof(NV),
951       STRUCT_OFFSET(XPVNV, xnv_u),
952       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
953 #endif
954
955     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
956       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
957       + STRUCT_OFFSET(XPV, xpv_cur),
958       SVt_PV, FALSE, NONV, HASARENA,
959       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
960
961     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
962       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
963       + STRUCT_OFFSET(XPV, xpv_cur),
964       SVt_INVLIST, TRUE, NONV, HASARENA,
965       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
966
967     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
968       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
969       + STRUCT_OFFSET(XPV, xpv_cur),
970       SVt_PVIV, FALSE, NONV, HASARENA,
971       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
972
973     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
974       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
975       + STRUCT_OFFSET(XPV, xpv_cur),
976       SVt_PVNV, FALSE, HADNV, HASARENA,
977       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
978
979     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
980       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
981
982     { sizeof(regexp),
983       sizeof(regexp),
984       0,
985       SVt_REGEXP, TRUE, NONV, HASARENA,
986       FIT_ARENA(0, sizeof(regexp))
987     },
988
989     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
990       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
991     
992     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
993       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
994
995     { sizeof(XPVAV),
996       copy_length(XPVAV, xav_alloc),
997       0,
998       SVt_PVAV, TRUE, NONV, HASARENA,
999       FIT_ARENA(0, sizeof(XPVAV)) },
1000
1001     { sizeof(XPVHV),
1002       copy_length(XPVHV, xhv_max),
1003       0,
1004       SVt_PVHV, TRUE, NONV, HASARENA,
1005       FIT_ARENA(0, sizeof(XPVHV)) },
1006
1007     { sizeof(XPVCV),
1008       sizeof(XPVCV),
1009       0,
1010       SVt_PVCV, TRUE, NONV, HASARENA,
1011       FIT_ARENA(0, sizeof(XPVCV)) },
1012
1013     { sizeof(XPVFM),
1014       sizeof(XPVFM),
1015       0,
1016       SVt_PVFM, TRUE, NONV, NOARENA,
1017       FIT_ARENA(20, sizeof(XPVFM)) },
1018
1019     { sizeof(XPVIO),
1020       sizeof(XPVIO),
1021       0,
1022       SVt_PVIO, TRUE, NONV, HASARENA,
1023       FIT_ARENA(24, sizeof(XPVIO)) },
1024 };
1025
1026 #define new_body_allocated(sv_type)             \
1027     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1028              - bodies_by_type[sv_type].offset)
1029
1030 /* return a thing to the free list */
1031
1032 #define del_body(thing, root)                           \
1033     STMT_START {                                        \
1034         void ** const thing_copy = (void **)thing;      \
1035         *thing_copy = *root;                            \
1036         *root = (void*)thing_copy;                      \
1037     } STMT_END
1038
1039 #ifdef PURIFY
1040 #if !(NVSIZE <= IVSIZE)
1041 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1042 #endif
1043 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1044 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1045
1046 #define del_XPVGV(p)    safefree(p)
1047
1048 #else /* !PURIFY */
1049
1050 #if !(NVSIZE <= IVSIZE)
1051 #  define new_XNV()     new_body_allocated(SVt_NV)
1052 #endif
1053 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1054 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1055
1056 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1057                                  &PL_body_roots[SVt_PVGV])
1058
1059 #endif /* PURIFY */
1060
1061 /* no arena for you! */
1062
1063 #define new_NOARENA(details) \
1064         safemalloc((details)->body_size + (details)->offset)
1065 #define new_NOARENAZ(details) \
1066         safecalloc((details)->body_size + (details)->offset, 1)
1067
1068 void *
1069 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1070                   const size_t arena_size)
1071 {
1072     void ** const root = &PL_body_roots[sv_type];
1073     struct arena_desc *adesc;
1074     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1075     unsigned int curr;
1076     char *start;
1077     const char *end;
1078     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1079 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1080     dVAR;
1081 #endif
1082 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1083     static bool done_sanity_check;
1084
1085     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1086      * variables like done_sanity_check. */
1087     if (!done_sanity_check) {
1088         unsigned int i = SVt_LAST;
1089
1090         done_sanity_check = TRUE;
1091
1092         while (i--)
1093             assert (bodies_by_type[i].type == i);
1094     }
1095 #endif
1096
1097     assert(arena_size);
1098
1099     /* may need new arena-set to hold new arena */
1100     if (!aroot || aroot->curr >= aroot->set_size) {
1101         struct arena_set *newroot;
1102         Newxz(newroot, 1, struct arena_set);
1103         newroot->set_size = ARENAS_PER_SET;
1104         newroot->next = aroot;
1105         aroot = newroot;
1106         PL_body_arenas = (void *) newroot;
1107         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1108     }
1109
1110     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1111     curr = aroot->curr++;
1112     adesc = &(aroot->set[curr]);
1113     assert(!adesc->arena);
1114     
1115     Newx(adesc->arena, good_arena_size, char);
1116     adesc->size = good_arena_size;
1117     adesc->utype = sv_type;
1118     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1119                           curr, (void*)adesc->arena, (UV)good_arena_size));
1120
1121     start = (char *) adesc->arena;
1122
1123     /* Get the address of the byte after the end of the last body we can fit.
1124        Remember, this is integer division:  */
1125     end = start + good_arena_size / body_size * body_size;
1126
1127     /* computed count doesn't reflect the 1st slot reservation */
1128 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1129     DEBUG_m(PerlIO_printf(Perl_debug_log,
1130                           "arena %p end %p arena-size %d (from %d) type %d "
1131                           "size %d ct %d\n",
1132                           (void*)start, (void*)end, (int)good_arena_size,
1133                           (int)arena_size, sv_type, (int)body_size,
1134                           (int)good_arena_size / (int)body_size));
1135 #else
1136     DEBUG_m(PerlIO_printf(Perl_debug_log,
1137                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1138                           (void*)start, (void*)end,
1139                           (int)arena_size, sv_type, (int)body_size,
1140                           (int)good_arena_size / (int)body_size));
1141 #endif
1142     *root = (void *)start;
1143
1144     while (1) {
1145         /* Where the next body would start:  */
1146         char * const next = start + body_size;
1147
1148         if (next >= end) {
1149             /* This is the last body:  */
1150             assert(next == end);
1151
1152             *(void **)start = 0;
1153             return *root;
1154         }
1155
1156         *(void**) start = (void *)next;
1157         start = next;
1158     }
1159 }
1160
1161 /* grab a new thing from the free list, allocating more if necessary.
1162    The inline version is used for speed in hot routines, and the
1163    function using it serves the rest (unless PURIFY).
1164 */
1165 #define new_body_inline(xpv, sv_type) \
1166     STMT_START { \
1167         void ** const r3wt = &PL_body_roots[sv_type]; \
1168         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1169           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1170                                              bodies_by_type[sv_type].body_size,\
1171                                              bodies_by_type[sv_type].arena_size)); \
1172         *(r3wt) = *(void**)(xpv); \
1173     } STMT_END
1174
1175 #ifndef PURIFY
1176
1177 STATIC void *
1178 S_new_body(pTHX_ const svtype sv_type)
1179 {
1180     void *xpv;
1181     new_body_inline(xpv, sv_type);
1182     return xpv;
1183 }
1184
1185 #endif
1186
1187 static const struct body_details fake_rv =
1188     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1189
1190 /*
1191 =for apidoc sv_upgrade
1192
1193 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1194 SV, then copies across as much information as possible from the old body.
1195 It croaks if the SV is already in a more complex form than requested.  You
1196 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1197 before calling C<sv_upgrade>, and hence does not croak.  See also
1198 C<svtype>.
1199
1200 =cut
1201 */
1202
1203 void
1204 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1205 {
1206     void*       old_body;
1207     void*       new_body;
1208     const svtype old_type = SvTYPE(sv);
1209     const struct body_details *new_type_details;
1210     const struct body_details *old_type_details
1211         = bodies_by_type + old_type;
1212     SV *referant = NULL;
1213
1214     PERL_ARGS_ASSERT_SV_UPGRADE;
1215
1216     if (old_type == new_type)
1217         return;
1218
1219     /* This clause was purposefully added ahead of the early return above to
1220        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1221        inference by Nick I-S that it would fix other troublesome cases. See
1222        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1223
1224        Given that shared hash key scalars are no longer PVIV, but PV, there is
1225        no longer need to unshare so as to free up the IVX slot for its proper
1226        purpose. So it's safe to move the early return earlier.  */
1227
1228     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1229         sv_force_normal_flags(sv, 0);
1230     }
1231
1232     old_body = SvANY(sv);
1233
1234     /* Copying structures onto other structures that have been neatly zeroed
1235        has a subtle gotcha. Consider XPVMG
1236
1237        +------+------+------+------+------+-------+-------+
1238        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1239        +------+------+------+------+------+-------+-------+
1240        0      4      8     12     16     20      24      28
1241
1242        where NVs are aligned to 8 bytes, so that sizeof that structure is
1243        actually 32 bytes long, with 4 bytes of padding at the end:
1244
1245        +------+------+------+------+------+-------+-------+------+
1246        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1247        +------+------+------+------+------+-------+-------+------+
1248        0      4      8     12     16     20      24      28     32
1249
1250        so what happens if you allocate memory for this structure:
1251
1252        +------+------+------+------+------+-------+-------+------+------+...
1253        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1254        +------+------+------+------+------+-------+-------+------+------+...
1255        0      4      8     12     16     20      24      28     32     36
1256
1257        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1258        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1259        started out as zero once, but it's quite possible that it isn't. So now,
1260        rather than a nicely zeroed GP, you have it pointing somewhere random.
1261        Bugs ensue.
1262
1263        (In fact, GP ends up pointing at a previous GP structure, because the
1264        principle cause of the padding in XPVMG getting garbage is a copy of
1265        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1266        this happens to be moot because XPVGV has been re-ordered, with GP
1267        no longer after STASH)
1268
1269        So we are careful and work out the size of used parts of all the
1270        structures.  */
1271
1272     switch (old_type) {
1273     case SVt_NULL:
1274         break;
1275     case SVt_IV:
1276         if (SvROK(sv)) {
1277             referant = SvRV(sv);
1278             old_type_details = &fake_rv;
1279             if (new_type == SVt_NV)
1280                 new_type = SVt_PVNV;
1281         } else {
1282             if (new_type < SVt_PVIV) {
1283                 new_type = (new_type == SVt_NV)
1284                     ? SVt_PVNV : SVt_PVIV;
1285             }
1286         }
1287         break;
1288     case SVt_NV:
1289         if (new_type < SVt_PVNV) {
1290             new_type = SVt_PVNV;
1291         }
1292         break;
1293     case SVt_PV:
1294         assert(new_type > SVt_PV);
1295         assert(SVt_IV < SVt_PV);
1296         assert(SVt_NV < SVt_PV);
1297         break;
1298     case SVt_PVIV:
1299         break;
1300     case SVt_PVNV:
1301         break;
1302     case SVt_PVMG:
1303         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1304            there's no way that it can be safely upgraded, because perl.c
1305            expects to Safefree(SvANY(PL_mess_sv))  */
1306         assert(sv != PL_mess_sv);
1307         /* This flag bit is used to mean other things in other scalar types.
1308            Given that it only has meaning inside the pad, it shouldn't be set
1309            on anything that can get upgraded.  */
1310         assert(!SvPAD_TYPED(sv));
1311         break;
1312     default:
1313         if (UNLIKELY(old_type_details->cant_upgrade))
1314             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1315                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1316     }
1317
1318     if (UNLIKELY(old_type > new_type))
1319         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1320                 (int)old_type, (int)new_type);
1321
1322     new_type_details = bodies_by_type + new_type;
1323
1324     SvFLAGS(sv) &= ~SVTYPEMASK;
1325     SvFLAGS(sv) |= new_type;
1326
1327     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1328        the return statements above will have triggered.  */
1329     assert (new_type != SVt_NULL);
1330     switch (new_type) {
1331     case SVt_IV:
1332         assert(old_type == SVt_NULL);
1333         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1334         SvIV_set(sv, 0);
1335         return;
1336     case SVt_NV:
1337         assert(old_type == SVt_NULL);
1338 #if NVSIZE <= IVSIZE
1339         SvANY(sv) = (XPVNV*)((char*)&(sv->sv_u.svu_nv) - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv));
1340 #else
1341         SvANY(sv) = new_XNV();
1342 #endif
1343         SvNV_set(sv, 0);
1344         return;
1345     case SVt_PVHV:
1346     case SVt_PVAV:
1347         assert(new_type_details->body_size);
1348
1349 #ifndef PURIFY  
1350         assert(new_type_details->arena);
1351         assert(new_type_details->arena_size);
1352         /* This points to the start of the allocated area.  */
1353         new_body_inline(new_body, new_type);
1354         Zero(new_body, new_type_details->body_size, char);
1355         new_body = ((char *)new_body) - new_type_details->offset;
1356 #else
1357         /* We always allocated the full length item with PURIFY. To do this
1358            we fake things so that arena is false for all 16 types..  */
1359         new_body = new_NOARENAZ(new_type_details);
1360 #endif
1361         SvANY(sv) = new_body;
1362         if (new_type == SVt_PVAV) {
1363             AvMAX(sv)   = -1;
1364             AvFILLp(sv) = -1;
1365             AvREAL_only(sv);
1366             if (old_type_details->body_size) {
1367                 AvALLOC(sv) = 0;
1368             } else {
1369                 /* It will have been zeroed when the new body was allocated.
1370                    Lets not write to it, in case it confuses a write-back
1371                    cache.  */
1372             }
1373         } else {
1374             assert(!SvOK(sv));
1375             SvOK_off(sv);
1376 #ifndef NODEFAULT_SHAREKEYS
1377             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1378 #endif
1379             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1380             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1381         }
1382
1383         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1384            The target created by newSVrv also is, and it can have magic.
1385            However, it never has SvPVX set.
1386         */
1387         if (old_type == SVt_IV) {
1388             assert(!SvROK(sv));
1389         } else if (old_type >= SVt_PV) {
1390             assert(SvPVX_const(sv) == 0);
1391         }
1392
1393         if (old_type >= SVt_PVMG) {
1394             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1395             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1396         } else {
1397             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1398         }
1399         break;
1400
1401     case SVt_PVIV:
1402         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1403            no route from NV to PVIV, NOK can never be true  */
1404         assert(!SvNOKp(sv));
1405         assert(!SvNOK(sv));
1406     case SVt_PVIO:
1407     case SVt_PVFM:
1408     case SVt_PVGV:
1409     case SVt_PVCV:
1410     case SVt_PVLV:
1411     case SVt_INVLIST:
1412     case SVt_REGEXP:
1413     case SVt_PVMG:
1414     case SVt_PVNV:
1415     case SVt_PV:
1416
1417         assert(new_type_details->body_size);
1418         /* We always allocated the full length item with PURIFY. To do this
1419            we fake things so that arena is false for all 16 types..  */
1420         if(new_type_details->arena) {
1421             /* This points to the start of the allocated area.  */
1422             new_body_inline(new_body, new_type);
1423             Zero(new_body, new_type_details->body_size, char);
1424             new_body = ((char *)new_body) - new_type_details->offset;
1425         } else {
1426             new_body = new_NOARENAZ(new_type_details);
1427         }
1428         SvANY(sv) = new_body;
1429
1430         if (old_type_details->copy) {
1431             /* There is now the potential for an upgrade from something without
1432                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1433             int offset = old_type_details->offset;
1434             int length = old_type_details->copy;
1435
1436             if (new_type_details->offset > old_type_details->offset) {
1437                 const int difference
1438                     = new_type_details->offset - old_type_details->offset;
1439                 offset += difference;
1440                 length -= difference;
1441             }
1442             assert (length >= 0);
1443                 
1444             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1445                  char);
1446         }
1447
1448 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1449         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1450          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1451          * NV slot, but the new one does, then we need to initialise the
1452          * freshly created NV slot with whatever the correct bit pattern is
1453          * for 0.0  */
1454         if (old_type_details->zero_nv && !new_type_details->zero_nv
1455             && !isGV_with_GP(sv))
1456             SvNV_set(sv, 0);
1457 #endif
1458
1459         if (UNLIKELY(new_type == SVt_PVIO)) {
1460             IO * const io = MUTABLE_IO(sv);
1461             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1462
1463             SvOBJECT_on(io);
1464             /* Clear the stashcache because a new IO could overrule a package
1465                name */
1466             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1467             hv_clear(PL_stashcache);
1468
1469             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1470             IoPAGE_LEN(sv) = 60;
1471         }
1472         if (UNLIKELY(new_type == SVt_REGEXP))
1473             sv->sv_u.svu_rx = (regexp *)new_body;
1474         else if (old_type < SVt_PV) {
1475             /* referant will be NULL unless the old type was SVt_IV emulating
1476                SVt_RV */
1477             sv->sv_u.svu_rv = referant;
1478         }
1479         break;
1480     default:
1481         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1482                    (unsigned long)new_type);
1483     }
1484
1485     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1486        and sometimes SVt_NV */
1487     if (old_type_details->body_size) {
1488 #ifdef PURIFY
1489         safefree(old_body);
1490 #else
1491         /* Note that there is an assumption that all bodies of types that
1492            can be upgraded came from arenas. Only the more complex non-
1493            upgradable types are allowed to be directly malloc()ed.  */
1494         assert(old_type_details->arena);
1495         del_body((void*)((char*)old_body + old_type_details->offset),
1496                  &PL_body_roots[old_type]);
1497 #endif
1498     }
1499 }
1500
1501 /*
1502 =for apidoc sv_backoff
1503
1504 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1505 wrapper instead.
1506
1507 =cut
1508 */
1509
1510 int
1511 Perl_sv_backoff(SV *const sv)
1512 {
1513     STRLEN delta;
1514     const char * const s = SvPVX_const(sv);
1515
1516     PERL_ARGS_ASSERT_SV_BACKOFF;
1517
1518     assert(SvOOK(sv));
1519     assert(SvTYPE(sv) != SVt_PVHV);
1520     assert(SvTYPE(sv) != SVt_PVAV);
1521
1522     SvOOK_offset(sv, delta);
1523     
1524     SvLEN_set(sv, SvLEN(sv) + delta);
1525     SvPV_set(sv, SvPVX(sv) - delta);
1526     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1527     SvFLAGS(sv) &= ~SVf_OOK;
1528     return 0;
1529 }
1530
1531 /*
1532 =for apidoc sv_grow
1533
1534 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1535 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1536 Use the C<SvGROW> wrapper instead.
1537
1538 =cut
1539 */
1540
1541 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1542
1543 char *
1544 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1545 {
1546     char *s;
1547
1548     PERL_ARGS_ASSERT_SV_GROW;
1549
1550     if (SvROK(sv))
1551         sv_unref(sv);
1552     if (SvTYPE(sv) < SVt_PV) {
1553         sv_upgrade(sv, SVt_PV);
1554         s = SvPVX_mutable(sv);
1555     }
1556     else if (SvOOK(sv)) {       /* pv is offset? */
1557         sv_backoff(sv);
1558         s = SvPVX_mutable(sv);
1559         if (newlen > SvLEN(sv))
1560             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1561     }
1562     else
1563     {
1564         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1565         s = SvPVX_mutable(sv);
1566     }
1567
1568 #ifdef PERL_NEW_COPY_ON_WRITE
1569     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1570      * to store the COW count. So in general, allocate one more byte than
1571      * asked for, to make it likely this byte is always spare: and thus
1572      * make more strings COW-able.
1573      * If the new size is a big power of two, don't bother: we assume the
1574      * caller wanted a nice 2^N sized block and will be annoyed at getting
1575      * 2^N+1 */
1576     if (newlen & 0xff)
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             newlen = PERL_STRLEN_ROUNDUP(newlen);
1595         }
1596 #endif
1597         if (SvLEN(sv) && s) {
1598             s = (char*)saferealloc(s, newlen);
1599         }
1600         else {
1601             s = (char*)safemalloc(newlen);
1602             if (SvPVX_const(sv) && SvCUR(sv)) {
1603                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1604             }
1605         }
1606         SvPV_set(sv, s);
1607 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1608         /* Do this here, do it once, do it right, and then we will never get
1609            called back into sv_grow() unless there really is some growing
1610            needed.  */
1611         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1612 #else
1613         SvLEN_set(sv, newlen);
1614 #endif
1615     }
1616     return s;
1617 }
1618
1619 /*
1620 =for apidoc sv_setiv
1621
1622 Copies an integer into the given SV, upgrading first if necessary.
1623 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1624
1625 =cut
1626 */
1627
1628 void
1629 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1630 {
1631     PERL_ARGS_ASSERT_SV_SETIV;
1632
1633     SV_CHECK_THINKFIRST_COW_DROP(sv);
1634     switch (SvTYPE(sv)) {
1635     case SVt_NULL:
1636     case SVt_NV:
1637         sv_upgrade(sv, SVt_IV);
1638         break;
1639     case SVt_PV:
1640         sv_upgrade(sv, SVt_PVIV);
1641         break;
1642
1643     case SVt_PVGV:
1644         if (!isGV_with_GP(sv))
1645             break;
1646     case SVt_PVAV:
1647     case SVt_PVHV:
1648     case SVt_PVCV:
1649     case SVt_PVFM:
1650     case SVt_PVIO:
1651         /* diag_listed_as: Can't coerce %s to %s in %s */
1652         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1653                    OP_DESC(PL_op));
1654     default: NOOP;
1655     }
1656     (void)SvIOK_only(sv);                       /* validate number */
1657     SvIV_set(sv, i);
1658     SvTAINT(sv);
1659 }
1660
1661 /*
1662 =for apidoc sv_setiv_mg
1663
1664 Like C<sv_setiv>, but also handles 'set' magic.
1665
1666 =cut
1667 */
1668
1669 void
1670 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1671 {
1672     PERL_ARGS_ASSERT_SV_SETIV_MG;
1673
1674     sv_setiv(sv,i);
1675     SvSETMAGIC(sv);
1676 }
1677
1678 /*
1679 =for apidoc sv_setuv
1680
1681 Copies an unsigned integer into the given SV, upgrading first if necessary.
1682 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1683
1684 =cut
1685 */
1686
1687 void
1688 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1689 {
1690     PERL_ARGS_ASSERT_SV_SETUV;
1691
1692     /* With the if statement to ensure that integers are stored as IVs whenever
1693        possible:
1694        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1695
1696        without
1697        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1698
1699        If you wish to remove the following if statement, so that this routine
1700        (and its callers) always return UVs, please benchmark to see what the
1701        effect is. Modern CPUs may be different. Or may not :-)
1702     */
1703     if (u <= (UV)IV_MAX) {
1704        sv_setiv(sv, (IV)u);
1705        return;
1706     }
1707     sv_setiv(sv, 0);
1708     SvIsUV_on(sv);
1709     SvUV_set(sv, u);
1710 }
1711
1712 /*
1713 =for apidoc sv_setuv_mg
1714
1715 Like C<sv_setuv>, but also handles 'set' magic.
1716
1717 =cut
1718 */
1719
1720 void
1721 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1722 {
1723     PERL_ARGS_ASSERT_SV_SETUV_MG;
1724
1725     sv_setuv(sv,u);
1726     SvSETMAGIC(sv);
1727 }
1728
1729 /*
1730 =for apidoc sv_setnv
1731
1732 Copies a double into the given SV, upgrading first if necessary.
1733 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1734
1735 =cut
1736 */
1737
1738 void
1739 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1740 {
1741     PERL_ARGS_ASSERT_SV_SETNV;
1742
1743     SV_CHECK_THINKFIRST_COW_DROP(sv);
1744     switch (SvTYPE(sv)) {
1745     case SVt_NULL:
1746     case SVt_IV:
1747         sv_upgrade(sv, SVt_NV);
1748         break;
1749     case SVt_PV:
1750     case SVt_PVIV:
1751         sv_upgrade(sv, SVt_PVNV);
1752         break;
1753
1754     case SVt_PVGV:
1755         if (!isGV_with_GP(sv))
1756             break;
1757     case SVt_PVAV:
1758     case SVt_PVHV:
1759     case SVt_PVCV:
1760     case SVt_PVFM:
1761     case SVt_PVIO:
1762         /* diag_listed_as: Can't coerce %s to %s in %s */
1763         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1764                    OP_DESC(PL_op));
1765     default: NOOP;
1766     }
1767     SvNV_set(sv, num);
1768     (void)SvNOK_only(sv);                       /* validate number */
1769     SvTAINT(sv);
1770 }
1771
1772 /*
1773 =for apidoc sv_setnv_mg
1774
1775 Like C<sv_setnv>, but also handles 'set' magic.
1776
1777 =cut
1778 */
1779
1780 void
1781 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1782 {
1783     PERL_ARGS_ASSERT_SV_SETNV_MG;
1784
1785     sv_setnv(sv,num);
1786     SvSETMAGIC(sv);
1787 }
1788
1789 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1790  * not incrementable warning display.
1791  * Originally part of S_not_a_number().
1792  * The return value may be != tmpbuf.
1793  */
1794
1795 STATIC const char *
1796 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1797     const char *pv;
1798
1799      PERL_ARGS_ASSERT_SV_DISPLAY;
1800
1801      if (DO_UTF8(sv)) {
1802           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1803           pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1804      } else {
1805           char *d = tmpbuf;
1806           const char * const limit = tmpbuf + tmpbuf_size - 8;
1807           /* each *s can expand to 4 chars + "...\0",
1808              i.e. need room for 8 chars */
1809         
1810           const char *s = SvPVX_const(sv);
1811           const char * const end = s + SvCUR(sv);
1812           for ( ; s < end && d < limit; s++ ) {
1813                int ch = *s & 0xFF;
1814                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1815                     *d++ = 'M';
1816                     *d++ = '-';
1817
1818                     /* Map to ASCII "equivalent" of Latin1 */
1819                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1820                }
1821                if (ch == '\n') {
1822                     *d++ = '\\';
1823                     *d++ = 'n';
1824                }
1825                else if (ch == '\r') {
1826                     *d++ = '\\';
1827                     *d++ = 'r';
1828                }
1829                else if (ch == '\f') {
1830                     *d++ = '\\';
1831                     *d++ = 'f';
1832                }
1833                else if (ch == '\\') {
1834                     *d++ = '\\';
1835                     *d++ = '\\';
1836                }
1837                else if (ch == '\0') {
1838                     *d++ = '\\';
1839                     *d++ = '0';
1840                }
1841                else if (isPRINT_LC(ch))
1842                     *d++ = ch;
1843                else {
1844                     *d++ = '^';
1845                     *d++ = toCTRL(ch);
1846                }
1847           }
1848           if (s < end) {
1849                *d++ = '.';
1850                *d++ = '.';
1851                *d++ = '.';
1852           }
1853           *d = '\0';
1854           pv = tmpbuf;
1855     }
1856
1857     return pv;
1858 }
1859
1860 /* Print an "isn't numeric" warning, using a cleaned-up,
1861  * printable version of the offending string
1862  */
1863
1864 STATIC void
1865 S_not_a_number(pTHX_ SV *const sv)
1866 {
1867      char tmpbuf[64];
1868      const char *pv;
1869
1870      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1871
1872      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1873
1874     if (PL_op)
1875         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1876                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1877                     "Argument \"%s\" isn't numeric in %s", pv,
1878                     OP_DESC(PL_op));
1879     else
1880         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1881                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1882                     "Argument \"%s\" isn't numeric", pv);
1883 }
1884
1885 STATIC void
1886 S_not_incrementable(pTHX_ SV *const sv) {
1887      char tmpbuf[64];
1888      const char *pv;
1889
1890      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1891
1892      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1893
1894      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1895                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1896 }
1897
1898 /*
1899 =for apidoc looks_like_number
1900
1901 Test if the content of an SV looks like a number (or is a number).
1902 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1903 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1904 ignored.
1905
1906 =cut
1907 */
1908
1909 I32
1910 Perl_looks_like_number(pTHX_ SV *const sv)
1911 {
1912     const char *sbegin;
1913     STRLEN len;
1914
1915     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1916
1917     if (SvPOK(sv) || SvPOKp(sv)) {
1918         sbegin = SvPV_nomg_const(sv, len);
1919     }
1920     else
1921         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1922     return grok_number(sbegin, len, NULL);
1923 }
1924
1925 STATIC bool
1926 S_glob_2number(pTHX_ GV * const gv)
1927 {
1928     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1929
1930     /* We know that all GVs stringify to something that is not-a-number,
1931         so no need to test that.  */
1932     if (ckWARN(WARN_NUMERIC))
1933     {
1934         SV *const buffer = sv_newmortal();
1935         gv_efullname3(buffer, gv, "*");
1936         not_a_number(buffer);
1937     }
1938     /* We just want something true to return, so that S_sv_2iuv_common
1939         can tail call us and return true.  */
1940     return TRUE;
1941 }
1942
1943 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1944    until proven guilty, assume that things are not that bad... */
1945
1946 /*
1947    NV_PRESERVES_UV:
1948
1949    As 64 bit platforms often have an NV that doesn't preserve all bits of
1950    an IV (an assumption perl has been based on to date) it becomes necessary
1951    to remove the assumption that the NV always carries enough precision to
1952    recreate the IV whenever needed, and that the NV is the canonical form.
1953    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1954    precision as a side effect of conversion (which would lead to insanity
1955    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1956    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1957       where precision was lost, and IV/UV/NV slots that have a valid conversion
1958       which has lost no precision
1959    2) to ensure that if a numeric conversion to one form is requested that
1960       would lose precision, the precise conversion (or differently
1961       imprecise conversion) is also performed and cached, to prevent
1962       requests for different numeric formats on the same SV causing
1963       lossy conversion chains. (lossless conversion chains are perfectly
1964       acceptable (still))
1965
1966
1967    flags are used:
1968    SvIOKp is true if the IV slot contains a valid value
1969    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1970    SvNOKp is true if the NV slot contains a valid value
1971    SvNOK  is true only if the NV value is accurate
1972
1973    so
1974    while converting from PV to NV, check to see if converting that NV to an
1975    IV(or UV) would lose accuracy over a direct conversion from PV to
1976    IV(or UV). If it would, cache both conversions, return NV, but mark
1977    SV as IOK NOKp (ie not NOK).
1978
1979    While converting from PV to IV, check to see if converting that IV to an
1980    NV would lose accuracy over a direct conversion from PV to NV. If it
1981    would, cache both conversions, flag similarly.
1982
1983    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1984    correctly because if IV & NV were set NV *always* overruled.
1985    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1986    changes - now IV and NV together means that the two are interchangeable:
1987    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1988
1989    The benefit of this is that operations such as pp_add know that if
1990    SvIOK is true for both left and right operands, then integer addition
1991    can be used instead of floating point (for cases where the result won't
1992    overflow). Before, floating point was always used, which could lead to
1993    loss of precision compared with integer addition.
1994
1995    * making IV and NV equal status should make maths accurate on 64 bit
1996      platforms
1997    * may speed up maths somewhat if pp_add and friends start to use
1998      integers when possible instead of fp. (Hopefully the overhead in
1999      looking for SvIOK and checking for overflow will not outweigh the
2000      fp to integer speedup)
2001    * will slow down integer operations (callers of SvIV) on "inaccurate"
2002      values, as the change from SvIOK to SvIOKp will cause a call into
2003      sv_2iv each time rather than a macro access direct to the IV slot
2004    * should speed up number->string conversion on integers as IV is
2005      favoured when IV and NV are equally accurate
2006
2007    ####################################################################
2008    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2009    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2010    On the other hand, SvUOK is true iff UV.
2011    ####################################################################
2012
2013    Your mileage will vary depending your CPU's relative fp to integer
2014    performance ratio.
2015 */
2016
2017 #ifndef NV_PRESERVES_UV
2018 #  define IS_NUMBER_UNDERFLOW_IV 1
2019 #  define IS_NUMBER_UNDERFLOW_UV 2
2020 #  define IS_NUMBER_IV_AND_UV    2
2021 #  define IS_NUMBER_OVERFLOW_IV  4
2022 #  define IS_NUMBER_OVERFLOW_UV  5
2023
2024 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2025
2026 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2027 STATIC int
2028 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2029 #  ifdef DEBUGGING
2030                        , I32 numtype
2031 #  endif
2032                        )
2033 {
2034     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2035     PERL_UNUSED_CONTEXT;
2036
2037     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));
2038     if (SvNVX(sv) < (NV)IV_MIN) {
2039         (void)SvIOKp_on(sv);
2040         (void)SvNOK_on(sv);
2041         SvIV_set(sv, IV_MIN);
2042         return IS_NUMBER_UNDERFLOW_IV;
2043     }
2044     if (SvNVX(sv) > (NV)UV_MAX) {
2045         (void)SvIOKp_on(sv);
2046         (void)SvNOK_on(sv);
2047         SvIsUV_on(sv);
2048         SvUV_set(sv, UV_MAX);
2049         return IS_NUMBER_OVERFLOW_UV;
2050     }
2051     (void)SvIOKp_on(sv);
2052     (void)SvNOK_on(sv);
2053     /* Can't use strtol etc to convert this string.  (See truth table in
2054        sv_2iv  */
2055     if (SvNVX(sv) <= (UV)IV_MAX) {
2056         SvIV_set(sv, I_V(SvNVX(sv)));
2057         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2058             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2059         } else {
2060             /* Integer is imprecise. NOK, IOKp */
2061         }
2062         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2063     }
2064     SvIsUV_on(sv);
2065     SvUV_set(sv, U_V(SvNVX(sv)));
2066     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2067         if (SvUVX(sv) == UV_MAX) {
2068             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2069                possibly be preserved by NV. Hence, it must be overflow.
2070                NOK, IOKp */
2071             return IS_NUMBER_OVERFLOW_UV;
2072         }
2073         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2074     } else {
2075         /* Integer is imprecise. NOK, IOKp */
2076     }
2077     return IS_NUMBER_OVERFLOW_IV;
2078 }
2079 #endif /* !NV_PRESERVES_UV*/
2080
2081 /* If numtype is infnan, set the NV of the sv accordingly.
2082  * If numtype is anything else, try setting the NV using Atof(PV). */
2083 static void
2084 S_sv_setnv(pTHX_ SV* sv, int numtype)
2085 {
2086     bool pok = cBOOL(SvPOK(sv));
2087     bool nok = FALSE;
2088     if ((numtype & IS_NUMBER_INFINITY)) {
2089         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2090         nok = TRUE;
2091     }
2092     else if ((numtype & IS_NUMBER_NAN)) {
2093         SvNV_set(sv, NV_NAN);
2094         nok = TRUE;
2095     }
2096     else if (pok) {
2097         SvNV_set(sv, Atof(SvPVX_const(sv)));
2098         /* Purposefully no true nok here, since we don't want to blow
2099          * away the possible IOK/UV of an existing sv. */
2100     }
2101     if (nok) {
2102         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2103         if (pok)
2104             SvPOK_on(sv); /* PV is okay, though. */
2105     }
2106 }
2107
2108 STATIC bool
2109 S_sv_2iuv_common(pTHX_ SV *const sv)
2110 {
2111     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2112
2113     if (SvNOKp(sv)) {
2114         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2115          * without also getting a cached IV/UV from it at the same time
2116          * (ie PV->NV conversion should detect loss of accuracy and cache
2117          * IV or UV at same time to avoid this. */
2118         /* IV-over-UV optimisation - choose to cache IV if possible */
2119
2120         if (SvTYPE(sv) == SVt_NV)
2121             sv_upgrade(sv, SVt_PVNV);
2122
2123         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2124         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2125            certainly cast into the IV range at IV_MAX, whereas the correct
2126            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2127            cases go to UV */
2128 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2129         if (Perl_isnan(SvNVX(sv))) {
2130             SvUV_set(sv, 0);
2131             SvIsUV_on(sv);
2132             return FALSE;
2133         }
2134 #endif
2135         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2136             SvIV_set(sv, I_V(SvNVX(sv)));
2137             if (SvNVX(sv) == (NV) SvIVX(sv)
2138 #ifndef NV_PRESERVES_UV
2139                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2140                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2141                 /* Don't flag it as "accurately an integer" if the number
2142                    came from a (by definition imprecise) NV operation, and
2143                    we're outside the range of NV integer precision */
2144 #endif
2145                 ) {
2146                 if (SvNOK(sv))
2147                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2148                 else {
2149                     /* scalar has trailing garbage, eg "42a" */
2150                 }
2151                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2152                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2153                                       PTR2UV(sv),
2154                                       SvNVX(sv),
2155                                       SvIVX(sv)));
2156
2157             } else {
2158                 /* IV not precise.  No need to convert from PV, as NV
2159                    conversion would already have cached IV if it detected
2160                    that PV->IV would be better than PV->NV->IV
2161                    flags already correct - don't set public IOK.  */
2162                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2163                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2164                                       PTR2UV(sv),
2165                                       SvNVX(sv),
2166                                       SvIVX(sv)));
2167             }
2168             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2169                but the cast (NV)IV_MIN rounds to a the value less (more
2170                negative) than IV_MIN which happens to be equal to SvNVX ??
2171                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2172                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2173                (NV)UVX == NVX are both true, but the values differ. :-(
2174                Hopefully for 2s complement IV_MIN is something like
2175                0x8000000000000000 which will be exact. NWC */
2176         }
2177         else {
2178             SvUV_set(sv, U_V(SvNVX(sv)));
2179             if (
2180                 (SvNVX(sv) == (NV) SvUVX(sv))
2181 #ifndef  NV_PRESERVES_UV
2182                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2183                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2184                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2185                 /* Don't flag it as "accurately an integer" if the number
2186                    came from a (by definition imprecise) NV operation, and
2187                    we're outside the range of NV integer precision */
2188 #endif
2189                 && SvNOK(sv)
2190                 )
2191                 SvIOK_on(sv);
2192             SvIsUV_on(sv);
2193             DEBUG_c(PerlIO_printf(Perl_debug_log,
2194                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2195                                   PTR2UV(sv),
2196                                   SvUVX(sv),
2197                                   SvUVX(sv)));
2198         }
2199     }
2200     else if (SvPOKp(sv)) {
2201         UV value;
2202         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2203         /* We want to avoid a possible problem when we cache an IV/ a UV which
2204            may be later translated to an NV, and the resulting NV is not
2205            the same as the direct translation of the initial string
2206            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2207            be careful to ensure that the value with the .456 is around if the
2208            NV value is requested in the future).
2209         
2210            This means that if we cache such an IV/a UV, we need to cache the
2211            NV as well.  Moreover, we trade speed for space, and do not
2212            cache the NV if we are sure it's not needed.
2213          */
2214
2215         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2216         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2217              == IS_NUMBER_IN_UV) {
2218             /* It's definitely an integer, only upgrade to PVIV */
2219             if (SvTYPE(sv) < SVt_PVIV)
2220                 sv_upgrade(sv, SVt_PVIV);
2221             (void)SvIOK_on(sv);
2222         } else if (SvTYPE(sv) < SVt_PVNV)
2223             sv_upgrade(sv, SVt_PVNV);
2224
2225         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2226             S_sv_setnv(aTHX_ sv, numtype);
2227             return FALSE;
2228         }
2229
2230         /* If NVs preserve UVs then we only use the UV value if we know that
2231            we aren't going to call atof() below. If NVs don't preserve UVs
2232            then the value returned may have more precision than atof() will
2233            return, even though value isn't perfectly accurate.  */
2234         if ((numtype & (IS_NUMBER_IN_UV
2235 #ifdef NV_PRESERVES_UV
2236                         | IS_NUMBER_NOT_INT
2237 #endif
2238             )) == IS_NUMBER_IN_UV) {
2239             /* This won't turn off the public IOK flag if it was set above  */
2240             (void)SvIOKp_on(sv);
2241
2242             if (!(numtype & IS_NUMBER_NEG)) {
2243                 /* positive */;
2244                 if (value <= (UV)IV_MAX) {
2245                     SvIV_set(sv, (IV)value);
2246                 } else {
2247                     /* it didn't overflow, and it was positive. */
2248                     SvUV_set(sv, value);
2249                     SvIsUV_on(sv);
2250                 }
2251             } else {
2252                 /* 2s complement assumption  */
2253                 if (value <= (UV)IV_MIN) {
2254                     SvIV_set(sv, -(IV)value);
2255                 } else {
2256                     /* Too negative for an IV.  This is a double upgrade, but
2257                        I'm assuming it will be rare.  */
2258                     if (SvTYPE(sv) < SVt_PVNV)
2259                         sv_upgrade(sv, SVt_PVNV);
2260                     SvNOK_on(sv);
2261                     SvIOK_off(sv);
2262                     SvIOKp_on(sv);
2263                     SvNV_set(sv, -(NV)value);
2264                     SvIV_set(sv, IV_MIN);
2265                 }
2266             }
2267         }
2268         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2269            will be in the previous block to set the IV slot, and the next
2270            block to set the NV slot.  So no else here.  */
2271         
2272         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2273             != IS_NUMBER_IN_UV) {
2274             /* It wasn't an (integer that doesn't overflow the UV). */
2275             S_sv_setnv(aTHX_ sv, numtype);
2276
2277             if (! numtype && ckWARN(WARN_NUMERIC))
2278                 not_a_number(sv);
2279
2280             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2281                                   PTR2UV(sv), SvNVX(sv)));
2282
2283 #ifdef NV_PRESERVES_UV
2284             (void)SvIOKp_on(sv);
2285             (void)SvNOK_on(sv);
2286 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2287             if (Perl_isnan(SvNVX(sv))) {
2288                 SvUV_set(sv, 0);
2289                 SvIsUV_on(sv);
2290                 return FALSE;
2291             }
2292 #endif
2293             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2294                 SvIV_set(sv, I_V(SvNVX(sv)));
2295                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2296                     SvIOK_on(sv);
2297                 } else {
2298                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2299                 }
2300                 /* UV will not work better than IV */
2301             } else {
2302                 if (SvNVX(sv) > (NV)UV_MAX) {
2303                     SvIsUV_on(sv);
2304                     /* Integer is inaccurate. NOK, IOKp, is UV */
2305                     SvUV_set(sv, UV_MAX);
2306                 } else {
2307                     SvUV_set(sv, U_V(SvNVX(sv)));
2308                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2309                        NV preservse UV so can do correct comparison.  */
2310                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2311                         SvIOK_on(sv);
2312                     } else {
2313                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2314                     }
2315                 }
2316                 SvIsUV_on(sv);
2317             }
2318 #else /* NV_PRESERVES_UV */
2319             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2320                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2321                 /* The IV/UV slot will have been set from value returned by
2322                    grok_number above.  The NV slot has just been set using
2323                    Atof.  */
2324                 SvNOK_on(sv);
2325                 assert (SvIOKp(sv));
2326             } else {
2327                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2328                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2329                     /* Small enough to preserve all bits. */
2330                     (void)SvIOKp_on(sv);
2331                     SvNOK_on(sv);
2332                     SvIV_set(sv, I_V(SvNVX(sv)));
2333                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2334                         SvIOK_on(sv);
2335                     /* Assumption: first non-preserved integer is < IV_MAX,
2336                        this NV is in the preserved range, therefore: */
2337                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2338                           < (UV)IV_MAX)) {
2339                         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);
2340                     }
2341                 } else {
2342                     /* IN_UV NOT_INT
2343                          0      0       already failed to read UV.
2344                          0      1       already failed to read UV.
2345                          1      0       you won't get here in this case. IV/UV
2346                                         slot set, public IOK, Atof() unneeded.
2347                          1      1       already read UV.
2348                        so there's no point in sv_2iuv_non_preserve() attempting
2349                        to use atol, strtol, strtoul etc.  */
2350 #  ifdef DEBUGGING
2351                     sv_2iuv_non_preserve (sv, numtype);
2352 #  else
2353                     sv_2iuv_non_preserve (sv);
2354 #  endif
2355                 }
2356             }
2357 #endif /* NV_PRESERVES_UV */
2358         /* It might be more code efficient to go through the entire logic above
2359            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2360            gets complex and potentially buggy, so more programmer efficient
2361            to do it this way, by turning off the public flags:  */
2362         if (!numtype)
2363             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2364         }
2365     }
2366     else  {
2367         if (isGV_with_GP(sv))
2368             return glob_2number(MUTABLE_GV(sv));
2369
2370         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2371                 report_uninit(sv);
2372         if (SvTYPE(sv) < SVt_IV)
2373             /* Typically the caller expects that sv_any is not NULL now.  */
2374             sv_upgrade(sv, SVt_IV);
2375         /* Return 0 from the caller.  */
2376         return TRUE;
2377     }
2378     return FALSE;
2379 }
2380
2381 /*
2382 =for apidoc sv_2iv_flags
2383
2384 Return the integer value of an SV, doing any necessary string
2385 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2386 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2387
2388 =cut
2389 */
2390
2391 IV
2392 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2393 {
2394     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2395
2396     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2397          && SvTYPE(sv) != SVt_PVFM);
2398
2399     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2400         mg_get(sv);
2401
2402     if (SvROK(sv)) {
2403         if (SvAMAGIC(sv)) {
2404             SV * tmpstr;
2405             if (flags & SV_SKIP_OVERLOAD)
2406                 return 0;
2407             tmpstr = AMG_CALLunary(sv, numer_amg);
2408             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2409                 return SvIV(tmpstr);
2410             }
2411         }
2412         return PTR2IV(SvRV(sv));
2413     }
2414
2415     if (SvVALID(sv) || isREGEXP(sv)) {
2416         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2417            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2418            In practice they are extremely unlikely to actually get anywhere
2419            accessible by user Perl code - the only way that I'm aware of is when
2420            a constant subroutine which is used as the second argument to index.
2421
2422            Regexps have no SvIVX and SvNVX fields.
2423         */
2424         assert(isREGEXP(sv) || SvPOKp(sv));
2425         {
2426             UV value;
2427             const char * const ptr =
2428                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2429             const int numtype
2430                 = grok_number(ptr, SvCUR(sv), &value);
2431
2432             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2433                 == IS_NUMBER_IN_UV) {
2434                 /* It's definitely an integer */
2435                 if (numtype & IS_NUMBER_NEG) {
2436                     if (value < (UV)IV_MIN)
2437                         return -(IV)value;
2438                 } else {
2439                     if (value < (UV)IV_MAX)
2440                         return (IV)value;
2441                 }
2442             }
2443
2444             /* Quite wrong but no good choices. */
2445             if ((numtype & IS_NUMBER_INFINITY)) {
2446                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2447             } else if ((numtype & IS_NUMBER_NAN)) {
2448                 return 0; /* So wrong. */
2449             }
2450
2451             if (!numtype) {
2452                 if (ckWARN(WARN_NUMERIC))
2453                     not_a_number(sv);
2454             }
2455             return I_V(Atof(ptr));
2456         }
2457     }
2458
2459     if (SvTHINKFIRST(sv)) {
2460 #ifdef PERL_OLD_COPY_ON_WRITE
2461         if (SvIsCOW(sv)) {
2462             sv_force_normal_flags(sv, 0);
2463         }
2464 #endif
2465         if (SvREADONLY(sv) && !SvOK(sv)) {
2466             if (ckWARN(WARN_UNINITIALIZED))
2467                 report_uninit(sv);
2468             return 0;
2469         }
2470     }
2471
2472     if (!SvIOKp(sv)) {
2473         if (S_sv_2iuv_common(aTHX_ sv))
2474             return 0;
2475     }
2476
2477     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2478         PTR2UV(sv),SvIVX(sv)));
2479     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2480 }
2481
2482 /*
2483 =for apidoc sv_2uv_flags
2484
2485 Return the unsigned integer value of an SV, doing any necessary string
2486 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2487 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2488
2489 =cut
2490 */
2491
2492 UV
2493 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2494 {
2495     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2496
2497     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2498         mg_get(sv);
2499
2500     if (SvROK(sv)) {
2501         if (SvAMAGIC(sv)) {
2502             SV *tmpstr;
2503             if (flags & SV_SKIP_OVERLOAD)
2504                 return 0;
2505             tmpstr = AMG_CALLunary(sv, numer_amg);
2506             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2507                 return SvUV(tmpstr);
2508             }
2509         }
2510         return PTR2UV(SvRV(sv));
2511     }
2512
2513     if (SvVALID(sv) || isREGEXP(sv)) {
2514         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2515            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2516            Regexps have no SvIVX and SvNVX fields. */
2517         assert(isREGEXP(sv) || SvPOKp(sv));
2518         {
2519             UV value;
2520             const char * const ptr =
2521                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2522             const int numtype
2523                 = grok_number(ptr, SvCUR(sv), &value);
2524
2525             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2526                 == IS_NUMBER_IN_UV) {
2527                 /* It's definitely an integer */
2528                 if (!(numtype & IS_NUMBER_NEG))
2529                     return value;
2530             }
2531
2532             /* Quite wrong but no good choices. */
2533             if ((numtype & IS_NUMBER_INFINITY)) {
2534                 return UV_MAX; /* So wrong. */
2535             } else if ((numtype & IS_NUMBER_NAN)) {
2536                 return 0; /* So wrong. */
2537             }
2538
2539             if (!numtype) {
2540                 if (ckWARN(WARN_NUMERIC))
2541                     not_a_number(sv);
2542             }
2543             return U_V(Atof(ptr));
2544         }
2545     }
2546
2547     if (SvTHINKFIRST(sv)) {
2548 #ifdef PERL_OLD_COPY_ON_WRITE
2549         if (SvIsCOW(sv)) {
2550             sv_force_normal_flags(sv, 0);
2551         }
2552 #endif
2553         if (SvREADONLY(sv) && !SvOK(sv)) {
2554             if (ckWARN(WARN_UNINITIALIZED))
2555                 report_uninit(sv);
2556             return 0;
2557         }
2558     }
2559
2560     if (!SvIOKp(sv)) {
2561         if (S_sv_2iuv_common(aTHX_ sv))
2562             return 0;
2563     }
2564
2565     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2566                           PTR2UV(sv),SvUVX(sv)));
2567     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2568 }
2569
2570 /*
2571 =for apidoc sv_2nv_flags
2572
2573 Return the num value of an SV, doing any necessary string or integer
2574 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2575 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2576
2577 =cut
2578 */
2579
2580 NV
2581 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2582 {
2583     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2584
2585     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2586          && SvTYPE(sv) != SVt_PVFM);
2587     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2588         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2589            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2590            Regexps have no SvIVX and SvNVX fields.  */
2591         const char *ptr;
2592         if (flags & SV_GMAGIC)
2593             mg_get(sv);
2594         if (SvNOKp(sv))
2595             return SvNVX(sv);
2596         if (SvPOKp(sv) && !SvIOKp(sv)) {
2597             ptr = SvPVX_const(sv);
2598           grokpv:
2599             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2600                 !grok_number(ptr, SvCUR(sv), NULL))
2601                 not_a_number(sv);
2602             return Atof(ptr);
2603         }
2604         if (SvIOKp(sv)) {
2605             if (SvIsUV(sv))
2606                 return (NV)SvUVX(sv);
2607             else
2608                 return (NV)SvIVX(sv);
2609         }
2610         if (SvROK(sv)) {
2611             goto return_rok;
2612         }
2613         if (isREGEXP(sv)) {
2614             ptr = RX_WRAPPED((REGEXP *)sv);
2615             goto grokpv;
2616         }
2617         assert(SvTYPE(sv) >= SVt_PVMG);
2618         /* This falls through to the report_uninit near the end of the
2619            function. */
2620     } else if (SvTHINKFIRST(sv)) {
2621         if (SvROK(sv)) {
2622         return_rok:
2623             if (SvAMAGIC(sv)) {
2624                 SV *tmpstr;
2625                 if (flags & SV_SKIP_OVERLOAD)
2626                     return 0;
2627                 tmpstr = AMG_CALLunary(sv, numer_amg);
2628                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2629                     return SvNV(tmpstr);
2630                 }
2631             }
2632             return PTR2NV(SvRV(sv));
2633         }
2634 #ifdef PERL_OLD_COPY_ON_WRITE
2635         if (SvIsCOW(sv)) {
2636             sv_force_normal_flags(sv, 0);
2637         }
2638 #endif
2639         if (SvREADONLY(sv) && !SvOK(sv)) {
2640             if (ckWARN(WARN_UNINITIALIZED))
2641                 report_uninit(sv);
2642             return 0.0;
2643         }
2644     }
2645     if (SvTYPE(sv) < SVt_NV) {
2646         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2647         sv_upgrade(sv, SVt_NV);
2648         DEBUG_c({
2649             STORE_NUMERIC_LOCAL_SET_STANDARD();
2650             PerlIO_printf(Perl_debug_log,
2651                           "0x%"UVxf" num(%" NVgf ")\n",
2652                           PTR2UV(sv), SvNVX(sv));
2653             RESTORE_NUMERIC_LOCAL();
2654         });
2655     }
2656     else if (SvTYPE(sv) < SVt_PVNV)
2657         sv_upgrade(sv, SVt_PVNV);
2658     if (SvNOKp(sv)) {
2659         return SvNVX(sv);
2660     }
2661     if (SvIOKp(sv)) {
2662         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2663 #ifdef NV_PRESERVES_UV
2664         if (SvIOK(sv))
2665             SvNOK_on(sv);
2666         else
2667             SvNOKp_on(sv);
2668 #else
2669         /* Only set the public NV OK flag if this NV preserves the IV  */
2670         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2671         if (SvIOK(sv) &&
2672             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2673                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2674             SvNOK_on(sv);
2675         else
2676             SvNOKp_on(sv);
2677 #endif
2678     }
2679     else if (SvPOKp(sv)) {
2680         UV value;
2681         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2682         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2683             not_a_number(sv);
2684 #ifdef NV_PRESERVES_UV
2685         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2686             == IS_NUMBER_IN_UV) {
2687             /* It's definitely an integer */
2688             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2689         } else {
2690             S_sv_setnv(aTHX_ sv, numtype);
2691         }
2692         if (numtype)
2693             SvNOK_on(sv);
2694         else
2695             SvNOKp_on(sv);
2696 #else
2697         SvNV_set(sv, Atof(SvPVX_const(sv)));
2698         /* Only set the public NV OK flag if this NV preserves the value in
2699            the PV at least as well as an IV/UV would.
2700            Not sure how to do this 100% reliably. */
2701         /* if that shift count is out of range then Configure's test is
2702            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2703            UV_BITS */
2704         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2705             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2706             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2707         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2708             /* Can't use strtol etc to convert this string, so don't try.
2709                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2710             SvNOK_on(sv);
2711         } else {
2712             /* value has been set.  It may not be precise.  */
2713             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2714                 /* 2s complement assumption for (UV)IV_MIN  */
2715                 SvNOK_on(sv); /* Integer is too negative.  */
2716             } else {
2717                 SvNOKp_on(sv);
2718                 SvIOKp_on(sv);
2719
2720                 if (numtype & IS_NUMBER_NEG) {
2721                     SvIV_set(sv, -(IV)value);
2722                 } else if (value <= (UV)IV_MAX) {
2723                     SvIV_set(sv, (IV)value);
2724                 } else {
2725                     SvUV_set(sv, value);
2726                     SvIsUV_on(sv);
2727                 }
2728
2729                 if (numtype & IS_NUMBER_NOT_INT) {
2730                     /* I believe that even if the original PV had decimals,
2731                        they are lost beyond the limit of the FP precision.
2732                        However, neither is canonical, so both only get p
2733                        flags.  NWC, 2000/11/25 */
2734                     /* Both already have p flags, so do nothing */
2735                 } else {
2736                     const NV nv = SvNVX(sv);
2737                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2738                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2739                         if (SvIVX(sv) == I_V(nv)) {
2740                             SvNOK_on(sv);
2741                         } else {
2742                             /* It had no "." so it must be integer.  */
2743                         }
2744                         SvIOK_on(sv);
2745                     } else {
2746                         /* between IV_MAX and NV(UV_MAX).
2747                            Could be slightly > UV_MAX */
2748
2749                         if (numtype & IS_NUMBER_NOT_INT) {
2750                             /* UV and NV both imprecise.  */
2751                         } else {
2752                             const UV nv_as_uv = U_V(nv);
2753
2754                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2755                                 SvNOK_on(sv);
2756                             }
2757                             SvIOK_on(sv);
2758                         }
2759                     }
2760                 }
2761             }
2762         }
2763         /* It might be more code efficient to go through the entire logic above
2764            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2765            gets complex and potentially buggy, so more programmer efficient
2766            to do it this way, by turning off the public flags:  */
2767         if (!numtype)
2768             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2769 #endif /* NV_PRESERVES_UV */
2770     }
2771     else  {
2772         if (isGV_with_GP(sv)) {
2773             glob_2number(MUTABLE_GV(sv));
2774             return 0.0;
2775         }
2776
2777         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2778             report_uninit(sv);
2779         assert (SvTYPE(sv) >= SVt_NV);
2780         /* Typically the caller expects that sv_any is not NULL now.  */
2781         /* XXX Ilya implies that this is a bug in callers that assume this
2782            and ideally should be fixed.  */
2783         return 0.0;
2784     }
2785     DEBUG_c({
2786         STORE_NUMERIC_LOCAL_SET_STANDARD();
2787         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2788                       PTR2UV(sv), SvNVX(sv));
2789         RESTORE_NUMERIC_LOCAL();
2790     });
2791     return SvNVX(sv);
2792 }
2793
2794 /*
2795 =for apidoc sv_2num
2796
2797 Return an SV with the numeric value of the source SV, doing any necessary
2798 reference or overload conversion.  You must use the C<SvNUM(sv)> macro to
2799 access this function.
2800
2801 =cut
2802 */
2803
2804 SV *
2805 Perl_sv_2num(pTHX_ SV *const sv)
2806 {
2807     PERL_ARGS_ASSERT_SV_2NUM;
2808
2809     if (!SvROK(sv))
2810         return sv;
2811     if (SvAMAGIC(sv)) {
2812         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2813         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2814         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2815             return sv_2num(tmpsv);
2816     }
2817     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2818 }
2819
2820 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2821  * UV as a string towards the end of buf, and return pointers to start and
2822  * end of it.
2823  *
2824  * We assume that buf is at least TYPE_CHARS(UV) long.
2825  */
2826
2827 static char *
2828 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2829 {
2830     char *ptr = buf + TYPE_CHARS(UV);
2831     char * const ebuf = ptr;
2832     int sign;
2833
2834     PERL_ARGS_ASSERT_UIV_2BUF;
2835
2836     if (is_uv)
2837         sign = 0;
2838     else if (iv >= 0) {
2839         uv = iv;
2840         sign = 0;
2841     } else {
2842         uv = -iv;
2843         sign = 1;
2844     }
2845     do {
2846         *--ptr = '0' + (char)(uv % 10);
2847     } while (uv /= 10);
2848     if (sign)
2849         *--ptr = '-';
2850     *peob = ebuf;
2851     return ptr;
2852 }
2853
2854 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2855  * infinity or a not-a-number, writes the appropriate strings to the
2856  * buffer, including a zero byte.  On success returns the written length,
2857  * excluding the zero byte, on failure (not an infinity, not a nan, or the
2858  * maxlen too small) returns zero.
2859  *
2860  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2861  * shared string constants we point to, instead of generating a new
2862  * string for each instance. */
2863 STATIC size_t
2864 S_infnan_2pv(NV nv, char* buffer, size_t maxlen) {
2865     assert(maxlen >= 4);
2866     if (maxlen < 4) /* "Inf\0", "NaN\0" */
2867         return 0;
2868     else {
2869         char* s = buffer;
2870         if (Perl_isinf(nv)) {
2871             if (nv < 0) {
2872                 if (maxlen < 5) /* "-Inf\0"  */
2873                     return 0;
2874                 *s++ = '-';
2875             }
2876             *s++ = 'I';
2877             *s++ = 'n';
2878             *s++ = 'f';
2879         } else if (Perl_isnan(nv)) {
2880             *s++ = 'N';
2881             *s++ = 'a';
2882             *s++ = 'N';
2883             /* XXX optionally output the payload mantissa bits as
2884              * "(unsigned)" (to match the nan("...") C99 function,
2885              * or maybe as "(0xhhh...)"  would make more sense...
2886              * provide a format string so that the user can decide?
2887              * NOTE: would affect the maxlen and assert() logic.*/
2888         }
2889
2890         else
2891             return 0;
2892         assert((s == buffer + 3) || (s == buffer + 4));
2893         *s++ = 0;
2894         return s - buffer - 1; /* -1: excluding the zero byte */
2895     }
2896 }
2897
2898 /*
2899 =for apidoc sv_2pv_flags
2900
2901 Returns a pointer to the string value of an SV, and sets *lp to its length.
2902 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2903 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2904 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2905
2906 =cut
2907 */
2908
2909 char *
2910 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2911 {
2912     char *s;
2913
2914     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2915
2916     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2917          && SvTYPE(sv) != SVt_PVFM);
2918     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2919         mg_get(sv);
2920     if (SvROK(sv)) {
2921         if (SvAMAGIC(sv)) {
2922             SV *tmpstr;
2923             if (flags & SV_SKIP_OVERLOAD)
2924                 return NULL;
2925             tmpstr = AMG_CALLunary(sv, string_amg);
2926             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2927             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2928                 /* Unwrap this:  */
2929                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2930                  */
2931
2932                 char *pv;
2933                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2934                     if (flags & SV_CONST_RETURN) {
2935                         pv = (char *) SvPVX_const(tmpstr);
2936                     } else {
2937                         pv = (flags & SV_MUTABLE_RETURN)
2938                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2939                     }
2940                     if (lp)
2941                         *lp = SvCUR(tmpstr);
2942                 } else {
2943                     pv = sv_2pv_flags(tmpstr, lp, flags);
2944                 }
2945                 if (SvUTF8(tmpstr))
2946                     SvUTF8_on(sv);
2947                 else
2948                     SvUTF8_off(sv);
2949                 return pv;
2950             }
2951         }
2952         {
2953             STRLEN len;
2954             char *retval;
2955             char *buffer;
2956             SV *const referent = SvRV(sv);
2957
2958             if (!referent) {
2959                 len = 7;
2960                 retval = buffer = savepvn("NULLREF", len);
2961             } else if (SvTYPE(referent) == SVt_REGEXP &&
2962                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2963                         amagic_is_enabled(string_amg))) {
2964                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2965
2966                 assert(re);
2967                         
2968                 /* If the regex is UTF-8 we want the containing scalar to
2969                    have an UTF-8 flag too */
2970                 if (RX_UTF8(re))
2971                     SvUTF8_on(sv);
2972                 else
2973                     SvUTF8_off(sv);     
2974
2975                 if (lp)
2976                     *lp = RX_WRAPLEN(re);
2977  
2978                 return RX_WRAPPED(re);
2979             } else {
2980                 const char *const typestr = sv_reftype(referent, 0);
2981                 const STRLEN typelen = strlen(typestr);
2982                 UV addr = PTR2UV(referent);
2983                 const char *stashname = NULL;
2984                 STRLEN stashnamelen = 0; /* hush, gcc */
2985                 const char *buffer_end;
2986
2987                 if (SvOBJECT(referent)) {
2988                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2989
2990                     if (name) {
2991                         stashname = HEK_KEY(name);
2992                         stashnamelen = HEK_LEN(name);
2993
2994                         if (HEK_UTF8(name)) {
2995                             SvUTF8_on(sv);
2996                         } else {
2997                             SvUTF8_off(sv);
2998                         }
2999                     } else {
3000                         stashname = "__ANON__";
3001                         stashnamelen = 8;
3002                     }
3003                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3004                         + 2 * sizeof(UV) + 2 /* )\0 */;
3005                 } else {
3006                     len = typelen + 3 /* (0x */
3007                         + 2 * sizeof(UV) + 2 /* )\0 */;
3008                 }
3009
3010                 Newx(buffer, len, char);
3011                 buffer_end = retval = buffer + len;
3012
3013                 /* Working backwards  */
3014                 *--retval = '\0';
3015                 *--retval = ')';
3016                 do {
3017                     *--retval = PL_hexdigit[addr & 15];
3018                 } while (addr >>= 4);
3019                 *--retval = 'x';
3020                 *--retval = '0';
3021                 *--retval = '(';
3022
3023                 retval -= typelen;
3024                 memcpy(retval, typestr, typelen);
3025
3026                 if (stashname) {
3027                     *--retval = '=';
3028                     retval -= stashnamelen;
3029                     memcpy(retval, stashname, stashnamelen);
3030                 }
3031                 /* retval may not necessarily have reached the start of the
3032                    buffer here.  */
3033                 assert (retval >= buffer);
3034
3035                 len = buffer_end - retval - 1; /* -1 for that \0  */
3036             }
3037             if (lp)
3038                 *lp = len;
3039             SAVEFREEPV(buffer);
3040             return retval;
3041         }
3042     }
3043
3044     if (SvPOKp(sv)) {
3045         if (lp)
3046             *lp = SvCUR(sv);
3047         if (flags & SV_MUTABLE_RETURN)
3048             return SvPVX_mutable(sv);
3049         if (flags & SV_CONST_RETURN)
3050             return (char *)SvPVX_const(sv);
3051         return SvPVX(sv);
3052     }
3053
3054     if (SvIOK(sv)) {
3055         /* I'm assuming that if both IV and NV are equally valid then
3056            converting the IV is going to be more efficient */
3057         const U32 isUIOK = SvIsUV(sv);
3058         char buf[TYPE_CHARS(UV)];
3059         char *ebuf, *ptr;
3060         STRLEN len;
3061
3062         if (SvTYPE(sv) < SVt_PVIV)
3063             sv_upgrade(sv, SVt_PVIV);
3064         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3065         len = ebuf - ptr;
3066         /* inlined from sv_setpvn */
3067         s = SvGROW_mutable(sv, len + 1);
3068         Move(ptr, s, len, char);
3069         s += len;
3070         *s = '\0';
3071         SvPOK_on(sv);
3072     }
3073     else if (SvNOK(sv)) {
3074         if (SvTYPE(sv) < SVt_PVNV)
3075             sv_upgrade(sv, SVt_PVNV);
3076         if (SvNVX(sv) == 0.0
3077 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3078             && !Perl_isnan(SvNVX(sv))
3079 #endif
3080         ) {
3081             s = SvGROW_mutable(sv, 2);
3082             *s++ = '0';
3083             *s = '\0';
3084         } else {
3085             STRLEN len;
3086             STRLEN size = 5; /* "-Inf\0" */
3087
3088             s = SvGROW_mutable(sv, size);
3089             len = S_infnan_2pv(SvNVX(sv), s, size);
3090             if (len > 0) {
3091                 s += len;
3092                 SvPOK_on(sv);
3093             }
3094             else {
3095                 /* some Xenix systems wipe out errno here */
3096                 dSAVE_ERRNO;
3097
3098                 size =
3099                     1 + /* sign */
3100                     1 + /* "." */
3101                     NV_DIG +
3102                     1 + /* "e" */
3103                     1 + /* sign */
3104                     5 + /* exponent digits */
3105                     1 + /* \0 */
3106                     2; /* paranoia */
3107
3108                 s = SvGROW_mutable(sv, size);
3109 #ifndef USE_LOCALE_NUMERIC
3110                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3111
3112                 SvPOK_on(sv);
3113 #else
3114                 {
3115                     bool local_radix;
3116                     DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3117
3118                     local_radix =
3119                         PL_numeric_local &&
3120                         PL_numeric_radix_sv &&
3121                         SvUTF8(PL_numeric_radix_sv);
3122                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3123                         size += SvLEN(PL_numeric_radix_sv) - 1;
3124                         s = SvGROW_mutable(sv, size);
3125                     }
3126
3127                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3128
3129                     /* If the radix character is UTF-8, and actually is in the
3130                      * output, turn on the UTF-8 flag for the scalar */
3131                     if (local_radix &&
3132                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3133                         SvUTF8_on(sv);
3134                     }
3135
3136                     RESTORE_LC_NUMERIC();
3137                 }
3138
3139                 /* We don't call SvPOK_on(), because it may come to
3140                  * pass that the locale changes so that the
3141                  * stringification we just did is no longer correct.  We
3142                  * will have to re-stringify every time it is needed */
3143 #endif
3144                 RESTORE_ERRNO;
3145             }
3146             while (*s) s++;
3147         }
3148     }
3149     else if (isGV_with_GP(sv)) {
3150         GV *const gv = MUTABLE_GV(sv);
3151         SV *const buffer = sv_newmortal();
3152
3153         gv_efullname3(buffer, gv, "*");
3154
3155         assert(SvPOK(buffer));
3156         if (SvUTF8(buffer))
3157             SvUTF8_on(sv);
3158         if (lp)
3159             *lp = SvCUR(buffer);
3160         return SvPVX(buffer);
3161     }
3162     else if (isREGEXP(sv)) {
3163         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3164         return RX_WRAPPED((REGEXP *)sv);
3165     }
3166     else {
3167         if (lp)
3168             *lp = 0;
3169         if (flags & SV_UNDEF_RETURNS_NULL)
3170             return NULL;
3171         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3172             report_uninit(sv);
3173         /* Typically the caller expects that sv_any is not NULL now.  */
3174         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3175             sv_upgrade(sv, SVt_PV);
3176         return (char *)"";
3177     }
3178
3179     {
3180         const STRLEN len = s - SvPVX_const(sv);
3181         if (lp) 
3182             *lp = len;
3183         SvCUR_set(sv, len);
3184     }
3185     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3186                           PTR2UV(sv),SvPVX_const(sv)));
3187     if (flags & SV_CONST_RETURN)
3188         return (char *)SvPVX_const(sv);
3189     if (flags & SV_MUTABLE_RETURN)
3190         return SvPVX_mutable(sv);
3191     return SvPVX(sv);
3192 }
3193
3194 /*
3195 =for apidoc sv_copypv
3196
3197 Copies a stringified representation of the source SV into the
3198 destination SV.  Automatically performs any necessary mg_get and
3199 coercion of numeric values into strings.  Guaranteed to preserve
3200 UTF8 flag even from overloaded objects.  Similar in nature to
3201 sv_2pv[_flags] but operates directly on an SV instead of just the
3202 string.  Mostly uses sv_2pv_flags to do its work, except when that
3203 would lose the UTF-8'ness of the PV.
3204
3205 =for apidoc sv_copypv_nomg
3206
3207 Like sv_copypv, but doesn't invoke get magic first.
3208
3209 =for apidoc sv_copypv_flags
3210
3211 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3212 include SV_GMAGIC.
3213
3214 =cut
3215 */
3216
3217 void
3218 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3219 {
3220     PERL_ARGS_ASSERT_SV_COPYPV;
3221
3222     sv_copypv_flags(dsv, ssv, 0);
3223 }
3224
3225 void
3226 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3227 {
3228     STRLEN len;
3229     const char *s;
3230
3231     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3232
3233     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3234     sv_setpvn(dsv,s,len);
3235     if (SvUTF8(ssv))
3236         SvUTF8_on(dsv);
3237     else
3238         SvUTF8_off(dsv);
3239 }
3240
3241 /*
3242 =for apidoc sv_2pvbyte
3243
3244 Return a pointer to the byte-encoded representation of the SV, and set *lp
3245 to its length.  May cause the SV to be downgraded from UTF-8 as a
3246 side-effect.
3247
3248 Usually accessed via the C<SvPVbyte> macro.
3249
3250 =cut
3251 */
3252
3253 char *
3254 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3255 {
3256     PERL_ARGS_ASSERT_SV_2PVBYTE;
3257
3258     SvGETMAGIC(sv);
3259     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3260      || isGV_with_GP(sv) || SvROK(sv)) {
3261         SV *sv2 = sv_newmortal();
3262         sv_copypv_nomg(sv2,sv);
3263         sv = sv2;
3264     }
3265     sv_utf8_downgrade(sv,0);
3266     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3267 }
3268
3269 /*
3270 =for apidoc sv_2pvutf8
3271
3272 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3273 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3274
3275 Usually accessed via the C<SvPVutf8> macro.
3276
3277 =cut
3278 */
3279
3280 char *
3281 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3282 {
3283     PERL_ARGS_ASSERT_SV_2PVUTF8;
3284
3285     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3286      || isGV_with_GP(sv) || SvROK(sv))
3287         sv = sv_mortalcopy(sv);
3288     else
3289         SvGETMAGIC(sv);
3290     sv_utf8_upgrade_nomg(sv);
3291     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3292 }
3293
3294
3295 /*
3296 =for apidoc sv_2bool
3297
3298 This macro is only used by sv_true() or its macro equivalent, and only if
3299 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3300 It calls sv_2bool_flags with the SV_GMAGIC flag.
3301
3302 =for apidoc sv_2bool_flags
3303
3304 This function is only used by sv_true() and friends,  and only if
3305 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3306 contain SV_GMAGIC, then it does an mg_get() first.
3307
3308
3309 =cut
3310 */
3311
3312 bool
3313 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3314 {
3315     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3316
3317     restart:
3318     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3319
3320     if (!SvOK(sv))
3321         return 0;
3322     if (SvROK(sv)) {
3323         if (SvAMAGIC(sv)) {
3324             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3325             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3326                 bool svb;
3327                 sv = tmpsv;
3328                 if(SvGMAGICAL(sv)) {
3329                     flags = SV_GMAGIC;
3330                     goto restart; /* call sv_2bool */
3331                 }
3332                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3333                 else if(!SvOK(sv)) {
3334                     svb = 0;
3335                 }
3336                 else if(SvPOK(sv)) {
3337                     svb = SvPVXtrue(sv);
3338                 }
3339                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3340                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3341                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3342                 }
3343                 else {
3344                     flags = 0;
3345                     goto restart; /* call sv_2bool_nomg */
3346                 }
3347                 return cBOOL(svb);
3348             }
3349         }
3350         return SvRV(sv) != 0;
3351     }
3352     if (isREGEXP(sv))
3353         return
3354           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3355     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3356 }
3357
3358 /*
3359 =for apidoc sv_utf8_upgrade
3360
3361 Converts the PV of an SV to its UTF-8-encoded form.
3362 Forces the SV to string form if it is not already.
3363 Will C<mg_get> on C<sv> if appropriate.
3364 Always sets the SvUTF8 flag to avoid future validity checks even
3365 if the whole string is the same in UTF-8 as not.
3366 Returns the number of bytes in the converted string
3367
3368 This is not a general purpose byte encoding to Unicode interface:
3369 use the Encode extension for that.
3370
3371 =for apidoc sv_utf8_upgrade_nomg
3372
3373 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3374
3375 =for apidoc sv_utf8_upgrade_flags
3376
3377 Converts the PV of an SV to its UTF-8-encoded form.
3378 Forces the SV to string form if it is not already.
3379 Always sets the SvUTF8 flag to avoid future validity checks even
3380 if all the bytes are invariant in UTF-8.
3381 If C<flags> has C<SV_GMAGIC> bit set,
3382 will C<mg_get> on C<sv> if appropriate, else not.
3383
3384 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3385 will expand when converted to UTF-8, and skips the extra work of checking for
3386 that.  Typically this flag is used by a routine that has already parsed the
3387 string and found such characters, and passes this information on so that the
3388 work doesn't have to be repeated.
3389
3390 Returns the number of bytes in the converted string.
3391
3392 This is not a general purpose byte encoding to Unicode interface:
3393 use the Encode extension for that.
3394
3395 =for apidoc sv_utf8_upgrade_flags_grow
3396
3397 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3398 the number of unused bytes the string of 'sv' is guaranteed to have free after
3399 it upon return.  This allows the caller to reserve extra space that it intends
3400 to fill, to avoid extra grows.
3401
3402 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3403 are implemented in terms of this function.
3404
3405 Returns the number of bytes in the converted string (not including the spares).
3406
3407 =cut
3408
3409 (One might think that the calling routine could pass in the position of the
3410 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3411 have to be found again.  But that is not the case, because typically when the
3412 caller is likely to use this flag, it won't be calling this routine unless it
3413 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3414 and just use bytes.  But some things that do fit into a byte are variants in
3415 utf8, and the caller may not have been keeping track of these.)
3416
3417 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3418 C<NUL> isn't guaranteed due to having other routines do the work in some input
3419 cases, or if the input is already flagged as being in utf8.
3420
3421 The speed of this could perhaps be improved for many cases if someone wanted to
3422 write a fast function that counts the number of variant characters in a string,
3423 especially if it could return the position of the first one.
3424
3425 */
3426
3427 STRLEN
3428 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3429 {
3430     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3431
3432     if (sv == &PL_sv_undef)
3433         return 0;
3434     if (!SvPOK_nog(sv)) {
3435         STRLEN len = 0;
3436         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3437             (void) sv_2pv_flags(sv,&len, flags);
3438             if (SvUTF8(sv)) {
3439                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3440                 return len;
3441             }
3442         } else {
3443             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3444         }
3445     }
3446
3447     if (SvUTF8(sv)) {
3448         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3449         return SvCUR(sv);
3450     }
3451
3452     if (SvIsCOW(sv)) {
3453         S_sv_uncow(aTHX_ sv, 0);
3454     }
3455
3456     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3457         sv_recode_to_utf8(sv, PL_encoding);
3458         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3459         return SvCUR(sv);
3460     }
3461
3462     if (SvCUR(sv) == 0) {
3463         if (extra) SvGROW(sv, extra);
3464     } else { /* Assume Latin-1/EBCDIC */
3465         /* This function could be much more efficient if we
3466          * had a FLAG in SVs to signal if there are any variant
3467          * chars in the PV.  Given that there isn't such a flag
3468          * make the loop as fast as possible (although there are certainly ways
3469          * to speed this up, eg. through vectorization) */
3470         U8 * s = (U8 *) SvPVX_const(sv);
3471         U8 * e = (U8 *) SvEND(sv);
3472         U8 *t = s;
3473         STRLEN two_byte_count = 0;
3474         
3475         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3476
3477         /* See if really will need to convert to utf8.  We mustn't rely on our
3478          * incoming SV being well formed and having a trailing '\0', as certain
3479          * code in pp_formline can send us partially built SVs. */
3480
3481         while (t < e) {
3482             const U8 ch = *t++;
3483             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3484
3485             t--;    /* t already incremented; re-point to first variant */
3486             two_byte_count = 1;
3487             goto must_be_utf8;
3488         }
3489
3490         /* utf8 conversion not needed because all are invariants.  Mark as
3491          * UTF-8 even if no variant - saves scanning loop */
3492         SvUTF8_on(sv);
3493         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3494         return SvCUR(sv);
3495
3496 must_be_utf8:
3497
3498         /* Here, the string should be converted to utf8, either because of an
3499          * input flag (two_byte_count = 0), or because a character that
3500          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3501          * the beginning of the string (if we didn't examine anything), or to
3502          * the first variant.  In either case, everything from s to t - 1 will
3503          * occupy only 1 byte each on output.
3504          *
3505          * There are two main ways to convert.  One is to create a new string
3506          * and go through the input starting from the beginning, appending each
3507          * converted value onto the new string as we go along.  It's probably
3508          * best to allocate enough space in the string for the worst possible
3509          * case rather than possibly running out of space and having to
3510          * reallocate and then copy what we've done so far.  Since everything
3511          * from s to t - 1 is invariant, the destination can be initialized
3512          * with these using a fast memory copy
3513          *
3514          * The other way is to figure out exactly how big the string should be
3515          * by parsing the entire input.  Then you don't have to make it big
3516          * enough to handle the worst possible case, and more importantly, if
3517          * the string you already have is large enough, you don't have to
3518          * allocate a new string, you can copy the last character in the input
3519          * string to the final position(s) that will be occupied by the
3520          * converted string and go backwards, stopping at t, since everything
3521          * before that is invariant.
3522          *
3523          * There are advantages and disadvantages to each method.
3524          *
3525          * In the first method, we can allocate a new string, do the memory
3526          * copy from the s to t - 1, and then proceed through the rest of the
3527          * string byte-by-byte.
3528          *
3529          * In the second method, we proceed through the rest of the input
3530          * string just calculating how big the converted string will be.  Then
3531          * there are two cases:
3532          *  1)  if the string has enough extra space to handle the converted
3533          *      value.  We go backwards through the string, converting until we
3534          *      get to the position we are at now, and then stop.  If this
3535          *      position is far enough along in the string, this method is
3536          *      faster than the other method.  If the memory copy were the same
3537          *      speed as the byte-by-byte loop, that position would be about
3538          *      half-way, as at the half-way mark, parsing to the end and back
3539          *      is one complete string's parse, the same amount as starting
3540          *      over and going all the way through.  Actually, it would be
3541          *      somewhat less than half-way, as it's faster to just count bytes
3542          *      than to also copy, and we don't have the overhead of allocating
3543          *      a new string, changing the scalar to use it, and freeing the
3544          *      existing one.  But if the memory copy is fast, the break-even
3545          *      point is somewhere after half way.  The counting loop could be
3546          *      sped up by vectorization, etc, to move the break-even point
3547          *      further towards the beginning.
3548          *  2)  if the string doesn't have enough space to handle the converted
3549          *      value.  A new string will have to be allocated, and one might
3550          *      as well, given that, start from the beginning doing the first
3551          *      method.  We've spent extra time parsing the string and in
3552          *      exchange all we've gotten is that we know precisely how big to
3553          *      make the new one.  Perl is more optimized for time than space,
3554          *      so this case is a loser.
3555          * So what I've decided to do is not use the 2nd method unless it is
3556          * guaranteed that a new string won't have to be allocated, assuming
3557          * the worst case.  I also decided not to put any more conditions on it
3558          * than this, for now.  It seems likely that, since the worst case is
3559          * twice as big as the unknown portion of the string (plus 1), we won't
3560          * be guaranteed enough space, causing us to go to the first method,
3561          * unless the string is short, or the first variant character is near
3562          * the end of it.  In either of these cases, it seems best to use the
3563          * 2nd method.  The only circumstance I can think of where this would
3564          * be really slower is if the string had once had much more data in it
3565          * than it does now, but there is still a substantial amount in it  */
3566
3567         {
3568             STRLEN invariant_head = t - s;
3569             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3570             if (SvLEN(sv) < size) {
3571
3572                 /* Here, have decided to allocate a new string */
3573
3574                 U8 *dst;
3575                 U8 *d;
3576
3577                 Newx(dst, size, U8);
3578
3579                 /* If no known invariants at the beginning of the input string,
3580                  * set so starts from there.  Otherwise, can use memory copy to
3581                  * get up to where we are now, and then start from here */
3582
3583                 if (invariant_head == 0) {
3584                     d = dst;
3585                 } else {
3586                     Copy(s, dst, invariant_head, char);
3587                     d = dst + invariant_head;
3588                 }
3589
3590                 while (t < e) {
3591                     append_utf8_from_native_byte(*t, &d);
3592                     t++;
3593                 }
3594                 *d = '\0';
3595                 SvPV_free(sv); /* No longer using pre-existing string */
3596                 SvPV_set(sv, (char*)dst);
3597                 SvCUR_set(sv, d - dst);
3598                 SvLEN_set(sv, size);
3599             } else {
3600
3601                 /* Here, have decided to get the exact size of the string.
3602                  * Currently this happens only when we know that there is
3603                  * guaranteed enough space to fit the converted string, so
3604                  * don't have to worry about growing.  If two_byte_count is 0,
3605                  * then t points to the first byte of the string which hasn't
3606                  * been examined yet.  Otherwise two_byte_count is 1, and t
3607                  * points to the first byte in the string that will expand to
3608                  * two.  Depending on this, start examining at t or 1 after t.
3609                  * */
3610
3611                 U8 *d = t + two_byte_count;
3612
3613
3614                 /* Count up the remaining bytes that expand to two */
3615
3616                 while (d < e) {
3617                     const U8 chr = *d++;
3618                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3619                 }
3620
3621                 /* The string will expand by just the number of bytes that
3622                  * occupy two positions.  But we are one afterwards because of
3623                  * the increment just above.  This is the place to put the
3624                  * trailing NUL, and to set the length before we decrement */
3625
3626                 d += two_byte_count;
3627                 SvCUR_set(sv, d - s);
3628                 *d-- = '\0';
3629
3630
3631                 /* Having decremented d, it points to the position to put the
3632                  * very last byte of the expanded string.  Go backwards through
3633                  * the string, copying and expanding as we go, stopping when we
3634                  * get to the part that is invariant the rest of the way down */
3635
3636                 e--;
3637                 while (e >= t) {
3638                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3639                         *d-- = *e;
3640                     } else {
3641                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3642                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3643                     }
3644                     e--;
3645                 }
3646             }
3647
3648             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3649                 /* Update pos. We do it at the end rather than during
3650                  * the upgrade, to avoid slowing down the common case
3651                  * (upgrade without pos).
3652                  * pos can be stored as either bytes or characters.  Since
3653                  * this was previously a byte string we can just turn off
3654                  * the bytes flag. */
3655                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3656                 if (mg) {
3657                     mg->mg_flags &= ~MGf_BYTES;
3658                 }
3659                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3660                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3661             }
3662         }
3663     }
3664
3665     /* Mark as UTF-8 even if no variant - saves scanning loop */
3666     SvUTF8_on(sv);
3667     return SvCUR(sv);
3668 }
3669
3670 /*
3671 =for apidoc sv_utf8_downgrade
3672
3673 Attempts to convert the PV of an SV from characters to bytes.
3674 If the PV contains a character that cannot fit
3675 in a byte, this conversion will fail;
3676 in this case, either returns false or, if C<fail_ok> is not
3677 true, croaks.
3678
3679 This is not a general purpose Unicode to byte encoding interface:
3680 use the Encode extension for that.
3681
3682 =cut
3683 */
3684
3685 bool
3686 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3687 {
3688     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3689
3690     if (SvPOKp(sv) && SvUTF8(sv)) {
3691         if (SvCUR(sv)) {
3692             U8 *s;
3693             STRLEN len;
3694             int mg_flags = SV_GMAGIC;
3695
3696             if (SvIsCOW(sv)) {
3697                 S_sv_uncow(aTHX_ sv, 0);
3698             }
3699             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3700                 /* update pos */
3701                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3702                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3703                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3704                                                 SV_GMAGIC|SV_CONST_RETURN);
3705                         mg_flags = 0; /* sv_pos_b2u does get magic */
3706                 }
3707                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3708                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3709
3710             }
3711             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3712
3713             if (!utf8_to_bytes(s, &len)) {
3714                 if (fail_ok)
3715                     return FALSE;
3716                 else {
3717                     if (PL_op)
3718                         Perl_croak(aTHX_ "Wide character in %s",
3719                                    OP_DESC(PL_op));
3720                     else
3721                         Perl_croak(aTHX_ "Wide character");
3722                 }
3723             }
3724             SvCUR_set(sv, len);
3725         }
3726     }
3727     SvUTF8_off(sv);
3728     return TRUE;
3729 }
3730
3731 /*
3732 =for apidoc sv_utf8_encode
3733
3734 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3735 flag off so that it looks like octets again.
3736
3737 =cut
3738 */
3739
3740 void
3741 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3742 {
3743     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3744
3745     if (SvREADONLY(sv)) {
3746         sv_force_normal_flags(sv, 0);
3747     }
3748     (void) sv_utf8_upgrade(sv);
3749     SvUTF8_off(sv);
3750 }
3751
3752 /*
3753 =for apidoc sv_utf8_decode
3754
3755 If the PV of the SV is an octet sequence in UTF-8
3756 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3757 so that it looks like a character.  If the PV contains only single-byte
3758 characters, the C<SvUTF8> flag stays off.
3759 Scans PV for validity and returns false if the PV is invalid UTF-8.
3760
3761 =cut
3762 */
3763
3764 bool
3765 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3766 {
3767     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3768
3769     if (SvPOKp(sv)) {
3770         const U8 *start, *c;
3771         const U8 *e;
3772
3773         /* The octets may have got themselves encoded - get them back as
3774          * bytes
3775          */
3776         if (!sv_utf8_downgrade(sv, TRUE))
3777             return FALSE;
3778
3779         /* it is actually just a matter of turning the utf8 flag on, but
3780          * we want to make sure everything inside is valid utf8 first.
3781          */
3782         c = start = (const U8 *) SvPVX_const(sv);
3783         if (!is_utf8_string(c, SvCUR(sv)))
3784             return FALSE;
3785         e = (const U8 *) SvEND(sv);
3786         while (c < e) {
3787             const U8 ch = *c++;
3788             if (!UTF8_IS_INVARIANT(ch)) {
3789                 SvUTF8_on(sv);
3790                 break;
3791             }
3792         }
3793         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3794             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3795                    after this, clearing pos.  Does anything on CPAN
3796                    need this? */
3797             /* adjust pos to the start of a UTF8 char sequence */
3798             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3799             if (mg) {
3800                 I32 pos = mg->mg_len;
3801                 if (pos > 0) {
3802                     for (c = start + pos; c > start; c--) {
3803                         if (UTF8_IS_START(*c))
3804                             break;
3805                     }
3806                     mg->mg_len  = c - start;
3807                 }
3808             }
3809             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3810                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3811         }
3812     }
3813     return TRUE;
3814 }
3815
3816 /*
3817 =for apidoc sv_setsv
3818
3819 Copies the contents of the source SV C<ssv> into the destination SV
3820 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3821 function if the source SV needs to be reused.  Does not handle 'set' magic on
3822 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3823 performs a copy-by-value, obliterating any previous content of the
3824 destination.
3825
3826 You probably want to use one of the assortment of wrappers, such as
3827 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3828 C<SvSetMagicSV_nosteal>.
3829
3830 =for apidoc sv_setsv_flags
3831
3832 Copies the contents of the source SV C<ssv> into the destination SV
3833 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3834 function if the source SV needs to be reused.  Does not handle 'set' magic.
3835 Loosely speaking, it performs a copy-by-value, obliterating any previous
3836 content of the destination.
3837 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3838 C<ssv> if appropriate, else not.  If the C<flags>
3839 parameter has the C<SV_NOSTEAL> bit set then the
3840 buffers of temps will not be stolen.  <sv_setsv>
3841 and C<sv_setsv_nomg> are implemented in terms of this function.
3842
3843 You probably want to use one of the assortment of wrappers, such as
3844 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3845 C<SvSetMagicSV_nosteal>.
3846
3847 This is the primary function for copying scalars, and most other
3848 copy-ish functions and macros use this underneath.
3849
3850 =cut
3851 */
3852
3853 static void
3854 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3855 {
3856     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3857     HV *old_stash = NULL;
3858
3859     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3860
3861     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3862         const char * const name = GvNAME(sstr);
3863         const STRLEN len = GvNAMELEN(sstr);
3864         {
3865             if (dtype >= SVt_PV) {
3866                 SvPV_free(dstr);
3867                 SvPV_set(dstr, 0);
3868                 SvLEN_set(dstr, 0);
3869                 SvCUR_set(dstr, 0);
3870             }
3871             SvUPGRADE(dstr, SVt_PVGV);
3872             (void)SvOK_off(dstr);
3873             isGV_with_GP_on(dstr);
3874         }
3875         GvSTASH(dstr) = GvSTASH(sstr);
3876         if (GvSTASH(dstr))
3877             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3878         gv_name_set(MUTABLE_GV(dstr), name, len,
3879                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3880         SvFAKE_on(dstr);        /* can coerce to non-glob */
3881     }
3882
3883     if(GvGP(MUTABLE_GV(sstr))) {
3884         /* If source has method cache entry, clear it */
3885         if(GvCVGEN(sstr)) {
3886             SvREFCNT_dec(GvCV(sstr));
3887             GvCV_set(sstr, NULL);
3888             GvCVGEN(sstr) = 0;
3889         }
3890         /* If source has a real method, then a method is
3891            going to change */
3892         else if(
3893          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3894         ) {
3895             mro_changes = 1;
3896         }
3897     }
3898
3899     /* If dest already had a real method, that's a change as well */
3900     if(
3901         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3902      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3903     ) {
3904         mro_changes = 1;
3905     }
3906
3907     /* We don't need to check the name of the destination if it was not a
3908        glob to begin with. */
3909     if(dtype == SVt_PVGV) {
3910         const char * const name = GvNAME((const GV *)dstr);
3911         if(
3912             strEQ(name,"ISA")
3913          /* The stash may have been detached from the symbol table, so
3914             check its name. */
3915          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3916         )
3917             mro_changes = 2;
3918         else {
3919             const STRLEN len = GvNAMELEN(dstr);
3920             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3921              || (len == 1 && name[0] == ':')) {
3922                 mro_changes = 3;
3923
3924                 /* Set aside the old stash, so we can reset isa caches on
3925                    its subclasses. */
3926                 if((old_stash = GvHV(dstr)))
3927                     /* Make sure we do not lose it early. */
3928                     SvREFCNT_inc_simple_void_NN(
3929                      sv_2mortal((SV *)old_stash)
3930                     );
3931             }
3932         }
3933
3934         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3935     }
3936
3937     gp_free(MUTABLE_GV(dstr));
3938     GvINTRO_off(dstr);          /* one-shot flag */
3939     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3940     if (SvTAINTED(sstr))
3941         SvTAINT(dstr);
3942     if (GvIMPORTED(dstr) != GVf_IMPORTED
3943         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3944         {
3945             GvIMPORTED_on(dstr);
3946         }
3947     GvMULTI_on(dstr);
3948     if(mro_changes == 2) {
3949       if (GvAV((const GV *)sstr)) {
3950         MAGIC *mg;
3951         SV * const sref = (SV *)GvAV((const GV *)dstr);
3952         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3953             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3954                 AV * const ary = newAV();
3955                 av_push(ary, mg->mg_obj); /* takes the refcount */
3956                 mg->mg_obj = (SV *)ary;
3957             }
3958             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3959         }
3960         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3961       }
3962       mro_isa_changed_in(GvSTASH(dstr));
3963     }
3964     else if(mro_changes == 3) {
3965         HV * const stash = GvHV(dstr);
3966         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3967             mro_package_moved(
3968                 stash, old_stash,
3969                 (GV *)dstr, 0
3970             );
3971     }
3972     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3973     if (GvIO(dstr) && dtype == SVt_PVGV) {
3974         DEBUG_o(Perl_deb(aTHX_
3975                         "glob_assign_glob clearing PL_stashcache\n"));
3976         /* It's a cache. It will rebuild itself quite happily.
3977            It's a lot of effort to work out exactly which key (or keys)
3978            might be invalidated by the creation of the this file handle.
3979          */
3980         hv_clear(PL_stashcache);
3981     }
3982     return;
3983 }
3984
3985 void
3986 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3987 {
3988     SV * const sref = SvRV(sstr);
3989     SV *dref;
3990     const int intro = GvINTRO(dstr);
3991     SV **location;
3992     U8 import_flag = 0;
3993     const U32 stype = SvTYPE(sref);
3994
3995     PERL_ARGS_ASSERT_GV_SETREF;
3996
3997     if (intro) {
3998         GvINTRO_off(dstr);      /* one-shot flag */
3999         GvLINE(dstr) = CopLINE(PL_curcop);
4000         GvEGV(dstr) = MUTABLE_GV(dstr);
4001     }
4002     GvMULTI_on(dstr);
4003     switch (stype) {
4004     case SVt_PVCV:
4005         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4006         import_flag = GVf_IMPORTED_CV;
4007         goto common;
4008     case SVt_PVHV:
4009         location = (SV **) &GvHV(dstr);
4010         import_flag = GVf_IMPORTED_HV;
4011         goto common;
4012     case SVt_PVAV:
4013         location = (SV **) &GvAV(dstr);
4014         import_flag = GVf_IMPORTED_AV;
4015         goto common;
4016     case SVt_PVIO:
4017         location = (SV **) &GvIOp(dstr);
4018         goto common;
4019     case SVt_PVFM:
4020         location = (SV **) &GvFORM(dstr);
4021         goto common;
4022     default:
4023         location = &GvSV(dstr);
4024         import_flag = GVf_IMPORTED_SV;
4025     common:
4026         if (intro) {
4027             if (stype == SVt_PVCV) {
4028                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4029                 if (GvCVGEN(dstr)) {
4030                     SvREFCNT_dec(GvCV(dstr));
4031                     GvCV_set(dstr, NULL);
4032                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4033                 }
4034             }
4035             /* SAVEt_GVSLOT takes more room on the savestack and has more
4036                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4037                leave_scope needs access to the GV so it can reset method
4038                caches.  We must use SAVEt_GVSLOT whenever the type is
4039                SVt_PVCV, even if the stash is anonymous, as the stash may
4040                gain a name somehow before leave_scope. */
4041             if (stype == SVt_PVCV) {
4042                 /* There is no save_pushptrptrptr.  Creating it for this
4043                    one call site would be overkill.  So inline the ss add
4044                    routines here. */
4045                 dSS_ADD;
4046                 SS_ADD_PTR(dstr);
4047                 SS_ADD_PTR(location);
4048                 SS_ADD_PTR(SvREFCNT_inc(*location));
4049                 SS_ADD_UV(SAVEt_GVSLOT);
4050                 SS_ADD_END(4);
4051             }
4052             else SAVEGENERICSV(*location);
4053         }
4054         dref = *location;
4055         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4056             CV* const cv = MUTABLE_CV(*location);
4057             if (cv) {
4058                 if (!GvCVGEN((const GV *)dstr) &&
4059                     (CvROOT(cv) || CvXSUB(cv)) &&
4060                     /* redundant check that avoids creating the extra SV
4061                        most of the time: */
4062                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4063                     {
4064                         SV * const new_const_sv =
4065                             CvCONST((const CV *)sref)
4066                                  ? cv_const_sv((const CV *)sref)
4067                                  : NULL;
4068                         report_redefined_cv(
4069                            sv_2mortal(Perl_newSVpvf(aTHX_
4070                                 "%"HEKf"::%"HEKf,
4071                                 HEKfARG(
4072                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4073                                 ),
4074                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4075                            )),
4076                            cv,
4077                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4078                         );
4079                     }
4080                 if (!intro)
4081                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4082                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4083                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4084                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4085             }
4086             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4087             GvASSUMECV_on(dstr);
4088             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4089                 if (intro && GvREFCNT(dstr) > 1) {
4090                     /* temporary remove extra savestack's ref */
4091                     --GvREFCNT(dstr);
4092                     gv_method_changed(dstr);
4093                     ++GvREFCNT(dstr);
4094                 }
4095                 else gv_method_changed(dstr);
4096             }
4097         }
4098         *location = SvREFCNT_inc_simple_NN(sref);
4099         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4100             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4101             GvFLAGS(dstr) |= import_flag;
4102         }
4103         if (import_flag == GVf_IMPORTED_SV) {
4104             if (intro) {
4105                 save_aliased_sv((GV *)dstr);
4106             }
4107             /* Turn off the flag if sref is not referenced elsewhere,
4108                even by weak refs.  (SvRMAGICAL is a pessimistic check for
4109                back refs.)  */
4110             if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
4111                 GvALIASED_SV_off(dstr);
4112             else
4113                 GvALIASED_SV_on(dstr);
4114         }
4115         if (stype == SVt_PVHV) {
4116             const char * const name = GvNAME((GV*)dstr);
4117             const STRLEN len = GvNAMELEN(dstr);
4118             if (
4119                 (
4120                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4121                 || (len == 1 && name[0] == ':')
4122                 )
4123              && (!dref || HvENAME_get(dref))
4124             ) {
4125                 mro_package_moved(
4126                     (HV *)sref, (HV *)dref,
4127                     (GV *)dstr, 0
4128                 );
4129             }
4130         }
4131         else if (
4132             stype == SVt_PVAV && sref != dref
4133          && strEQ(GvNAME((GV*)dstr), "ISA")
4134          /* The stash may have been detached from the symbol table, so
4135             check its name before doing anything. */
4136          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4137         ) {
4138             MAGIC *mg;
4139             MAGIC * const omg = dref && SvSMAGICAL(dref)
4140                                  ? mg_find(dref, PERL_MAGIC_isa)
4141                                  : NULL;
4142             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4143                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4144                     AV * const ary = newAV();
4145                     av_push(ary, mg->mg_obj); /* takes the refcount */
4146                     mg->mg_obj = (SV *)ary;
4147                 }
4148                 if (omg) {
4149                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4150                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4151                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4152                         while (items--)
4153                             av_push(
4154                              (AV *)mg->mg_obj,
4155                              SvREFCNT_inc_simple_NN(*svp++)
4156                             );
4157                     }
4158                     else
4159                         av_push(
4160                          (AV *)mg->mg_obj,
4161                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4162                         );
4163                 }
4164                 else
4165                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4166             }
4167             else
4168             {
4169                 sv_magic(
4170                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4171                 );
4172                 mg = mg_find(sref, PERL_MAGIC_isa);
4173             }
4174             /* Since the *ISA assignment could have affected more than
4175                one stash, don't call mro_isa_changed_in directly, but let
4176                magic_clearisa do it for us, as it already has the logic for
4177                dealing with globs vs arrays of globs. */
4178             assert(mg);
4179             Perl_magic_clearisa(aTHX_ NULL, mg);
4180         }
4181         else if (stype == SVt_PVIO) {
4182             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4183             /* It's a cache. It will rebuild itself quite happily.
4184                It's a lot of effort to work out exactly which key (or keys)
4185                might be invalidated by the creation of the this file handle.
4186             */
4187             hv_clear(PL_stashcache);
4188         }
4189         break;
4190     }
4191     if (!intro) SvREFCNT_dec(dref);
4192     if (SvTAINTED(sstr))
4193         SvTAINT(dstr);
4194     return;
4195 }
4196
4197
4198
4199
4200 #ifdef PERL_DEBUG_READONLY_COW
4201 # include <sys/mman.h>
4202
4203 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4204 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4205 # endif
4206
4207 void
4208 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4209 {
4210     struct perl_memory_debug_header * const header =
4211         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4212     const MEM_SIZE len = header->size;
4213     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4214 # ifdef PERL_TRACK_MEMPOOL
4215     if (!header->readonly) header->readonly = 1;
4216 # endif
4217     if (mprotect(header, len, PROT_READ))
4218         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4219                          header, len, errno);
4220 }
4221
4222 static void
4223 S_sv_buf_to_rw(pTHX_ SV *sv)
4224 {
4225     struct perl_memory_debug_header * const header =
4226         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4227     const MEM_SIZE len = header->size;
4228     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4229     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4230         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4231                          header, len, errno);
4232 # ifdef PERL_TRACK_MEMPOOL
4233     header->readonly = 0;
4234 # endif
4235 }
4236
4237 #else
4238 # define sv_buf_to_ro(sv)       NOOP
4239 # define sv_buf_to_rw(sv)       NOOP
4240 #endif
4241
4242 void
4243 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4244 {
4245     U32 sflags;
4246     int dtype;
4247     svtype stype;
4248
4249     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4250
4251     if (sstr == dstr)
4252         return;
4253
4254     if (SvIS_FREED(dstr)) {
4255         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4256                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4257     }
4258     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4259     if (!sstr)
4260         sstr = &PL_sv_undef;
4261     if (SvIS_FREED(sstr)) {
4262         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4263                    (void*)sstr, (void*)dstr);
4264     }
4265     stype = SvTYPE(sstr);
4266     dtype = SvTYPE(dstr);
4267
4268     /* There's a lot of redundancy below but we're going for speed here */
4269
4270     switch (stype) {
4271     case SVt_NULL:
4272       undef_sstr:
4273         if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4274             (void)SvOK_off(dstr);
4275             return;
4276         }
4277         break;
4278     case SVt_IV:
4279         if (SvIOK(sstr)) {
4280             switch (dtype) {
4281             case SVt_NULL:
4282                 sv_upgrade(dstr, SVt_IV);
4283                 break;
4284             case SVt_NV:
4285             case SVt_PV:
4286                 sv_upgrade(dstr, SVt_PVIV);
4287                 break;
4288             case SVt_PVGV:
4289             case SVt_PVLV:
4290                 goto end_of_first_switch;
4291             }
4292             (void)SvIOK_only(dstr);
4293             SvIV_set(dstr,  SvIVX(sstr));
4294             if (SvIsUV(sstr))
4295                 SvIsUV_on(dstr);
4296             /* SvTAINTED can only be true if the SV has taint magic, which in
4297                turn means that the SV type is PVMG (or greater). This is the
4298                case statement for SVt_IV, so this cannot be true (whatever gcov
4299                may say).  */
4300             assert(!SvTAINTED(sstr));
4301             return;
4302         }
4303         if (!SvROK(sstr))
4304             goto undef_sstr;
4305         if (dtype < SVt_PV && dtype != SVt_IV)
4306             sv_upgrade(dstr, SVt_IV);
4307         break;
4308
4309     case SVt_NV:
4310         if (SvNOK(sstr)) {
4311             switch (dtype) {
4312             case SVt_NULL:
4313             case SVt_IV:
4314                 sv_upgrade(dstr, SVt_NV);
4315                 break;
4316             case SVt_PV:
4317             case SVt_PVIV:
4318                 sv_upgrade(dstr, SVt_PVNV);
4319                 break;
4320             case SVt_PVGV:
4321             case SVt_PVLV:
4322                 goto end_of_first_switch;
4323             }
4324             SvNV_set(dstr, SvNVX(sstr));
4325             (void)SvNOK_only(dstr);
4326             /* SvTAINTED can only be true if the SV has taint magic, which in
4327                turn means that the SV type is PVMG (or greater). This is the
4328                case statement for SVt_NV, so this cannot be true (whatever gcov
4329                may say).  */
4330             assert(!SvTAINTED(sstr));
4331             return;
4332         }
4333         goto undef_sstr;
4334
4335     case SVt_PV:
4336         if (dtype < SVt_PV)
4337             sv_upgrade(dstr, SVt_PV);
4338         break;
4339     case SVt_PVIV:
4340         if (dtype < SVt_PVIV)
4341             sv_upgrade(dstr, SVt_PVIV);
4342         break;
4343     case SVt_PVNV:
4344         if (dtype < SVt_PVNV)
4345             sv_upgrade(dstr, SVt_PVNV);
4346         break;
4347     default:
4348         {
4349         const char * const type = sv_reftype(sstr,0);
4350         if (PL_op)
4351             /* diag_listed_as: Bizarre copy of %s */
4352             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4353         else
4354             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4355         }
4356         NOT_REACHED; /* NOTREACHED */
4357
4358     case SVt_REGEXP:
4359       upgregexp:
4360         if (dtype < SVt_REGEXP)
4361         {
4362             if (dtype >= SVt_PV) {
4363                 SvPV_free(dstr);
4364                 SvPV_set(dstr, 0);
4365                 SvLEN_set(dstr, 0);
4366                 SvCUR_set(dstr, 0);
4367             }
4368             sv_upgrade(dstr, SVt_REGEXP);
4369         }
4370         break;
4371
4372         case SVt_INVLIST:
4373     case SVt_PVLV:
4374     case SVt_PVGV:
4375     case SVt_PVMG:
4376         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4377             mg_get(sstr);
4378             if (SvTYPE(sstr) != stype)
4379                 stype = SvTYPE(sstr);
4380         }
4381         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4382                     glob_assign_glob(dstr, sstr, dtype);
4383                     return;
4384         }
4385         if (stype == SVt_PVLV)
4386         {
4387             if (isREGEXP(sstr)) goto upgregexp;
4388             SvUPGRADE(dstr, SVt_PVNV);
4389         }
4390         else
4391             SvUPGRADE(dstr, (svtype)stype);
4392     }
4393  end_of_first_switch:
4394
4395     /* dstr may have been upgraded.  */
4396     dtype = SvTYPE(dstr);
4397     sflags = SvFLAGS(sstr);
4398
4399     if (dtype == SVt_PVCV) {
4400         /* Assigning to a subroutine sets the prototype.  */
4401         if (SvOK(sstr)) {
4402             STRLEN len;
4403             const char *const ptr = SvPV_const(sstr, len);
4404
4405             SvGROW(dstr, len + 1);
4406             Copy(ptr, SvPVX(dstr), len + 1, char);
4407             SvCUR_set(dstr, len);
4408             SvPOK_only(dstr);
4409             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4410             CvAUTOLOAD_off(dstr);
4411         } else {
4412             SvOK_off(dstr);
4413         }
4414     }
4415     else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4416         const char * const type = sv_reftype(dstr,0);
4417         if (PL_op)
4418             /* diag_listed_as: Cannot copy to %s */
4419             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4420         else
4421             Perl_croak(aTHX_ "Cannot copy to %s", type);
4422     } else if (sflags & SVf_ROK) {
4423         if (isGV_with_GP(dstr)
4424             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4425             sstr = SvRV(sstr);
4426             if (sstr == dstr) {
4427                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4428                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4429                 {
4430                     GvIMPORTED_on(dstr);
4431                 }
4432                 GvMULTI_on(dstr);
4433                 return;
4434             }
4435             glob_assign_glob(dstr, sstr, dtype);
4436             return;
4437         }
4438
4439         if (dtype >= SVt_PV) {
4440             if (isGV_with_GP(dstr)) {
4441                 gv_setref(dstr, sstr);
4442                 return;
4443             }
4444             if (SvPVX_const(dstr)) {
4445                 SvPV_free(dstr);
4446                 SvLEN_set(dstr, 0);
4447                 SvCUR_set(dstr, 0);
4448             }
4449         }
4450         (void)SvOK_off(dstr);
4451         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4452         SvFLAGS(dstr) |= sflags & SVf_ROK;
4453         assert(!(sflags & SVp_NOK));
4454         assert(!(sflags & SVp_IOK));
4455         assert(!(sflags & SVf_NOK));
4456         assert(!(sflags & SVf_IOK));
4457     }
4458     else if (isGV_with_GP(dstr)) {
4459         if (!(sflags & SVf_OK)) {
4460             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4461                            "Undefined value assigned to typeglob");
4462         }
4463         else {
4464             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4465             if (dstr != (const SV *)gv) {
4466                 const char * const name = GvNAME((const GV *)dstr);
4467                 const STRLEN len = GvNAMELEN(dstr);
4468                 HV *old_stash = NULL;
4469                 bool reset_isa = FALSE;
4470                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4471                  || (len == 1 && name[0] == ':')) {
4472                     /* Set aside the old stash, so we can reset isa caches
4473                        on its subclasses. */
4474                     if((old_stash = GvHV(dstr))) {
4475                         /* Make sure we do not lose it early. */
4476                         SvREFCNT_inc_simple_void_NN(
4477                          sv_2mortal((SV *)old_stash)
4478                         );
4479                     }
4480                     reset_isa = TRUE;
4481                 }
4482
4483                 if (GvGP(dstr)) {
4484                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4485                     gp_free(MUTABLE_GV(dstr));
4486                 }
4487                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4488
4489                 if (reset_isa) {
4490                     HV * const stash = GvHV(dstr);
4491                     if(
4492                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4493                     )
4494                         mro_package_moved(
4495                          stash, old_stash,
4496                          (GV *)dstr, 0
4497                         );
4498                 }
4499             }
4500         }
4501     }
4502     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4503           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4504         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4505     }
4506     else if (sflags & SVp_POK) {
4507         const STRLEN cur = SvCUR(sstr);
4508         const STRLEN len = SvLEN(sstr);
4509
4510         /*
4511          * We have three basic ways to copy the string:
4512          *
4513          *  1. Swipe
4514          *  2. Copy-on-write
4515          *  3. Actual copy
4516          * 
4517          * Which we choose is based on various factors.  The following
4518          * things are listed in order of speed, fastest to slowest:
4519          *  - Swipe
4520          *  - Copying a short string
4521          *  - Copy-on-write bookkeeping
4522          *  - malloc
4523          *  - Copying a long string
4524          * 
4525          * We swipe the string (steal the string buffer) if the SV on the
4526          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4527          * big win on long strings.  It should be a win on short strings if
4528          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4529          * slow things down, as SvPVX_const(sstr) would have been freed
4530          * soon anyway.
4531          * 
4532          * We also steal the buffer from a PADTMP (operator target) if it
4533          * is â€˜long enough’.  For short strings, a swipe does not help
4534          * here, as it causes more malloc calls the next time the target
4535          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4536          * be allocated it is still not worth swiping PADTMPs for short
4537          * strings, as the savings here are small.
4538          * 
4539          * If swiping is not an option, then we see whether it is
4540          * worth using copy-on-write.  If the lhs already has a buf-
4541          * fer big enough and the string is short, we skip it and fall back
4542          * to method 3, since memcpy is faster for short strings than the
4543          * later bookkeeping overhead that copy-on-write entails.
4544
4545          * If the rhs is not a copy-on-write string yet, then we also
4546          * consider whether the buffer is too large relative to the string
4547          * it holds.  Some operations such as readline allocate a large
4548          * buffer in the expectation of reusing it.  But turning such into
4549          * a COW buffer is counter-productive because it increases memory
4550          * usage by making readline allocate a new large buffer the sec-
4551          * ond time round.  So, if the buffer is too large, again, we use
4552          * method 3 (copy).
4553          * 
4554          * Finally, if there is no buffer on the left, or the buffer is too 
4555          * small, then we use copy-on-write and make both SVs share the
4556          * string buffer.
4557          *
4558          */
4559
4560         /* Whichever path we take through the next code, we want this true,
4561            and doing it now facilitates the COW check.  */
4562         (void)SvPOK_only(dstr);
4563
4564         if (
4565                  (              /* Either ... */
4566                                 /* slated for free anyway (and not COW)? */
4567                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4568                                 /* or a swipable TARG */
4569                  || ((sflags &
4570                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4571                        == SVs_PADTMP
4572                                 /* whose buffer is worth stealing */
4573                      && CHECK_COWBUF_THRESHOLD(cur,len)
4574                     )
4575                  ) &&
4576                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4577                  (!(flags & SV_NOSTEAL)) &&
4578                                         /* and we're allowed to steal temps */
4579                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4580                  len)             /* and really is a string */
4581         {       /* Passes the swipe test.  */
4582             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4583                 SvPV_free(dstr);
4584             SvPV_set(dstr, SvPVX_mutable(sstr));
4585             SvLEN_set(dstr, SvLEN(sstr));
4586             SvCUR_set(dstr, SvCUR(sstr));
4587
4588             SvTEMP_off(dstr);
4589             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4590             SvPV_set(sstr, NULL);
4591             SvLEN_set(sstr, 0);
4592             SvCUR_set(sstr, 0);
4593             SvTEMP_off(sstr);
4594         }
4595         else if (flags & SV_COW_SHARED_HASH_KEYS
4596               &&
4597 #ifdef PERL_OLD_COPY_ON_WRITE
4598                  (  sflags & SVf_IsCOW
4599                  || (   (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4600                      && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4601                      && SvTYPE(sstr) >= SVt_PVIV && len
4602                     )
4603                  )
4604 #elif defined(PERL_NEW_COPY_ON_WRITE)
4605                  (sflags & SVf_IsCOW
4606                    ? (!len ||
4607                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4608                           /* If this is a regular (non-hek) COW, only so
4609                              many COW "copies" are possible. */
4610                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4611                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4612                      && !(SvFLAGS(dstr) & SVf_BREAK)
4613                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4614                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4615                     ))
4616 #else
4617                  sflags & SVf_IsCOW
4618               && !(SvFLAGS(dstr) & SVf_BREAK)
4619 #endif
4620             ) {
4621             /* Either it's a shared hash key, or it's suitable for
4622                copy-on-write.  */
4623             if (DEBUG_C_TEST) {
4624                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4625                 sv_dump(sstr);
4626                 sv_dump(dstr);
4627             }
4628 #ifdef PERL_ANY_COW
4629             if (!(sflags & SVf_IsCOW)) {
4630                     SvIsCOW_on(sstr);
4631 # ifdef PERL_OLD_COPY_ON_WRITE
4632                     /* Make the source SV into a loop of 1.
4633                        (about to become 2) */
4634                     SV_COW_NEXT_SV_SET(sstr, sstr);
4635 # else
4636                     CowREFCNT(sstr) = 0;
4637 # endif
4638             }
4639 #endif
4640             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4641                 SvPV_free(dstr);
4642             }
4643
4644 #ifdef PERL_ANY_COW
4645             if (len) {
4646 # ifdef PERL_OLD_COPY_ON_WRITE
4647                     assert (SvTYPE(dstr) >= SVt_PVIV);
4648                     /* SvIsCOW_normal */
4649                     /* splice us in between source and next-after-source.  */
4650                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4651                     SV_COW_NEXT_SV_SET(sstr, dstr);
4652 # else
4653                     if (sflags & SVf_IsCOW) {
4654                         sv_buf_to_rw(sstr);
4655                     }
4656                     CowREFCNT(sstr)++;
4657 # endif
4658                     SvPV_set(dstr, SvPVX_mutable(sstr));
4659                     sv_buf_to_ro(sstr);
4660             } else
4661 #endif
4662             {
4663                     /* SvIsCOW_shared_hash */
4664                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4665                                           "Copy on write: Sharing hash\n"));
4666
4667                     assert (SvTYPE(dstr) >= SVt_PV);
4668                     SvPV_set(dstr,
4669                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4670             }
4671             SvLEN_set(dstr, len);
4672             SvCUR_set(dstr, cur);
4673             SvIsCOW_on(dstr);
4674         } else {
4675             /* Failed the swipe test, and we cannot do copy-on-write either.
4676                Have to copy the string.  */
4677             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4678             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4679             SvCUR_set(dstr, cur);
4680             *SvEND(dstr) = '\0';
4681         }
4682         if (sflags & SVp_NOK) {
4683             SvNV_set(dstr, SvNVX(sstr));
4684         }
4685         if (sflags & SVp_IOK) {
4686             SvIV_set(dstr, SvIVX(sstr));
4687             /* Must do this otherwise some other overloaded use of 0x80000000
4688                gets confused. I guess SVpbm_VALID */
4689             if (sflags & SVf_IVisUV)
4690                 SvIsUV_on(dstr);
4691         }
4692         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4693         {
4694             const MAGIC * const smg = SvVSTRING_mg(sstr);
4695             if (smg) {
4696                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4697                          smg->mg_ptr, smg->mg_len);
4698                 SvRMAGICAL_on(dstr);
4699             }
4700         }
4701     }
4702     else if (sflags & (SVp_IOK|SVp_NOK)) {
4703         (void)SvOK_off(dstr);
4704         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4705         if (sflags & SVp_IOK) {
4706             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4707             SvIV_set(dstr, SvIVX(sstr));
4708         }
4709         if (sflags & SVp_NOK) {
4710             SvNV_set(dstr, SvNVX(sstr));
4711         }
4712     }
4713     else {
4714         if (isGV_with_GP(sstr)) {
4715             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4716         }
4717         else
4718             (void)SvOK_off(dstr);
4719     }
4720     if (SvTAINTED(sstr))
4721         SvTAINT(dstr);
4722 }
4723
4724 /*
4725 =for apidoc sv_setsv_mg
4726
4727 Like C<sv_setsv>, but also handles 'set' magic.
4728
4729 =cut
4730 */
4731
4732 void
4733 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4734 {
4735     PERL_ARGS_ASSERT_SV_SETSV_MG;
4736
4737     sv_setsv(dstr,sstr);
4738     SvSETMAGIC(dstr);
4739 }
4740
4741 #ifdef PERL_ANY_COW
4742 # ifdef PERL_OLD_COPY_ON_WRITE
4743 #  define SVt_COW SVt_PVIV
4744 # else
4745 #  define SVt_COW SVt_PV
4746 # endif
4747 SV *
4748 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4749 {
4750     STRLEN cur = SvCUR(sstr);
4751     STRLEN len = SvLEN(sstr);
4752     char *new_pv;
4753 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4754     const bool already = cBOOL(SvIsCOW(sstr));
4755 #endif
4756
4757     PERL_ARGS_ASSERT_SV_SETSV_COW;
4758
4759     if (DEBUG_C_TEST) {
4760         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4761                       (void*)sstr, (void*)dstr);
4762         sv_dump(sstr);
4763         if (dstr)
4764                     sv_dump(dstr);
4765     }
4766
4767     if (dstr) {
4768         if (SvTHINKFIRST(dstr))
4769             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4770         else if (SvPVX_const(dstr))
4771             Safefree(SvPVX_mutable(dstr));
4772     }
4773     else
4774         new_SV(dstr);
4775     SvUPGRADE(dstr, SVt_COW);
4776
4777     assert (SvPOK(sstr));
4778     assert (SvPOKp(sstr));
4779 # ifdef PERL_OLD_COPY_ON_WRITE
4780     assert (!SvIOK(sstr));
4781     assert (!SvIOKp(sstr));
4782     assert (!SvNOK(sstr));
4783     assert (!SvNOKp(sstr));
4784 # endif
4785
4786     if (SvIsCOW(sstr)) {
4787
4788         if (SvLEN(sstr) == 0) {
4789             /* source is a COW shared hash key.  */
4790             DEBUG_C(PerlIO_printf(Perl_debug_log,
4791                                   "Fast copy on write: Sharing hash\n"));
4792             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4793             goto common_exit;
4794         }
4795 # ifdef PERL_OLD_COPY_ON_WRITE
4796         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4797 # else
4798         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4799         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4800 # endif
4801     } else {
4802         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4803         SvUPGRADE(sstr, SVt_COW);
4804         SvIsCOW_on(sstr);
4805         DEBUG_C(PerlIO_printf(Perl_debug_log,
4806                               "Fast copy on write: Converting sstr to COW\n"));
4807 # ifdef PERL_OLD_COPY_ON_WRITE
4808         SV_COW_NEXT_SV_SET(dstr, sstr);
4809 # else
4810         CowREFCNT(sstr) = 0;    
4811 # endif
4812     }
4813 # ifdef PERL_OLD_COPY_ON_WRITE
4814     SV_COW_NEXT_SV_SET(sstr, dstr);
4815 # else
4816 #  ifdef PERL_DEBUG_READONLY_COW
4817     if (already) sv_buf_to_rw(sstr);
4818 #  endif
4819     CowREFCNT(sstr)++;  
4820 # endif
4821     new_pv = SvPVX_mutable(sstr);
4822     sv_buf_to_ro(sstr);
4823
4824   common_exit:
4825     SvPV_set(dstr, new_pv);
4826     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4827     if (SvUTF8(sstr))
4828         SvUTF8_on(dstr);
4829     SvLEN_set(dstr, len);
4830     SvCUR_set(dstr, cur);
4831     if (DEBUG_C_TEST) {
4832         sv_dump(dstr);
4833     }
4834     return dstr;
4835 }
4836 #endif
4837
4838 /*
4839 =for apidoc sv_setpvn
4840
4841 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4842 The C<len> parameter indicates the number of
4843 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4844 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4845
4846 =cut
4847 */
4848
4849 void
4850 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4851 {
4852     char *dptr;
4853
4854     PERL_ARGS_ASSERT_SV_SETPVN;
4855
4856     SV_CHECK_THINKFIRST_COW_DROP(sv);
4857     if (!ptr) {
4858         (void)SvOK_off(sv);
4859         return;
4860     }
4861     else {
4862         /* len is STRLEN which is unsigned, need to copy to signed */
4863         const IV iv = len;
4864         if (iv < 0)
4865             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4866                        IVdf, iv);
4867     }
4868     SvUPGRADE(sv, SVt_PV);
4869
4870     dptr = SvGROW(sv, len + 1);
4871     Move(ptr,dptr,len,char);
4872     dptr[len] = '\0';
4873     SvCUR_set(sv, len);
4874     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4875     SvTAINT(sv);
4876     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4877 }
4878
4879 /*
4880 =for apidoc sv_setpvn_mg
4881
4882 Like C<sv_setpvn>, but also handles 'set' magic.
4883
4884 =cut
4885 */
4886
4887 void
4888 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4889 {
4890     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4891
4892     sv_setpvn(sv,ptr,len);
4893     SvSETMAGIC(sv);
4894 }
4895
4896 /*
4897 =for apidoc sv_setpv
4898
4899 Copies a string into an SV.  The string must be terminated with a C<NUL>
4900 character.
4901 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4902
4903 =cut
4904 */
4905
4906 void
4907 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4908 {
4909     STRLEN len;
4910
4911     PERL_ARGS_ASSERT_SV_SETPV;
4912
4913     SV_CHECK_THINKFIRST_COW_DROP(sv);
4914     if (!ptr) {
4915         (void)SvOK_off(sv);
4916         return;
4917     }
4918     len = strlen(ptr);
4919     SvUPGRADE(sv, SVt_PV);
4920
4921     SvGROW(sv, len + 1);
4922     Move(ptr,SvPVX(sv),len+1,char);
4923     SvCUR_set(sv, len);
4924     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4925     SvTAINT(sv);
4926     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4927 }
4928
4929 /*
4930 =for apidoc sv_setpv_mg
4931
4932 Like C<sv_setpv>, but also handles 'set' magic.
4933
4934 =cut
4935 */
4936
4937 void
4938 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4939 {
4940     PERL_ARGS_ASSERT_SV_SETPV_MG;
4941
4942     sv_setpv(sv,ptr);
4943     SvSETMAGIC(sv);
4944 }
4945
4946 void
4947 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4948 {
4949     PERL_ARGS_ASSERT_SV_SETHEK;
4950
4951     if (!hek) {
4952         return;
4953     }
4954
4955     if (HEK_LEN(hek) == HEf_SVKEY) {
4956         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4957         return;
4958     } else {
4959         const int flags = HEK_FLAGS(hek);
4960         if (flags & HVhek_WASUTF8) {
4961             STRLEN utf8_len = HEK_LEN(hek);
4962             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4963             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4964             SvUTF8_on(sv);
4965             return;
4966         } else if (flags & HVhek_UNSHARED) {
4967             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4968             if (HEK_UTF8(hek))
4969                 SvUTF8_on(sv);
4970             else SvUTF8_off(sv);
4971             return;
4972         }
4973         {
4974             SV_CHECK_THINKFIRST_COW_DROP(sv);
4975             SvUPGRADE(sv, SVt_PV);
4976             SvPV_free(sv);
4977             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4978             SvCUR_set(sv, HEK_LEN(hek));
4979             SvLEN_set(sv, 0);
4980             SvIsCOW_on(sv);
4981             SvPOK_on(sv);
4982             if (HEK_UTF8(hek))
4983                 SvUTF8_on(sv);
4984             else SvUTF8_off(sv);
4985             return;
4986         }
4987     }
4988 }
4989
4990
4991 /*
4992 =for apidoc sv_usepvn_flags
4993
4994 Tells an SV to use C<ptr> to find its string value.  Normally the
4995 string is stored inside the SV, but sv_usepvn allows the SV to use an
4996 outside string.  The C<ptr> should point to memory that was allocated
4997 by L<Newx|perlclib/Memory Management and String Handling>.  It must be
4998 the start of a Newx-ed block of memory, and not a pointer to the
4999 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
5000 and not be from a non-Newx memory allocator like C<malloc>.  The
5001 string length, C<len>, must be supplied.  By default this function
5002 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5003 so that pointer should not be freed or used by the programmer after
5004 giving it to sv_usepvn, and neither should any pointers from "behind"
5005 that pointer (e.g. ptr + 1) be used.
5006
5007 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
5008 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
5009 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5010 C<len>, and already meets the requirements for storing in C<SvPVX>).
5011
5012 =cut
5013 */
5014
5015 void
5016 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5017 {
5018     STRLEN allocate;
5019
5020     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5021
5022     SV_CHECK_THINKFIRST_COW_DROP(sv);
5023     SvUPGRADE(sv, SVt_PV);
5024     if (!ptr) {
5025         (void)SvOK_off(sv);
5026         if (flags & SV_SMAGIC)
5027             SvSETMAGIC(sv);
5028         return;
5029     }
5030     if (SvPVX_const(sv))
5031         SvPV_free(sv);
5032
5033 #ifdef DEBUGGING
5034     if (flags & SV_HAS_TRAILING_NUL)
5035         assert(ptr[len] == '\0');
5036 #endif
5037
5038     allocate = (flags & SV_HAS_TRAILING_NUL)
5039         ? len + 1 :
5040 #ifdef Perl_safesysmalloc_size
5041         len + 1;
5042 #else 
5043         PERL_STRLEN_ROUNDUP(len + 1);
5044 #endif
5045     if (flags & SV_HAS_TRAILING_NUL) {
5046         /* It's long enough - do nothing.
5047            Specifically Perl_newCONSTSUB is relying on this.  */
5048     } else {
5049 #ifdef DEBUGGING
5050         /* Force a move to shake out bugs in callers.  */
5051         char *new_ptr = (char*)safemalloc(allocate);
5052         Copy(ptr, new_ptr, len, char);
5053         PoisonFree(ptr,len,char);
5054         Safefree(ptr);
5055         ptr = new_ptr;
5056 #else
5057         ptr = (char*) saferealloc (ptr, allocate);
5058 #endif
5059     }
5060 #ifdef Perl_safesysmalloc_size
5061     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5062 #else
5063     SvLEN_set(sv, allocate);
5064 #endif
5065     SvCUR_set(sv, len);
5066     SvPV_set(sv, ptr);
5067     if (!(flags & SV_HAS_TRAILING_NUL)) {
5068         ptr[len] = '\0';
5069     }
5070     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5071     SvTAINT(sv);
5072     if (flags & SV_SMAGIC)
5073         SvSETMAGIC(sv);
5074 }
5075
5076 #ifdef PERL_OLD_COPY_ON_WRITE
5077 /* Need to do this *after* making the SV normal, as we need the buffer
5078    pointer to remain valid until after we've copied it.  If we let go too early,
5079    another thread could invalidate it by unsharing last of the same hash key
5080    (which it can do by means other than releasing copy-on-write Svs)
5081    or by changing the other copy-on-write SVs in the loop.  */
5082 STATIC void
5083 S_sv_release_COW(pTHX_ SV *sv, const char *pvx, SV *after)
5084 {
5085     PERL_ARGS_ASSERT_SV_RELEASE_COW;
5086
5087     { /* this SV was SvIsCOW_normal(sv) */
5088          /* we need to find the SV pointing to us.  */
5089         SV *current = SV_COW_NEXT_SV(after);
5090
5091         if (current == sv) {
5092             /* The SV we point to points back to us (there were only two of us
5093                in the loop.)
5094                Hence other SV is no longer copy on write either.  */
5095             SvIsCOW_off(after);
5096             sv_buf_to_rw(after);
5097         } else {
5098             /* We need to follow the pointers around the loop.  */
5099             SV *next;
5100             while ((next = SV_COW_NEXT_SV(current)) != sv) {
5101                 assert (next);
5102                 current = next;
5103                  /* don't loop forever if the structure is bust, and we have
5104                     a pointer into a closed loop.  */
5105                 assert (current != after);
5106                 assert (SvPVX_const(current) == pvx);
5107             }
5108             /* Make the SV before us point to the SV after us.  */
5109             SV_COW_NEXT_SV_SET(current, after);
5110         }
5111     }
5112 }
5113 #endif
5114 /*
5115 =for apidoc sv_force_normal_flags
5116
5117 Undo various types of fakery on an SV, where fakery means
5118 "more than" a string: if the PV is a shared string, make
5119 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5120 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5121 we do the copy, and is also used locally; if this is a
5122 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5123 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5124 SvPOK_off rather than making a copy.  (Used where this
5125 scalar is about to be set to some other value.)  In addition,
5126 the C<flags> parameter gets passed to C<sv_unref_flags()>
5127 when unreffing.  C<sv_force_normal> calls this function
5128 with flags set to 0.
5129
5130 This function is expected to be used to signal to perl that this SV is
5131 about to be written to, and any extra book-keeping needs to be taken care
5132 of.  Hence, it croaks on read-only values.
5133
5134 =cut
5135 */
5136
5137 static void
5138 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5139 {
5140     assert(SvIsCOW(sv));
5141     {
5142 #ifdef PERL_ANY_COW
5143         const char * const pvx = SvPVX_const(sv);
5144         const STRLEN len = SvLEN(sv);
5145         const STRLEN cur = SvCUR(sv);
5146 # ifdef PERL_OLD_COPY_ON_WRITE
5147         /* next COW sv in the loop.  If len is 0 then this is a shared-hash
5148            key scalar, so we mustn't attempt to call SV_COW_NEXT_SV(), as
5149            we'll fail an assertion.  */
5150         SV * const next = len ? SV_COW_NEXT_SV(sv) : 0;
5151 # endif
5152
5153         if (DEBUG_C_TEST) {
5154                 PerlIO_printf(Perl_debug_log,
5155                               "Copy on write: Force normal %ld\n",
5156                               (long) flags);
5157                 sv_dump(sv);
5158         }
5159         SvIsCOW_off(sv);
5160 # ifdef PERL_NEW_COPY_ON_WRITE
5161         if (len && CowREFCNT(sv) == 0)
5162             /* We own the buffer ourselves. */
5163             sv_buf_to_rw(sv);
5164         else
5165 # endif
5166         {
5167                 
5168             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5169 # ifdef PERL_NEW_COPY_ON_WRITE
5170             /* Must do this first, since the macro uses SvPVX. */
5171             if (len) {
5172                 sv_buf_to_rw(sv);
5173                 CowREFCNT(sv)--;
5174                 sv_buf_to_ro(sv);
5175             }
5176 # endif
5177             SvPV_set(sv, NULL);
5178             SvCUR_set(sv, 0);
5179             SvLEN_set(sv, 0);
5180             if (flags & SV_COW_DROP_PV) {
5181                 /* OK, so we don't need to copy our buffer.  */
5182                 SvPOK_off(sv);
5183             } else {
5184                 SvGROW(sv, cur + 1);
5185                 Move(pvx,SvPVX(sv),cur,char);
5186                 SvCUR_set(sv, cur);
5187                 *SvEND(sv) = '\0';
5188             }
5189             if (len) {
5190 # ifdef PERL_OLD_COPY_ON_WRITE
5191                 sv_release_COW(sv, pvx, next);
5192 # endif
5193             } else {
5194                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5195             }
5196             if (DEBUG_C_TEST) {
5197                 sv_dump(sv);
5198             }
5199         }
5200 #else
5201             const char * const pvx = SvPVX_const(sv);
5202             const STRLEN len = SvCUR(sv);
5203             SvIsCOW_off(sv);
5204             SvPV_set(sv, NULL);
5205             SvLEN_set(sv, 0);
5206             if (flags & SV_COW_DROP_PV) {
5207                 /* OK, so we don't need to copy our buffer.  */
5208                 SvPOK_off(sv);
5209             } else {
5210                 SvGROW(sv, len + 1);
5211                 Move(pvx,SvPVX(sv),len,char);
5212                 *SvEND(sv) = '\0';
5213             }
5214             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5215 #endif
5216     }
5217 }
5218
5219 void
5220 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5221 {
5222     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5223
5224     if (SvREADONLY(sv))
5225         Perl_croak_no_modify();
5226     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5227         S_sv_uncow(aTHX_ sv, flags);
5228     if (SvROK(sv))
5229         sv_unref_flags(sv, flags);
5230     else if (SvFAKE(sv) && isGV_with_GP(sv))
5231         sv_unglob(sv, flags);
5232     else if (SvFAKE(sv) && isREGEXP(sv)) {
5233         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5234            to sv_unglob. We only need it here, so inline it.  */
5235         const bool islv = SvTYPE(sv) == SVt_PVLV;
5236         const svtype new_type =
5237           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5238         SV *const temp = newSV_type(new_type);
5239         regexp *const temp_p = ReANY((REGEXP *)sv);
5240
5241         if (new_type == SVt_PVMG) {
5242             SvMAGIC_set(temp, SvMAGIC(sv));
5243             SvMAGIC_set(sv, NULL);
5244             SvSTASH_set(temp, SvSTASH(sv));
5245             SvSTASH_set(sv, NULL);
5246         }
5247         if (!islv) SvCUR_set(temp, SvCUR(sv));
5248         /* Remember that SvPVX is in the head, not the body.  But
5249            RX_WRAPPED is in the body. */
5250         assert(ReANY((REGEXP *)sv)->mother_re);
5251         /* Their buffer is already owned by someone else. */
5252         if (flags & SV_COW_DROP_PV) {
5253             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5254                zeroed body.  For SVt_PVLV, it should have been set to 0
5255                before turning into a regexp. */
5256             assert(!SvLEN(islv ? sv : temp));
5257             sv->sv_u.svu_pv = 0;
5258         }
5259         else {
5260             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5261             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5262             SvPOK_on(sv);
5263         }
5264
5265         /* Now swap the rest of the bodies. */
5266
5267         SvFAKE_off(sv);
5268         if (!islv) {
5269             SvFLAGS(sv) &= ~SVTYPEMASK;
5270             SvFLAGS(sv) |= new_type;
5271             SvANY(sv) = SvANY(temp);
5272         }
5273
5274         SvFLAGS(temp) &= ~(SVTYPEMASK);
5275         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5276         SvANY(temp) = temp_p;
5277         temp->sv_u.svu_rx = (regexp *)temp_p;
5278
5279         SvREFCNT_dec_NN(temp);
5280     }
5281     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5282 }
5283
5284 /*
5285 =for apidoc sv_chop
5286
5287 Efficient removal of characters from the beginning of the string buffer.
5288 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5289 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5290 character of the adjusted string.  Uses the "OOK hack".  On return, only
5291 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5292
5293 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5294 refer to the same chunk of data.
5295
5296 The unfortunate similarity of this function's name to that of Perl's C<chop>
5297 operator is strictly coincidental.  This function works from the left;
5298 C<chop> works from the right.
5299
5300 =cut
5301 */
5302
5303 void
5304 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5305 {
5306     STRLEN delta;
5307     STRLEN old_delta;
5308     U8 *p;
5309 #ifdef DEBUGGING
5310     const U8 *evacp;
5311     STRLEN evacn;
5312 #endif
5313     STRLEN max_delta;
5314
5315     PERL_ARGS_ASSERT_SV_CHOP;
5316
5317     if (!ptr || !SvPOKp(sv))
5318         return;
5319     delta = ptr - SvPVX_const(sv);
5320     if (!delta) {
5321         /* Nothing to do.  */
5322         return;
5323     }
5324     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5325     if (delta > max_delta)
5326         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5327                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5328     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5329     SV_CHECK_THINKFIRST(sv);
5330     SvPOK_only_UTF8(sv);
5331
5332     if (!SvOOK(sv)) {
5333         if (!SvLEN(sv)) { /* make copy of shared string */
5334             const char *pvx = SvPVX_const(sv);
5335             const STRLEN len = SvCUR(sv);
5336             SvGROW(sv, len + 1);
5337             Move(pvx,SvPVX(sv),len,char);
5338             *SvEND(sv) = '\0';
5339         }
5340         SvOOK_on(sv);
5341         old_delta = 0;
5342     } else {
5343         SvOOK_offset(sv, old_delta);
5344     }
5345     SvLEN_set(sv, SvLEN(sv) - delta);
5346     SvCUR_set(sv, SvCUR(sv) - delta);
5347     SvPV_set(sv, SvPVX(sv) + delta);
5348
5349     p = (U8 *)SvPVX_const(sv);
5350
5351 #ifdef DEBUGGING
5352     /* how many bytes were evacuated?  we will fill them with sentinel
5353        bytes, except for the part holding the new offset of course. */
5354     evacn = delta;
5355     if (old_delta)
5356         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5357     assert(evacn);
5358     assert(evacn <= delta + old_delta);
5359     evacp = p - evacn;
5360 #endif
5361
5362     /* This sets 'delta' to the accumulated value of all deltas so far */
5363     delta += old_delta;
5364     assert(delta);
5365
5366     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5367      * the string; otherwise store a 0 byte there and store 'delta' just prior
5368      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5369      * portion of the chopped part of the string */
5370     if (delta < 0x100) {
5371         *--p = (U8) delta;
5372     } else {
5373         *--p = 0;
5374         p -= sizeof(STRLEN);
5375         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5376     }
5377
5378 #ifdef DEBUGGING
5379     /* Fill the preceding buffer with sentinals to verify that no-one is
5380        using it.  */
5381     while (p > evacp) {
5382         --p;
5383         *p = (U8)PTR2UV(p);
5384     }
5385 #endif
5386 }
5387
5388 /*
5389 =for apidoc sv_catpvn
5390
5391 Concatenates the string onto the end of the string which is in the SV.  The
5392 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5393 status set, then the bytes appended should be valid UTF-8.
5394 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5395
5396 =for apidoc sv_catpvn_flags
5397
5398 Concatenates the string onto the end of the string which is in the SV.  The
5399 C<len> indicates number of bytes to copy.
5400
5401 By default, the string appended is assumed to be valid UTF-8 if the SV has
5402 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5403 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5404 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5405 string appended will be upgraded to UTF-8 if necessary.
5406
5407 If C<flags> has the C<SV_SMAGIC> bit set, will
5408 C<mg_set> on C<dsv> afterwards if appropriate.
5409 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5410 in terms of this function.
5411
5412 =cut
5413 */
5414
5415 void
5416 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5417 {
5418     STRLEN dlen;
5419     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5420
5421     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5422     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5423
5424     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5425       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5426          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5427          dlen = SvCUR(dsv);
5428       }
5429       else SvGROW(dsv, dlen + slen + 1);
5430       if (sstr == dstr)
5431         sstr = SvPVX_const(dsv);
5432       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5433       SvCUR_set(dsv, SvCUR(dsv) + slen);
5434     }
5435     else {
5436         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5437         const char * const send = sstr + slen;
5438         U8 *d;
5439
5440         /* Something this code does not account for, which I think is
5441            impossible; it would require the same pv to be treated as
5442            bytes *and* utf8, which would indicate a bug elsewhere. */
5443         assert(sstr != dstr);
5444
5445         SvGROW(dsv, dlen + slen * 2 + 1);
5446         d = (U8 *)SvPVX(dsv) + dlen;
5447
5448         while (sstr < send) {
5449             append_utf8_from_native_byte(*sstr, &d);
5450             sstr++;
5451         }
5452         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5453     }
5454     *SvEND(dsv) = '\0';
5455     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5456     SvTAINT(dsv);
5457     if (flags & SV_SMAGIC)
5458         SvSETMAGIC(dsv);
5459 }
5460
5461 /*
5462 =for apidoc sv_catsv
5463
5464 Concatenates the string from SV C<ssv> onto the end of the string in SV
5465 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5466 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5467 C<sv_catsv_nomg>.
5468
5469 =for apidoc sv_catsv_flags
5470
5471 Concatenates the string from SV C<ssv> onto the end of the string in SV
5472 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5473 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5474 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5475 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5476 and C<sv_catsv_mg> are implemented in terms of this function.
5477
5478 =cut */
5479
5480 void
5481 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5482 {
5483     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5484
5485     if (ssv) {
5486         STRLEN slen;
5487         const char *spv = SvPV_flags_const(ssv, slen, flags);
5488         if (flags & SV_GMAGIC)
5489                 SvGETMAGIC(dsv);
5490         sv_catpvn_flags(dsv, spv, slen,
5491                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5492         if (flags & SV_SMAGIC)
5493                 SvSETMAGIC(dsv);
5494     }
5495 }
5496
5497 /*
5498 =for apidoc sv_catpv
5499
5500 Concatenates the C<NUL>-terminated string onto the end of the string which is
5501 in the SV.
5502 If the SV has the UTF-8 status set, then the bytes appended should be
5503 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5504
5505 =cut */
5506
5507 void
5508 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5509 {
5510     STRLEN len;
5511     STRLEN tlen;
5512     char *junk;
5513
5514     PERL_ARGS_ASSERT_SV_CATPV;
5515
5516     if (!ptr)
5517         return;
5518     junk = SvPV_force(sv, tlen);
5519     len = strlen(ptr);
5520     SvGROW(sv, tlen + len + 1);
5521     if (ptr == junk)
5522         ptr = SvPVX_const(sv);
5523     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5524     SvCUR_set(sv, SvCUR(sv) + len);
5525     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5526     SvTAINT(sv);
5527 }
5528
5529 /*
5530 =for apidoc sv_catpv_flags
5531
5532 Concatenates the C<NUL>-terminated string onto the end of the string which is
5533 in the SV.
5534 If the SV has the UTF-8 status set, then the bytes appended should
5535 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5536 on the modified SV if appropriate.
5537
5538 =cut
5539 */
5540
5541 void
5542 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5543 {
5544     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5545     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5546 }
5547
5548 /*
5549 =for apidoc sv_catpv_mg
5550
5551 Like C<sv_catpv>, but also handles 'set' magic.
5552
5553 =cut
5554 */
5555
5556 void
5557 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5558 {
5559     PERL_ARGS_ASSERT_SV_CATPV_MG;
5560
5561     sv_catpv(sv,ptr);
5562     SvSETMAGIC(sv);
5563 }
5564
5565 /*
5566 =for apidoc newSV
5567
5568 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5569 bytes of preallocated string space the SV should have.  An extra byte for a
5570 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5571 space is allocated.)  The reference count for the new SV is set to 1.
5572
5573 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5574 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5575 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5576 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5577 modules supporting older perls.
5578
5579 =cut
5580 */
5581
5582 SV *
5583 Perl_newSV(pTHX_ const STRLEN len)
5584 {
5585     SV *sv;
5586
5587     new_SV(sv);
5588     if (len) {
5589         sv_grow(sv, len + 1);
5590     }
5591     return sv;
5592 }
5593 /*
5594 =for apidoc sv_magicext
5595
5596 Adds magic to an SV, upgrading it if necessary.  Applies the
5597 supplied vtable and returns a pointer to the magic added.
5598
5599 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5600 In particular, you can add magic to SvREADONLY SVs, and add more than
5601 one instance of the same 'how'.
5602
5603 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5604 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5605 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5606 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5607
5608 (This is now used as a subroutine by C<sv_magic>.)
5609
5610 =cut
5611 */
5612 MAGIC * 
5613 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5614                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5615 {
5616     MAGIC* mg;
5617
5618     PERL_ARGS_ASSERT_SV_MAGICEXT;
5619
5620     if (SvTYPE(sv)==SVt_PVAV) { assert (!AvPAD_NAMELIST(sv)); }
5621
5622     SvUPGRADE(sv, SVt_PVMG);
5623     Newxz(mg, 1, MAGIC);
5624     mg->mg_moremagic = SvMAGIC(sv);
5625     SvMAGIC_set(sv, mg);
5626
5627     /* Sometimes a magic contains a reference loop, where the sv and
5628        object refer to each other.  To prevent a reference loop that
5629        would prevent such objects being freed, we look for such loops
5630        and if we find one we avoid incrementing the object refcount.
5631
5632        Note we cannot do this to avoid self-tie loops as intervening RV must
5633        have its REFCNT incremented to keep it in existence.
5634
5635     */
5636     if (!obj || obj == sv ||
5637         how == PERL_MAGIC_arylen ||
5638         how == PERL_MAGIC_symtab ||
5639         (SvTYPE(obj) == SVt_PVGV &&
5640             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5641              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5642              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5643     {
5644         mg->mg_obj = obj;
5645     }
5646     else {
5647         mg->mg_obj = SvREFCNT_inc_simple(obj);
5648         mg->mg_flags |= MGf_REFCOUNTED;
5649     }
5650
5651     /* Normal self-ties simply pass a null object, and instead of
5652        using mg_obj directly, use the SvTIED_obj macro to produce a
5653        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5654        with an RV obj pointing to the glob containing the PVIO.  In
5655        this case, to avoid a reference loop, we need to weaken the
5656        reference.
5657     */
5658
5659     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5660         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5661     {
5662       sv_rvweaken(obj);
5663     }
5664
5665     mg->mg_type = how;
5666     mg->mg_len = namlen;
5667     if (name) {
5668         if (namlen > 0)
5669             mg->mg_ptr = savepvn(name, namlen);
5670         else if (namlen == HEf_SVKEY) {
5671             /* Yes, this is casting away const. This is only for the case of
5672                HEf_SVKEY. I think we need to document this aberation of the
5673                constness of the API, rather than making name non-const, as
5674                that change propagating outwards a long way.  */
5675             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5676         } else
5677             mg->mg_ptr = (char *) name;
5678     }
5679     mg->mg_virtual = (MGVTBL *) vtable;
5680
5681     mg_magical(sv);
5682     return mg;
5683 }
5684
5685 MAGIC *
5686 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5687 {
5688     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5689     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5690         /* This sv is only a delegate.  //g magic must be attached to
5691            its target. */
5692         vivify_defelem(sv);
5693         sv = LvTARG(sv);
5694     }
5695 #ifdef PERL_OLD_COPY_ON_WRITE
5696     if (SvIsCOW(sv))
5697         sv_force_normal_flags(sv, 0);
5698 #endif
5699     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5700                        &PL_vtbl_mglob, 0, 0);
5701 }
5702
5703 /*
5704 =for apidoc sv_magic
5705
5706 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5707 necessary, then adds a new magic item of type C<how> to the head of the
5708 magic list.
5709
5710 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5711 handling of the C<name> and C<namlen> arguments.
5712
5713 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5714 to add more than one instance of the same 'how'.
5715
5716 =cut
5717 */
5718
5719 void
5720 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5721              const char *const name, const I32 namlen)
5722 {
5723     const MGVTBL *vtable;
5724     MAGIC* mg;
5725     unsigned int flags;
5726     unsigned int vtable_index;
5727
5728     PERL_ARGS_ASSERT_SV_MAGIC;
5729
5730     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5731         || ((flags = PL_magic_data[how]),
5732             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5733             > magic_vtable_max))
5734         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5735
5736     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5737        Useful for attaching extension internal data to perl vars.
5738        Note that multiple extensions may clash if magical scalars
5739        etc holding private data from one are passed to another. */
5740
5741     vtable = (vtable_index == magic_vtable_max)
5742         ? NULL : PL_magic_vtables + vtable_index;
5743
5744 #ifdef PERL_OLD_COPY_ON_WRITE
5745     if (SvIsCOW(sv))
5746         sv_force_normal_flags(sv, 0);
5747 #endif
5748     if (SvREADONLY(sv)) {
5749         if (
5750             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5751            )
5752         {
5753             Perl_croak_no_modify();
5754         }
5755     }
5756     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5757         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5758             /* sv_magic() refuses to add a magic of the same 'how' as an
5759                existing one
5760              */
5761             if (how == PERL_MAGIC_taint)
5762                 mg->mg_len |= 1;
5763             return;
5764         }
5765     }
5766
5767     /* Force pos to be stored as characters, not bytes. */
5768     if (SvMAGICAL(sv) && DO_UTF8(sv)
5769       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5770       && mg->mg_len != -1
5771       && mg->mg_flags & MGf_BYTES) {
5772         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5773                                                SV_CONST_RETURN);
5774         mg->mg_flags &= ~MGf_BYTES;
5775     }
5776
5777     /* Rest of work is done else where */
5778     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5779
5780     switch (how) {
5781     case PERL_MAGIC_taint:
5782         mg->mg_len = 1;
5783         break;
5784     case PERL_MAGIC_ext:
5785     case PERL_MAGIC_dbfile:
5786         SvRMAGICAL_on(sv);
5787         break;
5788     }
5789 }
5790
5791 static int
5792 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5793 {
5794     MAGIC* mg;
5795     MAGIC** mgp;
5796
5797     assert(flags <= 1);
5798
5799     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5800         return 0;
5801     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5802     for (mg = *mgp; mg; mg = *mgp) {
5803         const MGVTBL* const virt = mg->mg_virtual;
5804         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5805             *mgp = mg->mg_moremagic;
5806             if (virt && virt->svt_free)
5807                 virt->svt_free(aTHX_ sv, mg);
5808             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5809                 if (mg->mg_len > 0)
5810                     Safefree(mg->mg_ptr);
5811                 else if (mg->mg_len == HEf_SVKEY)
5812                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5813                 else if (mg->mg_type == PERL_MAGIC_utf8)
5814                     Safefree(mg->mg_ptr);
5815             }
5816             if (mg->mg_flags & MGf_REFCOUNTED)
5817                 SvREFCNT_dec(mg->mg_obj);
5818             Safefree(mg);
5819         }
5820         else
5821             mgp = &mg->mg_moremagic;
5822     }
5823     if (SvMAGIC(sv)) {
5824         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5825             mg_magical(sv);     /*    else fix the flags now */
5826     }
5827     else {
5828         SvMAGICAL_off(sv);
5829         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5830     }
5831     return 0;
5832 }
5833
5834 /*
5835 =for apidoc sv_unmagic
5836
5837 Removes all magic of type C<type> from an SV.
5838
5839 =cut
5840 */
5841
5842 int
5843 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5844 {
5845     PERL_ARGS_ASSERT_SV_UNMAGIC;
5846     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5847 }
5848
5849 /*
5850 =for apidoc sv_unmagicext
5851
5852 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5853
5854 =cut
5855 */
5856
5857 int
5858 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5859 {
5860     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5861     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5862 }
5863
5864 /*
5865 =for apidoc sv_rvweaken
5866
5867 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5868 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5869 push a back-reference to this RV onto the array of backreferences
5870 associated with that magic.  If the RV is magical, set magic will be
5871 called after the RV is cleared.
5872
5873 =cut
5874 */
5875
5876 SV *
5877 Perl_sv_rvweaken(pTHX_ SV *const sv)
5878 {
5879     SV *tsv;
5880
5881     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5882
5883     if (!SvOK(sv))  /* let undefs pass */
5884         return sv;
5885     if (!SvROK(sv))
5886         Perl_croak(aTHX_ "Can't weaken a nonreference");
5887     else if (SvWEAKREF(sv)) {
5888         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5889         return sv;
5890     }
5891     else if (SvREADONLY(sv)) croak_no_modify();
5892     tsv = SvRV(sv);
5893     Perl_sv_add_backref(aTHX_ tsv, sv);
5894     SvWEAKREF_on(sv);
5895     SvREFCNT_dec_NN(tsv);
5896     return sv;
5897 }
5898
5899 /* Give tsv backref magic if it hasn't already got it, then push a
5900  * back-reference to sv onto the array associated with the backref magic.
5901  *
5902  * As an optimisation, if there's only one backref and it's not an AV,
5903  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5904  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5905  * active.)
5906  */
5907
5908 /* A discussion about the backreferences array and its refcount:
5909  *
5910  * The AV holding the backreferences is pointed to either as the mg_obj of
5911  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5912  * xhv_backreferences field. The array is created with a refcount
5913  * of 2. This means that if during global destruction the array gets
5914  * picked on before its parent to have its refcount decremented by the
5915  * random zapper, it won't actually be freed, meaning it's still there for
5916  * when its parent gets freed.
5917  *
5918  * When the parent SV is freed, the extra ref is killed by
5919  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5920  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5921  *
5922  * When a single backref SV is stored directly, it is not reference
5923  * counted.
5924  */
5925
5926 void
5927 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5928 {
5929     SV **svp;
5930     AV *av = NULL;
5931     MAGIC *mg = NULL;
5932
5933     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5934
5935     /* find slot to store array or singleton backref */
5936
5937     if (SvTYPE(tsv) == SVt_PVHV) {
5938         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5939     } else {
5940         if (SvMAGICAL(tsv))
5941             mg = mg_find(tsv, PERL_MAGIC_backref);
5942         if (!mg)
5943             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5944         svp = &(mg->mg_obj);
5945     }
5946
5947     /* create or retrieve the array */
5948
5949     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5950         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5951     ) {
5952         /* create array */
5953         if (mg)
5954             mg->mg_flags |= MGf_REFCOUNTED;
5955         av = newAV();
5956         AvREAL_off(av);
5957         SvREFCNT_inc_simple_void_NN(av);
5958         /* av now has a refcnt of 2; see discussion above */
5959         av_extend(av, *svp ? 2 : 1);
5960         if (*svp) {
5961             /* move single existing backref to the array */
5962             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5963         }
5964         *svp = (SV*)av;
5965     }
5966     else {
5967         av = MUTABLE_AV(*svp);
5968         if (!av) {
5969             /* optimisation: store single backref directly in HvAUX or mg_obj */
5970             *svp = sv;
5971             return;
5972         }
5973         assert(SvTYPE(av) == SVt_PVAV);
5974         if (AvFILLp(av) >= AvMAX(av)) {
5975             av_extend(av, AvFILLp(av)+1);
5976         }
5977     }
5978     /* push new backref */
5979     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5980 }
5981
5982 /* delete a back-reference to ourselves from the backref magic associated
5983  * with the SV we point to.
5984  */
5985
5986 void
5987 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5988 {
5989     SV **svp = NULL;
5990
5991     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5992
5993     if (SvTYPE(tsv) == SVt_PVHV) {
5994         if (SvOOK(tsv))
5995             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5996     }
5997     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5998         /* It's possible for the the last (strong) reference to tsv to have
5999            become freed *before* the last thing holding a weak reference.
6000            If both survive longer than the backreferences array, then when
6001            the referent's reference count drops to 0 and it is freed, it's
6002            not able to chase the backreferences, so they aren't NULLed.
6003
6004            For example, a CV holds a weak reference to its stash. If both the
6005            CV and the stash survive longer than the backreferences array,
6006            and the CV gets picked for the SvBREAK() treatment first,
6007            *and* it turns out that the stash is only being kept alive because
6008            of an our variable in the pad of the CV, then midway during CV
6009            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6010            It ends up pointing to the freed HV. Hence it's chased in here, and
6011            if this block wasn't here, it would hit the !svp panic just below.
6012
6013            I don't believe that "better" destruction ordering is going to help
6014            here - during global destruction there's always going to be the
6015            chance that something goes out of order. We've tried to make it
6016            foolproof before, and it only resulted in evolutionary pressure on
6017            fools. Which made us look foolish for our hubris. :-(
6018         */
6019         return;
6020     }
6021     else {
6022         MAGIC *const mg
6023             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6024         svp =  mg ? &(mg->mg_obj) : NULL;
6025     }
6026
6027     if (!svp)
6028         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6029     if (!*svp) {
6030         /* It's possible that sv is being freed recursively part way through the
6031            freeing of tsv. If this happens, the backreferences array of tsv has
6032            already been freed, and so svp will be NULL. If this is the case,
6033            we should not panic. Instead, nothing needs doing, so return.  */
6034         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6035             return;
6036         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6037                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6038     }
6039
6040     if (SvTYPE(*svp) == SVt_PVAV) {
6041 #ifdef DEBUGGING
6042         int count = 1;
6043 #endif
6044         AV * const av = (AV*)*svp;
6045         SSize_t fill;
6046         assert(!SvIS_FREED(av));
6047         fill = AvFILLp(av);
6048         assert(fill > -1);
6049         svp = AvARRAY(av);
6050         /* for an SV with N weak references to it, if all those
6051          * weak refs are deleted, then sv_del_backref will be called
6052          * N times and O(N^2) compares will be done within the backref
6053          * array. To ameliorate this potential slowness, we:
6054          * 1) make sure this code is as tight as possible;
6055          * 2) when looking for SV, look for it at both the head and tail of the
6056          *    array first before searching the rest, since some create/destroy
6057          *    patterns will cause the backrefs to be freed in order.
6058          */
6059         if (*svp == sv) {
6060             AvARRAY(av)++;
6061             AvMAX(av)--;
6062         }
6063         else {
6064             SV **p = &svp[fill];
6065             SV *const topsv = *p;
6066             if (topsv != sv) {
6067 #ifdef DEBUGGING
6068                 count = 0;
6069 #endif
6070                 while (--p > svp) {
6071                     if (*p == sv) {
6072                         /* We weren't the last entry.
6073                            An unordered list has this property that you
6074                            can take the last element off the end to fill
6075                            the hole, and it's still an unordered list :-)
6076                         */
6077                         *p = topsv;
6078 #ifdef DEBUGGING
6079                         count++;
6080 #else
6081                         break; /* should only be one */
6082 #endif
6083                     }
6084                 }
6085             }
6086         }
6087         assert(count ==1);
6088         AvFILLp(av) = fill-1;
6089     }
6090     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6091         /* freed AV; skip */
6092     }
6093     else {
6094         /* optimisation: only a single backref, stored directly */
6095         if (*svp != sv)
6096             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6097                        (void*)*svp, (void*)sv);
6098         *svp = NULL;
6099     }
6100
6101 }
6102
6103 void
6104 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6105 {
6106     SV **svp;
6107     SV **last;
6108     bool is_array;
6109
6110     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6111
6112     if (!av)
6113         return;
6114
6115     /* after multiple passes through Perl_sv_clean_all() for a thingy
6116      * that has badly leaked, the backref array may have gotten freed,
6117      * since we only protect it against 1 round of cleanup */
6118     if (SvIS_FREED(av)) {
6119         if (PL_in_clean_all) /* All is fair */
6120             return;
6121         Perl_croak(aTHX_
6122                    "panic: magic_killbackrefs (freed backref AV/SV)");
6123     }
6124
6125
6126     is_array = (SvTYPE(av) == SVt_PVAV);
6127     if (is_array) {
6128         assert(!SvIS_FREED(av));
6129         svp = AvARRAY(av);
6130         if (svp)
6131             last = svp + AvFILLp(av);
6132     }
6133     else {
6134         /* optimisation: only a single backref, stored directly */
6135         svp = (SV**)&av;
6136         last = svp;
6137     }
6138
6139     if (svp) {
6140         while (svp <= last) {
6141             if (*svp) {
6142                 SV *const referrer = *svp;
6143                 if (SvWEAKREF(referrer)) {
6144                     /* XXX Should we check that it hasn't changed? */
6145                     assert(SvROK(referrer));
6146                     SvRV_set(referrer, 0);
6147                     SvOK_off(referrer);
6148                     SvWEAKREF_off(referrer);
6149                     SvSETMAGIC(referrer);
6150                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6151                            SvTYPE(referrer) == SVt_PVLV) {
6152                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6153                     /* You lookin' at me?  */
6154                     assert(GvSTASH(referrer));
6155                     assert(GvSTASH(referrer) == (const HV *)sv);
6156                     GvSTASH(referrer) = 0;
6157                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6158                            SvTYPE(referrer) == SVt_PVFM) {
6159                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6160                         /* You lookin' at me?  */
6161                         assert(CvSTASH(referrer));
6162                         assert(CvSTASH(referrer) == (const HV *)sv);
6163                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6164                     }
6165                     else {
6166                         assert(SvTYPE(sv) == SVt_PVGV);
6167                         /* You lookin' at me?  */
6168                         assert(CvGV(referrer));
6169                         assert(CvGV(referrer) == (const GV *)sv);
6170                         anonymise_cv_maybe(MUTABLE_GV(sv),
6171                                                 MUTABLE_CV(referrer));
6172                     }
6173
6174                 } else {
6175                     Perl_croak(aTHX_
6176                                "panic: magic_killbackrefs (flags=%"UVxf")",
6177                                (UV)SvFLAGS(referrer));
6178                 }
6179
6180                 if (is_array)
6181                     *svp = NULL;
6182             }
6183             svp++;
6184         }
6185     }
6186     if (is_array) {
6187         AvFILLp(av) = -1;
6188         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6189     }
6190     return;
6191 }
6192
6193 /*
6194 =for apidoc sv_insert
6195
6196 Inserts a string at the specified offset/length within the SV.  Similar to
6197 the Perl substr() function.  Handles get magic.
6198
6199 =for apidoc sv_insert_flags
6200
6201 Same as C<sv_insert>, but the extra C<flags> are passed to the
6202 C<SvPV_force_flags> that applies to C<bigstr>.
6203
6204 =cut
6205 */
6206
6207 void
6208 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6209 {
6210     char *big;
6211     char *mid;
6212     char *midend;
6213     char *bigend;
6214     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6215     STRLEN curlen;
6216
6217     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6218
6219     if (!bigstr)
6220         Perl_croak(aTHX_ "Can't modify nonexistent substring");
6221     SvPV_force_flags(bigstr, curlen, flags);
6222     (void)SvPOK_only_UTF8(bigstr);
6223     if (offset + len > curlen) {
6224         SvGROW(bigstr, offset+len+1);
6225         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6226         SvCUR_set(bigstr, offset+len);
6227     }
6228
6229     SvTAINT(bigstr);
6230     i = littlelen - len;
6231     if (i > 0) {                        /* string might grow */
6232         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6233         mid = big + offset + len;
6234         midend = bigend = big + SvCUR(bigstr);
6235         bigend += i;
6236         *bigend = '\0';
6237         while (midend > mid)            /* shove everything down */
6238             *--bigend = *--midend;
6239         Move(little,big+offset,littlelen,char);
6240         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6241         SvSETMAGIC(bigstr);
6242         return;
6243     }
6244     else if (i == 0) {
6245         Move(little,SvPVX(bigstr)+offset,len,char);
6246         SvSETMAGIC(bigstr);
6247         return;
6248     }
6249
6250     big = SvPVX(bigstr);
6251     mid = big + offset;
6252     midend = mid + len;
6253     bigend = big + SvCUR(bigstr);
6254
6255     if (midend > bigend)
6256         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6257                    midend, bigend);
6258
6259     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6260         if (littlelen) {
6261             Move(little, mid, littlelen,char);
6262             mid += littlelen;
6263         }
6264         i = bigend - midend;
6265         if (i > 0) {
6266             Move(midend, mid, i,char);
6267             mid += i;
6268         }
6269         *mid = '\0';
6270         SvCUR_set(bigstr, mid - big);
6271     }
6272     else if ((i = mid - big)) { /* faster from front */
6273         midend -= littlelen;
6274         mid = midend;
6275         Move(big, midend - i, i, char);
6276         sv_chop(bigstr,midend-i);
6277         if (littlelen)
6278             Move(little, mid, littlelen,char);
6279     }
6280     else if (littlelen) {
6281         midend -= littlelen;
6282         sv_chop(bigstr,midend);
6283         Move(little,midend,littlelen,char);
6284     }
6285     else {
6286         sv_chop(bigstr,midend);
6287     }
6288     SvSETMAGIC(bigstr);
6289 }
6290
6291 /*
6292 =for apidoc sv_replace
6293
6294 Make the first argument a copy of the second, then delete the original.
6295 The target SV physically takes over ownership of the body of the source SV
6296 and inherits its flags; however, the target keeps any magic it owns,
6297 and any magic in the source is discarded.
6298 Note that this is a rather specialist SV copying operation; most of the
6299 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6300
6301 =cut
6302 */
6303
6304 void
6305 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6306 {
6307     const U32 refcnt = SvREFCNT(sv);
6308
6309     PERL_ARGS_ASSERT_SV_REPLACE;
6310
6311     SV_CHECK_THINKFIRST_COW_DROP(sv);
6312     if (SvREFCNT(nsv) != 1) {
6313         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6314                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6315     }
6316     if (SvMAGICAL(sv)) {
6317         if (SvMAGICAL(nsv))
6318             mg_free(nsv);
6319         else
6320             sv_upgrade(nsv, SVt_PVMG);
6321         SvMAGIC_set(nsv, SvMAGIC(sv));
6322         SvFLAGS(nsv) |= SvMAGICAL(sv);
6323         SvMAGICAL_off(sv);
6324         SvMAGIC_set(sv, NULL);
6325     }
6326     SvREFCNT(sv) = 0;
6327     sv_clear(sv);
6328     assert(!SvREFCNT(sv));
6329 #ifdef DEBUG_LEAKING_SCALARS
6330     sv->sv_flags  = nsv->sv_flags;
6331     sv->sv_any    = nsv->sv_any;
6332     sv->sv_refcnt = nsv->sv_refcnt;
6333     sv->sv_u      = nsv->sv_u;
6334 #else
6335     StructCopy(nsv,sv,SV);
6336 #endif
6337     if(SvTYPE(sv) == SVt_IV) {
6338         SvANY(sv)
6339             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
6340     }
6341         
6342
6343 #ifdef PERL_OLD_COPY_ON_WRITE
6344     if (SvIsCOW_normal(nsv)) {
6345         /* We need to follow the pointers around the loop to make the
6346            previous SV point to sv, rather than nsv.  */
6347         SV *next;
6348         SV *current = nsv;
6349         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
6350             assert(next);
6351             current = next;
6352             assert(SvPVX_const(current) == SvPVX_const(nsv));
6353         }
6354         /* Make the SV before us point to the SV after us.  */
6355         if (DEBUG_C_TEST) {
6356             PerlIO_printf(Perl_debug_log, "previous is\n");
6357             sv_dump(current);
6358             PerlIO_printf(Perl_debug_log,
6359                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
6360                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
6361         }
6362         SV_COW_NEXT_SV_SET(current, sv);
6363     }
6364 #endif
6365     SvREFCNT(sv) = refcnt;
6366     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6367     SvREFCNT(nsv) = 0;
6368     del_SV(nsv);
6369 }
6370
6371 /* We're about to free a GV which has a CV that refers back to us.
6372  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6373  * field) */
6374
6375 STATIC void
6376 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6377 {
6378     SV *gvname;
6379     GV *anongv;
6380
6381     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6382
6383     /* be assertive! */
6384     assert(SvREFCNT(gv) == 0);
6385     assert(isGV(gv) && isGV_with_GP(gv));
6386     assert(GvGP(gv));
6387     assert(!CvANON(cv));
6388     assert(CvGV(cv) == gv);
6389     assert(!CvNAMED(cv));
6390
6391     /* will the CV shortly be freed by gp_free() ? */
6392     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6393         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6394         return;
6395     }
6396
6397     /* if not, anonymise: */
6398     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6399                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6400                     : newSVpvn_flags( "__ANON__", 8, 0 );
6401     sv_catpvs(gvname, "::__ANON__");
6402     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6403     SvREFCNT_dec_NN(gvname);
6404
6405     CvANON_on(cv);
6406     CvCVGV_RC_on(cv);
6407     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6408 }
6409
6410
6411 /*
6412 =for apidoc sv_clear
6413
6414 Clear an SV: call any destructors, free up any memory used by the body,
6415 and free the body itself.  The SV's head is I<not> freed, although
6416 its type is set to all 1's so that it won't inadvertently be assumed
6417 to be live during global destruction etc.
6418 This function should only be called when REFCNT is zero.  Most of the time
6419 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6420 instead.
6421
6422 =cut
6423 */
6424
6425 void
6426 Perl_sv_clear(pTHX_ SV *const orig_sv)
6427 {
6428     dVAR;
6429     HV *stash;
6430     U32 type;
6431     const struct body_details *sv_type_details;
6432     SV* iter_sv = NULL;
6433     SV* next_sv = NULL;
6434     SV *sv = orig_sv;
6435     STRLEN hash_index;
6436
6437     PERL_ARGS_ASSERT_SV_CLEAR;
6438
6439     /* within this loop, sv is the SV currently being freed, and
6440      * iter_sv is the most recent AV or whatever that's being iterated
6441      * over to provide more SVs */
6442
6443     while (sv) {
6444
6445         type = SvTYPE(sv);
6446
6447         assert(SvREFCNT(sv) == 0);
6448         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6449
6450         if (type <= SVt_IV) {
6451             /* See the comment in sv.h about the collusion between this
6452              * early return and the overloading of the NULL slots in the
6453              * size table.  */
6454             if (SvROK(sv))
6455                 goto free_rv;
6456             SvFLAGS(sv) &= SVf_BREAK;
6457             SvFLAGS(sv) |= SVTYPEMASK;
6458             goto free_head;
6459         }
6460
6461         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6462            for another purpose  */
6463         assert(!SvOBJECT(sv) || type >= SVt_PVMG || SvPAD_NAME(sv));
6464
6465         if (type >= SVt_PVMG) {
6466             if (SvOBJECT(sv) && !SvPAD_NAME(sv)) {
6467                 if (!curse(sv, 1)) goto get_next_sv;
6468                 type = SvTYPE(sv); /* destructor may have changed it */
6469             }
6470             /* Free back-references before magic, in case the magic calls
6471              * Perl code that has weak references to sv. */
6472             if (type == SVt_PVHV) {
6473                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6474                 if (SvMAGIC(sv))
6475                     mg_free(sv);
6476             }
6477             else if (type == SVt_PVMG && SvPAD_OUR(sv)) {
6478                 SvREFCNT_dec(SvOURSTASH(sv));
6479             }
6480             else if (type == SVt_PVAV && AvPAD_NAMELIST(sv)) {
6481                 assert(!SvMAGICAL(sv));
6482             } else if (SvMAGIC(sv)) {
6483                 /* Free back-references before other types of magic. */
6484                 sv_unmagic(sv, PERL_MAGIC_backref);
6485                 mg_free(sv);
6486             }
6487             SvMAGICAL_off(sv);
6488             if (type == SVt_PVMG && SvPAD_TYPED(sv))
6489                 SvREFCNT_dec(SvSTASH(sv));
6490         }
6491         switch (type) {
6492             /* case SVt_INVLIST: */
6493         case SVt_PVIO:
6494             if (IoIFP(sv) &&
6495                 IoIFP(sv) != PerlIO_stdin() &&
6496                 IoIFP(sv) != PerlIO_stdout() &&
6497                 IoIFP(sv) != PerlIO_stderr() &&
6498                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6499             {
6500                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6501                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6502                           IoTYPE(sv) == IoTYPE_RDWR   ||
6503                           IoTYPE(sv) == IoTYPE_APPEND));
6504             }
6505             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6506                 PerlDir_close(IoDIRP(sv));
6507             IoDIRP(sv) = (DIR*)NULL;
6508             Safefree(IoTOP_NAME(sv));
6509             Safefree(IoFMT_NAME(sv));
6510             Safefree(IoBOTTOM_NAME(sv));
6511             if ((const GV *)sv == PL_statgv)
6512                 PL_statgv = NULL;
6513             goto freescalar;
6514         case SVt_REGEXP:
6515             /* FIXME for plugins */
6516           freeregexp:
6517             pregfree2((REGEXP*) sv);
6518             goto freescalar;
6519         case SVt_PVCV:
6520         case SVt_PVFM:
6521             cv_undef(MUTABLE_CV(sv));
6522             /* If we're in a stash, we don't own a reference to it.
6523              * However it does have a back reference to us, which needs to
6524              * be cleared.  */
6525             if ((stash = CvSTASH(sv)))
6526                 sv_del_backref(MUTABLE_SV(stash), sv);
6527             goto freescalar;
6528         case SVt_PVHV:
6529             if (PL_last_swash_hv == (const HV *)sv) {
6530                 PL_last_swash_hv = NULL;
6531             }
6532             if (HvTOTALKEYS((HV*)sv) > 0) {
6533                 const char *name;
6534                 /* this statement should match the one at the beginning of
6535                  * hv_undef_flags() */
6536                 if (   PL_phase != PERL_PHASE_DESTRUCT
6537                     && (name = HvNAME((HV*)sv)))
6538                 {
6539                     if (PL_stashcache) {
6540                     DEBUG_o(Perl_deb(aTHX_ "sv_clear clearing PL_stashcache for '%"SVf"'\n",
6541                                      SVfARG(sv)));
6542                         (void)hv_deletehek(PL_stashcache,
6543                                            HvNAME_HEK((HV*)sv), G_DISCARD);
6544                     }
6545                     hv_name_set((HV*)sv, NULL, 0, 0);
6546                 }
6547
6548                 /* save old iter_sv in unused SvSTASH field */
6549                 assert(!SvOBJECT(sv));
6550                 SvSTASH(sv) = (HV*)iter_sv;
6551                 iter_sv = sv;
6552
6553                 /* save old hash_index in unused SvMAGIC field */
6554                 assert(!SvMAGICAL(sv));
6555                 assert(!SvMAGIC(sv));
6556                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6557                 hash_index = 0;
6558
6559                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6560                 goto get_next_sv; /* process this new sv */
6561             }
6562             /* free empty hash */
6563             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6564             assert(!HvARRAY((HV*)sv));
6565             break;
6566         case SVt_PVAV:
6567             {
6568                 AV* av = MUTABLE_AV(sv);
6569                 if (PL_comppad == av) {
6570                     PL_comppad = NULL;
6571                     PL_curpad = NULL;
6572                 }
6573                 if (AvREAL(av) && AvFILLp(av) > -1) {
6574                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6575                     /* save old iter_sv in top-most slot of AV,
6576                      * and pray that it doesn't get wiped in the meantime */
6577                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6578                     iter_sv = sv;
6579                     goto get_next_sv; /* process this new sv */
6580                 }
6581                 Safefree(AvALLOC(av));
6582             }
6583
6584             break;
6585         case SVt_PVLV:
6586             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6587                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6588                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6589                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6590             }
6591             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6592                 SvREFCNT_dec(LvTARG(sv));
6593             if (isREGEXP(sv)) goto freeregexp;
6594         case SVt_PVGV:
6595             if (isGV_with_GP(sv)) {
6596                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6597                    && HvENAME_get(stash))
6598                     mro_method_changed_in(stash);
6599                 gp_free(MUTABLE_GV(sv));
6600                 if (GvNAME_HEK(sv))
6601                     unshare_hek(GvNAME_HEK(sv));
6602                 /* If we're in a stash, we don't own a reference to it.
6603                  * However it does have a back reference to us, which
6604                  * needs to be cleared.  */
6605                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6606                         sv_del_backref(MUTABLE_SV(stash), sv);
6607             }
6608             /* FIXME. There are probably more unreferenced pointers to SVs
6609              * in the interpreter struct that we should check and tidy in
6610              * a similar fashion to this:  */
6611             /* See also S_sv_unglob, which does the same thing. */
6612             if ((const GV *)sv == PL_last_in_gv)
6613                 PL_last_in_gv = NULL;
6614             else if ((const GV *)sv == PL_statgv)
6615                 PL_statgv = NULL;
6616             else if ((const GV *)sv == PL_stderrgv)
6617                 PL_stderrgv = NULL;
6618         case SVt_PVMG:
6619         case SVt_PVNV:
6620         case SVt_PVIV:
6621         case SVt_INVLIST:
6622         case SVt_PV:
6623           freescalar:
6624             /* Don't bother with SvOOK_off(sv); as we're only going to
6625              * free it.  */
6626             if (SvOOK(sv)) {
6627                 STRLEN offset;
6628                 SvOOK_offset(sv, offset);
6629                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6630                 /* Don't even bother with turning off the OOK flag.  */
6631             }
6632             if (SvROK(sv)) {
6633             free_rv:
6634                 {
6635                     SV * const target = SvRV(sv);
6636                     if (SvWEAKREF(sv))
6637                         sv_del_backref(target, sv);
6638                     else
6639                         next_sv = target;
6640                 }
6641             }
6642 #ifdef PERL_ANY_COW
6643             else if (SvPVX_const(sv)
6644                      && !(SvTYPE(sv) == SVt_PVIO
6645                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6646             {
6647                 if (SvIsCOW(sv)) {
6648                     if (DEBUG_C_TEST) {
6649                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6650                         sv_dump(sv);
6651                     }
6652                     if (SvLEN(sv)) {
6653 # ifdef PERL_OLD_COPY_ON_WRITE
6654                         sv_release_COW(sv, SvPVX_const(sv), SV_COW_NEXT_SV(sv));
6655 # else
6656                         if (CowREFCNT(sv)) {
6657                             sv_buf_to_rw(sv);
6658                             CowREFCNT(sv)--;
6659                             sv_buf_to_ro(sv);
6660                             SvLEN_set(sv, 0);
6661                         }
6662 # endif
6663                     } else {
6664                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6665                     }
6666
6667                 }
6668 # ifdef PERL_OLD_COPY_ON_WRITE
6669                 else
6670 # endif
6671                 if (SvLEN(sv)) {
6672                     Safefree(SvPVX_mutable(sv));
6673                 }
6674             }
6675 #else
6676             else if (SvPVX_const(sv) && SvLEN(sv)
6677                      && !(SvTYPE(sv) == SVt_PVIO
6678                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6679                 Safefree(SvPVX_mutable(sv));
6680             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6681                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6682             }
6683 #endif
6684             break;
6685         case SVt_NV:
6686             break;
6687         }
6688
6689       free_body:
6690
6691         SvFLAGS(sv) &= SVf_BREAK;
6692         SvFLAGS(sv) |= SVTYPEMASK;
6693
6694         sv_type_details = bodies_by_type + type;
6695         if (sv_type_details->arena) {
6696             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6697                      &PL_body_roots[type]);
6698         }
6699         else if (sv_type_details->body_size) {
6700             safefree(SvANY(sv));
6701         }
6702
6703       free_head:
6704         /* caller is responsible for freeing the head of the original sv */
6705         if (sv != orig_sv && !SvREFCNT(sv))
6706             del_SV(sv);
6707
6708         /* grab and free next sv, if any */
6709       get_next_sv:
6710         while (1) {
6711             sv = NULL;
6712             if (next_sv) {
6713                 sv = next_sv;
6714                 next_sv = NULL;
6715             }
6716             else if (!iter_sv) {
6717                 break;
6718             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6719                 AV *const av = (AV*)iter_sv;
6720                 if (AvFILLp(av) > -1) {
6721                     sv = AvARRAY(av)[AvFILLp(av)--];
6722                 }
6723                 else { /* no more elements of current AV to free */
6724                     sv = iter_sv;
6725                     type = SvTYPE(sv);
6726                     /* restore previous value, squirrelled away */
6727                     iter_sv = AvARRAY(av)[AvMAX(av)];
6728                     Safefree(AvALLOC(av));
6729                     goto free_body;
6730                 }
6731             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6732                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6733                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6734                     /* no more elements of current HV to free */
6735                     sv = iter_sv;
6736                     type = SvTYPE(sv);
6737                     /* Restore previous values of iter_sv and hash_index,
6738                      * squirrelled away */
6739                     assert(!SvOBJECT(sv));
6740                     iter_sv = (SV*)SvSTASH(sv);
6741                     assert(!SvMAGICAL(sv));
6742                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6743 #ifdef DEBUGGING
6744                     /* perl -DA does not like rubbish in SvMAGIC. */
6745                     SvMAGIC_set(sv, 0);
6746 #endif
6747
6748                     /* free any remaining detritus from the hash struct */
6749                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6750                     assert(!HvARRAY((HV*)sv));
6751                     goto free_body;
6752                 }
6753             }
6754
6755             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6756
6757             if (!sv)
6758                 continue;
6759             if (!SvREFCNT(sv)) {
6760                 sv_free(sv);
6761                 continue;
6762             }
6763             if (--(SvREFCNT(sv)))
6764                 continue;
6765 #ifdef DEBUGGING
6766             if (SvTEMP(sv)) {
6767                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6768                          "Attempt to free temp prematurely: SV 0x%"UVxf
6769                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6770                 continue;
6771             }
6772 #endif
6773             if (SvIMMORTAL(sv)) {
6774                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6775                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6776                 continue;
6777             }
6778             break;
6779         } /* while 1 */
6780
6781     } /* while sv */
6782 }
6783
6784 /* This routine curses the sv itself, not the object referenced by sv. So
6785    sv does not have to be ROK. */
6786
6787 static bool
6788 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6789     PERL_ARGS_ASSERT_CURSE;
6790     assert(SvOBJECT(sv));
6791
6792     if (PL_defstash &&  /* Still have a symbol table? */
6793         SvDESTROYABLE(sv))
6794     {
6795         dSP;
6796         HV* stash;
6797         do {
6798           stash = SvSTASH(sv);
6799           assert(SvTYPE(stash) == SVt_PVHV);
6800           if (HvNAME(stash)) {
6801             CV* destructor = NULL;
6802             assert (SvOOK(stash));
6803             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6804             if (!destructor || HvMROMETA(stash)->destroy_gen
6805                                 != PL_sub_generation)
6806             {
6807                 GV * const gv =
6808                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6809                 if (gv) destructor = GvCV(gv);
6810                 if (!SvOBJECT(stash))
6811                 {
6812                     SvSTASH(stash) =
6813                         destructor ? (HV *)destructor : ((HV *)0)+1;
6814                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6815                         PL_sub_generation;
6816                 }
6817             }
6818             assert(!destructor || destructor == ((CV *)0)+1
6819                 || SvTYPE(destructor) == SVt_PVCV);
6820             if (destructor && destructor != ((CV *)0)+1
6821                 /* A constant subroutine can have no side effects, so
6822                    don't bother calling it.  */
6823                 && !CvCONST(destructor)
6824                 /* Don't bother calling an empty destructor or one that
6825                    returns immediately. */
6826                 && (CvISXSUB(destructor)
6827                 || (CvSTART(destructor)
6828                     && (CvSTART(destructor)->op_next->op_type
6829                                         != OP_LEAVESUB)
6830                     && (CvSTART(destructor)->op_next->op_type
6831                                         != OP_PUSHMARK
6832                         || CvSTART(destructor)->op_next->op_next->op_type
6833                                         != OP_RETURN
6834                        )
6835                    ))
6836                )
6837             {
6838                 SV* const tmpref = newRV(sv);
6839                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6840                 ENTER;
6841                 PUSHSTACKi(PERLSI_DESTROY);
6842                 EXTEND(SP, 2);
6843                 PUSHMARK(SP);
6844                 PUSHs(tmpref);
6845                 PUTBACK;
6846                 call_sv(MUTABLE_SV(destructor),
6847                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6848                 POPSTACK;
6849                 SPAGAIN;
6850                 LEAVE;
6851                 if(SvREFCNT(tmpref) < 2) {
6852                     /* tmpref is not kept alive! */
6853                     SvREFCNT(sv)--;
6854                     SvRV_set(tmpref, NULL);
6855                     SvROK_off(tmpref);
6856                 }
6857                 SvREFCNT_dec_NN(tmpref);
6858             }
6859           }
6860         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6861
6862
6863         if (check_refcnt && SvREFCNT(sv)) {
6864             if (PL_in_clean_objs)
6865                 Perl_croak(aTHX_
6866                   "DESTROY created new reference to dead object '%"HEKf"'",
6867                    HEKfARG(HvNAME_HEK(stash)));
6868             /* DESTROY gave object new lease on life */
6869             return FALSE;
6870         }
6871     }
6872
6873     if (SvOBJECT(sv)) {
6874         HV * const stash = SvSTASH(sv);
6875         /* Curse before freeing the stash, as freeing the stash could cause
6876            a recursive call into S_curse. */
6877         SvOBJECT_off(sv);       /* Curse the object. */
6878         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6879         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6880     }
6881     return TRUE;
6882 }
6883
6884 /*
6885 =for apidoc sv_newref
6886
6887 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6888 instead.
6889
6890 =cut
6891 */
6892
6893 SV *
6894 Perl_sv_newref(pTHX_ SV *const sv)
6895 {
6896     PERL_UNUSED_CONTEXT;
6897     if (sv)
6898         (SvREFCNT(sv))++;
6899     return sv;
6900 }
6901
6902 /*
6903 =for apidoc sv_free
6904
6905 Decrement an SV's reference count, and if it drops to zero, call
6906 C<sv_clear> to invoke destructors and free up any memory used by
6907 the body; finally, deallocate the SV's head itself.
6908 Normally called via a wrapper macro C<SvREFCNT_dec>.
6909
6910 =cut
6911 */
6912
6913 void
6914 Perl_sv_free(pTHX_ SV *const sv)
6915 {
6916     SvREFCNT_dec(sv);
6917 }
6918
6919
6920 /* Private helper function for SvREFCNT_dec().
6921  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6922
6923 void
6924 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6925 {
6926     dVAR;
6927
6928     PERL_ARGS_ASSERT_SV_FREE2;
6929
6930     if (LIKELY( rc == 1 )) {
6931         /* normal case */
6932         SvREFCNT(sv) = 0;
6933
6934 #ifdef DEBUGGING
6935         if (SvTEMP(sv)) {
6936             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6937                              "Attempt to free temp prematurely: SV 0x%"UVxf
6938                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6939             return;
6940         }
6941 #endif
6942         if (SvIMMORTAL(sv)) {
6943             /* make sure SvREFCNT(sv)==0 happens very seldom */
6944             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6945             return;
6946         }
6947         sv_clear(sv);
6948         if (! SvREFCNT(sv)) /* may have have been resurrected */
6949             del_SV(sv);
6950         return;
6951     }
6952
6953     /* handle exceptional cases */
6954
6955     assert(rc == 0);
6956
6957     if (SvFLAGS(sv) & SVf_BREAK)
6958         /* this SV's refcnt has been artificially decremented to
6959          * trigger cleanup */
6960         return;
6961     if (PL_in_clean_all) /* All is fair */
6962         return;
6963     if (SvIMMORTAL(sv)) {
6964         /* make sure SvREFCNT(sv)==0 happens very seldom */
6965         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6966         return;
6967     }
6968     if (ckWARN_d(WARN_INTERNAL)) {
6969 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6970         Perl_dump_sv_child(aTHX_ sv);
6971 #else
6972     #ifdef DEBUG_LEAKING_SCALARS
6973         sv_dump(sv);
6974     #endif
6975 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6976         if (PL_warnhook == PERL_WARNHOOK_FATAL
6977             || ckDEAD(packWARN(WARN_INTERNAL))) {
6978             /* Don't let Perl_warner cause us to escape our fate:  */
6979             abort();
6980         }
6981 #endif
6982         /* This may not return:  */
6983         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6984                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6985                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6986 #endif
6987     }
6988 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6989     abort();
6990 #endif
6991
6992 }
6993
6994
6995 /*
6996 =for apidoc sv_len
6997
6998 Returns the length of the string in the SV.  Handles magic and type
6999 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
7000 gives raw access to the xpv_cur slot.
7001
7002 =cut
7003 */
7004
7005 STRLEN
7006 Perl_sv_len(pTHX_ SV *const sv)
7007 {
7008     STRLEN len;
7009
7010     if (!sv)
7011         return 0;
7012
7013     (void)SvPV_const(sv, len);
7014     return len;
7015 }
7016
7017 /*
7018 =for apidoc sv_len_utf8
7019
7020 Returns the number of characters in the string in an SV, counting wide
7021 UTF-8 bytes as a single character.  Handles magic and type coercion.
7022
7023 =cut
7024 */
7025
7026 /*
7027  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7028  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7029  * (Note that the mg_len is not the length of the mg_ptr field.
7030  * This allows the cache to store the character length of the string without
7031  * needing to malloc() extra storage to attach to the mg_ptr.)
7032  *
7033  */
7034
7035 STRLEN
7036 Perl_sv_len_utf8(pTHX_ SV *const sv)
7037 {
7038     if (!sv)
7039         return 0;
7040
7041     SvGETMAGIC(sv);
7042     return sv_len_utf8_nomg(sv);
7043 }
7044
7045 STRLEN
7046 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7047 {
7048     STRLEN len;
7049     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7050
7051     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7052
7053     if (PL_utf8cache && SvUTF8(sv)) {
7054             STRLEN ulen;
7055             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7056
7057             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7058                 if (mg->mg_len != -1)
7059                     ulen = mg->mg_len;
7060                 else {
7061                     /* We can use the offset cache for a headstart.
7062                        The longer value is stored in the first pair.  */
7063                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7064
7065                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7066                                                        s + len);
7067                 }
7068                 
7069                 if (PL_utf8cache < 0) {
7070                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7071                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7072                 }
7073             }
7074             else {
7075                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7076                 utf8_mg_len_cache_update(sv, &mg, ulen);
7077             }
7078             return ulen;
7079     }
7080     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7081 }
7082
7083 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7084    offset.  */
7085 static STRLEN
7086 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7087                       STRLEN *const uoffset_p, bool *const at_end)
7088 {
7089     const U8 *s = start;
7090     STRLEN uoffset = *uoffset_p;
7091
7092     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7093
7094     while (s < send && uoffset) {
7095         --uoffset;
7096         s += UTF8SKIP(s);
7097     }
7098     if (s == send) {
7099         *at_end = TRUE;
7100     }
7101     else if (s > send) {
7102         *at_end = TRUE;
7103         /* This is the existing behaviour. Possibly it should be a croak, as
7104            it's actually a bounds error  */
7105         s = send;
7106     }
7107     *uoffset_p -= uoffset;
7108     return s - start;
7109 }
7110
7111 /* Given the length of the string in both bytes and UTF-8 characters, decide
7112    whether to walk forwards or backwards to find the byte corresponding to
7113    the passed in UTF-8 offset.  */
7114 static STRLEN
7115 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7116                     STRLEN uoffset, const STRLEN uend)
7117 {
7118     STRLEN backw = uend - uoffset;
7119
7120     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7121
7122     if (uoffset < 2 * backw) {
7123         /* The assumption is that going forwards is twice the speed of going
7124            forward (that's where the 2 * backw comes from).
7125            (The real figure of course depends on the UTF-8 data.)  */
7126         const U8 *s = start;
7127
7128         while (s < send && uoffset--)
7129             s += UTF8SKIP(s);
7130         assert (s <= send);
7131         if (s > send)
7132             s = send;
7133         return s - start;
7134     }
7135
7136     while (backw--) {
7137         send--;
7138         while (UTF8_IS_CONTINUATION(*send))
7139             send--;
7140     }
7141     return send - start;
7142 }
7143
7144 /* For the string representation of the given scalar, find the byte
7145    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7146    give another position in the string, *before* the sought offset, which
7147    (which is always true, as 0, 0 is a valid pair of positions), which should
7148    help reduce the amount of linear searching.
7149    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7150    will be used to reduce the amount of linear searching. The cache will be
7151    created if necessary, and the found value offered to it for update.  */
7152 static STRLEN
7153 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7154                     const U8 *const send, STRLEN uoffset,
7155                     STRLEN uoffset0, STRLEN boffset0)
7156 {
7157     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7158     bool found = FALSE;
7159     bool at_end = FALSE;
7160
7161     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7162
7163     assert (uoffset >= uoffset0);
7164
7165     if (!uoffset)
7166         return 0;
7167
7168     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7169         && PL_utf8cache
7170         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7171                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7172         if ((*mgp)->mg_ptr) {
7173             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7174             if (cache[0] == uoffset) {
7175                 /* An exact match. */
7176                 return cache[1];
7177             }
7178             if (cache[2] == uoffset) {
7179                 /* An exact match. */
7180                 return cache[3];
7181             }
7182
7183             if (cache[0] < uoffset) {
7184                 /* The cache already knows part of the way.   */
7185                 if (cache[0] > uoffset0) {
7186                     /* The cache knows more than the passed in pair  */
7187                     uoffset0 = cache[0];
7188                     boffset0 = cache[1];
7189                 }
7190                 if ((*mgp)->mg_len != -1) {
7191                     /* And we know the end too.  */
7192                     boffset = boffset0
7193                         + sv_pos_u2b_midway(start + boffset0, send,
7194                                               uoffset - uoffset0,
7195                                               (*mgp)->mg_len - uoffset0);
7196                 } else {
7197                     uoffset -= uoffset0;
7198                     boffset = boffset0
7199                         + sv_pos_u2b_forwards(start + boffset0,
7200                                               send, &uoffset, &at_end);
7201                     uoffset += uoffset0;
7202                 }
7203             }
7204             else if (cache[2] < uoffset) {
7205                 /* We're between the two cache entries.  */
7206                 if (cache[2] > uoffset0) {
7207                     /* and the cache knows more than the passed in pair  */
7208                     uoffset0 = cache[2];
7209                     boffset0 = cache[3];
7210                 }
7211
7212                 boffset = boffset0
7213                     + sv_pos_u2b_midway(start + boffset0,
7214                                           start + cache[1],
7215                                           uoffset - uoffset0,
7216                                           cache[0] - uoffset0);
7217             } else {
7218                 boffset = boffset0
7219                     + sv_pos_u2b_midway(start + boffset0,
7220                                           start + cache[3],
7221                                           uoffset - uoffset0,
7222                                           cache[2] - uoffset0);
7223             }
7224             found = TRUE;
7225         }
7226         else if ((*mgp)->mg_len != -1) {
7227             /* If we can take advantage of a passed in offset, do so.  */
7228             /* In fact, offset0 is either 0, or less than offset, so don't
7229                need to worry about the other possibility.  */
7230             boffset = boffset0
7231                 + sv_pos_u2b_midway(start + boffset0, send,
7232                                       uoffset - uoffset0,
7233                                       (*mgp)->mg_len - uoffset0);
7234             found = TRUE;
7235         }
7236     }
7237
7238     if (!found || PL_utf8cache < 0) {
7239         STRLEN real_boffset;
7240         uoffset -= uoffset0;
7241         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7242                                                       send, &uoffset, &at_end);
7243         uoffset += uoffset0;
7244
7245         if (found && PL_utf8cache < 0)
7246             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7247                                        real_boffset, sv);
7248         boffset = real_boffset;
7249     }
7250
7251     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7252         if (at_end)
7253             utf8_mg_len_cache_update(sv, mgp, uoffset);
7254         else
7255             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7256     }
7257     return boffset;
7258 }
7259
7260
7261 /*
7262 =for apidoc sv_pos_u2b_flags
7263
7264 Converts the offset from a count of UTF-8 chars from
7265 the start of the string, to a count of the equivalent number of bytes; if
7266 lenp is non-zero, it does the same to lenp, but this time starting from
7267 the offset, rather than from the start
7268 of the string.  Handles type coercion.
7269 I<flags> is passed to C<SvPV_flags>, and usually should be
7270 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7271
7272 =cut
7273 */
7274
7275 /*
7276  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7277  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7278  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7279  *
7280  */
7281
7282 STRLEN
7283 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7284                       U32 flags)
7285 {
7286     const U8 *start;
7287     STRLEN len;
7288     STRLEN boffset;
7289
7290     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7291
7292     start = (U8*)SvPV_flags(sv, len, flags);
7293     if (len) {
7294         const U8 * const send = start + len;
7295         MAGIC *mg = NULL;
7296         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7297
7298         if (lenp
7299             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7300                         is 0, and *lenp is already set to that.  */) {
7301             /* Convert the relative offset to absolute.  */
7302             const STRLEN uoffset2 = uoffset + *lenp;
7303             const STRLEN boffset2
7304                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7305                                       uoffset, boffset) - boffset;
7306
7307             *lenp = boffset2;
7308         }
7309     } else {
7310         if (lenp)
7311             *lenp = 0;
7312         boffset = 0;
7313     }
7314
7315     return boffset;
7316 }
7317
7318 /*
7319 =for apidoc sv_pos_u2b
7320
7321 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7322 the start of the string, to a count of the equivalent number of bytes; if
7323 lenp is non-zero, it does the same to lenp, but this time starting from
7324 the offset, rather than from the start of the string.  Handles magic and
7325 type coercion.
7326
7327 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7328 than 2Gb.
7329
7330 =cut
7331 */
7332
7333 /*
7334  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7335  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7336  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7337  *
7338  */
7339
7340 /* This function is subject to size and sign problems */
7341
7342 void
7343 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7344 {
7345     PERL_ARGS_ASSERT_SV_POS_U2B;
7346
7347     if (lenp) {
7348         STRLEN ulen = (STRLEN)*lenp;
7349         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7350                                          SV_GMAGIC|SV_CONST_RETURN);
7351         *lenp = (I32)ulen;
7352     } else {
7353         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7354                                          SV_GMAGIC|SV_CONST_RETURN);
7355     }
7356 }
7357
7358 static void
7359 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7360                            const STRLEN ulen)
7361 {
7362     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7363     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7364         return;
7365
7366     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7367                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7368         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7369     }
7370     assert(*mgp);
7371
7372     (*mgp)->mg_len = ulen;
7373 }
7374
7375 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7376    byte length pairing. The (byte) length of the total SV is passed in too,
7377    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7378    may not have updated SvCUR, so we can't rely on reading it directly.
7379
7380    The proffered utf8/byte length pairing isn't used if the cache already has
7381    two pairs, and swapping either for the proffered pair would increase the
7382    RMS of the intervals between known byte offsets.
7383
7384    The cache itself consists of 4 STRLEN values
7385    0: larger UTF-8 offset
7386    1: corresponding byte offset
7387    2: smaller UTF-8 offset
7388    3: corresponding byte offset
7389
7390    Unused cache pairs have the value 0, 0.
7391    Keeping the cache "backwards" means that the invariant of
7392    cache[0] >= cache[2] is maintained even with empty slots, which means that
7393    the code that uses it doesn't need to worry if only 1 entry has actually
7394    been set to non-zero.  It also makes the "position beyond the end of the
7395    cache" logic much simpler, as the first slot is always the one to start
7396    from.   
7397 */
7398 static void
7399 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7400                            const STRLEN utf8, const STRLEN blen)
7401 {
7402     STRLEN *cache;
7403
7404     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7405
7406     if (SvREADONLY(sv))
7407         return;
7408
7409     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7410                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7411         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7412                            0);
7413         (*mgp)->mg_len = -1;
7414     }
7415     assert(*mgp);
7416
7417     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7418         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7419         (*mgp)->mg_ptr = (char *) cache;
7420     }
7421     assert(cache);
7422
7423     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7424         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7425            a pointer.  Note that we no longer cache utf8 offsets on refer-
7426            ences, but this check is still a good idea, for robustness.  */
7427         const U8 *start = (const U8 *) SvPVX_const(sv);
7428         const STRLEN realutf8 = utf8_length(start, start + byte);
7429
7430         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7431                                    sv);
7432     }
7433
7434     /* Cache is held with the later position first, to simplify the code
7435        that deals with unbounded ends.  */
7436        
7437     ASSERT_UTF8_CACHE(cache);
7438     if (cache[1] == 0) {
7439         /* Cache is totally empty  */
7440         cache[0] = utf8;
7441         cache[1] = byte;
7442     } else if (cache[3] == 0) {
7443         if (byte > cache[1]) {
7444             /* New one is larger, so goes first.  */
7445             cache[2] = cache[0];
7446             cache[3] = cache[1];
7447             cache[0] = utf8;
7448             cache[1] = byte;
7449         } else {
7450             cache[2] = utf8;
7451             cache[3] = byte;
7452         }
7453     } else {
7454 /* float casts necessary? XXX */
7455 #define THREEWAY_SQUARE(a,b,c,d) \
7456             ((float)((d) - (c))) * ((float)((d) - (c))) \
7457             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7458                + ((float)((b) - (a))) * ((float)((b) - (a)))
7459
7460         /* Cache has 2 slots in use, and we know three potential pairs.
7461            Keep the two that give the lowest RMS distance. Do the
7462            calculation in bytes simply because we always know the byte
7463            length.  squareroot has the same ordering as the positive value,
7464            so don't bother with the actual square root.  */
7465         if (byte > cache[1]) {
7466             /* New position is after the existing pair of pairs.  */
7467             const float keep_earlier
7468                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7469             const float keep_later
7470                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7471
7472             if (keep_later < keep_earlier) {
7473                 cache[2] = cache[0];
7474                 cache[3] = cache[1];
7475             }
7476             cache[0] = utf8;
7477             cache[1] = byte;
7478         }
7479         else {
7480             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7481             float b, c, keep_earlier;
7482             if (byte > cache[3]) {
7483                 /* New position is between the existing pair of pairs.  */
7484                 b = (float)cache[3];
7485                 c = (float)byte;
7486             } else {
7487                 /* New position is before the existing pair of pairs.  */
7488                 b = (float)byte;
7489                 c = (float)cache[3];
7490             }
7491             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7492             if (byte > cache[3]) {
7493                 if (keep_later < keep_earlier) {
7494                     cache[2] = utf8;
7495                     cache[3] = byte;
7496                 }
7497                 else {
7498                     cache[0] = utf8;
7499                     cache[1] = byte;
7500                 }
7501             }
7502             else {
7503                 if (! (keep_later < keep_earlier)) {
7504                     cache[0] = cache[2];
7505                     cache[1] = cache[3];
7506                 }
7507                 cache[2] = utf8;
7508                 cache[3] = byte;
7509             }
7510         }
7511     }
7512     ASSERT_UTF8_CACHE(cache);
7513 }
7514
7515 /* We already know all of the way, now we may be able to walk back.  The same
7516    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7517    backward is half the speed of walking forward. */
7518 static STRLEN
7519 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7520                     const U8 *end, STRLEN endu)
7521 {
7522     const STRLEN forw = target - s;
7523     STRLEN backw = end - target;
7524
7525     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7526
7527     if (forw < 2 * backw) {
7528         return utf8_length(s, target);
7529     }
7530
7531     while (end > target) {
7532         end--;
7533         while (UTF8_IS_CONTINUATION(*end)) {
7534             end--;
7535         }
7536         endu--;
7537     }
7538     return endu;
7539 }
7540
7541 /*
7542 =for apidoc sv_pos_b2u_flags
7543
7544 Converts the offset from a count of bytes from the start of the string, to
7545 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7546 I<flags> is passed to C<SvPV_flags>, and usually should be
7547 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7548
7549 =cut
7550 */
7551
7552 /*
7553  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7554  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7555  * and byte offsets.
7556  *
7557  */
7558 STRLEN
7559 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7560 {
7561     const U8* s;
7562     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7563     STRLEN blen;
7564     MAGIC* mg = NULL;
7565     const U8* send;
7566     bool found = FALSE;
7567
7568     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7569
7570     s = (const U8*)SvPV_flags(sv, blen, flags);
7571
7572     if (blen < offset)
7573         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7574                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7575
7576     send = s + offset;
7577
7578     if (!SvREADONLY(sv)
7579         && PL_utf8cache
7580         && SvTYPE(sv) >= SVt_PVMG
7581         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7582     {
7583         if (mg->mg_ptr) {
7584             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7585             if (cache[1] == offset) {
7586                 /* An exact match. */
7587                 return cache[0];
7588             }
7589             if (cache[3] == offset) {
7590                 /* An exact match. */
7591                 return cache[2];
7592             }
7593
7594             if (cache[1] < offset) {
7595                 /* We already know part of the way. */
7596                 if (mg->mg_len != -1) {
7597                     /* Actually, we know the end too.  */
7598                     len = cache[0]
7599                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7600                                               s + blen, mg->mg_len - cache[0]);
7601                 } else {
7602                     len = cache[0] + utf8_length(s + cache[1], send);
7603                 }
7604             }
7605             else if (cache[3] < offset) {
7606                 /* We're between the two cached pairs, so we do the calculation
7607                    offset by the byte/utf-8 positions for the earlier pair,
7608                    then add the utf-8 characters from the string start to
7609                    there.  */
7610                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7611                                           s + cache[1], cache[0] - cache[2])
7612                     + cache[2];
7613
7614             }
7615             else { /* cache[3] > offset */
7616                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7617                                           cache[2]);
7618
7619             }
7620             ASSERT_UTF8_CACHE(cache);
7621             found = TRUE;
7622         } else if (mg->mg_len != -1) {
7623             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7624             found = TRUE;
7625         }
7626     }
7627     if (!found || PL_utf8cache < 0) {
7628         const STRLEN real_len = utf8_length(s, send);
7629
7630         if (found && PL_utf8cache < 0)
7631             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7632         len = real_len;
7633     }
7634
7635     if (PL_utf8cache) {
7636         if (blen == offset)
7637             utf8_mg_len_cache_update(sv, &mg, len);
7638         else
7639             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7640     }
7641
7642     return len;
7643 }
7644
7645 /*
7646 =for apidoc sv_pos_b2u
7647
7648 Converts the value pointed to by offsetp from a count of bytes from the
7649 start of the string, to a count of the equivalent number of UTF-8 chars.
7650 Handles magic and type coercion.
7651
7652 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7653 longer than 2Gb.
7654
7655 =cut
7656 */
7657
7658 /*
7659  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7660  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7661  * byte offsets.
7662  *
7663  */
7664 void
7665 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7666 {
7667     PERL_ARGS_ASSERT_SV_POS_B2U;
7668
7669     if (!sv)
7670         return;
7671
7672     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7673                                      SV_GMAGIC|SV_CONST_RETURN);
7674 }
7675
7676 static void
7677 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7678                              STRLEN real, SV *const sv)
7679 {
7680     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7681
7682     /* As this is debugging only code, save space by keeping this test here,
7683        rather than inlining it in all the callers.  */
7684     if (from_cache == real)
7685         return;
7686
7687     /* Need to turn the assertions off otherwise we may recurse infinitely
7688        while printing error messages.  */
7689     SAVEI8(PL_utf8cache);
7690     PL_utf8cache = 0;
7691     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7692                func, (UV) from_cache, (UV) real, SVfARG(sv));
7693 }
7694
7695 /*
7696 =for apidoc sv_eq
7697
7698 Returns a boolean indicating whether the strings in the two SVs are
7699 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7700 coerce its args to strings if necessary.
7701
7702 =for apidoc sv_eq_flags
7703
7704 Returns a boolean indicating whether the strings in the two SVs are
7705 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7706 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7707
7708 =cut
7709 */
7710
7711 I32
7712 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7713 {
7714     const char *pv1;
7715     STRLEN cur1;
7716     const char *pv2;
7717     STRLEN cur2;
7718     I32  eq     = 0;
7719     SV* svrecode = NULL;
7720
7721     if (!sv1) {
7722         pv1 = "";
7723         cur1 = 0;
7724     }
7725     else {
7726         /* if pv1 and pv2 are the same, second SvPV_const call may
7727          * invalidate pv1 (if we are handling magic), so we may need to
7728          * make a copy */
7729         if (sv1 == sv2 && flags & SV_GMAGIC
7730          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7731             pv1 = SvPV_const(sv1, cur1);
7732             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7733         }
7734         pv1 = SvPV_flags_const(sv1, cur1, flags);
7735     }
7736
7737     if (!sv2){
7738         pv2 = "";
7739         cur2 = 0;
7740     }
7741     else
7742         pv2 = SvPV_flags_const(sv2, cur2, flags);
7743
7744     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7745         /* Differing utf8ness.
7746          * Do not UTF8size the comparands as a side-effect. */
7747          if (PL_encoding) {
7748               if (SvUTF8(sv1)) {
7749                    svrecode = newSVpvn(pv2, cur2);
7750                    sv_recode_to_utf8(svrecode, PL_encoding);
7751                    pv2 = SvPV_const(svrecode, cur2);
7752               }
7753               else {
7754                    svrecode = newSVpvn(pv1, cur1);
7755                    sv_recode_to_utf8(svrecode, PL_encoding);
7756                    pv1 = SvPV_const(svrecode, cur1);
7757               }
7758               /* Now both are in UTF-8. */
7759               if (cur1 != cur2) {
7760                    SvREFCNT_dec_NN(svrecode);
7761                    return FALSE;
7762               }
7763          }
7764          else {
7765               if (SvUTF8(sv1)) {
7766                   /* sv1 is the UTF-8 one  */
7767                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7768                                         (const U8*)pv1, cur1) == 0;
7769               }
7770               else {
7771                   /* sv2 is the UTF-8 one  */
7772                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7773                                         (const U8*)pv2, cur2) == 0;
7774               }
7775          }
7776     }
7777
7778     if (cur1 == cur2)
7779         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7780         
7781     SvREFCNT_dec(svrecode);
7782
7783     return eq;
7784 }
7785
7786 /*
7787 =for apidoc sv_cmp
7788
7789 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7790 string in C<sv1> is less than, equal to, or greater than the string in
7791 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7792 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7793
7794 =for apidoc sv_cmp_flags
7795
7796 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7797 string in C<sv1> is less than, equal to, or greater than the string in
7798 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7799 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7800 also C<sv_cmp_locale_flags>.
7801
7802 =cut
7803 */
7804
7805 I32
7806 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7807 {
7808     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7809 }
7810
7811 I32
7812 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7813                   const U32 flags)
7814 {
7815     STRLEN cur1, cur2;
7816     const char *pv1, *pv2;
7817     I32  cmp;
7818     SV *svrecode = NULL;
7819
7820     if (!sv1) {
7821         pv1 = "";
7822         cur1 = 0;
7823     }
7824     else
7825         pv1 = SvPV_flags_const(sv1, cur1, flags);
7826
7827     if (!sv2) {
7828         pv2 = "";
7829         cur2 = 0;
7830     }
7831     else
7832         pv2 = SvPV_flags_const(sv2, cur2, flags);
7833
7834     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7835         /* Differing utf8ness.
7836          * Do not UTF8size the comparands as a side-effect. */
7837         if (SvUTF8(sv1)) {
7838             if (PL_encoding) {
7839                  svrecode = newSVpvn(pv2, cur2);
7840                  sv_recode_to_utf8(svrecode, PL_encoding);
7841                  pv2 = SvPV_const(svrecode, cur2);
7842             }
7843             else {
7844                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7845                                                    (const U8*)pv1, cur1);
7846                 return retval ? retval < 0 ? -1 : +1 : 0;
7847             }
7848         }
7849         else {
7850             if (PL_encoding) {
7851                  svrecode = newSVpvn(pv1, cur1);
7852                  sv_recode_to_utf8(svrecode, PL_encoding);
7853                  pv1 = SvPV_const(svrecode, cur1);
7854             }
7855             else {
7856                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7857                                                   (const U8*)pv2, cur2);
7858                 return retval ? retval < 0 ? -1 : +1 : 0;
7859             }
7860         }
7861     }
7862
7863     if (!cur1) {
7864         cmp = cur2 ? -1 : 0;
7865     } else if (!cur2) {
7866         cmp = 1;
7867     } else {
7868         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7869
7870         if (retval) {
7871             cmp = retval < 0 ? -1 : 1;
7872         } else if (cur1 == cur2) {
7873             cmp = 0;
7874         } else {
7875             cmp = cur1 < cur2 ? -1 : 1;
7876         }
7877     }
7878
7879     SvREFCNT_dec(svrecode);
7880
7881     return cmp;
7882 }
7883
7884 /*
7885 =for apidoc sv_cmp_locale
7886
7887 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7888 'use bytes' aware, handles get magic, and will coerce its args to strings
7889 if necessary.  See also C<sv_cmp>.
7890
7891 =for apidoc sv_cmp_locale_flags
7892
7893 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7894 'use bytes' aware and will coerce its args to strings if necessary.  If the
7895 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7896
7897 =cut
7898 */
7899
7900 I32
7901 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7902 {
7903     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7904 }
7905
7906 I32
7907 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7908                          const U32 flags)
7909 {
7910 #ifdef USE_LOCALE_COLLATE
7911
7912     char *pv1, *pv2;
7913     STRLEN len1, len2;
7914     I32 retval;
7915
7916     if (PL_collation_standard)
7917         goto raw_compare;
7918
7919     len1 = 0;
7920     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7921     len2 = 0;
7922     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7923
7924     if (!pv1 || !len1) {
7925         if (pv2 && len2)
7926             return -1;
7927         else
7928             goto raw_compare;
7929     }
7930     else {
7931         if (!pv2 || !len2)
7932             return 1;
7933     }
7934
7935     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7936
7937     if (retval)
7938         return retval < 0 ? -1 : 1;
7939
7940     /*
7941      * When the result of collation is equality, that doesn't mean
7942      * that there are no differences -- some locales exclude some
7943      * characters from consideration.  So to avoid false equalities,
7944      * we use the raw string as a tiebreaker.
7945      */
7946
7947   raw_compare:
7948     /* FALLTHROUGH */
7949
7950 #else
7951     PERL_UNUSED_ARG(flags);
7952 #endif /* USE_LOCALE_COLLATE */
7953
7954     return sv_cmp(sv1, sv2);
7955 }
7956
7957
7958 #ifdef USE_LOCALE_COLLATE
7959
7960 /*
7961 =for apidoc sv_collxfrm
7962
7963 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7964 C<sv_collxfrm_flags>.
7965
7966 =for apidoc sv_collxfrm_flags
7967
7968 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7969 flags contain SV_GMAGIC, it handles get-magic.
7970
7971 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7972 scalar data of the variable, but transformed to such a format that a normal
7973 memory comparison can be used to compare the data according to the locale
7974 settings.
7975
7976 =cut
7977 */
7978
7979 char *
7980 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7981 {
7982     MAGIC *mg;
7983
7984     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7985
7986     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7987     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7988         const char *s;
7989         char *xf;
7990         STRLEN len, xlen;
7991
7992         if (mg)
7993             Safefree(mg->mg_ptr);
7994         s = SvPV_flags_const(sv, len, flags);
7995         if ((xf = mem_collxfrm(s, len, &xlen))) {
7996             if (! mg) {
7997 #ifdef PERL_OLD_COPY_ON_WRITE
7998                 if (SvIsCOW(sv))
7999                     sv_force_normal_flags(sv, 0);
8000 #endif
8001                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8002                                  0, 0);
8003                 assert(mg);
8004             }
8005             mg->mg_ptr = xf;
8006             mg->mg_len = xlen;
8007         }
8008         else {
8009             if (mg) {
8010                 mg->mg_ptr = NULL;
8011                 mg->mg_len = -1;
8012             }
8013         }
8014     }
8015     if (mg && mg->mg_ptr) {
8016         *nxp = mg->mg_len;
8017         return mg->mg_ptr + sizeof(PL_collation_ix);
8018     }
8019     else {
8020         *nxp = 0;
8021         return NULL;
8022     }
8023 }
8024
8025 #endif /* USE_LOCALE_COLLATE */
8026
8027 static char *
8028 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8029 {
8030     SV * const tsv = newSV(0);
8031     ENTER;
8032     SAVEFREESV(tsv);
8033     sv_gets(tsv, fp, 0);
8034     sv_utf8_upgrade_nomg(tsv);
8035     SvCUR_set(sv,append);
8036     sv_catsv(sv,tsv);
8037     LEAVE;
8038     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8039 }
8040
8041 static char *
8042 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8043 {
8044     SSize_t bytesread;
8045     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8046       /* Grab the size of the record we're getting */
8047     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8048     
8049     /* Go yank in */
8050 #ifdef __VMS
8051     int fd;
8052     Stat_t st;
8053
8054     /* With a true, record-oriented file on VMS, we need to use read directly
8055      * to ensure that we respect RMS record boundaries.  The user is responsible
8056      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8057      * record size) field.  N.B. This is likely to produce invalid results on
8058      * varying-width character data when a record ends mid-character.
8059      */
8060     fd = PerlIO_fileno(fp);
8061     if (fd != -1
8062         && PerlLIO_fstat(fd, &st) == 0
8063         && (st.st_fab_rfm == FAB$C_VAR
8064             || st.st_fab_rfm == FAB$C_VFC
8065             || st.st_fab_rfm == FAB$C_FIX)) {
8066
8067         bytesread = PerlLIO_read(fd, buffer, recsize);
8068     }
8069     else /* in-memory file from PerlIO::Scalar
8070           * or not a record-oriented file
8071           */
8072 #endif
8073     {
8074         bytesread = PerlIO_read(fp, buffer, recsize);
8075
8076         /* At this point, the logic in sv_get() means that sv will
8077            be treated as utf-8 if the handle is utf8.
8078         */
8079         if (PerlIO_isutf8(fp) && bytesread > 0) {
8080             char *bend = buffer + bytesread;
8081             char *bufp = buffer;
8082             size_t charcount = 0;
8083             bool charstart = TRUE;
8084             STRLEN skip = 0;
8085
8086             while (charcount < recsize) {
8087                 /* count accumulated characters */
8088                 while (bufp < bend) {
8089                     if (charstart) {
8090                         skip = UTF8SKIP(bufp);
8091                     }
8092                     if (bufp + skip > bend) {
8093                         /* partial at the end */
8094                         charstart = FALSE;
8095                         break;
8096                     }
8097                     else {
8098                         ++charcount;
8099                         bufp += skip;
8100                         charstart = TRUE;
8101                     }
8102                 }
8103
8104                 if (charcount < recsize) {
8105                     STRLEN readsize;
8106                     STRLEN bufp_offset = bufp - buffer;
8107                     SSize_t morebytesread;
8108
8109                     /* originally I read enough to fill any incomplete
8110                        character and the first byte of the next
8111                        character if needed, but if there's many
8112                        multi-byte encoded characters we're going to be
8113                        making a read call for every character beyond
8114                        the original read size.
8115
8116                        So instead, read the rest of the character if
8117                        any, and enough bytes to match at least the
8118                        start bytes for each character we're going to
8119                        read.
8120                     */
8121                     if (charstart)
8122                         readsize = recsize - charcount;
8123                     else 
8124                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8125                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8126                     bend = buffer + bytesread;
8127                     morebytesread = PerlIO_read(fp, bend, readsize);
8128                     if (morebytesread <= 0) {
8129                         /* we're done, if we still have incomplete
8130                            characters the check code in sv_gets() will
8131                            warn about them.
8132
8133                            I'd originally considered doing
8134                            PerlIO_ungetc() on all but the lead
8135                            character of the incomplete character, but
8136                            read() doesn't do that, so I don't.
8137                         */
8138                         break;
8139                     }
8140
8141                     /* prepare to scan some more */
8142                     bytesread += morebytesread;
8143                     bend = buffer + bytesread;
8144                     bufp = buffer + bufp_offset;
8145                 }
8146             }
8147         }
8148     }
8149
8150     if (bytesread < 0)
8151         bytesread = 0;
8152     SvCUR_set(sv, bytesread + append);
8153     buffer[bytesread] = '\0';
8154     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8155 }
8156
8157 /*
8158 =for apidoc sv_gets
8159
8160 Get a line from the filehandle and store it into the SV, optionally
8161 appending to the currently-stored string.  If C<append> is not 0, the
8162 line is appended to the SV instead of overwriting it.  C<append> should
8163 be set to the byte offset that the appended string should start at
8164 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8165
8166 =cut
8167 */
8168
8169 char *
8170 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8171 {
8172     const char *rsptr;
8173     STRLEN rslen;
8174     STDCHAR rslast;
8175     STDCHAR *bp;
8176     SSize_t cnt;
8177     int i = 0;
8178     int rspara = 0;
8179
8180     PERL_ARGS_ASSERT_SV_GETS;
8181
8182     if (SvTHINKFIRST(sv))
8183         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8184     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8185        from <>.
8186        However, perlbench says it's slower, because the existing swipe code
8187        is faster than copy on write.
8188        Swings and roundabouts.  */
8189     SvUPGRADE(sv, SVt_PV);
8190
8191     if (append) {
8192         /* line is going to be appended to the existing buffer in the sv */
8193         if (PerlIO_isutf8(fp)) {
8194             if (!SvUTF8(sv)) {
8195                 sv_utf8_upgrade_nomg(sv);
8196                 sv_pos_u2b(sv,&append,0);
8197             }
8198         } else if (SvUTF8(sv)) {
8199             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8200         }
8201     }
8202
8203     SvPOK_only(sv);
8204     if (!append) {
8205         /* not appending - "clear" the string by setting SvCUR to 0,
8206          * the pv is still avaiable. */
8207         SvCUR_set(sv,0);
8208     }
8209     if (PerlIO_isutf8(fp))
8210         SvUTF8_on(sv);
8211
8212     if (IN_PERL_COMPILETIME) {
8213         /* we always read code in line mode */
8214         rsptr = "\n";
8215         rslen = 1;
8216     }
8217     else if (RsSNARF(PL_rs)) {
8218         /* If it is a regular disk file use size from stat() as estimate
8219            of amount we are going to read -- may result in mallocing
8220            more memory than we really need if the layers below reduce
8221            the size we read (e.g. CRLF or a gzip layer).
8222          */
8223         Stat_t st;
8224         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
8225             const Off_t offset = PerlIO_tell(fp);
8226             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8227 #ifdef PERL_NEW_COPY_ON_WRITE
8228                 /* Add an extra byte for the sake of copy-on-write's
8229                  * buffer reference count. */
8230                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8231 #else
8232                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8233 #endif
8234             }
8235         }
8236         rsptr = NULL;
8237         rslen = 0;
8238     }
8239     else if (RsRECORD(PL_rs)) {
8240         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8241     }
8242     else if (RsPARA(PL_rs)) {
8243         rsptr = "\n\n";
8244         rslen = 2;
8245         rspara = 1;
8246     }
8247     else {
8248         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8249         if (PerlIO_isutf8(fp)) {
8250             rsptr = SvPVutf8(PL_rs, rslen);
8251         }
8252         else {
8253             if (SvUTF8(PL_rs)) {
8254                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8255                     Perl_croak(aTHX_ "Wide character in $/");
8256                 }
8257             }
8258             /* extract the raw pointer to the record separator */
8259             rsptr = SvPV_const(PL_rs, rslen);
8260         }
8261     }
8262
8263     /* rslast is the last character in the record separator
8264      * note we don't use rslast except when rslen is true, so the
8265      * null assign is a placeholder. */
8266     rslast = rslen ? rsptr[rslen - 1] : '\0';
8267
8268     if (rspara) {               /* have to do this both before and after */
8269         do {                    /* to make sure file boundaries work right */
8270             if (PerlIO_eof(fp))
8271                 return 0;
8272             i = PerlIO_getc(fp);
8273             if (i != '\n') {
8274                 if (i == -1)
8275                     return 0;
8276                 PerlIO_ungetc(fp,i);
8277                 break;
8278             }
8279         } while (i != EOF);
8280     }
8281
8282     /* See if we know enough about I/O mechanism to cheat it ! */
8283
8284     /* This used to be #ifdef test - it is made run-time test for ease
8285        of abstracting out stdio interface. One call should be cheap
8286        enough here - and may even be a macro allowing compile
8287        time optimization.
8288      */
8289
8290     if (PerlIO_fast_gets(fp)) {
8291     /*
8292      * We can do buffer based IO operations on this filehandle.
8293      *
8294      * This means we can bypass a lot of subcalls and process
8295      * the buffer directly, it also means we know the upper bound
8296      * on the amount of data we might read of the current buffer
8297      * into our sv. Knowing this allows us to preallocate the pv
8298      * to be able to hold that maximum, which allows us to simplify
8299      * a lot of logic. */
8300
8301     /*
8302      * We're going to steal some values from the stdio struct
8303      * and put EVERYTHING in the innermost loop into registers.
8304      */
8305     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8306     STRLEN bpx;         /* length of the data in the target sv
8307                            used to fix pointers after a SvGROW */
8308     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8309                            of data left in the read-ahead buffer.
8310                            If 0 then the pv buffer can hold the full
8311                            amount left, otherwise this is the amount it
8312                            can hold. */
8313
8314 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8315     /* An ungetc()d char is handled separately from the regular
8316      * buffer, so we getc() it back out and stuff it in the buffer.
8317      */
8318     i = PerlIO_getc(fp);
8319     if (i == EOF) return 0;
8320     *(--((*fp)->_ptr)) = (unsigned char) i;
8321     (*fp)->_cnt++;
8322 #endif
8323
8324     /* Here is some breathtakingly efficient cheating */
8325
8326     /* When you read the following logic resist the urge to think
8327      * of record separators that are 1 byte long. They are an
8328      * uninteresting special (simple) case.
8329      *
8330      * Instead think of record separators which are at least 2 bytes
8331      * long, and keep in mind that we need to deal with such
8332      * separators when they cross a read-ahead buffer boundary.
8333      *
8334      * Also consider that we need to gracefully deal with separators
8335      * that may be longer than a single read ahead buffer.
8336      *
8337      * Lastly do not forget we want to copy the delimiter as well. We
8338      * are copying all data in the file _up_to_and_including_ the separator
8339      * itself.
8340      *
8341      * Now that you have all that in mind here is what is happening below:
8342      *
8343      * 1. When we first enter the loop we do some memory book keeping to see
8344      * how much free space there is in the target SV. (This sub assumes that
8345      * it is operating on the same SV most of the time via $_ and that it is
8346      * going to be able to reuse the same pv buffer each call.) If there is
8347      * "enough" room then we set "shortbuffered" to how much space there is
8348      * and start reading forward.
8349      *
8350      * 2. When we scan forward we copy from the read-ahead buffer to the target
8351      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8352      * and the end of the of pv, as well as for the "rslast", which is the last
8353      * char of the separator.
8354      *
8355      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8356      * (which has a "complete" record up to the point we saw rslast) and check
8357      * it to see if it matches the separator. If it does we are done. If it doesn't
8358      * we continue on with the scan/copy.
8359      *
8360      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8361      * the IO system to read the next buffer. We do this by doing a getc(), which
8362      * returns a single char read (or EOF), and prefills the buffer, and also
8363      * allows us to find out how full the buffer is.  We use this information to
8364      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8365      * the returned single char into the target sv, and then go back into scan
8366      * forward mode.
8367      *
8368      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8369      * remaining space in the read-buffer.
8370      *
8371      * Note that this code despite its twisty-turny nature is pretty darn slick.
8372      * It manages single byte separators, multi-byte cross boundary separators,
8373      * and cross-read-buffer separators cleanly and efficiently at the cost
8374      * of potentially greatly overallocating the target SV.
8375      *
8376      * Yves
8377      */
8378
8379
8380     /* get the number of bytes remaining in the read-ahead buffer
8381      * on first call on a given fp this will return 0.*/
8382     cnt = PerlIO_get_cnt(fp);
8383
8384     /* make sure we have the room */
8385     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8386         /* Not room for all of it
8387            if we are looking for a separator and room for some
8388          */
8389         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8390             /* just process what we have room for */
8391             shortbuffered = cnt - SvLEN(sv) + append + 1;
8392             cnt -= shortbuffered;
8393         }
8394         else {
8395             /* ensure that the target sv has enough room to hold
8396              * the rest of the read-ahead buffer */
8397             shortbuffered = 0;
8398             /* remember that cnt can be negative */
8399             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8400         }
8401     }
8402     else {
8403         /* we have enough room to hold the full buffer, lets scream */
8404         shortbuffered = 0;
8405     }
8406
8407     /* extract the pointer to sv's string buffer, offset by append as necessary */
8408     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8409     /* extract the point to the read-ahead buffer */
8410     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8411
8412     /* some trace debug output */
8413     DEBUG_P(PerlIO_printf(Perl_debug_log,
8414         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8415     DEBUG_P(PerlIO_printf(Perl_debug_log,
8416         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8417          UVuf"\n",
8418                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8419                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8420
8421     for (;;) {
8422       screamer:
8423         /* if there is stuff left in the read-ahead buffer */
8424         if (cnt > 0) {
8425             /* if there is a separator */
8426             if (rslen) {
8427                 /* loop until we hit the end of the read-ahead buffer */
8428                 while (cnt > 0) {                    /* this     |  eat */
8429                     /* scan forward copying and searching for rslast as we go */
8430                     cnt--;
8431                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8432                         goto thats_all_folks;        /* screams  |  sed :-) */
8433                 }
8434             }
8435             else {
8436                 /* no separator, slurp the full buffer */
8437                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8438                 bp += cnt;                           /* screams  |  dust */
8439                 ptr += cnt;                          /* louder   |  sed :-) */
8440                 cnt = 0;
8441                 assert (!shortbuffered);
8442                 goto cannot_be_shortbuffered;
8443             }
8444         }
8445         
8446         if (shortbuffered) {            /* oh well, must extend */
8447             /* we didnt have enough room to fit the line into the target buffer
8448              * so we must extend the target buffer and keep going */
8449             cnt = shortbuffered;
8450             shortbuffered = 0;
8451             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8452             SvCUR_set(sv, bpx);
8453             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8454             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8455             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8456             continue;
8457         }
8458
8459     cannot_be_shortbuffered:
8460         /* we need to refill the read-ahead buffer if possible */
8461
8462         DEBUG_P(PerlIO_printf(Perl_debug_log,
8463                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8464                               PTR2UV(ptr),(IV)cnt));
8465         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8466
8467         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8468            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8469             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8470             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8471
8472         /*
8473             call PerlIO_getc() to let it prefill the lookahead buffer
8474
8475             This used to call 'filbuf' in stdio form, but as that behaves like
8476             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8477             another abstraction.
8478
8479             Note we have to deal with the char in 'i' if we are not at EOF
8480         */
8481         i   = PerlIO_getc(fp);          /* get more characters */
8482
8483         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8484            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8485             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8486             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8487
8488         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8489         cnt = PerlIO_get_cnt(fp);
8490         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8491         DEBUG_P(PerlIO_printf(Perl_debug_log,
8492             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8493             PTR2UV(ptr),(IV)cnt));
8494
8495         if (i == EOF)                   /* all done for ever? */
8496             goto thats_really_all_folks;
8497
8498         /* make sure we have enough space in the target sv */
8499         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8500         SvCUR_set(sv, bpx);
8501         SvGROW(sv, bpx + cnt + 2);
8502         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8503
8504         /* copy of the char we got from getc() */
8505         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8506
8507         /* make sure we deal with the i being the last character of a separator */
8508         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8509             goto thats_all_folks;
8510     }
8511
8512 thats_all_folks:
8513     /* check if we have actually found the separator - only really applies
8514      * when rslen > 1 */
8515     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8516           memNE((char*)bp - rslen, rsptr, rslen))
8517         goto screamer;                          /* go back to the fray */
8518 thats_really_all_folks:
8519     if (shortbuffered)
8520         cnt += shortbuffered;
8521         DEBUG_P(PerlIO_printf(Perl_debug_log,
8522              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8523     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8524     DEBUG_P(PerlIO_printf(Perl_debug_log,
8525         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8526         "\n",
8527         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8528         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8529     *bp = '\0';
8530     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8531     DEBUG_P(PerlIO_printf(Perl_debug_log,
8532         "Screamer: done, len=%ld, string=|%.*s|\n",
8533         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8534     }
8535    else
8536     {
8537        /*The big, slow, and stupid way. */
8538 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8539         STDCHAR *buf = NULL;
8540         Newx(buf, 8192, STDCHAR);
8541         assert(buf);
8542 #else
8543         STDCHAR buf[8192];
8544 #endif
8545
8546 screamer2:
8547         if (rslen) {
8548             const STDCHAR * const bpe = buf + sizeof(buf);
8549             bp = buf;
8550             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8551                 ; /* keep reading */
8552             cnt = bp - buf;
8553         }
8554         else {
8555             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8556             /* Accommodate broken VAXC compiler, which applies U8 cast to
8557              * both args of ?: operator, causing EOF to change into 255
8558              */
8559             if (cnt > 0)
8560                  i = (U8)buf[cnt - 1];
8561             else
8562                  i = EOF;
8563         }
8564
8565         if (cnt < 0)
8566             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8567         if (append)
8568             sv_catpvn_nomg(sv, (char *) buf, cnt);
8569         else
8570             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8571
8572         if (i != EOF &&                 /* joy */
8573             (!rslen ||
8574              SvCUR(sv) < rslen ||
8575              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8576         {
8577             append = -1;
8578             /*
8579              * If we're reading from a TTY and we get a short read,
8580              * indicating that the user hit his EOF character, we need
8581              * to notice it now, because if we try to read from the TTY
8582              * again, the EOF condition will disappear.
8583              *
8584              * The comparison of cnt to sizeof(buf) is an optimization
8585              * that prevents unnecessary calls to feof().
8586              *
8587              * - jik 9/25/96
8588              */
8589             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8590                 goto screamer2;
8591         }
8592
8593 #ifdef USE_HEAP_INSTEAD_OF_STACK
8594         Safefree(buf);
8595 #endif
8596     }
8597
8598     if (rspara) {               /* have to do this both before and after */
8599         while (i != EOF) {      /* to make sure file boundaries work right */
8600             i = PerlIO_getc(fp);
8601             if (i != '\n') {
8602                 PerlIO_ungetc(fp,i);
8603                 break;
8604             }
8605         }
8606     }
8607
8608     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8609 }
8610
8611 /*
8612 =for apidoc sv_inc
8613
8614 Auto-increment of the value in the SV, doing string to numeric conversion
8615 if necessary.  Handles 'get' magic and operator overloading.
8616
8617 =cut
8618 */
8619
8620 void
8621 Perl_sv_inc(pTHX_ SV *const sv)
8622 {
8623     if (!sv)
8624         return;
8625     SvGETMAGIC(sv);
8626     sv_inc_nomg(sv);
8627 }
8628
8629 /*
8630 =for apidoc sv_inc_nomg
8631
8632 Auto-increment of the value in the SV, doing string to numeric conversion
8633 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8634
8635 =cut
8636 */
8637
8638 void
8639 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8640 {
8641     char *d;
8642     int flags;
8643
8644     if (!sv)
8645         return;
8646     if (SvTHINKFIRST(sv)) {
8647         if (SvREADONLY(sv)) {
8648                 Perl_croak_no_modify();
8649         }
8650         if (SvROK(sv)) {
8651             IV i;
8652             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8653                 return;
8654             i = PTR2IV(SvRV(sv));
8655             sv_unref(sv);
8656             sv_setiv(sv, i);
8657         }
8658         else sv_force_normal_flags(sv, 0);
8659     }
8660     flags = SvFLAGS(sv);
8661     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8662         /* It's (privately or publicly) a float, but not tested as an
8663            integer, so test it to see. */
8664         (void) SvIV(sv);
8665         flags = SvFLAGS(sv);
8666     }
8667     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8668         /* It's publicly an integer, or privately an integer-not-float */
8669 #ifdef PERL_PRESERVE_IVUV
8670       oops_its_int:
8671 #endif
8672         if (SvIsUV(sv)) {
8673             if (SvUVX(sv) == UV_MAX)
8674                 sv_setnv(sv, UV_MAX_P1);
8675             else
8676                 (void)SvIOK_only_UV(sv);
8677                 SvUV_set(sv, SvUVX(sv) + 1);
8678         } else {
8679             if (SvIVX(sv) == IV_MAX)
8680                 sv_setuv(sv, (UV)IV_MAX + 1);
8681             else {
8682                 (void)SvIOK_only(sv);
8683                 SvIV_set(sv, SvIVX(sv) + 1);
8684             }   
8685         }
8686         return;
8687     }
8688     if (flags & SVp_NOK) {
8689         const NV was = SvNVX(sv);
8690         if (LIKELY(!Perl_isinfnan(was)) &&
8691             NV_OVERFLOWS_INTEGERS_AT &&
8692             was >= NV_OVERFLOWS_INTEGERS_AT) {
8693             /* diag_listed_as: Lost precision when %s %f by 1 */
8694             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8695                            "Lost precision when incrementing %" NVff " by 1",
8696                            was);
8697         }
8698         (void)SvNOK_only(sv);
8699         SvNV_set(sv, was + 1.0);
8700         return;
8701     }
8702
8703     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8704         if ((flags & SVTYPEMASK) < SVt_PVIV)
8705             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8706         (void)SvIOK_only(sv);
8707         SvIV_set(sv, 1);
8708         return;
8709     }
8710     d = SvPVX(sv);
8711     while (isALPHA(*d)) d++;
8712     while (isDIGIT(*d)) d++;
8713     if (d < SvEND(sv)) {
8714         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8715 #ifdef PERL_PRESERVE_IVUV
8716         /* Got to punt this as an integer if needs be, but we don't issue
8717            warnings. Probably ought to make the sv_iv_please() that does
8718            the conversion if possible, and silently.  */
8719         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8720             /* Need to try really hard to see if it's an integer.
8721                9.22337203685478e+18 is an integer.
8722                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8723                so $a="9.22337203685478e+18"; $a+0; $a++
8724                needs to be the same as $a="9.22337203685478e+18"; $a++
8725                or we go insane. */
8726         
8727             (void) sv_2iv(sv);
8728             if (SvIOK(sv))
8729                 goto oops_its_int;
8730
8731             /* sv_2iv *should* have made this an NV */
8732             if (flags & SVp_NOK) {
8733                 (void)SvNOK_only(sv);
8734                 SvNV_set(sv, SvNVX(sv) + 1.0);
8735                 return;
8736             }
8737             /* I don't think we can get here. Maybe I should assert this
8738                And if we do get here I suspect that sv_setnv will croak. NWC
8739                Fall through. */
8740             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8741                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8742         }
8743 #endif /* PERL_PRESERVE_IVUV */
8744         if (!numtype && ckWARN(WARN_NUMERIC))
8745             not_incrementable(sv);
8746         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8747         return;
8748     }
8749     d--;
8750     while (d >= SvPVX_const(sv)) {
8751         if (isDIGIT(*d)) {
8752             if (++*d <= '9')
8753                 return;
8754             *(d--) = '0';
8755         }
8756         else {
8757 #ifdef EBCDIC
8758             /* MKS: The original code here died if letters weren't consecutive.
8759              * at least it didn't have to worry about non-C locales.  The
8760              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8761              * arranged in order (although not consecutively) and that only
8762              * [A-Za-z] are accepted by isALPHA in the C locale.
8763              */
8764             if (isALPHA_FOLD_NE(*d, 'z')) {
8765                 do { ++*d; } while (!isALPHA(*d));
8766                 return;
8767             }
8768             *(d--) -= 'z' - 'a';
8769 #else
8770             ++*d;
8771             if (isALPHA(*d))
8772                 return;
8773             *(d--) -= 'z' - 'a' + 1;
8774 #endif
8775         }
8776     }
8777     /* oh,oh, the number grew */
8778     SvGROW(sv, SvCUR(sv) + 2);
8779     SvCUR_set(sv, SvCUR(sv) + 1);
8780     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8781         *d = d[-1];
8782     if (isDIGIT(d[1]))
8783         *d = '1';
8784     else
8785         *d = d[1];
8786 }
8787
8788 /*
8789 =for apidoc sv_dec
8790
8791 Auto-decrement of the value in the SV, doing string to numeric conversion
8792 if necessary.  Handles 'get' magic and operator overloading.
8793
8794 =cut
8795 */
8796
8797 void
8798 Perl_sv_dec(pTHX_ SV *const sv)
8799 {
8800     if (!sv)
8801         return;
8802     SvGETMAGIC(sv);
8803     sv_dec_nomg(sv);
8804 }
8805
8806 /*
8807 =for apidoc sv_dec_nomg
8808
8809 Auto-decrement of the value in the SV, doing string to numeric conversion
8810 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8811
8812 =cut
8813 */
8814
8815 void
8816 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8817 {
8818     int flags;
8819
8820     if (!sv)
8821         return;
8822     if (SvTHINKFIRST(sv)) {
8823         if (SvREADONLY(sv)) {
8824                 Perl_croak_no_modify();
8825         }
8826         if (SvROK(sv)) {
8827             IV i;
8828             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8829                 return;
8830             i = PTR2IV(SvRV(sv));
8831             sv_unref(sv);
8832             sv_setiv(sv, i);
8833         }
8834         else sv_force_normal_flags(sv, 0);
8835     }
8836     /* Unlike sv_inc we don't have to worry about string-never-numbers
8837        and keeping them magic. But we mustn't warn on punting */
8838     flags = SvFLAGS(sv);
8839     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8840         /* It's publicly an integer, or privately an integer-not-float */
8841 #ifdef PERL_PRESERVE_IVUV
8842       oops_its_int:
8843 #endif
8844         if (SvIsUV(sv)) {
8845             if (SvUVX(sv) == 0) {
8846                 (void)SvIOK_only(sv);
8847                 SvIV_set(sv, -1);
8848             }
8849             else {
8850                 (void)SvIOK_only_UV(sv);
8851                 SvUV_set(sv, SvUVX(sv) - 1);
8852             }   
8853         } else {
8854             if (SvIVX(sv) == IV_MIN) {
8855                 sv_setnv(sv, (NV)IV_MIN);
8856                 goto oops_its_num;
8857             }
8858             else {
8859                 (void)SvIOK_only(sv);
8860                 SvIV_set(sv, SvIVX(sv) - 1);
8861             }   
8862         }
8863         return;
8864     }
8865     if (flags & SVp_NOK) {
8866     oops_its_num:
8867         {
8868             const NV was = SvNVX(sv);
8869             if (LIKELY(!Perl_isinfnan(was)) &&
8870                 NV_OVERFLOWS_INTEGERS_AT &&
8871                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8872                 /* diag_listed_as: Lost precision when %s %f by 1 */
8873                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8874                                "Lost precision when decrementing %" NVff " by 1",
8875                                was);
8876             }
8877             (void)SvNOK_only(sv);
8878             SvNV_set(sv, was - 1.0);
8879             return;
8880         }
8881     }
8882     if (!(flags & SVp_POK)) {
8883         if ((flags & SVTYPEMASK) < SVt_PVIV)
8884             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8885         SvIV_set(sv, -1);
8886         (void)SvIOK_only(sv);
8887         return;
8888     }
8889 #ifdef PERL_PRESERVE_IVUV
8890     {
8891         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8892         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8893             /* Need to try really hard to see if it's an integer.
8894                9.22337203685478e+18 is an integer.
8895                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8896                so $a="9.22337203685478e+18"; $a+0; $a--
8897                needs to be the same as $a="9.22337203685478e+18"; $a--
8898                or we go insane. */
8899         
8900             (void) sv_2iv(sv);
8901             if (SvIOK(sv))
8902                 goto oops_its_int;
8903
8904             /* sv_2iv *should* have made this an NV */
8905             if (flags & SVp_NOK) {
8906                 (void)SvNOK_only(sv);
8907                 SvNV_set(sv, SvNVX(sv) - 1.0);
8908                 return;
8909             }
8910             /* I don't think we can get here. Maybe I should assert this
8911                And if we do get here I suspect that sv_setnv will croak. NWC
8912                Fall through. */
8913             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8914                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8915         }
8916     }
8917 #endif /* PERL_PRESERVE_IVUV */
8918     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8919 }
8920
8921 /* this define is used to eliminate a chunk of duplicated but shared logic
8922  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8923  * used anywhere but here - yves
8924  */
8925 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8926     STMT_START {      \
8927         SSize_t ix = ++PL_tmps_ix;              \
8928         if (UNLIKELY(ix >= PL_tmps_max))        \
8929             ix = tmps_grow_p(ix);                       \
8930         PL_tmps_stack[ix] = (AnSv); \
8931     } STMT_END
8932
8933 /*
8934 =for apidoc sv_mortalcopy
8935
8936 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8937 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8938 explicit call to FREETMPS, or by an implicit call at places such as
8939 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8940
8941 =cut
8942 */
8943
8944 /* Make a string that will exist for the duration of the expression
8945  * evaluation.  Actually, it may have to last longer than that, but
8946  * hopefully we won't free it until it has been assigned to a
8947  * permanent location. */
8948
8949 SV *
8950 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8951 {
8952     SV *sv;
8953
8954     if (flags & SV_GMAGIC)
8955         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8956     new_SV(sv);
8957     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8958     PUSH_EXTEND_MORTAL__SV_C(sv);
8959     SvTEMP_on(sv);
8960     return sv;
8961 }
8962
8963 /*
8964 =for apidoc sv_newmortal
8965
8966 Creates a new null SV which is mortal.  The reference count of the SV is
8967 set to 1.  It will be destroyed "soon", either by an explicit call to
8968 FREETMPS, or by an implicit call at places such as statement boundaries.
8969 See also C<sv_mortalcopy> and C<sv_2mortal>.
8970
8971 =cut
8972 */
8973
8974 SV *
8975 Perl_sv_newmortal(pTHX)
8976 {
8977     SV *sv;
8978
8979     new_SV(sv);
8980     SvFLAGS(sv) = SVs_TEMP;
8981     PUSH_EXTEND_MORTAL__SV_C(sv);
8982     return sv;
8983 }
8984
8985
8986 /*
8987 =for apidoc newSVpvn_flags
8988
8989 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8990 characters) into it.  The reference count for the
8991 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8992 string.  You are responsible for ensuring that the source string is at least
8993 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8994 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8995 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8996 returning.  If C<SVf_UTF8> is set, C<s>
8997 is considered to be in UTF-8 and the
8998 C<SVf_UTF8> flag will be set on the new SV.
8999 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9000
9001     #define newSVpvn_utf8(s, len, u)                    \
9002         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9003
9004 =cut
9005 */
9006
9007 SV *
9008 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9009 {
9010     SV *sv;
9011
9012     /* All the flags we don't support must be zero.
9013        And we're new code so I'm going to assert this from the start.  */
9014     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9015     new_SV(sv);
9016     sv_setpvn(sv,s,len);
9017
9018     /* This code used to do a sv_2mortal(), however we now unroll the call to
9019      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9020      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9021      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9022      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9023      * means that we eliminate quite a few steps than it looks - Yves
9024      * (explaining patch by gfx) */
9025
9026     SvFLAGS(sv) |= flags;
9027
9028     if(flags & SVs_TEMP){
9029         PUSH_EXTEND_MORTAL__SV_C(sv);
9030     }
9031
9032     return sv;
9033 }
9034
9035 /*
9036 =for apidoc sv_2mortal
9037
9038 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9039 by an explicit call to FREETMPS, or by an implicit call at places such as
9040 statement boundaries.  SvTEMP() is turned on which means that the SV's
9041 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
9042 and C<sv_mortalcopy>.
9043
9044 =cut
9045 */
9046
9047 SV *
9048 Perl_sv_2mortal(pTHX_ SV *const sv)
9049 {
9050     dVAR;
9051     if (!sv)
9052         return sv;
9053     if (SvIMMORTAL(sv))
9054         return sv;
9055     PUSH_EXTEND_MORTAL__SV_C(sv);
9056     SvTEMP_on(sv);
9057     return sv;
9058 }
9059
9060 /*
9061 =for apidoc newSVpv
9062
9063 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9064 characters) into it.  The reference count for the
9065 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9066 strlen(), (which means if you use this option, that C<s> can't have embedded
9067 C<NUL> characters and has to have a terminating C<NUL> byte).
9068
9069 For efficiency, consider using C<newSVpvn> instead.
9070
9071 =cut
9072 */
9073
9074 SV *
9075 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9076 {
9077     SV *sv;
9078
9079     new_SV(sv);
9080     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9081     return sv;
9082 }
9083
9084 /*
9085 =for apidoc newSVpvn
9086
9087 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9088 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9089 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9090 are responsible for ensuring that the source buffer is at least
9091 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9092 undefined.
9093
9094 =cut
9095 */
9096
9097 SV *
9098 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9099 {
9100     SV *sv;
9101     new_SV(sv);
9102     sv_setpvn(sv,buffer,len);
9103     return sv;
9104 }
9105
9106 /*
9107 =for apidoc newSVhek
9108
9109 Creates a new SV from the hash key structure.  It will generate scalars that
9110 point to the shared string table where possible.  Returns a new (undefined)
9111 SV if the hek is NULL.
9112
9113 =cut
9114 */
9115
9116 SV *
9117 Perl_newSVhek(pTHX_ const HEK *const hek)
9118 {
9119     if (!hek) {
9120         SV *sv;
9121
9122         new_SV(sv);
9123         return sv;
9124     }
9125
9126     if (HEK_LEN(hek) == HEf_SVKEY) {
9127         return newSVsv(*(SV**)HEK_KEY(hek));
9128     } else {
9129         const int flags = HEK_FLAGS(hek);
9130         if (flags & HVhek_WASUTF8) {
9131             /* Trouble :-)
9132                Andreas would like keys he put in as utf8 to come back as utf8
9133             */
9134             STRLEN utf8_len = HEK_LEN(hek);
9135             SV * const sv = newSV_type(SVt_PV);
9136             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9137             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9138             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9139             SvUTF8_on (sv);
9140             return sv;
9141         } else if (flags & HVhek_UNSHARED) {
9142             /* A hash that isn't using shared hash keys has to have
9143                the flag in every key so that we know not to try to call
9144                share_hek_hek on it.  */
9145
9146             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9147             if (HEK_UTF8(hek))
9148                 SvUTF8_on (sv);
9149             return sv;
9150         }
9151         /* This will be overwhelminly the most common case.  */
9152         {
9153             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9154                more efficient than sharepvn().  */
9155             SV *sv;
9156
9157             new_SV(sv);
9158             sv_upgrade(sv, SVt_PV);
9159             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9160             SvCUR_set(sv, HEK_LEN(hek));
9161             SvLEN_set(sv, 0);
9162             SvIsCOW_on(sv);
9163             SvPOK_on(sv);
9164             if (HEK_UTF8(hek))
9165                 SvUTF8_on(sv);
9166             return sv;
9167         }
9168     }
9169 }
9170
9171 /*
9172 =for apidoc newSVpvn_share
9173
9174 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9175 table.  If the string does not already exist in the table, it is
9176 created first.  Turns on the SvIsCOW flag (or READONLY
9177 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9178 is non-zero, that value is used; otherwise the hash is computed.
9179 The string's hash can later be retrieved from the SV
9180 with the C<SvSHARED_HASH()> macro.  The idea here is
9181 that as the string table is used for shared hash keys these strings will have
9182 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9183
9184 =cut
9185 */
9186
9187 SV *
9188 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9189 {
9190     dVAR;
9191     SV *sv;
9192     bool is_utf8 = FALSE;
9193     const char *const orig_src = src;
9194
9195     if (len < 0) {
9196         STRLEN tmplen = -len;
9197         is_utf8 = TRUE;
9198         /* See the note in hv.c:hv_fetch() --jhi */
9199         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9200         len = tmplen;
9201     }
9202     if (!hash)
9203         PERL_HASH(hash, src, len);
9204     new_SV(sv);
9205     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9206        changes here, update it there too.  */
9207     sv_upgrade(sv, SVt_PV);
9208     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9209     SvCUR_set(sv, len);
9210     SvLEN_set(sv, 0);
9211     SvIsCOW_on(sv);
9212     SvPOK_on(sv);
9213     if (is_utf8)
9214         SvUTF8_on(sv);
9215     if (src != orig_src)
9216         Safefree(src);
9217     return sv;
9218 }
9219
9220 /*
9221 =for apidoc newSVpv_share
9222
9223 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9224 string/length pair.
9225
9226 =cut
9227 */
9228
9229 SV *
9230 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9231 {
9232     return newSVpvn_share(src, strlen(src), hash);
9233 }
9234
9235 #if defined(PERL_IMPLICIT_CONTEXT)
9236
9237 /* pTHX_ magic can't cope with varargs, so this is a no-context
9238  * version of the main function, (which may itself be aliased to us).
9239  * Don't access this version directly.
9240  */
9241
9242 SV *
9243 Perl_newSVpvf_nocontext(const char *const pat, ...)
9244 {
9245     dTHX;
9246     SV *sv;
9247     va_list args;
9248
9249     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9250
9251     va_start(args, pat);
9252     sv = vnewSVpvf(pat, &args);
9253     va_end(args);
9254     return sv;
9255 }
9256 #endif
9257
9258 /*
9259 =for apidoc newSVpvf
9260
9261 Creates a new SV and initializes it with the string formatted like
9262 C<sprintf>.
9263
9264 =cut
9265 */
9266
9267 SV *
9268 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9269 {
9270     SV *sv;
9271     va_list args;
9272
9273     PERL_ARGS_ASSERT_NEWSVPVF;
9274
9275     va_start(args, pat);
9276     sv = vnewSVpvf(pat, &args);
9277     va_end(args);
9278     return sv;
9279 }
9280
9281 /* backend for newSVpvf() and newSVpvf_nocontext() */
9282
9283 SV *
9284 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9285 {
9286     SV *sv;
9287
9288     PERL_ARGS_ASSERT_VNEWSVPVF;
9289
9290     new_SV(sv);
9291     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9292     return sv;
9293 }
9294
9295 /*
9296 =for apidoc newSVnv
9297
9298 Creates a new SV and copies a floating point value into it.
9299 The reference count for the SV is set to 1.
9300
9301 =cut
9302 */
9303
9304 SV *
9305 Perl_newSVnv(pTHX_ const NV n)
9306 {
9307     SV *sv;
9308
9309     new_SV(sv);
9310     sv_setnv(sv,n);
9311     return sv;
9312 }
9313
9314 /*
9315 =for apidoc newSViv
9316
9317 Creates a new SV and copies an integer into it.  The reference count for the
9318 SV is set to 1.
9319
9320 =cut
9321 */
9322
9323 SV *
9324 Perl_newSViv(pTHX_ const IV i)
9325 {
9326     SV *sv;
9327
9328     new_SV(sv);
9329     sv_setiv(sv,i);
9330     return sv;
9331 }
9332
9333 /*
9334 =for apidoc newSVuv
9335
9336 Creates a new SV and copies an unsigned integer into it.
9337 The reference count for the SV is set to 1.
9338
9339 =cut
9340 */
9341
9342 SV *
9343 Perl_newSVuv(pTHX_ const UV u)
9344 {
9345     SV *sv;
9346
9347     new_SV(sv);
9348     sv_setuv(sv,u);
9349     return sv;
9350 }
9351
9352 /*
9353 =for apidoc newSV_type
9354
9355 Creates a new SV, of the type specified.  The reference count for the new SV
9356 is set to 1.
9357
9358 =cut
9359 */
9360
9361 SV *
9362 Perl_newSV_type(pTHX_ const svtype type)
9363 {
9364     SV *sv;
9365
9366     new_SV(sv);
9367     ASSUME(SvTYPE(sv) == SVt_FIRST);
9368     if(type != SVt_FIRST)
9369         sv_upgrade(sv, type);
9370     return sv;
9371 }
9372
9373 /*
9374 =for apidoc newRV_noinc
9375
9376 Creates an RV wrapper for an SV.  The reference count for the original
9377 SV is B<not> incremented.
9378
9379 =cut
9380 */
9381
9382 SV *
9383 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9384 {
9385     SV *sv = newSV_type(SVt_IV);
9386
9387     PERL_ARGS_ASSERT_NEWRV_NOINC;
9388
9389     SvTEMP_off(tmpRef);
9390     SvRV_set(sv, tmpRef);
9391     SvROK_on(sv);
9392     return sv;
9393 }
9394
9395 /* newRV_inc is the official function name to use now.
9396  * newRV_inc is in fact #defined to newRV in sv.h
9397  */
9398
9399 SV *
9400 Perl_newRV(pTHX_ SV *const sv)
9401 {
9402     PERL_ARGS_ASSERT_NEWRV;
9403
9404     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9405 }
9406
9407 /*
9408 =for apidoc newSVsv
9409
9410 Creates a new SV which is an exact duplicate of the original SV.
9411 (Uses C<sv_setsv>.)
9412
9413 =cut
9414 */
9415
9416 SV *
9417 Perl_newSVsv(pTHX_ SV *const old)
9418 {
9419     SV *sv;
9420
9421     if (!old)
9422         return NULL;
9423     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9424         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9425         return NULL;
9426     }
9427     /* Do this here, otherwise we leak the new SV if this croaks. */
9428     SvGETMAGIC(old);
9429     new_SV(sv);
9430     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9431        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9432     sv_setsv_flags(sv, old, SV_NOSTEAL);
9433     return sv;
9434 }
9435
9436 /*
9437 =for apidoc sv_reset
9438
9439 Underlying implementation for the C<reset> Perl function.
9440 Note that the perl-level function is vaguely deprecated.
9441
9442 =cut
9443 */
9444
9445 void
9446 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9447 {
9448     PERL_ARGS_ASSERT_SV_RESET;
9449
9450     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9451 }
9452
9453 void
9454 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9455 {
9456     char todo[PERL_UCHAR_MAX+1];
9457     const char *send;
9458
9459     if (!stash || SvTYPE(stash) != SVt_PVHV)
9460         return;
9461
9462     if (!s) {           /* reset ?? searches */
9463         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9464         if (mg) {
9465             const U32 count = mg->mg_len / sizeof(PMOP**);
9466             PMOP **pmp = (PMOP**) mg->mg_ptr;
9467             PMOP *const *const end = pmp + count;
9468
9469             while (pmp < end) {
9470 #ifdef USE_ITHREADS
9471                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9472 #else
9473                 (*pmp)->op_pmflags &= ~PMf_USED;
9474 #endif
9475                 ++pmp;
9476             }
9477         }
9478         return;
9479     }
9480
9481     /* reset variables */
9482
9483     if (!HvARRAY(stash))
9484         return;
9485
9486     Zero(todo, 256, char);
9487     send = s + len;
9488     while (s < send) {
9489         I32 max;
9490         I32 i = (unsigned char)*s;
9491         if (s[1] == '-') {
9492             s += 2;
9493         }
9494         max = (unsigned char)*s++;
9495         for ( ; i <= max; i++) {
9496             todo[i] = 1;
9497         }
9498         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9499             HE *entry;
9500             for (entry = HvARRAY(stash)[i];
9501                  entry;
9502                  entry = HeNEXT(entry))
9503             {
9504                 GV *gv;
9505                 SV *sv;
9506
9507                 if (!todo[(U8)*HeKEY(entry)])
9508                     continue;
9509                 gv = MUTABLE_GV(HeVAL(entry));
9510                 sv = GvSV(gv);
9511                 if (sv && !SvREADONLY(sv)) {
9512                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9513                     if (!isGV(sv)) SvOK_off(sv);
9514                 }
9515                 if (GvAV(gv)) {
9516                     av_clear(GvAV(gv));
9517                 }
9518                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9519                     hv_clear(GvHV(gv));
9520                 }
9521             }
9522         }
9523     }
9524 }
9525
9526 /*
9527 =for apidoc sv_2io
9528
9529 Using various gambits, try to get an IO from an SV: the IO slot if its a
9530 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9531 named after the PV if we're a string.
9532
9533 'Get' magic is ignored on the sv passed in, but will be called on
9534 C<SvRV(sv)> if sv is an RV.
9535
9536 =cut
9537 */
9538
9539 IO*
9540 Perl_sv_2io(pTHX_ SV *const sv)
9541 {
9542     IO* io;
9543     GV* gv;
9544
9545     PERL_ARGS_ASSERT_SV_2IO;
9546
9547     switch (SvTYPE(sv)) {
9548     case SVt_PVIO:
9549         io = MUTABLE_IO(sv);
9550         break;
9551     case SVt_PVGV:
9552     case SVt_PVLV:
9553         if (isGV_with_GP(sv)) {
9554             gv = MUTABLE_GV(sv);
9555             io = GvIO(gv);
9556             if (!io)
9557                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9558                                     HEKfARG(GvNAME_HEK(gv)));
9559             break;
9560         }
9561         /* FALLTHROUGH */
9562     default:
9563         if (!SvOK(sv))
9564             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9565         if (SvROK(sv)) {
9566             SvGETMAGIC(SvRV(sv));
9567             return sv_2io(SvRV(sv));
9568         }
9569         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9570         if (gv)
9571             io = GvIO(gv);
9572         else
9573             io = 0;
9574         if (!io) {
9575             SV *newsv = sv;
9576             if (SvGMAGICAL(sv)) {
9577                 newsv = sv_newmortal();
9578                 sv_setsv_nomg(newsv, sv);
9579             }
9580             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9581         }
9582         break;
9583     }
9584     return io;
9585 }
9586
9587 /*
9588 =for apidoc sv_2cv
9589
9590 Using various gambits, try to get a CV from an SV; in addition, try if
9591 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9592 The flags in C<lref> are passed to gv_fetchsv.
9593
9594 =cut
9595 */
9596
9597 CV *
9598 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9599 {
9600     GV *gv = NULL;
9601     CV *cv = NULL;
9602
9603     PERL_ARGS_ASSERT_SV_2CV;
9604
9605     if (!sv) {
9606         *st = NULL;
9607         *gvp = NULL;
9608         return NULL;
9609     }
9610     switch (SvTYPE(sv)) {
9611     case SVt_PVCV:
9612         *st = CvSTASH(sv);
9613         *gvp = NULL;
9614         return MUTABLE_CV(sv);
9615     case SVt_PVHV:
9616     case SVt_PVAV:
9617         *st = NULL;
9618         *gvp = NULL;
9619         return NULL;
9620     default:
9621         SvGETMAGIC(sv);
9622         if (SvROK(sv)) {
9623             if (SvAMAGIC(sv))
9624                 sv = amagic_deref_call(sv, to_cv_amg);
9625
9626             sv = SvRV(sv);
9627             if (SvTYPE(sv) == SVt_PVCV) {
9628                 cv = MUTABLE_CV(sv);
9629                 *gvp = NULL;
9630                 *st = CvSTASH(cv);
9631                 return cv;
9632             }
9633             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9634                 gv = MUTABLE_GV(sv);
9635             else
9636                 Perl_croak(aTHX_ "Not a subroutine reference");
9637         }
9638         else if (isGV_with_GP(sv)) {
9639             gv = MUTABLE_GV(sv);
9640         }
9641         else {
9642             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9643         }
9644         *gvp = gv;
9645         if (!gv) {
9646             *st = NULL;
9647             return NULL;
9648         }
9649         /* Some flags to gv_fetchsv mean don't really create the GV  */
9650         if (!isGV_with_GP(gv)) {
9651             *st = NULL;
9652             return NULL;
9653         }
9654         *st = GvESTASH(gv);
9655         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9656             /* XXX this is probably not what they think they're getting.
9657              * It has the same effect as "sub name;", i.e. just a forward
9658              * declaration! */
9659             newSTUB(gv,0);
9660         }
9661         return GvCVu(gv);
9662     }
9663 }
9664
9665 /*
9666 =for apidoc sv_true
9667
9668 Returns true if the SV has a true value by Perl's rules.
9669 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9670 instead use an in-line version.
9671
9672 =cut
9673 */
9674
9675 I32
9676 Perl_sv_true(pTHX_ SV *const sv)
9677 {
9678     if (!sv)
9679         return 0;
9680     if (SvPOK(sv)) {
9681         const XPV* const tXpv = (XPV*)SvANY(sv);
9682         if (tXpv &&
9683                 (tXpv->xpv_cur > 1 ||
9684                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9685             return 1;
9686         else
9687             return 0;
9688     }
9689     else {
9690         if (SvIOK(sv))
9691             return SvIVX(sv) != 0;
9692         else {
9693             if (SvNOK(sv))
9694                 return SvNVX(sv) != 0.0;
9695             else
9696                 return sv_2bool(sv);
9697         }
9698     }
9699 }
9700
9701 /*
9702 =for apidoc sv_pvn_force
9703
9704 Get a sensible string out of the SV somehow.
9705 A private implementation of the C<SvPV_force> macro for compilers which
9706 can't cope with complex macro expressions.  Always use the macro instead.
9707
9708 =for apidoc sv_pvn_force_flags
9709
9710 Get a sensible string out of the SV somehow.
9711 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9712 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9713 implemented in terms of this function.
9714 You normally want to use the various wrapper macros instead: see
9715 C<SvPV_force> and C<SvPV_force_nomg>
9716
9717 =cut
9718 */
9719
9720 char *
9721 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9722 {
9723     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9724
9725     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9726     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9727         sv_force_normal_flags(sv, 0);
9728
9729     if (SvPOK(sv)) {
9730         if (lp)
9731             *lp = SvCUR(sv);
9732     }
9733     else {
9734         char *s;
9735         STRLEN len;
9736  
9737         if (SvTYPE(sv) > SVt_PVLV
9738             || isGV_with_GP(sv))
9739             /* diag_listed_as: Can't coerce %s to %s in %s */
9740             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9741                 OP_DESC(PL_op));
9742         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9743         if (!s) {
9744           s = (char *)"";
9745         }
9746         if (lp)
9747             *lp = len;
9748
9749         if (SvTYPE(sv) < SVt_PV ||
9750             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9751             if (SvROK(sv))
9752                 sv_unref(sv);
9753             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9754             SvGROW(sv, len + 1);
9755             Move(s,SvPVX(sv),len,char);
9756             SvCUR_set(sv, len);
9757             SvPVX(sv)[len] = '\0';
9758         }
9759         if (!SvPOK(sv)) {
9760             SvPOK_on(sv);               /* validate pointer */
9761             SvTAINT(sv);
9762             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9763                                   PTR2UV(sv),SvPVX_const(sv)));
9764         }
9765     }
9766     (void)SvPOK_only_UTF8(sv);
9767     return SvPVX_mutable(sv);
9768 }
9769
9770 /*
9771 =for apidoc sv_pvbyten_force
9772
9773 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9774 instead.
9775
9776 =cut
9777 */
9778
9779 char *
9780 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9781 {
9782     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9783
9784     sv_pvn_force(sv,lp);
9785     sv_utf8_downgrade(sv,0);
9786     *lp = SvCUR(sv);
9787     return SvPVX(sv);
9788 }
9789
9790 /*
9791 =for apidoc sv_pvutf8n_force
9792
9793 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9794 instead.
9795
9796 =cut
9797 */
9798
9799 char *
9800 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9801 {
9802     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9803
9804     sv_pvn_force(sv,0);
9805     sv_utf8_upgrade_nomg(sv);
9806     *lp = SvCUR(sv);
9807     return SvPVX(sv);
9808 }
9809
9810 /*
9811 =for apidoc sv_reftype
9812
9813 Returns a string describing what the SV is a reference to.
9814
9815 =cut
9816 */
9817
9818 const char *
9819 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9820 {
9821     PERL_ARGS_ASSERT_SV_REFTYPE;
9822     if (ob && SvOBJECT(sv)) {
9823         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9824     }
9825     else {
9826         /* WARNING - There is code, for instance in mg.c, that assumes that
9827          * the only reason that sv_reftype(sv,0) would return a string starting
9828          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9829          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9830          * this routine inside other subs, and it saves time.
9831          * Do not change this assumption without searching for "dodgy type check" in
9832          * the code.
9833          * - Yves */
9834         switch (SvTYPE(sv)) {
9835         case SVt_NULL:
9836         case SVt_IV:
9837         case SVt_NV:
9838         case SVt_PV:
9839         case SVt_PVIV:
9840         case SVt_PVNV:
9841         case SVt_PVMG:
9842                                 if (SvVOK(sv))
9843                                     return "VSTRING";
9844                                 if (SvROK(sv))
9845                                     return "REF";
9846                                 else
9847                                     return "SCALAR";
9848
9849         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9850                                 /* tied lvalues should appear to be
9851                                  * scalars for backwards compatibility */
9852                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9853                                     ? "SCALAR" : "LVALUE");
9854         case SVt_PVAV:          return "ARRAY";
9855         case SVt_PVHV:          return "HASH";
9856         case SVt_PVCV:          return "CODE";
9857         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9858                                     ? "GLOB" : "SCALAR");
9859         case SVt_PVFM:          return "FORMAT";
9860         case SVt_PVIO:          return "IO";
9861         case SVt_INVLIST:       return "INVLIST";
9862         case SVt_REGEXP:        return "REGEXP";
9863         default:                return "UNKNOWN";
9864         }
9865     }
9866 }
9867
9868 /*
9869 =for apidoc sv_ref
9870
9871 Returns a SV describing what the SV passed in is a reference to.
9872
9873 =cut
9874 */
9875
9876 SV *
9877 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9878 {
9879     PERL_ARGS_ASSERT_SV_REF;
9880
9881     if (!dst)
9882         dst = sv_newmortal();
9883
9884     if (ob && SvOBJECT(sv)) {
9885         HvNAME_get(SvSTASH(sv))
9886                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9887                     : sv_setpvn(dst, "__ANON__", 8);
9888     }
9889     else {
9890         const char * reftype = sv_reftype(sv, 0);
9891         sv_setpv(dst, reftype);
9892     }
9893     return dst;
9894 }
9895
9896 /*
9897 =for apidoc sv_isobject
9898
9899 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9900 object.  If the SV is not an RV, or if the object is not blessed, then this
9901 will return false.
9902
9903 =cut
9904 */
9905
9906 int
9907 Perl_sv_isobject(pTHX_ SV *sv)
9908 {
9909     if (!sv)
9910         return 0;
9911     SvGETMAGIC(sv);
9912     if (!SvROK(sv))
9913         return 0;
9914     sv = SvRV(sv);
9915     if (!SvOBJECT(sv))
9916         return 0;
9917     return 1;
9918 }
9919
9920 /*
9921 =for apidoc sv_isa
9922
9923 Returns a boolean indicating whether the SV is blessed into the specified
9924 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9925 an inheritance relationship.
9926
9927 =cut
9928 */
9929
9930 int
9931 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9932 {
9933     const char *hvname;
9934
9935     PERL_ARGS_ASSERT_SV_ISA;
9936
9937     if (!sv)
9938         return 0;
9939     SvGETMAGIC(sv);
9940     if (!SvROK(sv))
9941         return 0;
9942     sv = SvRV(sv);
9943     if (!SvOBJECT(sv))
9944         return 0;
9945     hvname = HvNAME_get(SvSTASH(sv));
9946     if (!hvname)
9947         return 0;
9948
9949     return strEQ(hvname, name);
9950 }
9951
9952 /*
9953 =for apidoc newSVrv
9954
9955 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9956 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9957 SV will be blessed in the specified package.  The new SV is returned and its
9958 reference count is 1.  The reference count 1 is owned by C<rv>.
9959
9960 =cut
9961 */
9962
9963 SV*
9964 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9965 {
9966     SV *sv;
9967
9968     PERL_ARGS_ASSERT_NEWSVRV;
9969
9970     new_SV(sv);
9971
9972     SV_CHECK_THINKFIRST_COW_DROP(rv);
9973
9974     if (SvTYPE(rv) >= SVt_PVMG) {
9975         const U32 refcnt = SvREFCNT(rv);
9976         SvREFCNT(rv) = 0;
9977         sv_clear(rv);
9978         SvFLAGS(rv) = 0;
9979         SvREFCNT(rv) = refcnt;
9980
9981         sv_upgrade(rv, SVt_IV);
9982     } else if (SvROK(rv)) {
9983         SvREFCNT_dec(SvRV(rv));
9984     } else {
9985         prepare_SV_for_RV(rv);
9986     }
9987
9988     SvOK_off(rv);
9989     SvRV_set(rv, sv);
9990     SvROK_on(rv);
9991
9992     if (classname) {
9993         HV* const stash = gv_stashpv(classname, GV_ADD);
9994         (void)sv_bless(rv, stash);
9995     }
9996     return sv;
9997 }
9998
9999 SV *
10000 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10001 {
10002     SV * const lv = newSV_type(SVt_PVLV);
10003     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10004     LvTYPE(lv) = 'y';
10005     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10006     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10007     LvSTARGOFF(lv) = ix;
10008     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10009     return lv;
10010 }
10011
10012 /*
10013 =for apidoc sv_setref_pv
10014
10015 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10016 argument will be upgraded to an RV.  That RV will be modified to point to
10017 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
10018 into the SV.  The C<classname> argument indicates the package for the
10019 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10020 will have a reference count of 1, and the RV will be returned.
10021
10022 Do not use with other Perl types such as HV, AV, SV, CV, because those
10023 objects will become corrupted by the pointer copy process.
10024
10025 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10026
10027 =cut
10028 */
10029
10030 SV*
10031 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10032 {
10033     PERL_ARGS_ASSERT_SV_SETREF_PV;
10034
10035     if (!pv) {
10036         sv_setsv(rv, &PL_sv_undef);
10037         SvSETMAGIC(rv);
10038     }
10039     else
10040         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10041     return rv;
10042 }
10043
10044 /*
10045 =for apidoc sv_setref_iv
10046
10047 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10048 argument will be upgraded to an RV.  That RV will be modified to point to
10049 the new SV.  The C<classname> argument indicates the package for the
10050 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10051 will have a reference count of 1, and the RV will be returned.
10052
10053 =cut
10054 */
10055
10056 SV*
10057 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10058 {
10059     PERL_ARGS_ASSERT_SV_SETREF_IV;
10060
10061     sv_setiv(newSVrv(rv,classname), iv);
10062     return rv;
10063 }
10064
10065 /*
10066 =for apidoc sv_setref_uv
10067
10068 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10069 argument will be upgraded to an RV.  That RV will be modified to point to
10070 the new SV.  The C<classname> argument indicates the package for the
10071 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10072 will have a reference count of 1, and the RV will be returned.
10073
10074 =cut
10075 */
10076
10077 SV*
10078 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10079 {
10080     PERL_ARGS_ASSERT_SV_SETREF_UV;
10081
10082     sv_setuv(newSVrv(rv,classname), uv);
10083     return rv;
10084 }
10085
10086 /*
10087 =for apidoc sv_setref_nv
10088
10089 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10090 argument will be upgraded to an RV.  That RV will be modified to point to
10091 the new SV.  The C<classname> argument indicates the package for the
10092 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10093 will have a reference count of 1, and the RV will be returned.
10094
10095 =cut
10096 */
10097
10098 SV*
10099 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10100 {
10101     PERL_ARGS_ASSERT_SV_SETREF_NV;
10102
10103     sv_setnv(newSVrv(rv,classname), nv);
10104     return rv;
10105 }
10106
10107 /*
10108 =for apidoc sv_setref_pvn
10109
10110 Copies a string into a new SV, optionally blessing the SV.  The length of the
10111 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10112 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10113 argument indicates the package for the blessing.  Set C<classname> to
10114 C<NULL> to avoid the blessing.  The new SV will have a reference count
10115 of 1, and the RV will be returned.
10116
10117 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10118
10119 =cut
10120 */
10121
10122 SV*
10123 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10124                    const char *const pv, const STRLEN n)
10125 {
10126     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10127
10128     sv_setpvn(newSVrv(rv,classname), pv, n);
10129     return rv;
10130 }
10131
10132 /*
10133 =for apidoc sv_bless
10134
10135 Blesses an SV into a specified package.  The SV must be an RV.  The package
10136 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10137 of the SV is unaffected.
10138
10139 =cut
10140 */
10141
10142 SV*
10143 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10144 {
10145     SV *tmpRef;
10146     HV *oldstash = NULL;
10147
10148     PERL_ARGS_ASSERT_SV_BLESS;
10149
10150     SvGETMAGIC(sv);
10151     if (!SvROK(sv))
10152         Perl_croak(aTHX_ "Can't bless non-reference value");
10153     tmpRef = SvRV(sv);
10154     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10155         if (SvREADONLY(tmpRef))
10156             Perl_croak_no_modify();
10157         if (SvOBJECT(tmpRef)) {
10158             oldstash = SvSTASH(tmpRef);
10159         }
10160     }
10161     SvOBJECT_on(tmpRef);
10162     SvUPGRADE(tmpRef, SVt_PVMG);
10163     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10164     SvREFCNT_dec(oldstash);
10165
10166     if(SvSMAGICAL(tmpRef))
10167         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10168             mg_set(tmpRef);
10169
10170
10171
10172     return sv;
10173 }
10174
10175 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10176  * as it is after unglobbing it.
10177  */
10178
10179 PERL_STATIC_INLINE void
10180 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10181 {
10182     void *xpvmg;
10183     HV *stash;
10184     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10185
10186     PERL_ARGS_ASSERT_SV_UNGLOB;
10187
10188     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10189     SvFAKE_off(sv);
10190     if (!(flags & SV_COW_DROP_PV))
10191         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10192
10193     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10194     if (GvGP(sv)) {
10195         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10196            && HvNAME_get(stash))
10197             mro_method_changed_in(stash);
10198         gp_free(MUTABLE_GV(sv));
10199     }
10200     if (GvSTASH(sv)) {
10201         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10202         GvSTASH(sv) = NULL;
10203     }
10204     GvMULTI_off(sv);
10205     if (GvNAME_HEK(sv)) {
10206         unshare_hek(GvNAME_HEK(sv));
10207     }
10208     isGV_with_GP_off(sv);
10209
10210     if(SvTYPE(sv) == SVt_PVGV) {
10211         /* need to keep SvANY(sv) in the right arena */
10212         xpvmg = new_XPVMG();
10213         StructCopy(SvANY(sv), xpvmg, XPVMG);
10214         del_XPVGV(SvANY(sv));
10215         SvANY(sv) = xpvmg;
10216
10217         SvFLAGS(sv) &= ~SVTYPEMASK;
10218         SvFLAGS(sv) |= SVt_PVMG;
10219     }
10220
10221     /* Intentionally not calling any local SET magic, as this isn't so much a
10222        set operation as merely an internal storage change.  */
10223     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10224     else sv_setsv_flags(sv, temp, 0);
10225
10226     if ((const GV *)sv == PL_last_in_gv)
10227         PL_last_in_gv = NULL;
10228     else if ((const GV *)sv == PL_statgv)
10229         PL_statgv = NULL;
10230 }
10231
10232 /*
10233 =for apidoc sv_unref_flags
10234
10235 Unsets the RV status of the SV, and decrements the reference count of
10236 whatever was being referenced by the RV.  This can almost be thought of
10237 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10238 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10239 (otherwise the decrementing is conditional on the reference count being
10240 different from one or the reference being a readonly SV).
10241 See C<SvROK_off>.
10242
10243 =cut
10244 */
10245
10246 void
10247 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10248 {
10249     SV* const target = SvRV(ref);
10250
10251     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10252
10253     if (SvWEAKREF(ref)) {
10254         sv_del_backref(target, ref);
10255         SvWEAKREF_off(ref);
10256         SvRV_set(ref, NULL);
10257         return;
10258     }
10259     SvRV_set(ref, NULL);
10260     SvROK_off(ref);
10261     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10262        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10263     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10264         SvREFCNT_dec_NN(target);
10265     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10266         sv_2mortal(target);     /* Schedule for freeing later */
10267 }
10268
10269 /*
10270 =for apidoc sv_untaint
10271
10272 Untaint an SV.  Use C<SvTAINTED_off> instead.
10273
10274 =cut
10275 */
10276
10277 void
10278 Perl_sv_untaint(pTHX_ SV *const sv)
10279 {
10280     PERL_ARGS_ASSERT_SV_UNTAINT;
10281     PERL_UNUSED_CONTEXT;
10282
10283     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10284         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10285         if (mg)
10286             mg->mg_len &= ~1;
10287     }
10288 }
10289
10290 /*
10291 =for apidoc sv_tainted
10292
10293 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10294
10295 =cut
10296 */
10297
10298 bool
10299 Perl_sv_tainted(pTHX_ SV *const sv)
10300 {
10301     PERL_ARGS_ASSERT_SV_TAINTED;
10302     PERL_UNUSED_CONTEXT;
10303
10304     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10305         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10306         if (mg && (mg->mg_len & 1) )
10307             return TRUE;
10308     }
10309     return FALSE;
10310 }
10311
10312 /*
10313 =for apidoc sv_setpviv
10314
10315 Copies an integer into the given SV, also updating its string value.
10316 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10317
10318 =cut
10319 */
10320
10321 void
10322 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10323 {
10324     char buf[TYPE_CHARS(UV)];
10325     char *ebuf;
10326     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10327
10328     PERL_ARGS_ASSERT_SV_SETPVIV;
10329
10330     sv_setpvn(sv, ptr, ebuf - ptr);
10331 }
10332
10333 /*
10334 =for apidoc sv_setpviv_mg
10335
10336 Like C<sv_setpviv>, but also handles 'set' magic.
10337
10338 =cut
10339 */
10340
10341 void
10342 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10343 {
10344     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10345
10346     sv_setpviv(sv, iv);
10347     SvSETMAGIC(sv);
10348 }
10349
10350 #if defined(PERL_IMPLICIT_CONTEXT)
10351
10352 /* pTHX_ magic can't cope with varargs, so this is a no-context
10353  * version of the main function, (which may itself be aliased to us).
10354  * Don't access this version directly.
10355  */
10356
10357 void
10358 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10359 {
10360     dTHX;
10361     va_list args;
10362
10363     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10364
10365     va_start(args, pat);
10366     sv_vsetpvf(sv, pat, &args);
10367     va_end(args);
10368 }
10369
10370 /* pTHX_ magic can't cope with varargs, so this is a no-context
10371  * version of the main function, (which may itself be aliased to us).
10372  * Don't access this version directly.
10373  */
10374
10375 void
10376 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10377 {
10378     dTHX;
10379     va_list args;
10380
10381     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10382
10383     va_start(args, pat);
10384     sv_vsetpvf_mg(sv, pat, &args);
10385     va_end(args);
10386 }
10387 #endif
10388
10389 /*
10390 =for apidoc sv_setpvf
10391
10392 Works like C<sv_catpvf> but copies the text into the SV instead of
10393 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10394
10395 =cut
10396 */
10397
10398 void
10399 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10400 {
10401     va_list args;
10402
10403     PERL_ARGS_ASSERT_SV_SETPVF;
10404
10405     va_start(args, pat);
10406     sv_vsetpvf(sv, pat, &args);
10407     va_end(args);
10408 }
10409
10410 /*
10411 =for apidoc sv_vsetpvf
10412
10413 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10414 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10415
10416 Usually used via its frontend C<sv_setpvf>.
10417
10418 =cut
10419 */
10420
10421 void
10422 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10423 {
10424     PERL_ARGS_ASSERT_SV_VSETPVF;
10425
10426     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10427 }
10428
10429 /*
10430 =for apidoc sv_setpvf_mg
10431
10432 Like C<sv_setpvf>, but also handles 'set' magic.
10433
10434 =cut
10435 */
10436
10437 void
10438 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10439 {
10440     va_list args;
10441
10442     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10443
10444     va_start(args, pat);
10445     sv_vsetpvf_mg(sv, pat, &args);
10446     va_end(args);
10447 }
10448
10449 /*
10450 =for apidoc sv_vsetpvf_mg
10451
10452 Like C<sv_vsetpvf>, but also handles 'set' magic.
10453
10454 Usually used via its frontend C<sv_setpvf_mg>.
10455
10456 =cut
10457 */
10458
10459 void
10460 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10461 {
10462     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10463
10464     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10465     SvSETMAGIC(sv);
10466 }
10467
10468 #if defined(PERL_IMPLICIT_CONTEXT)
10469
10470 /* pTHX_ magic can't cope with varargs, so this is a no-context
10471  * version of the main function, (which may itself be aliased to us).
10472  * Don't access this version directly.
10473  */
10474
10475 void
10476 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10477 {
10478     dTHX;
10479     va_list args;
10480
10481     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10482
10483     va_start(args, pat);
10484     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10485     va_end(args);
10486 }
10487
10488 /* pTHX_ magic can't cope with varargs, so this is a no-context
10489  * version of the main function, (which may itself be aliased to us).
10490  * Don't access this version directly.
10491  */
10492
10493 void
10494 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10495 {
10496     dTHX;
10497     va_list args;
10498
10499     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10500
10501     va_start(args, pat);
10502     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10503     SvSETMAGIC(sv);
10504     va_end(args);
10505 }
10506 #endif
10507
10508 /*
10509 =for apidoc sv_catpvf
10510
10511 Processes its arguments like C<sprintf> and appends the formatted
10512 output to an SV.  If the appended data contains "wide" characters
10513 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10514 and characters >255 formatted with %c), the original SV might get
10515 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10516 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10517 valid UTF-8; if the original SV was bytes, the pattern should be too.
10518
10519 =cut */
10520
10521 void
10522 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10523 {
10524     va_list args;
10525
10526     PERL_ARGS_ASSERT_SV_CATPVF;
10527
10528     va_start(args, pat);
10529     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10530     va_end(args);
10531 }
10532
10533 /*
10534 =for apidoc sv_vcatpvf
10535
10536 Processes its arguments like C<vsprintf> and appends the formatted output
10537 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10538
10539 Usually used via its frontend C<sv_catpvf>.
10540
10541 =cut
10542 */
10543
10544 void
10545 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10546 {
10547     PERL_ARGS_ASSERT_SV_VCATPVF;
10548
10549     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10550 }
10551
10552 /*
10553 =for apidoc sv_catpvf_mg
10554
10555 Like C<sv_catpvf>, but also handles 'set' magic.
10556
10557 =cut
10558 */
10559
10560 void
10561 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10562 {
10563     va_list args;
10564
10565     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10566
10567     va_start(args, pat);
10568     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10569     SvSETMAGIC(sv);
10570     va_end(args);
10571 }
10572
10573 /*
10574 =for apidoc sv_vcatpvf_mg
10575
10576 Like C<sv_vcatpvf>, but also handles 'set' magic.
10577
10578 Usually used via its frontend C<sv_catpvf_mg>.
10579
10580 =cut
10581 */
10582
10583 void
10584 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10585 {
10586     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10587
10588     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10589     SvSETMAGIC(sv);
10590 }
10591
10592 /*
10593 =for apidoc sv_vsetpvfn
10594
10595 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10596 appending it.
10597
10598 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10599
10600 =cut
10601 */
10602
10603 void
10604 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10605                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10606 {
10607     PERL_ARGS_ASSERT_SV_VSETPVFN;
10608
10609     sv_setpvs(sv, "");
10610     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10611 }
10612
10613
10614 /*
10615  * Warn of missing argument to sprintf, and then return a defined value
10616  * to avoid inappropriate "use of uninit" warnings [perl #71000].
10617  */
10618 STATIC SV*
10619 S_vcatpvfn_missing_argument(pTHX) {
10620     if (ckWARN(WARN_MISSING)) {
10621         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10622                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10623     }
10624     return &PL_sv_no;
10625 }
10626
10627
10628 STATIC I32
10629 S_expect_number(pTHX_ char **const pattern)
10630 {
10631     I32 var = 0;
10632
10633     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10634
10635     switch (**pattern) {
10636     case '1': case '2': case '3':
10637     case '4': case '5': case '6':
10638     case '7': case '8': case '9':
10639         var = *(*pattern)++ - '0';
10640         while (isDIGIT(**pattern)) {
10641             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10642             if (tmp < var)
10643                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10644             var = tmp;
10645         }
10646     }
10647     return var;
10648 }
10649
10650 STATIC char *
10651 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10652 {
10653     const int neg = nv < 0;
10654     UV uv;
10655
10656     PERL_ARGS_ASSERT_F0CONVERT;
10657
10658     if (UNLIKELY(Perl_isinfnan(nv))) {
10659         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len);
10660         *len = n;
10661         return endbuf - n;
10662     }
10663     if (neg)
10664         nv = -nv;
10665     if (nv < UV_MAX) {
10666         char *p = endbuf;
10667         nv += 0.5;
10668         uv = (UV)nv;
10669         if (uv & 1 && uv == nv)
10670             uv--;                       /* Round to even */
10671         do {
10672             const unsigned dig = uv % 10;
10673             *--p = '0' + dig;
10674         } while (uv /= 10);
10675         if (neg)
10676             *--p = '-';
10677         *len = endbuf - p;
10678         return p;
10679     }
10680     return NULL;
10681 }
10682
10683
10684 /*
10685 =for apidoc sv_vcatpvfn
10686
10687 =for apidoc sv_vcatpvfn_flags
10688
10689 Processes its arguments like C<vsprintf> and appends the formatted output
10690 to an SV.  Uses an array of SVs if the C style variable argument list is
10691 missing (NULL).  When running with taint checks enabled, indicates via
10692 C<maybe_tainted> if results are untrustworthy (often due to the use of
10693 locales).
10694
10695 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10696
10697 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10698
10699 =cut
10700 */
10701
10702 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10703                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10704                         vec_utf8 = DO_UTF8(vecsv);
10705
10706 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10707
10708 void
10709 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10710                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10711 {
10712     PERL_ARGS_ASSERT_SV_VCATPVFN;
10713
10714     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10715 }
10716
10717 #if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN || \
10718     DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN || \
10719     DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10720 #  define DOUBLE_LITTLE_ENDIAN
10721 #endif
10722
10723 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \
10724     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10725     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN
10726 #  define LONGDOUBLE_LITTLE_ENDIAN
10727 #endif
10728
10729 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \
10730     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \
10731     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10732 #  define LONGDOUBLE_BIG_ENDIAN
10733 #endif
10734
10735 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \
10736     LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10737 #  define LONGDOUBLE_X86_80_BIT
10738 #endif
10739
10740 #if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \
10741     LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN
10742 #  define LONGDOUBLE_DOUBLEDOUBLE
10743 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10744  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10745  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10746  * after the first 1023 zero bits.
10747  *
10748  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10749  * of dynamically growing buffer might be better, start at just 16 bytes
10750  * (for example) and grow only when necessary.  Or maybe just by looking
10751  * at the exponents of the two doubles? */
10752 #  define DOUBLEDOUBLE_MAXBITS 2098
10753 #endif
10754
10755 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10756  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10757  * per xdigit.  For the double-double case, this can be rather many.
10758  * The non-double-double-long-double overshoots since all bits of NV
10759  * are not mantissa bits, there are also exponent bits. */
10760 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10761 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
10762 #else
10763 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10764 #endif
10765
10766 /* If we do not have a known long double format, (including not using
10767  * long doubles, or long doubles being equal to doubles) then we will
10768  * fall back to the ldexp/frexp route, with which we can retrieve at
10769  * most as many bits as our widest unsigned integer type is.  We try
10770  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10771  *
10772  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10773  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10774  */
10775 #if defined(HAS_QUAD) && defined(Uquad_t)
10776 #  define MANTISSATYPE Uquad_t
10777 #  define MANTISSASIZE 8
10778 #else
10779 #  define MANTISSATYPE UV
10780 #  define MANTISSASIZE UVSIZE
10781 #endif
10782
10783 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10784 #  define HEXTRACT_LITTLE_ENDIAN
10785 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10786 #  define HEXTRACT_BIG_ENDIAN
10787 #else
10788 #  define HEXTRACT_MIX_ENDIAN
10789 #endif
10790
10791 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10792  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10793  * are being extracted from (either directly from the long double in-memory
10794  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10795  * is used to update the exponent.  vhex is the pointer to the beginning
10796  * of the output buffer (of VHEX_SIZE).
10797  *
10798  * The tricky part is that S_hextract() needs to be called twice:
10799  * the first time with vend as NULL, and the second time with vend as
10800  * the pointer returned by the first call.  What happens is that on
10801  * the first round the output size is computed, and the intended
10802  * extraction sanity checked.  On the second round the actual output
10803  * (the extraction of the hexadecimal values) takes place.
10804  * Sanity failures cause fatal failures during both rounds. */
10805 STATIC U8*
10806 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10807 {
10808     U8* v = vhex;
10809     int ix;
10810     int ixmin = 0, ixmax = 0;
10811
10812     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10813      * and elsewhere. */
10814
10815     /* These macros are just to reduce typos, they have multiple
10816      * repetitions below, but usually only one (or sometimes two)
10817      * of them is really being used. */
10818     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10819 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10820 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10821 #define HEXTRACT_OUTPUT(ix) \
10822     STMT_START { \
10823       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10824    } STMT_END
10825 #define HEXTRACT_COUNT(ix, c) \
10826     STMT_START { \
10827       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10828    } STMT_END
10829 #define HEXTRACT_BYTE(ix) \
10830     STMT_START { \
10831       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10832    } STMT_END
10833 #define HEXTRACT_LO_NYBBLE(ix) \
10834     STMT_START { \
10835       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10836    } STMT_END
10837     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10838      * to make it look less odd when the top bits of a NV
10839      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10840      * order bits can be in the "low nybble" of a byte. */
10841 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10842 #define HEXTRACT_BYTES_LE(a, b) \
10843     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10844 #define HEXTRACT_BYTES_BE(a, b) \
10845     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10846 #define HEXTRACT_IMPLICIT_BIT(nv) \
10847     STMT_START { \
10848         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10849    } STMT_END
10850
10851 /* Most formats do.  Those which don't should undef this. */
10852 #define HEXTRACT_HAS_IMPLICIT_BIT
10853 /* Many formats do.  Those which don't should undef this. */
10854 #define HEXTRACT_HAS_TOP_NYBBLE
10855
10856     /* HEXTRACTSIZE is the maximum number of xdigits. */
10857 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10858 #  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/4)
10859 #else
10860 #  define HEXTRACTSIZE 2 * NVSIZE
10861 #endif
10862
10863     const U8* vmaxend = vhex + HEXTRACTSIZE;
10864     PERL_UNUSED_VAR(ix); /* might happen */
10865     (void)Perl_frexp(PERL_ABS(nv), exponent);
10866     if (vend && (vend <= vhex || vend > vmaxend))
10867         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10868     {
10869         /* First check if using long doubles. */
10870 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
10871 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10872         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10873          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10874         /* The bytes 13..0 are the mantissa/fraction,
10875          * the 15,14 are the sign+exponent. */
10876         const U8* nvp = (const U8*)(&nv);
10877         HEXTRACT_IMPLICIT_BIT(nv);
10878 #   undef HEXTRACT_HAS_TOP_NYBBLE
10879         HEXTRACT_BYTES_LE(13, 0);
10880 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10881         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10882          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10883         /* The bytes 2..15 are the mantissa/fraction,
10884          * the 0,1 are the sign+exponent. */
10885         const U8* nvp = (const U8*)(&nv);
10886         HEXTRACT_IMPLICIT_BIT(nv);
10887 #   undef HEXTRACT_HAS_TOP_NYBBLE
10888         HEXTRACT_BYTES_BE(2, 15);
10889 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10890         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10891          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10892          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10893          * meaning that 2 or 6 bytes are empty padding. */
10894         /* The bytes 7..0 are the mantissa/fraction */
10895         const U8* nvp = (const U8*)(&nv);
10896 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10897 #    undef HEXTRACT_HAS_TOP_NYBBLE
10898         HEXTRACT_BYTES_LE(7, 0);
10899 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10900         /* Does this format ever happen? (Wikipedia says the Motorola
10901          * 6888x math coprocessors used format _like_ this but padded
10902          * to 96 bits with 16 unused bits between the exponent and the
10903          * mantissa.) */
10904         const U8* nvp = (const U8*)(&nv);
10905 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10906 #    undef HEXTRACT_HAS_TOP_NYBBLE
10907         HEXTRACT_BYTES_BE(0, 7);
10908 #  else
10909 #    define HEXTRACT_FALLBACK
10910         /* Double-double format: two doubles next to each other.
10911          * The first double is the high-order one, exactly like
10912          * it would be for a "lone" double.  The second double
10913          * is shifted down using the exponent so that that there
10914          * are no common bits.  The tricky part is that the value
10915          * of the double-double is the SUM of the two doubles and
10916          * the second one can be also NEGATIVE.
10917          *
10918          * Because of this tricky construction the bytewise extraction we
10919          * use for the other long double formats doesn't work, we must
10920          * extract the values bit by bit.
10921          *
10922          * The little-endian double-double is used .. somewhere?
10923          *
10924          * The big endian double-double is used in e.g. PPC/Power (AIX)
10925          * and MIPS (SGI).
10926          *
10927          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10928          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
10929          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
10930          */
10931 #  endif
10932 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
10933         /* Using normal doubles, not long doubles.
10934          *
10935          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10936          * bytes, since we might need to handle printf precision, and
10937          * also need to insert the radix. */
10938 #  if NVSIZE == 8
10939 #    ifdef HEXTRACT_LITTLE_ENDIAN
10940         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10941         const U8* nvp = (const U8*)(&nv);
10942         HEXTRACT_IMPLICIT_BIT(nv);
10943         HEXTRACT_TOP_NYBBLE(6);
10944         HEXTRACT_BYTES_LE(5, 0);
10945 #    elif defined(HEXTRACT_BIG_ENDIAN)
10946         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10947         const U8* nvp = (const U8*)(&nv);
10948         HEXTRACT_IMPLICIT_BIT(nv);
10949         HEXTRACT_TOP_NYBBLE(1);
10950         HEXTRACT_BYTES_BE(2, 7);
10951 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
10952         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
10953         const U8* nvp = (const U8*)(&nv);
10954         HEXTRACT_IMPLICIT_BIT(nv);
10955         HEXTRACT_TOP_NYBBLE(2); /* 6 */
10956         HEXTRACT_BYTE(1); /* 5 */
10957         HEXTRACT_BYTE(0); /* 4 */
10958         HEXTRACT_BYTE(7); /* 3 */
10959         HEXTRACT_BYTE(6); /* 2 */
10960         HEXTRACT_BYTE(5); /* 1 */
10961         HEXTRACT_BYTE(4); /* 0 */
10962 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
10963         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
10964         const U8* nvp = (const U8*)(&nv);
10965         HEXTRACT_IMPLICIT_BIT(nv);
10966         HEXTRACT_TOP_NYBBLE(5); /* 6 */
10967         HEXTRACT_BYTE(6); /* 5 */
10968         HEXTRACT_BYTE(7); /* 4 */
10969         HEXTRACT_BYTE(0); /* 3 */
10970         HEXTRACT_BYTE(1); /* 2 */
10971         HEXTRACT_BYTE(2); /* 1 */
10972         HEXTRACT_BYTE(3); /* 0 */
10973 #    else
10974 #      define HEXTRACT_FALLBACK
10975 #    endif
10976 #  else
10977 #    define HEXTRACT_FALLBACK
10978 #  endif
10979 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
10980 #  ifdef HEXTRACT_FALLBACK
10981 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
10982         /* The fallback is used for the double-double format, and
10983          * for unknown long double formats, and for unknown double
10984          * formats, or in general unknown NV formats. */
10985         if (nv == (NV)0.0) {
10986             if (vend)
10987                 *v++ = 0;
10988             else
10989                 v++;
10990             *exponent = 0;
10991         }
10992         else {
10993             NV d = nv < 0 ? -nv : nv;
10994             NV e = (NV)1.0;
10995             U8 ha = 0x0; /* hexvalue accumulator */
10996             U8 hd = 0x8; /* hexvalue digit */
10997
10998             /* Shift d and e (and update exponent) so that e <= d < 2*e,
10999              * this is essentially manual frexp(). Multiplying by 0.5 and
11000              * doubling should be lossless in binary floating point. */
11001
11002             *exponent = 1;
11003
11004             while (e > d) {
11005                 e *= (NV)0.5;
11006                 (*exponent)--;
11007             }
11008             /* Now d >= e */
11009
11010             while (d >= e + e) {
11011                 e += e;
11012                 (*exponent)++;
11013             }
11014             /* Now e <= d < 2*e */
11015
11016             /* First extract the leading hexdigit (the implicit bit). */
11017             if (d >= e) {
11018                 d -= e;
11019                 if (vend)
11020                     *v++ = 1;
11021                 else
11022                     v++;
11023             }
11024             else {
11025                 if (vend)
11026                     *v++ = 0;
11027                 else
11028                     v++;
11029             }
11030             e *= (NV)0.5;
11031
11032             /* Then extract the remaining hexdigits. */
11033             while (d > (NV)0.0) {
11034                 if (d >= e) {
11035                     ha |= hd;
11036                     d -= e;
11037                 }
11038                 if (hd == 1) {
11039                     /* Output or count in groups of four bits,
11040                      * that is, when the hexdigit is down to one. */
11041                     if (vend)
11042                         *v++ = ha;
11043                     else
11044                         v++;
11045                     /* Reset the hexvalue. */
11046                     ha = 0x0;
11047                     hd = 0x8;
11048                 }
11049                 else
11050                     hd >>= 1;
11051                 e *= (NV)0.5;
11052             }
11053
11054             /* Flush possible pending hexvalue. */
11055             if (ha) {
11056                 if (vend)
11057                     *v++ = ha;
11058                 else
11059                     v++;
11060             }
11061         }
11062 #  endif
11063     }
11064     /* Croak for various reasons: if the output pointer escaped the
11065      * output buffer, if the extraction index escaped the extraction
11066      * buffer, or if the ending output pointer didn't match the
11067      * previously computed value. */
11068     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11069         /* For double-double the ixmin and ixmax stay at zero,
11070          * which is convenient since the HEXTRACTSIZE is tricky
11071          * for double-double. */
11072         ixmin < 0 || ixmax >= NVSIZE ||
11073         (vend && v != vend))
11074         Perl_croak(aTHX_ "Hexadecimal float: internal error");
11075     return v;
11076 }
11077
11078 void
11079 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11080                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11081                        const U32 flags)
11082 {
11083     char *p;
11084     char *q;
11085     const char *patend;
11086     STRLEN origlen;
11087     I32 svix = 0;
11088     static const char nullstr[] = "(null)";
11089     SV *argsv = NULL;
11090     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11091     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11092     SV *nsv = NULL;
11093     /* Times 4: a decimal digit takes more than 3 binary digits.
11094      * NV_DIG: mantissa takes than many decimal digits.
11095      * Plus 32: Playing safe. */
11096     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11097     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11098     bool hexfp = FALSE; /* hexadecimal floating point? */
11099
11100     DECLARATION_FOR_STORE_LC_NUMERIC_SET_TO_NEEDED;
11101
11102     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11103     PERL_UNUSED_ARG(maybe_tainted);
11104
11105     if (flags & SV_GMAGIC)
11106         SvGETMAGIC(sv);
11107
11108     /* no matter what, this is a string now */
11109     (void)SvPV_force_nomg(sv, origlen);
11110
11111     /* special-case "", "%s", and "%-p" (SVf - see below) */
11112     if (patlen == 0) {
11113         if (svmax && ckWARN(WARN_REDUNDANT))
11114             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11115                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11116         return;
11117     }
11118     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11119         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11120             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11121                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11122
11123         if (args) {
11124             const char * const s = va_arg(*args, char*);
11125             sv_catpv_nomg(sv, s ? s : nullstr);
11126         }
11127         else if (svix < svmax) {
11128             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11129             SvGETMAGIC(*svargs);
11130             sv_catsv_nomg(sv, *svargs);
11131         }
11132         else
11133             S_vcatpvfn_missing_argument(aTHX);
11134         return;
11135     }
11136     if (args && patlen == 3 && pat[0] == '%' &&
11137                 pat[1] == '-' && pat[2] == 'p') {
11138         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11139             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11140                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11141         argsv = MUTABLE_SV(va_arg(*args, void*));
11142         sv_catsv_nomg(sv, argsv);
11143         return;
11144     }
11145
11146 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11147     /* special-case "%.<number>[gf]" */
11148     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11149          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11150         unsigned digits = 0;
11151         const char *pp;
11152
11153         pp = pat + 2;
11154         while (*pp >= '0' && *pp <= '9')
11155             digits = 10 * digits + (*pp++ - '0');
11156
11157         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11158            format the first argument and WARN_REDUNDANT if svmax > 1?
11159            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11160         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11161             const NV nv = SvNV(*svargs);
11162             if (LIKELY(!Perl_isinfnan(nv))) {
11163                 if (*pp == 'g') {
11164                     /* Add check for digits != 0 because it seems that some
11165                        gconverts are buggy in this case, and we don't yet have
11166                        a Configure test for this.  */
11167                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11168                         /* 0, point, slack */
11169                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11170                         SNPRINTF_G(nv, ebuf, size, digits);
11171                         sv_catpv_nomg(sv, ebuf);
11172                         if (*ebuf)      /* May return an empty string for digits==0 */
11173                             return;
11174                     }
11175                 } else if (!digits) {
11176                     STRLEN l;
11177
11178                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11179                         sv_catpvn_nomg(sv, p, l);
11180                         return;
11181                     }
11182                 }
11183             }
11184         }
11185     }
11186 #endif /* !USE_LONG_DOUBLE */
11187
11188     if (!args && svix < svmax && DO_UTF8(*svargs))
11189         has_utf8 = TRUE;
11190
11191     patend = (char*)pat + patlen;
11192     for (p = (char*)pat; p < patend; p = q) {
11193         bool alt = FALSE;
11194         bool left = FALSE;
11195         bool vectorize = FALSE;
11196         bool vectorarg = FALSE;
11197         bool vec_utf8 = FALSE;
11198         char fill = ' ';
11199         char plus = 0;
11200         char intsize = 0;
11201         STRLEN width = 0;
11202         STRLEN zeros = 0;
11203         bool has_precis = FALSE;
11204         STRLEN precis = 0;
11205         const I32 osvix = svix;
11206         bool is_utf8 = FALSE;  /* is this item utf8?   */
11207 #ifdef HAS_LDBL_SPRINTF_BUG
11208         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11209            with sfio - Allen <allens@cpan.org> */
11210         bool fix_ldbl_sprintf_bug = FALSE;
11211 #endif
11212
11213         char esignbuf[4];
11214         U8 utf8buf[UTF8_MAXBYTES+1];
11215         STRLEN esignlen = 0;
11216
11217         const char *eptr = NULL;
11218         const char *fmtstart;
11219         STRLEN elen = 0;
11220         SV *vecsv = NULL;
11221         const U8 *vecstr = NULL;
11222         STRLEN veclen = 0;
11223         char c = 0;
11224         int i;
11225         unsigned base = 0;
11226         IV iv = 0;
11227         UV uv = 0;
11228         /* We need a long double target in case HAS_LONG_DOUBLE,
11229          * even without USE_LONG_DOUBLE, so that we can printf with
11230          * long double formats, even without NV being long double.
11231          * But we call the target 'fv' instead of 'nv', since most of
11232          * the time it is not (most compilers these days recognize
11233          * "long double", even if only as a synonym for "double").
11234         */
11235 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11236         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11237         long double fv;
11238 #  ifdef Perl_isfinitel
11239 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11240 #  endif
11241 #  define FV_GF PERL_PRIgldbl
11242 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11243        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11244 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11245                                            double _dv = nv;  \
11246                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11247                               } STMT_END
11248 #    else
11249 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11250 #    endif
11251 #else
11252         NV fv;
11253 #  define FV_GF NVgf
11254 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11255 #endif
11256 #ifndef FV_ISFINITE
11257 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11258 #endif
11259         STRLEN have;
11260         STRLEN need;
11261         STRLEN gap;
11262         const char *dotstr = ".";
11263         STRLEN dotstrlen = 1;
11264         I32 efix = 0; /* explicit format parameter index */
11265         I32 ewix = 0; /* explicit width index */
11266         I32 epix = 0; /* explicit precision index */
11267         I32 evix = 0; /* explicit vector index */
11268         bool asterisk = FALSE;
11269         bool infnan = FALSE;
11270
11271         /* echo everything up to the next format specification */
11272         for (q = p; q < patend && *q != '%'; ++q) ;
11273         if (q > p) {
11274             if (has_utf8 && !pat_utf8)
11275                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11276             else
11277                 sv_catpvn_nomg(sv, p, q - p);
11278             p = q;
11279         }
11280         if (q++ >= patend)
11281             break;
11282
11283         fmtstart = q;
11284
11285 /*
11286     We allow format specification elements in this order:
11287         \d+\$              explicit format parameter index
11288         [-+ 0#]+           flags
11289         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11290         0                  flag (as above): repeated to allow "v02"     
11291         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11292         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11293         [hlqLV]            size
11294     [%bcdefginopsuxDFOUX] format (mandatory)
11295 */
11296
11297         if (args) {
11298 /*  
11299         As of perl5.9.3, printf format checking is on by default.
11300         Internally, perl uses %p formats to provide an escape to
11301         some extended formatting.  This block deals with those
11302         extensions: if it does not match, (char*)q is reset and
11303         the normal format processing code is used.
11304
11305         Currently defined extensions are:
11306                 %p              include pointer address (standard)      
11307                 %-p     (SVf)   include an SV (previously %_)
11308                 %-<num>p        include an SV with precision <num>      
11309                 %2p             include a HEK
11310                 %3p             include a HEK with precision of 256
11311                 %4p             char* preceded by utf8 flag and length
11312                 %<num>p         (where num is 1 or > 4) reserved for future
11313                                 extensions
11314
11315         Robin Barker 2005-07-14 (but modified since)
11316
11317                 %1p     (VDf)   removed.  RMB 2007-10-19
11318 */
11319             char* r = q; 
11320             bool sv = FALSE;    
11321             STRLEN n = 0;
11322             if (*q == '-')
11323                 sv = *q++;
11324             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11325                 /* The argument has already gone through cBOOL, so the cast
11326                    is safe. */
11327                 is_utf8 = (bool)va_arg(*args, int);
11328                 elen = va_arg(*args, UV);
11329                 if ((IV)elen < 0) {
11330                     /* check if utf8 length is larger than 0 when cast to IV */
11331                     assert( (IV)elen >= 0 ); /* in DEBUGGING build we want to crash */
11332                     elen= 0; /* otherwise we want to treat this as an empty string */
11333                 }
11334                 eptr = va_arg(*args, char *);
11335                 q += sizeof(UTF8f)-1;
11336                 goto string;
11337             }
11338             n = expect_number(&q);
11339             if (*q++ == 'p') {
11340                 if (sv) {                       /* SVf */
11341                     if (n) {
11342                         precis = n;
11343                         has_precis = TRUE;
11344                     }
11345                     argsv = MUTABLE_SV(va_arg(*args, void*));
11346                     eptr = SvPV_const(argsv, elen);
11347                     if (DO_UTF8(argsv))
11348                         is_utf8 = TRUE;
11349                     goto string;
11350                 }
11351                 else if (n==2 || n==3) {        /* HEKf */
11352                     HEK * const hek = va_arg(*args, HEK *);
11353                     eptr = HEK_KEY(hek);
11354                     elen = HEK_LEN(hek);
11355                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11356                     if (n==3) precis = 256, has_precis = TRUE;
11357                     goto string;
11358                 }
11359                 else if (n) {
11360                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11361                                      "internal %%<num>p might conflict with future printf extensions");
11362                 }
11363             }
11364             q = r; 
11365         }
11366
11367         if ( (width = expect_number(&q)) ) {
11368             if (*q == '$') {
11369                 ++q;
11370                 efix = width;
11371                 if (!no_redundant_warning)
11372                     /* I've forgotten if it's a better
11373                        micro-optimization to always set this or to
11374                        only set it if it's unset */
11375                     no_redundant_warning = TRUE;
11376             } else {
11377                 goto gotwidth;
11378             }
11379         }
11380
11381         /* FLAGS */
11382
11383         while (*q) {
11384             switch (*q) {
11385             case ' ':
11386             case '+':
11387                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11388                     q++;
11389                 else
11390                     plus = *q++;
11391                 continue;
11392
11393             case '-':
11394                 left = TRUE;
11395                 q++;
11396                 continue;
11397
11398             case '0':
11399                 fill = *q++;
11400                 continue;
11401
11402             case '#':
11403                 alt = TRUE;
11404                 q++;
11405                 continue;
11406
11407             default:
11408                 break;
11409             }
11410             break;
11411         }
11412
11413       tryasterisk:
11414         if (*q == '*') {
11415             q++;
11416             if ( (ewix = expect_number(&q)) )
11417                 if (*q++ != '$')
11418                     goto unknown;
11419             asterisk = TRUE;
11420         }
11421         if (*q == 'v') {
11422             q++;
11423             if (vectorize)
11424                 goto unknown;
11425             if ((vectorarg = asterisk)) {
11426                 evix = ewix;
11427                 ewix = 0;
11428                 asterisk = FALSE;
11429             }
11430             vectorize = TRUE;
11431             goto tryasterisk;
11432         }
11433
11434         if (!asterisk)
11435         {
11436             if( *q == '0' )
11437                 fill = *q++;
11438             width = expect_number(&q);
11439         }
11440
11441         if (vectorize && vectorarg) {
11442             /* vectorizing, but not with the default "." */
11443             if (args)
11444                 vecsv = va_arg(*args, SV*);
11445             else if (evix) {
11446                 vecsv = (evix > 0 && evix <= svmax)
11447                     ? svargs[evix-1] : S_vcatpvfn_missing_argument(aTHX);
11448             } else {
11449                 vecsv = svix < svmax
11450                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11451             }
11452             dotstr = SvPV_const(vecsv, dotstrlen);
11453             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11454                bad with tied or overloaded values that return UTF8.  */
11455             if (DO_UTF8(vecsv))
11456                 is_utf8 = TRUE;
11457             else if (has_utf8) {
11458                 vecsv = sv_mortalcopy(vecsv);
11459                 sv_utf8_upgrade(vecsv);
11460                 dotstr = SvPV_const(vecsv, dotstrlen);
11461                 is_utf8 = TRUE;
11462             }               
11463         }
11464
11465         if (asterisk) {
11466             if (args)
11467                 i = va_arg(*args, int);
11468             else
11469                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11470                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11471             left |= (i < 0);
11472             width = (i < 0) ? -i : i;
11473         }
11474       gotwidth:
11475
11476         /* PRECISION */
11477
11478         if (*q == '.') {
11479             q++;
11480             if (*q == '*') {
11481                 q++;
11482                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
11483                     goto unknown;
11484                 /* XXX: todo, support specified precision parameter */
11485                 if (epix)
11486                     goto unknown;
11487                 if (args)
11488                     i = va_arg(*args, int);
11489                 else
11490                     i = (ewix ? ewix <= svmax : svix < svmax)
11491                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11492                 precis = i;
11493                 has_precis = !(i < 0);
11494             }
11495             else {
11496                 precis = 0;
11497                 while (isDIGIT(*q))
11498                     precis = precis * 10 + (*q++ - '0');
11499                 has_precis = TRUE;
11500             }
11501         }
11502
11503         if (vectorize) {
11504             if (args) {
11505                 VECTORIZE_ARGS
11506             }
11507             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11508                 vecsv = svargs[efix ? efix-1 : svix++];
11509                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11510                 vec_utf8 = DO_UTF8(vecsv);
11511
11512                 /* if this is a version object, we need to convert
11513                  * back into v-string notation and then let the
11514                  * vectorize happen normally
11515                  */
11516                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11517                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11518                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11519                         "vector argument not supported with alpha versions");
11520                         goto vdblank;
11521                     }
11522                     vecsv = sv_newmortal();
11523                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11524                                  vecsv);
11525                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11526                     vec_utf8 = DO_UTF8(vecsv);
11527                 }
11528             }
11529             else {
11530               vdblank:
11531                 vecstr = (U8*)"";
11532                 veclen = 0;
11533             }
11534         }
11535
11536         /* SIZE */
11537
11538         switch (*q) {
11539 #ifdef WIN32
11540         case 'I':                       /* Ix, I32x, and I64x */
11541 #  ifdef USE_64_BIT_INT
11542             if (q[1] == '6' && q[2] == '4') {
11543                 q += 3;
11544                 intsize = 'q';
11545                 break;
11546             }
11547 #  endif
11548             if (q[1] == '3' && q[2] == '2') {
11549                 q += 3;
11550                 break;
11551             }
11552 #  ifdef USE_64_BIT_INT
11553             intsize = 'q';
11554 #  endif
11555             q++;
11556             break;
11557 #endif
11558 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11559         case 'L':                       /* Ld */
11560             /* FALLTHROUGH */
11561 #ifdef USE_QUADMATH
11562         case 'Q':
11563             /* FALLTHROUGH */
11564 #endif
11565 #if IVSIZE >= 8
11566         case 'q':                       /* qd */
11567 #endif
11568             intsize = 'q';
11569             q++;
11570             break;
11571 #endif
11572         case 'l':
11573             ++q;
11574 #if IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)
11575             if (*q == 'l') {    /* lld, llf */
11576                 intsize = 'q';
11577                 ++q;
11578             }
11579             else
11580 #endif
11581                 intsize = 'l';
11582             break;
11583         case 'h':
11584             if (*++q == 'h') {  /* hhd, hhu */
11585                 intsize = 'c';
11586                 ++q;
11587             }
11588             else
11589                 intsize = 'h';
11590             break;
11591         case 'V':
11592         case 'z':
11593         case 't':
11594 #ifdef I_STDINT
11595         case 'j':
11596 #endif
11597             intsize = *q++;
11598             break;
11599         }
11600
11601         /* CONVERSION */
11602
11603         if (*q == '%') {
11604             eptr = q++;
11605             elen = 1;
11606             if (vectorize) {
11607                 c = '%';
11608                 goto unknown;
11609             }
11610             goto string;
11611         }
11612
11613         if (!vectorize && !args) {
11614             if (efix) {
11615                 const I32 i = efix-1;
11616                 argsv = (i >= 0 && i < svmax)
11617                     ? svargs[i] : S_vcatpvfn_missing_argument(aTHX);
11618             } else {
11619                 argsv = (svix >= 0 && svix < svmax)
11620                     ? svargs[svix++] : S_vcatpvfn_missing_argument(aTHX);
11621             }
11622         }
11623
11624         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11625             /* XXX va_arg(*args) case? need peek, use va_copy? */
11626             SvGETMAGIC(argsv);
11627             infnan = UNLIKELY(isinfnansv(argsv));
11628         }
11629
11630         switch (c = *q++) {
11631
11632             /* STRINGS */
11633
11634         case 'c':
11635             if (vectorize)
11636                 goto unknown;
11637             if (infnan)
11638                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11639                            /* no va_arg() case */
11640                            SvNV_nomg(argsv), (int)c);
11641             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11642             if ((uv > 255 ||
11643                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11644                 && !IN_BYTES) {
11645                 eptr = (char*)utf8buf;
11646                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11647                 is_utf8 = TRUE;
11648             }
11649             else {
11650                 c = (char)uv;
11651                 eptr = &c;
11652                 elen = 1;
11653             }
11654             goto string;
11655
11656         case 's':
11657             if (vectorize)
11658                 goto unknown;
11659             if (args) {
11660                 eptr = va_arg(*args, char*);
11661                 if (eptr)
11662                     elen = strlen(eptr);
11663                 else {
11664                     eptr = (char *)nullstr;
11665                     elen = sizeof nullstr - 1;
11666                 }
11667             }
11668             else {
11669                 eptr = SvPV_const(argsv, elen);
11670                 if (DO_UTF8(argsv)) {
11671                     STRLEN old_precis = precis;
11672                     if (has_precis && precis < elen) {
11673                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11674                         STRLEN p = precis > ulen ? ulen : precis;
11675                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11676                                                         /* sticks at end */
11677                     }
11678                     if (width) { /* fudge width (can't fudge elen) */
11679                         if (has_precis && precis < elen)
11680                             width += precis - old_precis;
11681                         else
11682                             width +=
11683                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11684                     }
11685                     is_utf8 = TRUE;
11686                 }
11687             }
11688
11689         string:
11690             if (has_precis && precis < elen)
11691                 elen = precis;
11692             break;
11693
11694             /* INTEGERS */
11695
11696         case 'p':
11697             if (infnan) {
11698                 goto floating_point;
11699             }
11700             if (alt || vectorize)
11701                 goto unknown;
11702             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11703             base = 16;
11704             goto integer;
11705
11706         case 'D':
11707 #ifdef IV_IS_QUAD
11708             intsize = 'q';
11709 #else
11710             intsize = 'l';
11711 #endif
11712             /* FALLTHROUGH */
11713         case 'd':
11714         case 'i':
11715             if (infnan) {
11716                 goto floating_point;
11717             }
11718             if (vectorize) {
11719                 STRLEN ulen;
11720                 if (!veclen)
11721                     continue;
11722                 if (vec_utf8)
11723                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11724                                         UTF8_ALLOW_ANYUV);
11725                 else {
11726                     uv = *vecstr;
11727                     ulen = 1;
11728                 }
11729                 vecstr += ulen;
11730                 veclen -= ulen;
11731                 if (plus)
11732                      esignbuf[esignlen++] = plus;
11733             }
11734             else if (args) {
11735                 switch (intsize) {
11736                 case 'c':       iv = (char)va_arg(*args, int); break;
11737                 case 'h':       iv = (short)va_arg(*args, int); break;
11738                 case 'l':       iv = va_arg(*args, long); break;
11739                 case 'V':       iv = va_arg(*args, IV); break;
11740                 case 'z':       iv = va_arg(*args, SSize_t); break;
11741 #ifdef HAS_PTRDIFF_T
11742                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11743 #endif
11744                 default:        iv = va_arg(*args, int); break;
11745 #ifdef I_STDINT
11746                 case 'j':       iv = va_arg(*args, intmax_t); break;
11747 #endif
11748                 case 'q':
11749 #if IVSIZE >= 8
11750                                 iv = va_arg(*args, Quad_t); break;
11751 #else
11752                                 goto unknown;
11753 #endif
11754                 }
11755             }
11756             else {
11757                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11758                 switch (intsize) {
11759                 case 'c':       iv = (char)tiv; break;
11760                 case 'h':       iv = (short)tiv; break;
11761                 case 'l':       iv = (long)tiv; break;
11762                 case 'V':
11763                 default:        iv = tiv; break;
11764                 case 'q':
11765 #if IVSIZE >= 8
11766                                 iv = (Quad_t)tiv; break;
11767 #else
11768                                 goto unknown;
11769 #endif
11770                 }
11771             }
11772             if ( !vectorize )   /* we already set uv above */
11773             {
11774                 if (iv >= 0) {
11775                     uv = iv;
11776                     if (plus)
11777                         esignbuf[esignlen++] = plus;
11778                 }
11779                 else {
11780                     uv = -iv;
11781                     esignbuf[esignlen++] = '-';
11782                 }
11783             }
11784             base = 10;
11785             goto integer;
11786
11787         case 'U':
11788 #ifdef IV_IS_QUAD
11789             intsize = 'q';
11790 #else
11791             intsize = 'l';
11792 #endif
11793             /* FALLTHROUGH */
11794         case 'u':
11795             base = 10;
11796             goto uns_integer;
11797
11798         case 'B':
11799         case 'b':
11800             base = 2;
11801             goto uns_integer;
11802
11803         case 'O':
11804 #ifdef IV_IS_QUAD
11805             intsize = 'q';
11806 #else
11807             intsize = 'l';
11808 #endif
11809             /* FALLTHROUGH */
11810         case 'o':
11811             base = 8;
11812             goto uns_integer;
11813
11814         case 'X':
11815         case 'x':
11816             base = 16;
11817
11818         uns_integer:
11819             if (infnan) {
11820                 goto floating_point;
11821             }
11822             if (vectorize) {
11823                 STRLEN ulen;
11824         vector:
11825                 if (!veclen)
11826                     continue;
11827                 if (vec_utf8)
11828                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11829                                         UTF8_ALLOW_ANYUV);
11830                 else {
11831                     uv = *vecstr;
11832                     ulen = 1;
11833                 }
11834                 vecstr += ulen;
11835                 veclen -= ulen;
11836             }
11837             else if (args) {
11838                 switch (intsize) {
11839                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11840                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11841                 case 'l':  uv = va_arg(*args, unsigned long); break;
11842                 case 'V':  uv = va_arg(*args, UV); break;
11843                 case 'z':  uv = va_arg(*args, Size_t); break;
11844 #ifdef HAS_PTRDIFF_T
11845                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11846 #endif
11847 #ifdef I_STDINT
11848                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11849 #endif
11850                 default:   uv = va_arg(*args, unsigned); break;
11851                 case 'q':
11852 #if IVSIZE >= 8
11853                            uv = va_arg(*args, Uquad_t); break;
11854 #else
11855                            goto unknown;
11856 #endif
11857                 }
11858             }
11859             else {
11860                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
11861                 switch (intsize) {
11862                 case 'c':       uv = (unsigned char)tuv; break;
11863                 case 'h':       uv = (unsigned short)tuv; break;
11864                 case 'l':       uv = (unsigned long)tuv; break;
11865                 case 'V':
11866                 default:        uv = tuv; break;
11867                 case 'q':
11868 #if IVSIZE >= 8
11869                                 uv = (Uquad_t)tuv; break;
11870 #else
11871                                 goto unknown;
11872 #endif
11873                 }
11874             }
11875
11876         integer:
11877             {
11878                 char *ptr = ebuf + sizeof ebuf;
11879                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11880                 unsigned dig;
11881                 zeros = 0;
11882
11883                 switch (base) {
11884                 case 16:
11885                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11886                     do {
11887                         dig = uv & 15;
11888                         *--ptr = p[dig];
11889                     } while (uv >>= 4);
11890                     if (tempalt) {
11891                         esignbuf[esignlen++] = '0';
11892                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11893                     }
11894                     break;
11895                 case 8:
11896                     do {
11897                         dig = uv & 7;
11898                         *--ptr = '0' + dig;
11899                     } while (uv >>= 3);
11900                     if (alt && *ptr != '0')
11901                         *--ptr = '0';
11902                     break;
11903                 case 2:
11904                     do {
11905                         dig = uv & 1;
11906                         *--ptr = '0' + dig;
11907                     } while (uv >>= 1);
11908                     if (tempalt) {
11909                         esignbuf[esignlen++] = '0';
11910                         esignbuf[esignlen++] = c;
11911                     }
11912                     break;
11913                 default:                /* it had better be ten or less */
11914                     do {
11915                         dig = uv % base;
11916                         *--ptr = '0' + dig;
11917                     } while (uv /= base);
11918                     break;
11919                 }
11920                 elen = (ebuf + sizeof ebuf) - ptr;
11921                 eptr = ptr;
11922                 if (has_precis) {
11923                     if (precis > elen)
11924                         zeros = precis - elen;
11925                     else if (precis == 0 && elen == 1 && *eptr == '0'
11926                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11927                         elen = 0;
11928
11929                 /* a precision nullifies the 0 flag. */
11930                     if (fill == '0')
11931                         fill = ' ';
11932                 }
11933             }
11934             break;
11935
11936             /* FLOATING POINT */
11937
11938         floating_point:
11939
11940         case 'F':
11941             c = 'f';            /* maybe %F isn't supported here */
11942             /* FALLTHROUGH */
11943         case 'e': case 'E':
11944         case 'f':
11945         case 'g': case 'G':
11946         case 'a': case 'A':
11947             if (vectorize)
11948                 goto unknown;
11949
11950             /* This is evil, but floating point is even more evil */
11951
11952             /* for SV-style calling, we can only get NV
11953                for C-style calling, we assume %f is double;
11954                for simplicity we allow any of %Lf, %llf, %qf for long double
11955             */
11956             switch (intsize) {
11957             case 'V':
11958 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11959                 intsize = 'q';
11960 #endif
11961                 break;
11962 /* [perl #20339] - we should accept and ignore %lf rather than die */
11963             case 'l':
11964                 /* FALLTHROUGH */
11965             default:
11966 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11967                 intsize = args ? 0 : 'q';
11968 #endif
11969                 break;
11970             case 'q':
11971 #if defined(HAS_LONG_DOUBLE)
11972                 break;
11973 #else
11974                 /* FALLTHROUGH */
11975 #endif
11976             case 'c':
11977             case 'h':
11978             case 'z':
11979             case 't':
11980             case 'j':
11981                 goto unknown;
11982             }
11983
11984             /* Now we need (long double) if intsize == 'q', else (double). */
11985             if (args) {
11986                 /* Note: do not pull NVs off the va_list with va_arg()
11987                  * (pull doubles instead) because if you have a build
11988                  * with long doubles, you would always be pulling long
11989                  * doubles, which would badly break anyone using only
11990                  * doubles (i.e. the majority of builds). In other
11991                  * words, you cannot mix doubles and long doubles.
11992                  * The only case where you can pull off long doubles
11993                  * is when the format specifier explicitly asks so with
11994                  * e.g. "%Lg". */
11995 #ifdef USE_QUADMATH
11996                 fv = intsize == 'q' ?
11997                     va_arg(*args, NV) : va_arg(*args, double);
11998 #elif LONG_DOUBLESIZE > DOUBLESIZE
11999                 if (intsize == 'q')
12000                     fv = va_arg(*args, long double);
12001                 else
12002                     NV_TO_FV(va_arg(*args, double), fv);
12003 #else
12004                 fv = va_arg(*args, double);
12005 #endif
12006             }
12007             else
12008             {
12009                 if (!infnan) SvGETMAGIC(argsv);
12010                 NV_TO_FV(SvNV_nomg(argsv), fv);
12011             }
12012
12013             need = 0;
12014             /* frexp() (or frexpl) has some unspecified behaviour for
12015              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12016             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12017                 i = PERL_INT_MIN;
12018                 (void)Perl_frexp((NV)fv, &i);
12019                 if (i == PERL_INT_MIN)
12020                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12021                 /* Do not set hexfp earlier since we want to printf
12022                  * Inf/NaN for Inf/NaN, not their hexfp. */
12023                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12024                 if (UNLIKELY(hexfp)) {
12025                     /* This seriously overshoots in most cases, but
12026                      * better the undershooting.  Firstly, all bytes
12027                      * of the NV are not mantissa, some of them are
12028                      * exponent.  Secondly, for the reasonably common
12029                      * long doubles case, the "80-bit extended", two
12030                      * or six bytes of the NV are unused. */
12031                     need +=
12032                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12033                         2 + /* "0x" */
12034                         1 + /* the very unlikely carry */
12035                         1 + /* "1" */
12036                         1 + /* "." */
12037                         2 * NVSIZE + /* 2 hexdigits for each byte */
12038                         2 + /* "p+" */
12039                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12040                         1;   /* \0 */
12041 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12042                     /* However, for the "double double", we need more.
12043                      * Since each double has their own exponent, the
12044                      * doubles may float (haha) rather far from each
12045                      * other, and the number of required bits is much
12046                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12047                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12048                      *
12049                      * Need 2 hexdigits for each byte. */
12050                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12051                     /* the size for the exponent already added */
12052 #endif
12053 #ifdef USE_LOCALE_NUMERIC
12054                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12055                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12056                             need += SvLEN(PL_numeric_radix_sv);
12057                         RESTORE_LC_NUMERIC();
12058 #endif
12059                 }
12060                 else if (i > 0) {
12061                     need = BIT_DIGITS(i);
12062                 } /* if i < 0, the number of digits is hard to predict. */
12063             }
12064             need += has_precis ? precis : 6; /* known default */
12065
12066             if (need < width)
12067                 need = width;
12068
12069 #ifdef HAS_LDBL_SPRINTF_BUG
12070             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12071                with sfio - Allen <allens@cpan.org> */
12072
12073 #  ifdef DBL_MAX
12074 #    define MY_DBL_MAX DBL_MAX
12075 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12076 #    if DOUBLESIZE >= 8
12077 #      define MY_DBL_MAX 1.7976931348623157E+308L
12078 #    else
12079 #      define MY_DBL_MAX 3.40282347E+38L
12080 #    endif
12081 #  endif
12082
12083 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12084 #    define MY_DBL_MAX_BUG 1L
12085 #  else
12086 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12087 #  endif
12088
12089 #  ifdef DBL_MIN
12090 #    define MY_DBL_MIN DBL_MIN
12091 #  else  /* XXX guessing! -Allen */
12092 #    if DOUBLESIZE >= 8
12093 #      define MY_DBL_MIN 2.2250738585072014E-308L
12094 #    else
12095 #      define MY_DBL_MIN 1.17549435E-38L
12096 #    endif
12097 #  endif
12098
12099             if ((intsize == 'q') && (c == 'f') &&
12100                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12101                 (need < DBL_DIG)) {
12102                 /* it's going to be short enough that
12103                  * long double precision is not needed */
12104
12105                 if ((fv <= 0L) && (fv >= -0L))
12106                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12107                 else {
12108                     /* would use Perl_fp_class as a double-check but not
12109                      * functional on IRIX - see perl.h comments */
12110
12111                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12112                         /* It's within the range that a double can represent */
12113 #if defined(DBL_MAX) && !defined(DBL_MIN)
12114                         if ((fv >= ((long double)1/DBL_MAX)) ||
12115                             (fv <= (-(long double)1/DBL_MAX)))
12116 #endif
12117                         fix_ldbl_sprintf_bug = TRUE;
12118                     }
12119                 }
12120                 if (fix_ldbl_sprintf_bug == TRUE) {
12121                     double temp;
12122
12123                     intsize = 0;
12124                     temp = (double)fv;
12125                     fv = (NV)temp;
12126                 }
12127             }
12128
12129 #  undef MY_DBL_MAX
12130 #  undef MY_DBL_MAX_BUG
12131 #  undef MY_DBL_MIN
12132
12133 #endif /* HAS_LDBL_SPRINTF_BUG */
12134
12135             need += 20; /* fudge factor */
12136             if (PL_efloatsize < need) {
12137                 Safefree(PL_efloatbuf);
12138                 PL_efloatsize = need + 20; /* more fudge */
12139                 Newx(PL_efloatbuf, PL_efloatsize, char);
12140                 PL_efloatbuf[0] = '\0';
12141             }
12142
12143             if ( !(width || left || plus || alt) && fill != '0'
12144                  && has_precis && intsize != 'q'        /* Shortcuts */
12145                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12146                 /* See earlier comment about buggy Gconvert when digits,
12147                    aka precis is 0  */
12148                 if ( c == 'g' && precis ) {
12149                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12150                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12151                     /* May return an empty string for digits==0 */
12152                     if (*PL_efloatbuf) {
12153                         elen = strlen(PL_efloatbuf);
12154                         goto float_converted;
12155                     }
12156                 } else if ( c == 'f' && !precis ) {
12157                     if ((eptr = F0convert(fv, ebuf + sizeof ebuf, &elen)))
12158                         break;
12159                 }
12160             }
12161
12162             if (UNLIKELY(hexfp)) {
12163                 /* Hexadecimal floating point. */
12164                 char* p = PL_efloatbuf;
12165                 U8 vhex[VHEX_SIZE];
12166                 U8* v = vhex; /* working pointer to vhex */
12167                 U8* vend; /* pointer to one beyond last digit of vhex */
12168                 U8* vfnz = NULL; /* first non-zero */
12169                 const bool lower = (c == 'a');
12170                 /* At output the values of vhex (up to vend) will
12171                  * be mapped through the xdig to get the actual
12172                  * human-readable xdigits. */
12173                 const char* xdig = PL_hexdigit;
12174                 int zerotail = 0; /* how many extra zeros to append */
12175                 int exponent = 0; /* exponent of the floating point input */
12176
12177                 /* XXX: denormals, NaN, Inf.
12178                  *
12179                  * For example with denormals, (assuming the vanilla
12180                  * 64-bit double): the exponent is zero. 1xp-1074 is
12181                  * the smallest denormal and the smallest double, it
12182                  * should be output as 0x0.0000000000001p-1022 to
12183                  * match its internal structure. */
12184
12185                 /* Note: fv can be (and often is) long double.
12186                  * Here it is explicitly cast to NV. */
12187                 vend = S_hextract(aTHX_ (NV)fv, &exponent, vhex, NULL);
12188                 S_hextract(aTHX_ (NV)fv, &exponent, vhex, vend);
12189
12190 #if NVSIZE > DOUBLESIZE
12191 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12192                 /* In this case there is an implicit bit,
12193                  * and therefore the exponent is shifted shift by one. */
12194                 exponent--;
12195 #  else
12196                 /* In this case there is no implicit bit,
12197                  * and the exponent is shifted by the first xdigit. */
12198                 exponent -= 4;
12199 #  endif
12200 #endif
12201
12202                 if (fv < 0)
12203                     *p++ = '-';
12204                 else if (plus)
12205                     *p++ = plus;
12206                 *p++ = '0';
12207                 if (lower) {
12208                     *p++ = 'x';
12209                 }
12210                 else {
12211                     *p++ = 'X';
12212                     xdig += 16; /* Use uppercase hex. */
12213                 }
12214
12215                 /* Find the first non-zero xdigit. */
12216                 for (v = vhex; v < vend; v++) {
12217                     if (*v) {
12218                         vfnz = v;
12219                         break;
12220                     }
12221                 }
12222
12223                 if (vfnz) {
12224                     U8* vlnz = NULL; /* The last non-zero. */
12225
12226                     /* Find the last non-zero xdigit. */
12227                     for (v = vend - 1; v >= vhex; v--) {
12228                         if (*v) {
12229                             vlnz = v;
12230                             break;
12231                         }
12232                     }
12233
12234 #if NVSIZE == DOUBLESIZE
12235                     if (fv != 0.0)
12236                         exponent--;
12237 #endif
12238
12239                     if (precis > 0) {
12240                         v = vhex + precis + 1;
12241                         if (v < vend) {
12242                             /* Round away from zero: if the tail
12243                              * beyond the precis xdigits is equal to
12244                              * or greater than 0x8000... */
12245                             bool round = *v > 0x8;
12246                             if (!round && *v == 0x8) {
12247                                 for (v++; v < vend; v++) {
12248                                     if (*v) {
12249                                         round = TRUE;
12250                                         break;
12251                                     }
12252                                 }
12253                             }
12254                             if (round) {
12255                                 for (v = vhex + precis; v >= vhex; v--) {
12256                                     if (*v < 0xF) {
12257                                         (*v)++;
12258                                         break;
12259                                     }
12260                                     *v = 0;
12261                                     if (v == vhex) {
12262                                         /* If the carry goes all the way to
12263                                          * the front, we need to output
12264                                          * a single '1'. This goes against
12265                                          * the "xdigit and then radix"
12266                                          * but since this is "cannot happen"
12267                                          * category, that is probably good. */
12268                                         *p++ = xdig[1];
12269                                     }
12270                                 }
12271                             }
12272                             /* The new effective "last non zero". */
12273                             vlnz = vhex + precis;
12274                         }
12275                         else {
12276                             zerotail = precis - (vlnz - vhex);
12277                         }
12278                     }
12279
12280                     v = vhex;
12281                     *p++ = xdig[*v++];
12282
12283                     /* The radix is always output after the first
12284                      * non-zero xdigit, or if alt.  */
12285                     if (vfnz < vlnz || alt) {
12286 #ifndef USE_LOCALE_NUMERIC
12287                         *p++ = '.';
12288 #else
12289                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12290                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12291                             STRLEN n;
12292                             const char* r = SvPV(PL_numeric_radix_sv, n);
12293                             Copy(r, p, n, char);
12294                             p += n;
12295                         }
12296                         else {
12297                             *p++ = '.';
12298                         }
12299                         RESTORE_LC_NUMERIC();
12300 #endif
12301                     }
12302
12303                     while (v <= vlnz)
12304                         *p++ = xdig[*v++];
12305
12306                     while (zerotail--)
12307                         *p++ = '0';
12308                 }
12309                 else {
12310                     *p++ = '0';
12311                     exponent = 0;
12312                 }
12313
12314                 elen = p - PL_efloatbuf;
12315                 elen += my_snprintf(p, PL_efloatsize - elen,
12316                                     "%c%+d", lower ? 'p' : 'P',
12317                                     exponent);
12318
12319                 if (elen < width) {
12320                     if (left) {
12321                         /* Pad the back with spaces. */
12322                         memset(PL_efloatbuf + elen, ' ', width - elen);
12323                     }
12324                     else if (fill == '0') {
12325                         /* Insert the zeros between the "0x" and
12326                          * the digits, otherwise we end up with
12327                          * "0000xHHH..." */
12328                         STRLEN nzero = width - elen;
12329                         char* zerox = PL_efloatbuf + 2;
12330                         Move(zerox, zerox + nzero,  elen - 2, char);
12331                         memset(zerox, fill, nzero);
12332                     }
12333                     else {
12334                         /* Move it to the right. */
12335                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12336                              elen, char);
12337                         /* Pad the front with spaces. */
12338                         memset(PL_efloatbuf, ' ', width - elen);
12339                     }
12340                     elen = width;
12341                 }
12342             }
12343             else
12344                 elen = S_infnan_2pv(fv, PL_efloatbuf, PL_efloatsize);
12345
12346             if (elen == 0) {
12347                 char *ptr = ebuf + sizeof ebuf;
12348                 *--ptr = '\0';
12349                 *--ptr = c;
12350 #if defined(USE_QUADMATH)
12351                 if (intsize == 'q') {
12352                     /* "g" -> "Qg" */
12353                     *--ptr = 'Q';
12354                 }
12355                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12356 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12357                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12358                  * not USE_LONG_DOUBLE and NVff.  In other words,
12359                  * this needs to work without USE_LONG_DOUBLE. */
12360                 if (intsize == 'q') {
12361                     /* Copy the one or more characters in a long double
12362                      * format before the 'base' ([efgEFG]) character to
12363                      * the format string. */
12364                     static char const ldblf[] = PERL_PRIfldbl;
12365                     char const *p = ldblf + sizeof(ldblf) - 3;
12366                     while (p >= ldblf) { *--ptr = *p--; }
12367                 }
12368 #endif
12369                 if (has_precis) {
12370                     base = precis;
12371                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12372                     *--ptr = '.';
12373                 }
12374                 if (width) {
12375                     base = width;
12376                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12377                 }
12378                 if (fill == '0')
12379                     *--ptr = fill;
12380                 if (left)
12381                     *--ptr = '-';
12382                 if (plus)
12383                     *--ptr = plus;
12384                 if (alt)
12385                     *--ptr = '#';
12386                 *--ptr = '%';
12387
12388                 /* No taint.  Otherwise we are in the strange situation
12389                  * where printf() taints but print($float) doesn't.
12390                  * --jhi */
12391
12392                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12393
12394                 /* hopefully the above makes ptr a very constrained format
12395                  * that is safe to use, even though it's not literal */
12396                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12397 #ifdef USE_QUADMATH
12398                 {
12399                     const char* qfmt = quadmath_format_single(ptr);
12400                     if (!qfmt)
12401                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12402                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12403                                              qfmt, fv);
12404                     if ((IV)elen == -1)
12405                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s|'", qfmt);
12406                     if (qfmt != ptr)
12407                         Safefree(qfmt);
12408                 }
12409 #elif defined(HAS_LONG_DOUBLE)
12410                 elen = ((intsize == 'q')
12411                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12412                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12413 #else
12414                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12415 #endif
12416                 GCC_DIAG_RESTORE;
12417             }
12418
12419         float_converted:
12420             eptr = PL_efloatbuf;
12421             assert((IV)elen > 0); /* here zero elen is bad */
12422
12423 #ifdef USE_LOCALE_NUMERIC
12424             /* If the decimal point character in the string is UTF-8, make the
12425              * output utf8 */
12426             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12427                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12428             {
12429                 is_utf8 = TRUE;
12430             }
12431 #endif
12432
12433             break;
12434
12435             /* SPECIAL */
12436
12437         case 'n':
12438             if (vectorize)
12439                 goto unknown;
12440             i = SvCUR(sv) - origlen;
12441             if (args) {
12442                 switch (intsize) {
12443                 case 'c':       *(va_arg(*args, char*)) = i; break;
12444                 case 'h':       *(va_arg(*args, short*)) = i; break;
12445                 default:        *(va_arg(*args, int*)) = i; break;
12446                 case 'l':       *(va_arg(*args, long*)) = i; break;
12447                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12448                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12449 #ifdef HAS_PTRDIFF_T
12450                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12451 #endif
12452 #ifdef I_STDINT
12453                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12454 #endif
12455                 case 'q':
12456 #if IVSIZE >= 8
12457                                 *(va_arg(*args, Quad_t*)) = i; break;
12458 #else
12459                                 goto unknown;
12460 #endif
12461                 }
12462             }
12463             else
12464                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12465             continue;   /* not "break" */
12466
12467             /* UNKNOWN */
12468
12469         default:
12470       unknown:
12471             if (!args
12472                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12473                 && ckWARN(WARN_PRINTF))
12474             {
12475                 SV * const msg = sv_newmortal();
12476                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12477                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12478                 if (fmtstart < patend) {
12479                     const char * const fmtend = q < patend ? q : patend;
12480                     const char * f;
12481                     sv_catpvs(msg, "\"%");
12482                     for (f = fmtstart; f < fmtend; f++) {
12483                         if (isPRINT(*f)) {
12484                             sv_catpvn_nomg(msg, f, 1);
12485                         } else {
12486                             Perl_sv_catpvf(aTHX_ msg,
12487                                            "\\%03"UVof, (UV)*f & 0xFF);
12488                         }
12489                     }
12490                     sv_catpvs(msg, "\"");
12491                 } else {
12492                     sv_catpvs(msg, "end of string");
12493                 }
12494                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12495             }
12496
12497             /* output mangled stuff ... */
12498             if (c == '\0')
12499                 --q;
12500             eptr = p;
12501             elen = q - p;
12502
12503             /* ... right here, because formatting flags should not apply */
12504             SvGROW(sv, SvCUR(sv) + elen + 1);
12505             p = SvEND(sv);
12506             Copy(eptr, p, elen, char);
12507             p += elen;
12508             *p = '\0';
12509             SvCUR_set(sv, p - SvPVX_const(sv));
12510             svix = osvix;
12511             continue;   /* not "break" */
12512         }
12513
12514         if (is_utf8 != has_utf8) {
12515             if (is_utf8) {
12516                 if (SvCUR(sv))
12517                     sv_utf8_upgrade(sv);
12518             }
12519             else {
12520                 const STRLEN old_elen = elen;
12521                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12522                 sv_utf8_upgrade(nsv);
12523                 eptr = SvPVX_const(nsv);
12524                 elen = SvCUR(nsv);
12525
12526                 if (width) { /* fudge width (can't fudge elen) */
12527                     width += elen - old_elen;
12528                 }
12529                 is_utf8 = TRUE;
12530             }
12531         }
12532
12533         assert((IV)elen >= 0); /* here zero elen is fine */
12534         have = esignlen + zeros + elen;
12535         if (have < zeros)
12536             croak_memory_wrap();
12537
12538         need = (have > width ? have : width);
12539         gap = need - have;
12540
12541         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12542             croak_memory_wrap();
12543         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12544         p = SvEND(sv);
12545         if (esignlen && fill == '0') {
12546             int i;
12547             for (i = 0; i < (int)esignlen; i++)
12548                 *p++ = esignbuf[i];
12549         }
12550         if (gap && !left) {
12551             memset(p, fill, gap);
12552             p += gap;
12553         }
12554         if (esignlen && fill != '0') {
12555             int i;
12556             for (i = 0; i < (int)esignlen; i++)
12557                 *p++ = esignbuf[i];
12558         }
12559         if (zeros) {
12560             int i;
12561             for (i = zeros; i; i--)
12562                 *p++ = '0';
12563         }
12564         if (elen) {
12565             Copy(eptr, p, elen, char);
12566             p += elen;
12567         }
12568         if (gap && left) {
12569             memset(p, ' ', gap);
12570             p += gap;
12571         }
12572         if (vectorize) {
12573             if (veclen) {
12574                 Copy(dotstr, p, dotstrlen, char);
12575                 p += dotstrlen;
12576             }
12577             else
12578                 vectorize = FALSE;              /* done iterating over vecstr */
12579         }
12580         if (is_utf8)
12581             has_utf8 = TRUE;
12582         if (has_utf8)
12583             SvUTF8_on(sv);
12584         *p = '\0';
12585         SvCUR_set(sv, p - SvPVX_const(sv));
12586         if (vectorize) {
12587             esignlen = 0;
12588             goto vector;
12589         }
12590     }
12591
12592     /* Now that we've consumed all our printf format arguments (svix)
12593      * do we have things left on the stack that we didn't use?
12594      */
12595     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12596         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12597                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12598     }
12599
12600     SvTAINT(sv);
12601
12602     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12603                                each iteration. */
12604 }
12605
12606 /* =========================================================================
12607
12608 =head1 Cloning an interpreter
12609
12610 =cut
12611
12612 All the macros and functions in this section are for the private use of
12613 the main function, perl_clone().
12614
12615 The foo_dup() functions make an exact copy of an existing foo thingy.
12616 During the course of a cloning, a hash table is used to map old addresses
12617 to new addresses.  The table is created and manipulated with the
12618 ptr_table_* functions.
12619
12620  * =========================================================================*/
12621
12622
12623 #if defined(USE_ITHREADS)
12624
12625 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12626 #ifndef GpREFCNT_inc
12627 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12628 #endif
12629
12630
12631 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12632    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12633    If this changes, please unmerge ss_dup.
12634    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12635 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12636 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12637 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12638 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12639 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12640 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12641 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12642 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12643 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12644 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12645 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12646 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12647 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12648
12649 /* clone a parser */
12650
12651 yy_parser *
12652 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12653 {
12654     yy_parser *parser;
12655
12656     PERL_ARGS_ASSERT_PARSER_DUP;
12657
12658     if (!proto)
12659         return NULL;
12660
12661     /* look for it in the table first */
12662     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12663     if (parser)
12664         return parser;
12665
12666     /* create anew and remember what it is */
12667     Newxz(parser, 1, yy_parser);
12668     ptr_table_store(PL_ptr_table, proto, parser);
12669
12670     /* XXX these not yet duped */
12671     parser->old_parser = NULL;
12672     parser->stack = NULL;
12673     parser->ps = NULL;
12674     parser->stack_size = 0;
12675     /* XXX parser->stack->state = 0; */
12676
12677     /* XXX eventually, just Copy() most of the parser struct ? */
12678
12679     parser->lex_brackets = proto->lex_brackets;
12680     parser->lex_casemods = proto->lex_casemods;
12681     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12682                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12683     parser->lex_casestack = savepvn(proto->lex_casestack,
12684                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12685     parser->lex_defer   = proto->lex_defer;
12686     parser->lex_dojoin  = proto->lex_dojoin;
12687     parser->lex_formbrack = proto->lex_formbrack;
12688     parser->lex_inpat   = proto->lex_inpat;
12689     parser->lex_inwhat  = proto->lex_inwhat;
12690     parser->lex_op      = proto->lex_op;
12691     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12692     parser->lex_starts  = proto->lex_starts;
12693     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12694     parser->multi_close = proto->multi_close;
12695     parser->multi_open  = proto->multi_open;
12696     parser->multi_start = proto->multi_start;
12697     parser->multi_end   = proto->multi_end;
12698     parser->preambled   = proto->preambled;
12699     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12700     parser->linestr     = sv_dup_inc(proto->linestr, param);
12701     parser->expect      = proto->expect;
12702     parser->copline     = proto->copline;
12703     parser->last_lop_op = proto->last_lop_op;
12704     parser->lex_state   = proto->lex_state;
12705     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12706     /* rsfp_filters entries have fake IoDIRP() */
12707     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12708     parser->in_my       = proto->in_my;
12709     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12710     parser->error_count = proto->error_count;
12711
12712
12713     parser->linestr     = sv_dup_inc(proto->linestr, param);
12714
12715     {
12716         char * const ols = SvPVX(proto->linestr);
12717         char * const ls  = SvPVX(parser->linestr);
12718
12719         parser->bufptr      = ls + (proto->bufptr >= ols ?
12720                                     proto->bufptr -  ols : 0);
12721         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12722                                     proto->oldbufptr -  ols : 0);
12723         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12724                                     proto->oldoldbufptr -  ols : 0);
12725         parser->linestart   = ls + (proto->linestart >= ols ?
12726                                     proto->linestart -  ols : 0);
12727         parser->last_uni    = ls + (proto->last_uni >= ols ?
12728                                     proto->last_uni -  ols : 0);
12729         parser->last_lop    = ls + (proto->last_lop >= ols ?
12730                                     proto->last_lop -  ols : 0);
12731
12732         parser->bufend      = ls + SvCUR(parser->linestr);
12733     }
12734
12735     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12736
12737
12738     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12739     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12740     parser->nexttoke    = proto->nexttoke;
12741
12742     /* XXX should clone saved_curcop here, but we aren't passed
12743      * proto_perl; so do it in perl_clone_using instead */
12744
12745     return parser;
12746 }
12747
12748
12749 /* duplicate a file handle */
12750
12751 PerlIO *
12752 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12753 {
12754     PerlIO *ret;
12755
12756     PERL_ARGS_ASSERT_FP_DUP;
12757     PERL_UNUSED_ARG(type);
12758
12759     if (!fp)
12760         return (PerlIO*)NULL;
12761
12762     /* look for it in the table first */
12763     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12764     if (ret)
12765         return ret;
12766
12767     /* create anew and remember what it is */
12768     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12769     ptr_table_store(PL_ptr_table, fp, ret);
12770     return ret;
12771 }
12772
12773 /* duplicate a directory handle */
12774
12775 DIR *
12776 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12777 {
12778     DIR *ret;
12779
12780 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12781     DIR *pwd;
12782     const Direntry_t *dirent;
12783     char smallbuf[256];
12784     char *name = NULL;
12785     STRLEN len = 0;
12786     long pos;
12787 #endif
12788
12789     PERL_UNUSED_CONTEXT;
12790     PERL_ARGS_ASSERT_DIRP_DUP;
12791
12792     if (!dp)
12793         return (DIR*)NULL;
12794
12795     /* look for it in the table first */
12796     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12797     if (ret)
12798         return ret;
12799
12800 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12801
12802     PERL_UNUSED_ARG(param);
12803
12804     /* create anew */
12805
12806     /* open the current directory (so we can switch back) */
12807     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12808
12809     /* chdir to our dir handle and open the present working directory */
12810     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12811         PerlDir_close(pwd);
12812         return (DIR *)NULL;
12813     }
12814     /* Now we should have two dir handles pointing to the same dir. */
12815
12816     /* Be nice to the calling code and chdir back to where we were. */
12817     /* XXX If this fails, then what? */
12818     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12819
12820     /* We have no need of the pwd handle any more. */
12821     PerlDir_close(pwd);
12822
12823 #ifdef DIRNAMLEN
12824 # define d_namlen(d) (d)->d_namlen
12825 #else
12826 # define d_namlen(d) strlen((d)->d_name)
12827 #endif
12828     /* Iterate once through dp, to get the file name at the current posi-
12829        tion. Then step back. */
12830     pos = PerlDir_tell(dp);
12831     if ((dirent = PerlDir_read(dp))) {
12832         len = d_namlen(dirent);
12833         if (len <= sizeof smallbuf) name = smallbuf;
12834         else Newx(name, len, char);
12835         Move(dirent->d_name, name, len, char);
12836     }
12837     PerlDir_seek(dp, pos);
12838
12839     /* Iterate through the new dir handle, till we find a file with the
12840        right name. */
12841     if (!dirent) /* just before the end */
12842         for(;;) {
12843             pos = PerlDir_tell(ret);
12844             if (PerlDir_read(ret)) continue; /* not there yet */
12845             PerlDir_seek(ret, pos); /* step back */
12846             break;
12847         }
12848     else {
12849         const long pos0 = PerlDir_tell(ret);
12850         for(;;) {
12851             pos = PerlDir_tell(ret);
12852             if ((dirent = PerlDir_read(ret))) {
12853                 if (len == (STRLEN)d_namlen(dirent)
12854                     && memEQ(name, dirent->d_name, len)) {
12855                     /* found it */
12856                     PerlDir_seek(ret, pos); /* step back */
12857                     break;
12858                 }
12859                 /* else we are not there yet; keep iterating */
12860             }
12861             else { /* This is not meant to happen. The best we can do is
12862                       reset the iterator to the beginning. */
12863                 PerlDir_seek(ret, pos0);
12864                 break;
12865             }
12866         }
12867     }
12868 #undef d_namlen
12869
12870     if (name && name != smallbuf)
12871         Safefree(name);
12872 #endif
12873
12874 #ifdef WIN32
12875     ret = win32_dirp_dup(dp, param);
12876 #endif
12877
12878     /* pop it in the pointer table */
12879     if (ret)
12880         ptr_table_store(PL_ptr_table, dp, ret);
12881
12882     return ret;
12883 }
12884
12885 /* duplicate a typeglob */
12886
12887 GP *
12888 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12889 {
12890     GP *ret;
12891
12892     PERL_ARGS_ASSERT_GP_DUP;
12893
12894     if (!gp)
12895         return (GP*)NULL;
12896     /* look for it in the table first */
12897     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12898     if (ret)
12899         return ret;
12900
12901     /* create anew and remember what it is */
12902     Newxz(ret, 1, GP);
12903     ptr_table_store(PL_ptr_table, gp, ret);
12904
12905     /* clone */
12906     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12907        on Newxz() to do this for us.  */
12908     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12909     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12910     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12911     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12912     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12913     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12914     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12915     ret->gp_cvgen       = gp->gp_cvgen;
12916     ret->gp_line        = gp->gp_line;
12917     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12918     return ret;
12919 }
12920
12921 /* duplicate a chain of magic */
12922
12923 MAGIC *
12924 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12925 {
12926     MAGIC *mgret = NULL;
12927     MAGIC **mgprev_p = &mgret;
12928
12929     PERL_ARGS_ASSERT_MG_DUP;
12930
12931     for (; mg; mg = mg->mg_moremagic) {
12932         MAGIC *nmg;
12933
12934         if ((param->flags & CLONEf_JOIN_IN)
12935                 && mg->mg_type == PERL_MAGIC_backref)
12936             /* when joining, we let the individual SVs add themselves to
12937              * backref as needed. */
12938             continue;
12939
12940         Newx(nmg, 1, MAGIC);
12941         *mgprev_p = nmg;
12942         mgprev_p = &(nmg->mg_moremagic);
12943
12944         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12945            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12946            from the original commit adding Perl_mg_dup() - revision 4538.
12947            Similarly there is the annotation "XXX random ptr?" next to the
12948            assignment to nmg->mg_ptr.  */
12949         *nmg = *mg;
12950
12951         /* FIXME for plugins
12952         if (nmg->mg_type == PERL_MAGIC_qr) {
12953             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12954         }
12955         else
12956         */
12957         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12958                           ? nmg->mg_type == PERL_MAGIC_backref
12959                                 /* The backref AV has its reference
12960                                  * count deliberately bumped by 1 */
12961                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12962                                                     nmg->mg_obj, param))
12963                                 : sv_dup_inc(nmg->mg_obj, param)
12964                           : sv_dup(nmg->mg_obj, param);
12965
12966         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12967             if (nmg->mg_len > 0) {
12968                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12969                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12970                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12971                 {
12972                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12973                     sv_dup_inc_multiple((SV**)(namtp->table),
12974                                         (SV**)(namtp->table), NofAMmeth, param);
12975                 }
12976             }
12977             else if (nmg->mg_len == HEf_SVKEY)
12978                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12979         }
12980         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12981             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12982         }
12983     }
12984     return mgret;
12985 }
12986
12987 #endif /* USE_ITHREADS */
12988
12989 struct ptr_tbl_arena {
12990     struct ptr_tbl_arena *next;
12991     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
12992 };
12993
12994 /* create a new pointer-mapping table */
12995
12996 PTR_TBL_t *
12997 Perl_ptr_table_new(pTHX)
12998 {
12999     PTR_TBL_t *tbl;
13000     PERL_UNUSED_CONTEXT;
13001
13002     Newx(tbl, 1, PTR_TBL_t);
13003     tbl->tbl_max        = 511;
13004     tbl->tbl_items      = 0;
13005     tbl->tbl_arena      = NULL;
13006     tbl->tbl_arena_next = NULL;
13007     tbl->tbl_arena_end  = NULL;
13008     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13009     return tbl;
13010 }
13011
13012 #define PTR_TABLE_HASH(ptr) \
13013   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13014
13015 /* map an existing pointer using a table */
13016
13017 STATIC PTR_TBL_ENT_t *
13018 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13019 {
13020     PTR_TBL_ENT_t *tblent;
13021     const UV hash = PTR_TABLE_HASH(sv);
13022
13023     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13024
13025     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13026     for (; tblent; tblent = tblent->next) {
13027         if (tblent->oldval == sv)
13028             return tblent;
13029     }
13030     return NULL;
13031 }
13032
13033 void *
13034 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13035 {
13036     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13037
13038     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13039     PERL_UNUSED_CONTEXT;
13040
13041     return tblent ? tblent->newval : NULL;
13042 }
13043
13044 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13045  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13046  * the core's typical use of ptr_tables in thread cloning. */
13047
13048 void
13049 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13050 {
13051     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13052
13053     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13054     PERL_UNUSED_CONTEXT;
13055
13056     if (tblent) {
13057         tblent->newval = newsv;
13058     } else {
13059         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13060
13061         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13062             struct ptr_tbl_arena *new_arena;
13063
13064             Newx(new_arena, 1, struct ptr_tbl_arena);
13065             new_arena->next = tbl->tbl_arena;
13066             tbl->tbl_arena = new_arena;
13067             tbl->tbl_arena_next = new_arena->array;
13068             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13069         }
13070
13071         tblent = tbl->tbl_arena_next++;
13072
13073         tblent->oldval = oldsv;
13074         tblent->newval = newsv;
13075         tblent->next = tbl->tbl_ary[entry];
13076         tbl->tbl_ary[entry] = tblent;
13077         tbl->tbl_items++;
13078         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13079             ptr_table_split(tbl);
13080     }
13081 }
13082
13083 /* double the hash bucket size of an existing ptr table */
13084
13085 void
13086 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13087 {
13088     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13089     const UV oldsize = tbl->tbl_max + 1;
13090     UV newsize = oldsize * 2;
13091     UV i;
13092
13093     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13094     PERL_UNUSED_CONTEXT;
13095
13096     Renew(ary, newsize, PTR_TBL_ENT_t*);
13097     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13098     tbl->tbl_max = --newsize;
13099     tbl->tbl_ary = ary;
13100     for (i=0; i < oldsize; i++, ary++) {
13101         PTR_TBL_ENT_t **entp = ary;
13102         PTR_TBL_ENT_t *ent = *ary;
13103         PTR_TBL_ENT_t **curentp;
13104         if (!ent)
13105             continue;
13106         curentp = ary + oldsize;
13107         do {
13108             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13109                 *entp = ent->next;
13110                 ent->next = *curentp;
13111                 *curentp = ent;
13112             }
13113             else
13114                 entp = &ent->next;
13115             ent = *entp;
13116         } while (ent);
13117     }
13118 }
13119
13120 /* remove all the entries from a ptr table */
13121 /* Deprecated - will be removed post 5.14 */
13122
13123 void
13124 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13125 {
13126     PERL_UNUSED_CONTEXT;
13127     if (tbl && tbl->tbl_items) {
13128         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13129
13130         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent **);
13131
13132         while (arena) {
13133             struct ptr_tbl_arena *next = arena->next;
13134
13135             Safefree(arena);
13136             arena = next;
13137         };
13138
13139         tbl->tbl_items = 0;
13140         tbl->tbl_arena = NULL;
13141         tbl->tbl_arena_next = NULL;
13142         tbl->tbl_arena_end = NULL;
13143     }
13144 }
13145
13146 /* clear and free a ptr table */
13147
13148 void
13149 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13150 {
13151     struct ptr_tbl_arena *arena;
13152
13153     PERL_UNUSED_CONTEXT;
13154
13155     if (!tbl) {
13156         return;
13157     }
13158
13159     arena = tbl->tbl_arena;
13160
13161     while (arena) {
13162         struct ptr_tbl_arena *next = arena->next;
13163
13164         Safefree(arena);
13165         arena = next;
13166     }
13167
13168     Safefree(tbl->tbl_ary);
13169     Safefree(tbl);
13170 }
13171
13172 #if defined(USE_ITHREADS)
13173
13174 void
13175 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13176 {
13177     PERL_ARGS_ASSERT_RVPV_DUP;
13178
13179     assert(!isREGEXP(sstr));
13180     if (SvROK(sstr)) {
13181         if (SvWEAKREF(sstr)) {
13182             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13183             if (param->flags & CLONEf_JOIN_IN) {
13184                 /* if joining, we add any back references individually rather
13185                  * than copying the whole backref array */
13186                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13187             }
13188         }
13189         else
13190             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13191     }
13192     else if (SvPVX_const(sstr)) {
13193         /* Has something there */
13194         if (SvLEN(sstr)) {
13195             /* Normal PV - clone whole allocated space */
13196             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13197             /* sstr may not be that normal, but actually copy on write.
13198                But we are a true, independent SV, so:  */
13199             SvIsCOW_off(dstr);
13200         }
13201         else {
13202             /* Special case - not normally malloced for some reason */
13203             if (isGV_with_GP(sstr)) {
13204                 /* Don't need to do anything here.  */
13205             }
13206             else if ((SvIsCOW(sstr))) {
13207                 /* A "shared" PV - clone it as "shared" PV */
13208                 SvPV_set(dstr,
13209                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13210                                          param)));
13211             }
13212             else {
13213                 /* Some other special case - random pointer */
13214                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13215             }
13216         }
13217     }
13218     else {
13219         /* Copy the NULL */
13220         SvPV_set(dstr, NULL);
13221     }
13222 }
13223
13224 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13225 static SV **
13226 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13227                       SSize_t items, CLONE_PARAMS *const param)
13228 {
13229     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13230
13231     while (items-- > 0) {
13232         *dest++ = sv_dup_inc(*source++, param);
13233     }
13234
13235     return dest;
13236 }
13237
13238 /* duplicate an SV of any type (including AV, HV etc) */
13239
13240 static SV *
13241 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13242 {
13243     dVAR;
13244     SV *dstr;
13245
13246     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13247
13248     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13249 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13250         abort();
13251 #endif
13252         return NULL;
13253     }
13254     /* look for it in the table first */
13255     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13256     if (dstr)
13257         return dstr;
13258
13259     if(param->flags & CLONEf_JOIN_IN) {
13260         /** We are joining here so we don't want do clone
13261             something that is bad **/
13262         if (SvTYPE(sstr) == SVt_PVHV) {
13263             const HEK * const hvname = HvNAME_HEK(sstr);
13264             if (hvname) {
13265                 /** don't clone stashes if they already exist **/
13266                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13267                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13268                 ptr_table_store(PL_ptr_table, sstr, dstr);
13269                 return dstr;
13270             }
13271         }
13272         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13273             HV *stash = GvSTASH(sstr);
13274             const HEK * hvname;
13275             if (stash && (hvname = HvNAME_HEK(stash))) {
13276                 /** don't clone GVs if they already exist **/
13277                 SV **svp;
13278                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13279                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13280                 svp = hv_fetch(
13281                         stash, GvNAME(sstr),
13282                         GvNAMEUTF8(sstr)
13283                             ? -GvNAMELEN(sstr)
13284                             :  GvNAMELEN(sstr),
13285                         0
13286                       );
13287                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13288                     ptr_table_store(PL_ptr_table, sstr, *svp);
13289                     return *svp;
13290                 }
13291             }
13292         }
13293     }
13294
13295     /* create anew and remember what it is */
13296     new_SV(dstr);
13297
13298 #ifdef DEBUG_LEAKING_SCALARS
13299     dstr->sv_debug_optype = sstr->sv_debug_optype;
13300     dstr->sv_debug_line = sstr->sv_debug_line;
13301     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13302     dstr->sv_debug_parent = (SV*)sstr;
13303     FREE_SV_DEBUG_FILE(dstr);
13304     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13305 #endif
13306
13307     ptr_table_store(PL_ptr_table, sstr, dstr);
13308
13309     /* clone */
13310     SvFLAGS(dstr)       = SvFLAGS(sstr);
13311     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13312     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13313
13314 #ifdef DEBUGGING
13315     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13316         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13317                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13318 #endif
13319
13320     /* don't clone objects whose class has asked us not to */
13321     if (SvOBJECT(sstr) && !SvPAD_NAME(sstr)
13322      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13323     {
13324         SvFLAGS(dstr) = 0;
13325         return dstr;
13326     }
13327
13328     switch (SvTYPE(sstr)) {
13329     case SVt_NULL:
13330         SvANY(dstr)     = NULL;
13331         break;
13332     case SVt_IV:
13333         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
13334         if(SvROK(sstr)) {
13335             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13336         } else {
13337             SvIV_set(dstr, SvIVX(sstr));
13338         }
13339         break;
13340     case SVt_NV:
13341 #if NVSIZE <= IVSIZE
13342         SvANY(dstr) = (XPVNV*)((char*)&(dstr->sv_u.svu_nv) - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv));
13343 #else
13344         SvANY(dstr)     = new_XNV();
13345 #endif
13346         SvNV_set(dstr, SvNVX(sstr));
13347         break;
13348     default:
13349         {
13350             /* These are all the types that need complex bodies allocating.  */
13351             void *new_body;
13352             const svtype sv_type = SvTYPE(sstr);
13353             const struct body_details *const sv_type_details
13354                 = bodies_by_type + sv_type;
13355
13356             switch (sv_type) {
13357             default:
13358                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13359                 break;
13360
13361             case SVt_PVGV:
13362             case SVt_PVIO:
13363             case SVt_PVFM:
13364             case SVt_PVHV:
13365             case SVt_PVAV:
13366             case SVt_PVCV:
13367             case SVt_PVLV:
13368             case SVt_REGEXP:
13369             case SVt_PVMG:
13370             case SVt_PVNV:
13371             case SVt_PVIV:
13372             case SVt_INVLIST:
13373             case SVt_PV:
13374                 assert(sv_type_details->body_size);
13375                 if (sv_type_details->arena) {
13376                     new_body_inline(new_body, sv_type);
13377                     new_body
13378                         = (void*)((char*)new_body - sv_type_details->offset);
13379                 } else {
13380                     new_body = new_NOARENA(sv_type_details);
13381                 }
13382             }
13383             assert(new_body);
13384             SvANY(dstr) = new_body;
13385
13386 #ifndef PURIFY
13387             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13388                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13389                  sv_type_details->copy, char);
13390 #else
13391             Copy(((char*)SvANY(sstr)),
13392                  ((char*)SvANY(dstr)),
13393                  sv_type_details->body_size + sv_type_details->offset, char);
13394 #endif
13395
13396             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13397                 && !isGV_with_GP(dstr)
13398                 && !isREGEXP(dstr)
13399                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13400                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13401
13402             /* The Copy above means that all the source (unduplicated) pointers
13403                are now in the destination.  We can check the flags and the
13404                pointers in either, but it's possible that there's less cache
13405                missing by always going for the destination.
13406                FIXME - instrument and check that assumption  */
13407             if (sv_type >= SVt_PVMG) {
13408                 if ((sv_type == SVt_PVMG) && SvPAD_OUR(dstr)) {
13409                     SvOURSTASH_set(dstr, hv_dup_inc(SvOURSTASH(dstr), param));
13410                 } else if (sv_type == SVt_PVAV && AvPAD_NAMELIST(dstr)) {
13411                     NOOP;
13412                 } else if (SvMAGIC(dstr))
13413                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13414                 if (SvOBJECT(dstr) && !SvPAD_NAME(dstr) && SvSTASH(dstr))
13415                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13416                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13417             }
13418
13419             /* The cast silences a GCC warning about unhandled types.  */
13420             switch ((int)sv_type) {
13421             case SVt_PV:
13422                 break;
13423             case SVt_PVIV:
13424                 break;
13425             case SVt_PVNV:
13426                 break;
13427             case SVt_PVMG:
13428                 break;
13429             case SVt_REGEXP:
13430               duprex:
13431                 /* FIXME for plugins */
13432                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13433                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13434                 break;
13435             case SVt_PVLV:
13436                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13437                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13438                     LvTARG(dstr) = dstr;
13439                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13440                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13441                 else
13442                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13443                 if (isREGEXP(sstr)) goto duprex;
13444             case SVt_PVGV:
13445                 /* non-GP case already handled above */
13446                 if(isGV_with_GP(sstr)) {
13447                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13448                     /* Don't call sv_add_backref here as it's going to be
13449                        created as part of the magic cloning of the symbol
13450                        table--unless this is during a join and the stash
13451                        is not actually being cloned.  */
13452                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13453                        at the point of this comment.  */
13454                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13455                     if (param->flags & CLONEf_JOIN_IN)
13456                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13457                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13458                     (void)GpREFCNT_inc(GvGP(dstr));
13459                 }
13460                 break;
13461             case SVt_PVIO:
13462                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13463                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13464                     /* I have no idea why fake dirp (rsfps)
13465                        should be treated differently but otherwise
13466                        we end up with leaks -- sky*/
13467                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13468                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13469                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13470                 } else {
13471                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13472                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13473                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13474                     if (IoDIRP(dstr)) {
13475                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13476                     } else {
13477                         NOOP;
13478                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13479                     }
13480                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13481                 }
13482                 if (IoOFP(dstr) == IoIFP(sstr))
13483                     IoOFP(dstr) = IoIFP(dstr);
13484                 else
13485                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13486                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13487                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13488                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13489                 break;
13490             case SVt_PVAV:
13491                 /* avoid cloning an empty array */
13492                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13493                     SV **dst_ary, **src_ary;
13494                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13495
13496                     src_ary = AvARRAY((const AV *)sstr);
13497                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13498                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13499                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13500                     AvALLOC((const AV *)dstr) = dst_ary;
13501                     if (AvREAL((const AV *)sstr)) {
13502                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13503                                                       param);
13504                     }
13505                     else {
13506                         while (items-- > 0)
13507                             *dst_ary++ = sv_dup(*src_ary++, param);
13508                     }
13509                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13510                     while (items-- > 0) {
13511                         *dst_ary++ = &PL_sv_undef;
13512                     }
13513                 }
13514                 else {
13515                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13516                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13517                     AvMAX(  (const AV *)dstr)   = -1;
13518                     AvFILLp((const AV *)dstr)   = -1;
13519                 }
13520                 break;
13521             case SVt_PVHV:
13522                 if (HvARRAY((const HV *)sstr)) {
13523                     STRLEN i = 0;
13524                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13525                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13526                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13527                     char *darray;
13528                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13529                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13530                         char);
13531                     HvARRAY(dstr) = (HE**)darray;
13532                     while (i <= sxhv->xhv_max) {
13533                         const HE * const source = HvARRAY(sstr)[i];
13534                         HvARRAY(dstr)[i] = source
13535                             ? he_dup(source, sharekeys, param) : 0;
13536                         ++i;
13537                     }
13538                     if (SvOOK(sstr)) {
13539                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13540                         struct xpvhv_aux * const daux = HvAUX(dstr);
13541                         /* This flag isn't copied.  */
13542                         SvOOK_on(dstr);
13543
13544                         if (saux->xhv_name_count) {
13545                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13546                             const I32 count
13547                              = saux->xhv_name_count < 0
13548                                 ? -saux->xhv_name_count
13549                                 :  saux->xhv_name_count;
13550                             HEK **shekp = sname + count;
13551                             HEK **dhekp;
13552                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13553                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13554                             while (shekp-- > sname) {
13555                                 dhekp--;
13556                                 *dhekp = hek_dup(*shekp, param);
13557                             }
13558                         }
13559                         else {
13560                             daux->xhv_name_u.xhvnameu_name
13561                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13562                                           param);
13563                         }
13564                         daux->xhv_name_count = saux->xhv_name_count;
13565
13566                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13567                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13568 #ifdef PERL_HASH_RANDOMIZE_KEYS
13569                         daux->xhv_rand = saux->xhv_rand;
13570                         daux->xhv_last_rand = saux->xhv_last_rand;
13571 #endif
13572                         daux->xhv_riter = saux->xhv_riter;
13573                         daux->xhv_eiter = saux->xhv_eiter
13574                             ? he_dup(saux->xhv_eiter,
13575                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13576                         /* backref array needs refcnt=2; see sv_add_backref */
13577                         daux->xhv_backreferences =
13578                             (param->flags & CLONEf_JOIN_IN)
13579                                 /* when joining, we let the individual GVs and
13580                                  * CVs add themselves to backref as
13581                                  * needed. This avoids pulling in stuff
13582                                  * that isn't required, and simplifies the
13583                                  * case where stashes aren't cloned back
13584                                  * if they already exist in the parent
13585                                  * thread */
13586                             ? NULL
13587                             : saux->xhv_backreferences
13588                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13589                                     ? MUTABLE_AV(SvREFCNT_inc(
13590                                           sv_dup_inc((const SV *)
13591                                             saux->xhv_backreferences, param)))
13592                                     : MUTABLE_AV(sv_dup((const SV *)
13593                                             saux->xhv_backreferences, param))
13594                                 : 0;
13595
13596                         daux->xhv_mro_meta = saux->xhv_mro_meta
13597                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13598                             : 0;
13599
13600                         /* Record stashes for possible cloning in Perl_clone(). */
13601                         if (HvNAME(sstr))
13602                             av_push(param->stashes, dstr);
13603                     }
13604                 }
13605                 else
13606                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13607                 break;
13608             case SVt_PVCV:
13609                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13610                     CvDEPTH(dstr) = 0;
13611                 }
13612                 /* FALLTHROUGH */
13613             case SVt_PVFM:
13614                 /* NOTE: not refcounted */
13615                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13616                     hv_dup(CvSTASH(dstr), param);
13617                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13618                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13619                 if (!CvISXSUB(dstr)) {
13620                     OP_REFCNT_LOCK;
13621                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13622                     OP_REFCNT_UNLOCK;
13623                     CvSLABBED_off(dstr);
13624                 } else if (CvCONST(dstr)) {
13625                     CvXSUBANY(dstr).any_ptr =
13626                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13627                 }
13628                 assert(!CvSLABBED(dstr));
13629                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13630                 if (CvNAMED(dstr))
13631                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13632                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13633                 /* don't dup if copying back - CvGV isn't refcounted, so the
13634                  * duped GV may never be freed. A bit of a hack! DAPM */
13635                 else
13636                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13637                     CvCVGV_RC(dstr)
13638                     ? gv_dup_inc(CvGV(sstr), param)
13639                     : (param->flags & CLONEf_JOIN_IN)
13640                         ? NULL
13641                         : gv_dup(CvGV(sstr), param);
13642
13643                 if (!CvISXSUB(sstr)) {
13644                     PADLIST * padlist = CvPADLIST(sstr);
13645                     if(padlist)
13646                         padlist = padlist_dup(padlist, param);
13647                     CvPADLIST_set(dstr, padlist);
13648                 } else
13649 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13650                     PoisonPADLIST(dstr);
13651
13652                 CvOUTSIDE(dstr) =
13653                     CvWEAKOUTSIDE(sstr)
13654                     ? cv_dup(    CvOUTSIDE(dstr), param)
13655                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13656                 break;
13657             }
13658         }
13659     }
13660
13661     return dstr;
13662  }
13663
13664 SV *
13665 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13666 {
13667     PERL_ARGS_ASSERT_SV_DUP_INC;
13668     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13669 }
13670
13671 SV *
13672 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13673 {
13674     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13675     PERL_ARGS_ASSERT_SV_DUP;
13676
13677     /* Track every SV that (at least initially) had a reference count of 0.
13678        We need to do this by holding an actual reference to it in this array.
13679        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13680        (akin to the stashes hash, and the perl stack), we come unstuck if
13681        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13682        thread) is manipulated in a CLONE method, because CLONE runs before the
13683        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13684        (and fix things up by giving each a reference via the temps stack).
13685        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13686        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13687        before the walk of unreferenced happens and a reference to that is SV
13688        added to the temps stack. At which point we have the same SV considered
13689        to be in use, and free to be re-used. Not good.
13690     */
13691     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13692         assert(param->unreferenced);
13693         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13694     }
13695
13696     return dstr;
13697 }
13698
13699 /* duplicate a context */
13700
13701 PERL_CONTEXT *
13702 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13703 {
13704     PERL_CONTEXT *ncxs;
13705
13706     PERL_ARGS_ASSERT_CX_DUP;
13707
13708     if (!cxs)
13709         return (PERL_CONTEXT*)NULL;
13710
13711     /* look for it in the table first */
13712     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13713     if (ncxs)
13714         return ncxs;
13715
13716     /* create anew and remember what it is */
13717     Newx(ncxs, max + 1, PERL_CONTEXT);
13718     ptr_table_store(PL_ptr_table, cxs, ncxs);
13719     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13720
13721     while (ix >= 0) {
13722         PERL_CONTEXT * const ncx = &ncxs[ix];
13723         if (CxTYPE(ncx) == CXt_SUBST) {
13724             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13725         }
13726         else {
13727             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13728             switch (CxTYPE(ncx)) {
13729             case CXt_SUB:
13730                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13731                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13732                                            : cv_dup(ncx->blk_sub.cv,param));
13733                 if(CxHASARGS(ncx)){
13734                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13735                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13736                 } else {
13737                     ncx->blk_sub.argarray = NULL;
13738                     ncx->blk_sub.savearray = NULL;
13739                 }
13740                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13741                                            ncx->blk_sub.oldcomppad);
13742                 break;
13743             case CXt_EVAL:
13744                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13745                                                       param);
13746                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13747                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13748                 break;
13749             case CXt_LOOP_LAZYSV:
13750                 ncx->blk_loop.state_u.lazysv.end
13751                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13752                 /* We are taking advantage of av_dup_inc and sv_dup_inc
13753                    actually being the same function, and order equivalence of
13754                    the two unions.
13755                    We can assert the later [but only at run time :-(]  */
13756                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13757                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13758             case CXt_LOOP_FOR:
13759                 ncx->blk_loop.state_u.ary.ary
13760                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13761             case CXt_LOOP_LAZYIV:
13762             case CXt_LOOP_PLAIN:
13763                 if (CxPADLOOP(ncx)) {
13764                     ncx->blk_loop.itervar_u.oldcomppad
13765                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13766                                         ncx->blk_loop.itervar_u.oldcomppad);
13767                 } else {
13768                     ncx->blk_loop.itervar_u.gv
13769                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13770                                     param);
13771                 }
13772                 break;
13773             case CXt_FORMAT:
13774                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13775                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13776                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13777                                                      param);
13778                 break;
13779             case CXt_BLOCK:
13780             case CXt_NULL:
13781             case CXt_WHEN:
13782             case CXt_GIVEN:
13783                 break;
13784             }
13785         }
13786         --ix;
13787     }
13788     return ncxs;
13789 }
13790
13791 /* duplicate a stack info structure */
13792
13793 PERL_SI *
13794 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13795 {
13796     PERL_SI *nsi;
13797
13798     PERL_ARGS_ASSERT_SI_DUP;
13799
13800     if (!si)
13801         return (PERL_SI*)NULL;
13802
13803     /* look for it in the table first */
13804     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13805     if (nsi)
13806         return nsi;
13807
13808     /* create anew and remember what it is */
13809     Newxz(nsi, 1, PERL_SI);
13810     ptr_table_store(PL_ptr_table, si, nsi);
13811
13812     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13813     nsi->si_cxix        = si->si_cxix;
13814     nsi->si_cxmax       = si->si_cxmax;
13815     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13816     nsi->si_type        = si->si_type;
13817     nsi->si_prev        = si_dup(si->si_prev, param);
13818     nsi->si_next        = si_dup(si->si_next, param);
13819     nsi->si_markoff     = si->si_markoff;
13820
13821     return nsi;
13822 }
13823
13824 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13825 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13826 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13827 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13828 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13829 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13830 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13831 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13832 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13833 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13834 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13835 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13836 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13837 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13838 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13839 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13840
13841 /* XXXXX todo */
13842 #define pv_dup_inc(p)   SAVEPV(p)
13843 #define pv_dup(p)       SAVEPV(p)
13844 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13845
13846 /* map any object to the new equivent - either something in the
13847  * ptr table, or something in the interpreter structure
13848  */
13849
13850 void *
13851 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13852 {
13853     void *ret;
13854
13855     PERL_ARGS_ASSERT_ANY_DUP;
13856
13857     if (!v)
13858         return (void*)NULL;
13859
13860     /* look for it in the table first */
13861     ret = ptr_table_fetch(PL_ptr_table, v);
13862     if (ret)
13863         return ret;
13864
13865     /* see if it is part of the interpreter structure */
13866     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13867         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13868     else {
13869         ret = v;
13870     }
13871
13872     return ret;
13873 }
13874
13875 /* duplicate the save stack */
13876
13877 ANY *
13878 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13879 {
13880     dVAR;
13881     ANY * const ss      = proto_perl->Isavestack;
13882     const I32 max       = proto_perl->Isavestack_max;
13883     I32 ix              = proto_perl->Isavestack_ix;
13884     ANY *nss;
13885     const SV *sv;
13886     const GV *gv;
13887     const AV *av;
13888     const HV *hv;
13889     void* ptr;
13890     int intval;
13891     long longval;
13892     GP *gp;
13893     IV iv;
13894     I32 i;
13895     char *c = NULL;
13896     void (*dptr) (void*);
13897     void (*dxptr) (pTHX_ void*);
13898
13899     PERL_ARGS_ASSERT_SS_DUP;
13900
13901     Newxz(nss, max, ANY);
13902
13903     while (ix > 0) {
13904         const UV uv = POPUV(ss,ix);
13905         const U8 type = (U8)uv & SAVE_MASK;
13906
13907         TOPUV(nss,ix) = uv;
13908         switch (type) {
13909         case SAVEt_CLEARSV:
13910         case SAVEt_CLEARPADRANGE:
13911             break;
13912         case SAVEt_HELEM:               /* hash element */
13913             sv = (const SV *)POPPTR(ss,ix);
13914             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13915             /* FALLTHROUGH */
13916         case SAVEt_ITEM:                        /* normal string */
13917         case SAVEt_GVSV:                        /* scalar slot in GV */
13918         case SAVEt_SV:                          /* scalar reference */
13919             sv = (const SV *)POPPTR(ss,ix);
13920             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13921             /* FALLTHROUGH */
13922         case SAVEt_FREESV:
13923         case SAVEt_MORTALIZESV:
13924         case SAVEt_READONLY_OFF:
13925             sv = (const SV *)POPPTR(ss,ix);
13926             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13927             break;
13928         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13929             c = (char*)POPPTR(ss,ix);
13930             TOPPTR(nss,ix) = savesharedpv(c);
13931             ptr = POPPTR(ss,ix);
13932             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13933             break;
13934         case SAVEt_GENERIC_SVREF:               /* generic sv */
13935         case SAVEt_SVREF:                       /* scalar reference */
13936             sv = (const SV *)POPPTR(ss,ix);
13937             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13938             ptr = POPPTR(ss,ix);
13939             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13940             break;
13941         case SAVEt_GVSLOT:              /* any slot in GV */
13942             sv = (const SV *)POPPTR(ss,ix);
13943             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13944             ptr = POPPTR(ss,ix);
13945             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13946             sv = (const SV *)POPPTR(ss,ix);
13947             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13948             break;
13949         case SAVEt_HV:                          /* hash reference */
13950         case SAVEt_AV:                          /* array reference */
13951             sv = (const SV *) POPPTR(ss,ix);
13952             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13953             /* FALLTHROUGH */
13954         case SAVEt_COMPPAD:
13955         case SAVEt_NSTAB:
13956             sv = (const SV *) POPPTR(ss,ix);
13957             TOPPTR(nss,ix) = sv_dup(sv, param);
13958             break;
13959         case SAVEt_INT:                         /* int reference */
13960             ptr = POPPTR(ss,ix);
13961             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13962             intval = (int)POPINT(ss,ix);
13963             TOPINT(nss,ix) = intval;
13964             break;
13965         case SAVEt_LONG:                        /* long reference */
13966             ptr = POPPTR(ss,ix);
13967             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13968             longval = (long)POPLONG(ss,ix);
13969             TOPLONG(nss,ix) = longval;
13970             break;
13971         case SAVEt_I32:                         /* I32 reference */
13972             ptr = POPPTR(ss,ix);
13973             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13974             i = POPINT(ss,ix);
13975             TOPINT(nss,ix) = i;
13976             break;
13977         case SAVEt_IV:                          /* IV reference */
13978         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
13979             ptr = POPPTR(ss,ix);
13980             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13981             iv = POPIV(ss,ix);
13982             TOPIV(nss,ix) = iv;
13983             break;
13984         case SAVEt_HPTR:                        /* HV* reference */
13985         case SAVEt_APTR:                        /* AV* reference */
13986         case SAVEt_SPTR:                        /* SV* reference */
13987             ptr = POPPTR(ss,ix);
13988             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13989             sv = (const SV *)POPPTR(ss,ix);
13990             TOPPTR(nss,ix) = sv_dup(sv, param);
13991             break;
13992         case SAVEt_VPTR:                        /* random* reference */
13993             ptr = POPPTR(ss,ix);
13994             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13995             /* FALLTHROUGH */
13996         case SAVEt_INT_SMALL:
13997         case SAVEt_I32_SMALL:
13998         case SAVEt_I16:                         /* I16 reference */
13999         case SAVEt_I8:                          /* I8 reference */
14000         case SAVEt_BOOL:
14001             ptr = POPPTR(ss,ix);
14002             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14003             break;
14004         case SAVEt_GENERIC_PVREF:               /* generic char* */
14005         case SAVEt_PPTR:                        /* char* reference */
14006             ptr = POPPTR(ss,ix);
14007             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14008             c = (char*)POPPTR(ss,ix);
14009             TOPPTR(nss,ix) = pv_dup(c);
14010             break;
14011         case SAVEt_GP:                          /* scalar reference */
14012             gp = (GP*)POPPTR(ss,ix);
14013             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14014             (void)GpREFCNT_inc(gp);
14015             gv = (const GV *)POPPTR(ss,ix);
14016             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14017             break;
14018         case SAVEt_FREEOP:
14019             ptr = POPPTR(ss,ix);
14020             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14021                 /* these are assumed to be refcounted properly */
14022                 OP *o;
14023                 switch (((OP*)ptr)->op_type) {
14024                 case OP_LEAVESUB:
14025                 case OP_LEAVESUBLV:
14026                 case OP_LEAVEEVAL:
14027                 case OP_LEAVE:
14028                 case OP_SCOPE:
14029                 case OP_LEAVEWRITE:
14030                     TOPPTR(nss,ix) = ptr;
14031                     o = (OP*)ptr;
14032                     OP_REFCNT_LOCK;
14033                     (void) OpREFCNT_inc(o);
14034                     OP_REFCNT_UNLOCK;
14035                     break;
14036                 default:
14037                     TOPPTR(nss,ix) = NULL;
14038                     break;
14039                 }
14040             }
14041             else
14042                 TOPPTR(nss,ix) = NULL;
14043             break;
14044         case SAVEt_FREECOPHH:
14045             ptr = POPPTR(ss,ix);
14046             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14047             break;
14048         case SAVEt_ADELETE:
14049             av = (const AV *)POPPTR(ss,ix);
14050             TOPPTR(nss,ix) = av_dup_inc(av, param);
14051             i = POPINT(ss,ix);
14052             TOPINT(nss,ix) = i;
14053             break;
14054         case SAVEt_DELETE:
14055             hv = (const HV *)POPPTR(ss,ix);
14056             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14057             i = POPINT(ss,ix);
14058             TOPINT(nss,ix) = i;
14059             /* FALLTHROUGH */
14060         case SAVEt_FREEPV:
14061             c = (char*)POPPTR(ss,ix);
14062             TOPPTR(nss,ix) = pv_dup_inc(c);
14063             break;
14064         case SAVEt_STACK_POS:           /* Position on Perl stack */
14065             i = POPINT(ss,ix);
14066             TOPINT(nss,ix) = i;
14067             break;
14068         case SAVEt_DESTRUCTOR:
14069             ptr = POPPTR(ss,ix);
14070             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14071             dptr = POPDPTR(ss,ix);
14072             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14073                                         any_dup(FPTR2DPTR(void *, dptr),
14074                                                 proto_perl));
14075             break;
14076         case SAVEt_DESTRUCTOR_X:
14077             ptr = POPPTR(ss,ix);
14078             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14079             dxptr = POPDXPTR(ss,ix);
14080             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14081                                          any_dup(FPTR2DPTR(void *, dxptr),
14082                                                  proto_perl));
14083             break;
14084         case SAVEt_REGCONTEXT:
14085         case SAVEt_ALLOC:
14086             ix -= uv >> SAVE_TIGHT_SHIFT;
14087             break;
14088         case SAVEt_AELEM:               /* array element */
14089             sv = (const SV *)POPPTR(ss,ix);
14090             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14091             i = POPINT(ss,ix);
14092             TOPINT(nss,ix) = i;
14093             av = (const AV *)POPPTR(ss,ix);
14094             TOPPTR(nss,ix) = av_dup_inc(av, param);
14095             break;
14096         case SAVEt_OP:
14097             ptr = POPPTR(ss,ix);
14098             TOPPTR(nss,ix) = ptr;
14099             break;
14100         case SAVEt_HINTS:
14101             ptr = POPPTR(ss,ix);
14102             ptr = cophh_copy((COPHH*)ptr);
14103             TOPPTR(nss,ix) = ptr;
14104             i = POPINT(ss,ix);
14105             TOPINT(nss,ix) = i;
14106             if (i & HINT_LOCALIZE_HH) {
14107                 hv = (const HV *)POPPTR(ss,ix);
14108                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14109             }
14110             break;
14111         case SAVEt_PADSV_AND_MORTALIZE:
14112             longval = (long)POPLONG(ss,ix);
14113             TOPLONG(nss,ix) = longval;
14114             ptr = POPPTR(ss,ix);
14115             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14116             sv = (const SV *)POPPTR(ss,ix);
14117             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14118             break;
14119         case SAVEt_SET_SVFLAGS:
14120             i = POPINT(ss,ix);
14121             TOPINT(nss,ix) = i;
14122             i = POPINT(ss,ix);
14123             TOPINT(nss,ix) = i;
14124             sv = (const SV *)POPPTR(ss,ix);
14125             TOPPTR(nss,ix) = sv_dup(sv, param);
14126             break;
14127         case SAVEt_COMPILE_WARNINGS:
14128             ptr = POPPTR(ss,ix);
14129             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14130             break;
14131         case SAVEt_PARSER:
14132             ptr = POPPTR(ss,ix);
14133             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14134             break;
14135         case SAVEt_GP_ALIASED_SV:
14136             ptr = POPPTR(ss,ix);
14137             TOPPTR(nss,ix) = gp_dup((GP *)ptr, param);
14138             ((GP *)ptr)->gp_refcnt++;
14139             break;
14140         default:
14141             Perl_croak(aTHX_
14142                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14143         }
14144     }
14145
14146     return nss;
14147 }
14148
14149
14150 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14151  * flag to the result. This is done for each stash before cloning starts,
14152  * so we know which stashes want their objects cloned */
14153
14154 static void
14155 do_mark_cloneable_stash(pTHX_ SV *const sv)
14156 {
14157     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14158     if (hvname) {
14159         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14160         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14161         if (cloner && GvCV(cloner)) {
14162             dSP;
14163             UV status;
14164
14165             ENTER;
14166             SAVETMPS;
14167             PUSHMARK(SP);
14168             mXPUSHs(newSVhek(hvname));
14169             PUTBACK;
14170             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14171             SPAGAIN;
14172             status = POPu;
14173             PUTBACK;
14174             FREETMPS;
14175             LEAVE;
14176             if (status)
14177                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14178         }
14179     }
14180 }
14181
14182
14183
14184 /*
14185 =for apidoc perl_clone
14186
14187 Create and return a new interpreter by cloning the current one.
14188
14189 perl_clone takes these flags as parameters:
14190
14191 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
14192 without it we only clone the data and zero the stacks,
14193 with it we copy the stacks and the new perl interpreter is
14194 ready to run at the exact same point as the previous one.
14195 The pseudo-fork code uses COPY_STACKS while the
14196 threads->create doesn't.
14197
14198 CLONEf_KEEP_PTR_TABLE -
14199 perl_clone keeps a ptr_table with the pointer of the old
14200 variable as a key and the new variable as a value,
14201 this allows it to check if something has been cloned and not
14202 clone it again but rather just use the value and increase the
14203 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
14204 the ptr_table using the function
14205 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14206 reason to keep it around is if you want to dup some of your own
14207 variable who are outside the graph perl scans, example of this
14208 code is in threads.xs create.
14209
14210 CLONEf_CLONE_HOST -
14211 This is a win32 thing, it is ignored on unix, it tells perls
14212 win32host code (which is c++) to clone itself, this is needed on
14213 win32 if you want to run two threads at the same time,
14214 if you just want to do some stuff in a separate perl interpreter
14215 and then throw it away and return to the original one,
14216 you don't need to do anything.
14217
14218 =cut
14219 */
14220
14221 /* XXX the above needs expanding by someone who actually understands it ! */
14222 EXTERN_C PerlInterpreter *
14223 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14224
14225 PerlInterpreter *
14226 perl_clone(PerlInterpreter *proto_perl, UV flags)
14227 {
14228    dVAR;
14229 #ifdef PERL_IMPLICIT_SYS
14230
14231     PERL_ARGS_ASSERT_PERL_CLONE;
14232
14233    /* perlhost.h so we need to call into it
14234    to clone the host, CPerlHost should have a c interface, sky */
14235
14236    if (flags & CLONEf_CLONE_HOST) {
14237        return perl_clone_host(proto_perl,flags);
14238    }
14239    return perl_clone_using(proto_perl, flags,
14240                             proto_perl->IMem,
14241                             proto_perl->IMemShared,
14242                             proto_perl->IMemParse,
14243                             proto_perl->IEnv,
14244                             proto_perl->IStdIO,
14245                             proto_perl->ILIO,
14246                             proto_perl->IDir,
14247                             proto_perl->ISock,
14248                             proto_perl->IProc);
14249 }
14250
14251 PerlInterpreter *
14252 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14253                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14254                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14255                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14256                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14257                  struct IPerlProc* ipP)
14258 {
14259     /* XXX many of the string copies here can be optimized if they're
14260      * constants; they need to be allocated as common memory and just
14261      * their pointers copied. */
14262
14263     IV i;
14264     CLONE_PARAMS clone_params;
14265     CLONE_PARAMS* const param = &clone_params;
14266
14267     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14268
14269     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14270 #else           /* !PERL_IMPLICIT_SYS */
14271     IV i;
14272     CLONE_PARAMS clone_params;
14273     CLONE_PARAMS* param = &clone_params;
14274     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14275
14276     PERL_ARGS_ASSERT_PERL_CLONE;
14277 #endif          /* PERL_IMPLICIT_SYS */
14278
14279     /* for each stash, determine whether its objects should be cloned */
14280     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14281     PERL_SET_THX(my_perl);
14282
14283 #ifdef DEBUGGING
14284     PoisonNew(my_perl, 1, PerlInterpreter);
14285     PL_op = NULL;
14286     PL_curcop = NULL;
14287     PL_defstash = NULL; /* may be used by perl malloc() */
14288     PL_markstack = 0;
14289     PL_scopestack = 0;
14290     PL_scopestack_name = 0;
14291     PL_savestack = 0;
14292     PL_savestack_ix = 0;
14293     PL_savestack_max = -1;
14294     PL_sig_pending = 0;
14295     PL_parser = NULL;
14296     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14297 #  ifdef DEBUG_LEAKING_SCALARS
14298     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14299 #  endif
14300 #else   /* !DEBUGGING */
14301     Zero(my_perl, 1, PerlInterpreter);
14302 #endif  /* DEBUGGING */
14303
14304 #ifdef PERL_IMPLICIT_SYS
14305     /* host pointers */
14306     PL_Mem              = ipM;
14307     PL_MemShared        = ipMS;
14308     PL_MemParse         = ipMP;
14309     PL_Env              = ipE;
14310     PL_StdIO            = ipStd;
14311     PL_LIO              = ipLIO;
14312     PL_Dir              = ipD;
14313     PL_Sock             = ipS;
14314     PL_Proc             = ipP;
14315 #endif          /* PERL_IMPLICIT_SYS */
14316
14317
14318     param->flags = flags;
14319     /* Nothing in the core code uses this, but we make it available to
14320        extensions (using mg_dup).  */
14321     param->proto_perl = proto_perl;
14322     /* Likely nothing will use this, but it is initialised to be consistent
14323        with Perl_clone_params_new().  */
14324     param->new_perl = my_perl;
14325     param->unreferenced = NULL;
14326
14327
14328     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14329
14330     PL_body_arenas = NULL;
14331     Zero(&PL_body_roots, 1, PL_body_roots);
14332     
14333     PL_sv_count         = 0;
14334     PL_sv_root          = NULL;
14335     PL_sv_arenaroot     = NULL;
14336
14337     PL_debug            = proto_perl->Idebug;
14338
14339     /* dbargs array probably holds garbage */
14340     PL_dbargs           = NULL;
14341
14342     PL_compiling = proto_perl->Icompiling;
14343
14344     /* pseudo environmental stuff */
14345     PL_origargc         = proto_perl->Iorigargc;
14346     PL_origargv         = proto_perl->Iorigargv;
14347
14348 #ifndef NO_TAINT_SUPPORT
14349     /* Set tainting stuff before PerlIO_debug can possibly get called */
14350     PL_tainting         = proto_perl->Itainting;
14351     PL_taint_warn       = proto_perl->Itaint_warn;
14352 #else
14353     PL_tainting         = FALSE;
14354     PL_taint_warn       = FALSE;
14355 #endif
14356
14357     PL_minus_c          = proto_perl->Iminus_c;
14358
14359     PL_localpatches     = proto_perl->Ilocalpatches;
14360     PL_splitstr         = proto_perl->Isplitstr;
14361     PL_minus_n          = proto_perl->Iminus_n;
14362     PL_minus_p          = proto_perl->Iminus_p;
14363     PL_minus_l          = proto_perl->Iminus_l;
14364     PL_minus_a          = proto_perl->Iminus_a;
14365     PL_minus_E          = proto_perl->Iminus_E;
14366     PL_minus_F          = proto_perl->Iminus_F;
14367     PL_doswitches       = proto_perl->Idoswitches;
14368     PL_dowarn           = proto_perl->Idowarn;
14369     PL_sawalias         = proto_perl->Isawalias;
14370 #ifdef PERL_SAWAMPERSAND
14371     PL_sawampersand     = proto_perl->Isawampersand;
14372 #endif
14373     PL_unsafe           = proto_perl->Iunsafe;
14374     PL_perldb           = proto_perl->Iperldb;
14375     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14376     PL_exit_flags       = proto_perl->Iexit_flags;
14377
14378     /* XXX time(&PL_basetime) when asked for? */
14379     PL_basetime         = proto_perl->Ibasetime;
14380
14381     PL_maxsysfd         = proto_perl->Imaxsysfd;
14382     PL_statusvalue      = proto_perl->Istatusvalue;
14383 #ifdef __VMS
14384     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14385 #else
14386     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14387 #endif
14388
14389     /* RE engine related */
14390     PL_regmatch_slab    = NULL;
14391     PL_reg_curpm        = NULL;
14392
14393     PL_sub_generation   = proto_perl->Isub_generation;
14394
14395     /* funky return mechanisms */
14396     PL_forkprocess      = proto_perl->Iforkprocess;
14397
14398     /* internal state */
14399     PL_maxo             = proto_perl->Imaxo;
14400
14401     PL_main_start       = proto_perl->Imain_start;
14402     PL_eval_root        = proto_perl->Ieval_root;
14403     PL_eval_start       = proto_perl->Ieval_start;
14404
14405     PL_filemode         = proto_perl->Ifilemode;
14406     PL_lastfd           = proto_perl->Ilastfd;
14407     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14408     PL_Argv             = NULL;
14409     PL_Cmd              = NULL;
14410     PL_gensym           = proto_perl->Igensym;
14411
14412     PL_laststatval      = proto_perl->Ilaststatval;
14413     PL_laststype        = proto_perl->Ilaststype;
14414     PL_mess_sv          = NULL;
14415
14416     PL_profiledata      = NULL;
14417
14418     PL_generation       = proto_perl->Igeneration;
14419
14420     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14421     PL_in_clean_all     = proto_perl->Iin_clean_all;
14422
14423     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14424     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14425     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14426     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14427     PL_nomemok          = proto_perl->Inomemok;
14428     PL_an               = proto_perl->Ian;
14429     PL_evalseq          = proto_perl->Ievalseq;
14430     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14431     PL_origalen         = proto_perl->Iorigalen;
14432
14433     PL_sighandlerp      = proto_perl->Isighandlerp;
14434
14435     PL_runops           = proto_perl->Irunops;
14436
14437     PL_subline          = proto_perl->Isubline;
14438
14439 #ifdef FCRYPT
14440     PL_cryptseen        = proto_perl->Icryptseen;
14441 #endif
14442
14443 #ifdef USE_LOCALE_COLLATE
14444     PL_collation_ix     = proto_perl->Icollation_ix;
14445     PL_collation_standard       = proto_perl->Icollation_standard;
14446     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14447     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14448 #endif /* USE_LOCALE_COLLATE */
14449
14450 #ifdef USE_LOCALE_NUMERIC
14451     PL_numeric_standard = proto_perl->Inumeric_standard;
14452     PL_numeric_local    = proto_perl->Inumeric_local;
14453 #endif /* !USE_LOCALE_NUMERIC */
14454
14455     /* Did the locale setup indicate UTF-8? */
14456     PL_utf8locale       = proto_perl->Iutf8locale;
14457     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14458     /* Unicode features (see perlrun/-C) */
14459     PL_unicode          = proto_perl->Iunicode;
14460
14461     /* Pre-5.8 signals control */
14462     PL_signals          = proto_perl->Isignals;
14463
14464     /* times() ticks per second */
14465     PL_clocktick        = proto_perl->Iclocktick;
14466
14467     /* Recursion stopper for PerlIO_find_layer */
14468     PL_in_load_module   = proto_perl->Iin_load_module;
14469
14470     /* sort() routine */
14471     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14472
14473     /* Not really needed/useful since the reenrant_retint is "volatile",
14474      * but do it for consistency's sake. */
14475     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14476
14477     /* Hooks to shared SVs and locks. */
14478     PL_sharehook        = proto_perl->Isharehook;
14479     PL_lockhook         = proto_perl->Ilockhook;
14480     PL_unlockhook       = proto_perl->Iunlockhook;
14481     PL_threadhook       = proto_perl->Ithreadhook;
14482     PL_destroyhook      = proto_perl->Idestroyhook;
14483     PL_signalhook       = proto_perl->Isignalhook;
14484
14485     PL_globhook         = proto_perl->Iglobhook;
14486
14487     /* swatch cache */
14488     PL_last_swash_hv    = NULL; /* reinits on demand */
14489     PL_last_swash_klen  = 0;
14490     PL_last_swash_key[0]= '\0';
14491     PL_last_swash_tmps  = (U8*)NULL;
14492     PL_last_swash_slen  = 0;
14493
14494     PL_srand_called     = proto_perl->Isrand_called;
14495     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14496
14497     if (flags & CLONEf_COPY_STACKS) {
14498         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14499         PL_tmps_ix              = proto_perl->Itmps_ix;
14500         PL_tmps_max             = proto_perl->Itmps_max;
14501         PL_tmps_floor           = proto_perl->Itmps_floor;
14502
14503         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14504          * NOTE: unlike the others! */
14505         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14506         PL_scopestack_max       = proto_perl->Iscopestack_max;
14507
14508         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14509          * NOTE: unlike the others! */
14510         PL_savestack_ix         = proto_perl->Isavestack_ix;
14511         PL_savestack_max        = proto_perl->Isavestack_max;
14512     }
14513
14514     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14515     PL_top_env          = &PL_start_env;
14516
14517     PL_op               = proto_perl->Iop;
14518
14519     PL_Sv               = NULL;
14520     PL_Xpv              = (XPV*)NULL;
14521     my_perl->Ina        = proto_perl->Ina;
14522
14523     PL_statbuf          = proto_perl->Istatbuf;
14524     PL_statcache        = proto_perl->Istatcache;
14525
14526 #ifndef NO_TAINT_SUPPORT
14527     PL_tainted          = proto_perl->Itainted;
14528 #else
14529     PL_tainted          = FALSE;
14530 #endif
14531     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14532
14533     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14534
14535     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14536     PL_restartop        = proto_perl->Irestartop;
14537     PL_in_eval          = proto_perl->Iin_eval;
14538     PL_delaymagic       = proto_perl->Idelaymagic;
14539     PL_phase            = proto_perl->Iphase;
14540     PL_localizing       = proto_perl->Ilocalizing;
14541
14542     PL_hv_fetch_ent_mh  = NULL;
14543     PL_modcount         = proto_perl->Imodcount;
14544     PL_lastgotoprobe    = NULL;
14545     PL_dumpindent       = proto_perl->Idumpindent;
14546
14547     PL_efloatbuf        = NULL;         /* reinits on demand */
14548     PL_efloatsize       = 0;                    /* reinits on demand */
14549
14550     /* regex stuff */
14551
14552     PL_colorset         = 0;            /* reinits PL_colors[] */
14553     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14554
14555     /* Pluggable optimizer */
14556     PL_peepp            = proto_perl->Ipeepp;
14557     PL_rpeepp           = proto_perl->Irpeepp;
14558     /* op_free() hook */
14559     PL_opfreehook       = proto_perl->Iopfreehook;
14560
14561 #ifdef USE_REENTRANT_API
14562     /* XXX: things like -Dm will segfault here in perlio, but doing
14563      *  PERL_SET_CONTEXT(proto_perl);
14564      * breaks too many other things
14565      */
14566     Perl_reentrant_init(aTHX);
14567 #endif
14568
14569     /* create SV map for pointer relocation */
14570     PL_ptr_table = ptr_table_new();
14571
14572     /* initialize these special pointers as early as possible */
14573     init_constants();
14574     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14575     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14576     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14577
14578     /* create (a non-shared!) shared string table */
14579     PL_strtab           = newHV();
14580     HvSHAREKEYS_off(PL_strtab);
14581     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14582     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14583
14584     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14585
14586     /* This PV will be free'd special way so must set it same way op.c does */
14587     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14588     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14589
14590     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14591     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14592     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14593     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14594
14595     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14596     /* This makes no difference to the implementation, as it always pushes
14597        and shifts pointers to other SVs without changing their reference
14598        count, with the array becoming empty before it is freed. However, it
14599        makes it conceptually clear what is going on, and will avoid some
14600        work inside av.c, filling slots between AvFILL() and AvMAX() with
14601        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14602     AvREAL_off(param->stashes);
14603
14604     if (!(flags & CLONEf_COPY_STACKS)) {
14605         param->unreferenced = newAV();
14606     }
14607
14608 #ifdef PERLIO_LAYERS
14609     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14610     PerlIO_clone(aTHX_ proto_perl, param);
14611 #endif
14612
14613     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14614     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14615     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14616     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14617     PL_xsubfilename     = proto_perl->Ixsubfilename;
14618     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14619     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14620
14621     /* switches */
14622     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14623     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14624     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14625
14626     /* magical thingies */
14627
14628     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14629
14630     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14631     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14632     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14633
14634    
14635     /* Clone the regex array */
14636     /* ORANGE FIXME for plugins, probably in the SV dup code.
14637        newSViv(PTR2IV(CALLREGDUPE(
14638        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14639     */
14640     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14641     PL_regex_pad = AvARRAY(PL_regex_padav);
14642
14643     PL_stashpadmax      = proto_perl->Istashpadmax;
14644     PL_stashpadix       = proto_perl->Istashpadix ;
14645     Newx(PL_stashpad, PL_stashpadmax, HV *);
14646     {
14647         PADOFFSET o = 0;
14648         for (; o < PL_stashpadmax; ++o)
14649             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14650     }
14651
14652     /* shortcuts to various I/O objects */
14653     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14654     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14655     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14656     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14657     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14658     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14659     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14660
14661     /* shortcuts to regexp stuff */
14662     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14663
14664     /* shortcuts to misc objects */
14665     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14666
14667     /* shortcuts to debugging objects */
14668     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14669     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14670     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14671     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14672     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14673     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14674     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14675
14676     /* symbol tables */
14677     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14678     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14679     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14680     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14681     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14682
14683     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14684     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14685     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14686     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14687     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14688     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14689     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14690     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14691
14692     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14693
14694     /* subprocess state */
14695     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14696
14697     if (proto_perl->Iop_mask)
14698         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14699     else
14700         PL_op_mask      = NULL;
14701     /* PL_asserting        = proto_perl->Iasserting; */
14702
14703     /* current interpreter roots */
14704     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14705     OP_REFCNT_LOCK;
14706     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14707     OP_REFCNT_UNLOCK;
14708
14709     /* runtime control stuff */
14710     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14711
14712     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14713
14714     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14715
14716     /* interpreter atexit processing */
14717     PL_exitlistlen      = proto_perl->Iexitlistlen;
14718     if (PL_exitlistlen) {
14719         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14720         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14721     }
14722     else
14723         PL_exitlist     = (PerlExitListEntry*)NULL;
14724
14725     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14726     if (PL_my_cxt_size) {
14727         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14728         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14729 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14730         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14731         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14732 #endif
14733     }
14734     else {
14735         PL_my_cxt_list  = (void**)NULL;
14736 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14737         PL_my_cxt_keys  = (const char**)NULL;
14738 #endif
14739     }
14740     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14741     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14742     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14743     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14744
14745     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14746
14747     PAD_CLONE_VARS(proto_perl, param);
14748
14749 #ifdef HAVE_INTERP_INTERN
14750     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14751 #endif
14752
14753     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14754
14755 #ifdef PERL_USES_PL_PIDSTATUS
14756     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14757 #endif
14758     PL_osname           = SAVEPV(proto_perl->Iosname);
14759     PL_parser           = parser_dup(proto_perl->Iparser, param);
14760
14761     /* XXX this only works if the saved cop has already been cloned */
14762     if (proto_perl->Iparser) {
14763         PL_parser->saved_curcop = (COP*)any_dup(
14764                                     proto_perl->Iparser->saved_curcop,
14765                                     proto_perl);
14766     }
14767
14768     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14769
14770 #ifdef USE_LOCALE_COLLATE
14771     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14772 #endif /* USE_LOCALE_COLLATE */
14773
14774 #ifdef USE_LOCALE_NUMERIC
14775     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14776     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14777 #endif /* !USE_LOCALE_NUMERIC */
14778
14779     /* Unicode inversion lists */
14780     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14781     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14782     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14783     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14784
14785     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14786     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14787
14788     /* utf8 character class swashes */
14789     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14790         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14791     }
14792     for (i = 0; i < POSIX_CC_COUNT; i++) {
14793         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14794     }
14795     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14796     PL_utf8_X_regular_begin     = sv_dup_inc(proto_perl->Iutf8_X_regular_begin, param);
14797     PL_utf8_X_extend    = sv_dup_inc(proto_perl->Iutf8_X_extend, param);
14798     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14799     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14800     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14801     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14802     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14803     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14804     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14805     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14806     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14807     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14808     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14809     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14810     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14811
14812     if (proto_perl->Ipsig_pend) {
14813         Newxz(PL_psig_pend, SIG_SIZE, int);
14814     }
14815     else {
14816         PL_psig_pend    = (int*)NULL;
14817     }
14818
14819     if (proto_perl->Ipsig_name) {
14820         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14821         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14822                             param);
14823         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14824     }
14825     else {
14826         PL_psig_ptr     = (SV**)NULL;
14827         PL_psig_name    = (SV**)NULL;
14828     }
14829
14830     if (flags & CLONEf_COPY_STACKS) {
14831         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14832         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14833                             PL_tmps_ix+1, param);
14834
14835         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14836         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14837         Newxz(PL_markstack, i, I32);
14838         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14839                                                   - proto_perl->Imarkstack);
14840         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14841                                                   - proto_perl->Imarkstack);
14842         Copy(proto_perl->Imarkstack, PL_markstack,
14843              PL_markstack_ptr - PL_markstack + 1, I32);
14844
14845         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14846          * NOTE: unlike the others! */
14847         Newxz(PL_scopestack, PL_scopestack_max, I32);
14848         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14849
14850 #ifdef DEBUGGING
14851         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14852         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14853 #endif
14854         /* reset stack AV to correct length before its duped via
14855          * PL_curstackinfo */
14856         AvFILLp(proto_perl->Icurstack) =
14857                             proto_perl->Istack_sp - proto_perl->Istack_base;
14858
14859         /* NOTE: si_dup() looks at PL_markstack */
14860         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14861
14862         /* PL_curstack          = PL_curstackinfo->si_stack; */
14863         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14864         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14865
14866         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14867         PL_stack_base           = AvARRAY(PL_curstack);
14868         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14869                                                    - proto_perl->Istack_base);
14870         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14871
14872         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14873         PL_savestack            = ss_dup(proto_perl, param);
14874     }
14875     else {
14876         init_stacks();
14877         ENTER;                  /* perl_destruct() wants to LEAVE; */
14878     }
14879
14880     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14881     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14882
14883     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14884     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14885     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14886     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14887     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14888     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14889
14890     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14891
14892     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14893     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14894     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14895
14896     PL_stashcache       = newHV();
14897
14898     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14899                                             proto_perl->Iwatchaddr);
14900     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14901     if (PL_debug && PL_watchaddr) {
14902         PerlIO_printf(Perl_debug_log,
14903           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14904           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14905           PTR2UV(PL_watchok));
14906     }
14907
14908     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14909     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14910     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14911
14912     /* Call the ->CLONE method, if it exists, for each of the stashes
14913        identified by sv_dup() above.
14914     */
14915     while(av_tindex(param->stashes) != -1) {
14916         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14917         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14918         if (cloner && GvCV(cloner)) {
14919             dSP;
14920             ENTER;
14921             SAVETMPS;
14922             PUSHMARK(SP);
14923             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14924             PUTBACK;
14925             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14926             FREETMPS;
14927             LEAVE;
14928         }
14929     }
14930
14931     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14932         ptr_table_free(PL_ptr_table);
14933         PL_ptr_table = NULL;
14934     }
14935
14936     if (!(flags & CLONEf_COPY_STACKS)) {
14937         unreferenced_to_tmp_stack(param->unreferenced);
14938     }
14939
14940     SvREFCNT_dec(param->stashes);
14941
14942     /* orphaned? eg threads->new inside BEGIN or use */
14943     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14944         SvREFCNT_inc_simple_void(PL_compcv);
14945         SAVEFREESV(PL_compcv);
14946     }
14947
14948     return my_perl;
14949 }
14950
14951 static void
14952 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14953 {
14954     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14955     
14956     if (AvFILLp(unreferenced) > -1) {
14957         SV **svp = AvARRAY(unreferenced);
14958         SV **const last = svp + AvFILLp(unreferenced);
14959         SSize_t count = 0;
14960
14961         do {
14962             if (SvREFCNT(*svp) == 1)
14963                 ++count;
14964         } while (++svp <= last);
14965
14966         EXTEND_MORTAL(count);
14967         svp = AvARRAY(unreferenced);
14968
14969         do {
14970             if (SvREFCNT(*svp) == 1) {
14971                 /* Our reference is the only one to this SV. This means that
14972                    in this thread, the scalar effectively has a 0 reference.
14973                    That doesn't work (cleanup never happens), so donate our
14974                    reference to it onto the save stack. */
14975                 PL_tmps_stack[++PL_tmps_ix] = *svp;
14976             } else {
14977                 /* As an optimisation, because we are already walking the
14978                    entire array, instead of above doing either
14979                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
14980                    release our reference to the scalar, so that at the end of
14981                    the array owns zero references to the scalars it happens to
14982                    point to. We are effectively converting the array from
14983                    AvREAL() on to AvREAL() off. This saves the av_clear()
14984                    (triggered by the SvREFCNT_dec(unreferenced) below) from
14985                    walking the array a second time.  */
14986                 SvREFCNT_dec(*svp);
14987             }
14988
14989         } while (++svp <= last);
14990         AvREAL_off(unreferenced);
14991     }
14992     SvREFCNT_dec_NN(unreferenced);
14993 }
14994
14995 void
14996 Perl_clone_params_del(CLONE_PARAMS *param)
14997 {
14998     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
14999        happy: */
15000     PerlInterpreter *const to = param->new_perl;
15001     dTHXa(to);
15002     PerlInterpreter *const was = PERL_GET_THX;
15003
15004     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15005
15006     if (was != to) {
15007         PERL_SET_THX(to);
15008     }
15009
15010     SvREFCNT_dec(param->stashes);
15011     if (param->unreferenced)
15012         unreferenced_to_tmp_stack(param->unreferenced);
15013
15014     Safefree(param);
15015
15016     if (was != to) {
15017         PERL_SET_THX(was);
15018     }
15019 }
15020
15021 CLONE_PARAMS *
15022 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15023 {
15024     dVAR;
15025     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15026        does a dTHX; to get the context from thread local storage.
15027        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15028        a version that passes in my_perl.  */
15029     PerlInterpreter *const was = PERL_GET_THX;
15030     CLONE_PARAMS *param;
15031
15032     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15033
15034     if (was != to) {
15035         PERL_SET_THX(to);
15036     }
15037
15038     /* Given that we've set the context, we can do this unshared.  */
15039     Newx(param, 1, CLONE_PARAMS);
15040
15041     param->flags = 0;
15042     param->proto_perl = from;
15043     param->new_perl = to;
15044     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15045     AvREAL_off(param->stashes);
15046     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15047
15048     if (was != to) {
15049         PERL_SET_THX(was);
15050     }
15051     return param;
15052 }
15053
15054 #endif /* USE_ITHREADS */
15055
15056 void
15057 Perl_init_constants(pTHX)
15058 {
15059     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15060     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15061     SvANY(&PL_sv_undef)         = NULL;
15062
15063     SvANY(&PL_sv_no)            = new_XPVNV();
15064     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15065     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15066                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15067                                   |SVp_POK|SVf_POK;
15068
15069     SvANY(&PL_sv_yes)           = new_XPVNV();
15070     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15071     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15072                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15073                                   |SVp_POK|SVf_POK;
15074
15075     SvPV_set(&PL_sv_no, (char*)PL_No);
15076     SvCUR_set(&PL_sv_no, 0);
15077     SvLEN_set(&PL_sv_no, 0);
15078     SvIV_set(&PL_sv_no, 0);
15079     SvNV_set(&PL_sv_no, 0);
15080
15081     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15082     SvCUR_set(&PL_sv_yes, 1);
15083     SvLEN_set(&PL_sv_yes, 0);
15084     SvIV_set(&PL_sv_yes, 1);
15085     SvNV_set(&PL_sv_yes, 1);
15086 }
15087
15088 /*
15089 =head1 Unicode Support
15090
15091 =for apidoc sv_recode_to_utf8
15092
15093 The encoding is assumed to be an Encode object, on entry the PV
15094 of the sv is assumed to be octets in that encoding, and the sv
15095 will be converted into Unicode (and UTF-8).
15096
15097 If the sv already is UTF-8 (or if it is not POK), or if the encoding
15098 is not a reference, nothing is done to the sv.  If the encoding is not
15099 an C<Encode::XS> Encoding object, bad things will happen.
15100 (See F<lib/encoding.pm> and L<Encode>.)
15101
15102 The PV of the sv is returned.
15103
15104 =cut */
15105
15106 char *
15107 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15108 {
15109     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15110
15111     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15112         SV *uni;
15113         STRLEN len;
15114         const char *s;
15115         dSP;
15116         SV *nsv = sv;
15117         ENTER;
15118         PUSHSTACK;
15119         SAVETMPS;
15120         if (SvPADTMP(nsv)) {
15121             nsv = sv_newmortal();
15122             SvSetSV_nosteal(nsv, sv);
15123         }
15124         PUSHMARK(sp);
15125         EXTEND(SP, 3);
15126         PUSHs(encoding);
15127         PUSHs(nsv);
15128 /*
15129   NI-S 2002/07/09
15130   Passing sv_yes is wrong - it needs to be or'ed set of constants
15131   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15132   remove converted chars from source.
15133
15134   Both will default the value - let them.
15135
15136         XPUSHs(&PL_sv_yes);
15137 */
15138         PUTBACK;
15139         call_method("decode", G_SCALAR);
15140         SPAGAIN;
15141         uni = POPs;
15142         PUTBACK;
15143         s = SvPV_const(uni, len);
15144         if (s != SvPVX_const(sv)) {
15145             SvGROW(sv, len + 1);
15146             Move(s, SvPVX(sv), len + 1, char);
15147             SvCUR_set(sv, len);
15148         }
15149         FREETMPS;
15150         POPSTACK;
15151         LEAVE;
15152         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15153             /* clear pos and any utf8 cache */
15154             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15155             if (mg)
15156                 mg->mg_len = -1;
15157             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15158                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15159         }
15160         SvUTF8_on(sv);
15161         return SvPVX(sv);
15162     }
15163     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15164 }
15165
15166 /*
15167 =for apidoc sv_cat_decode
15168
15169 The encoding is assumed to be an Encode object, the PV of the ssv is
15170 assumed to be octets in that encoding and decoding the input starts
15171 from the position which (PV + *offset) pointed to.  The dsv will be
15172 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
15173 when the string tstr appears in decoding output or the input ends on
15174 the PV of the ssv.  The value which the offset points will be modified
15175 to the last input position on the ssv.
15176
15177 Returns TRUE if the terminator was found, else returns FALSE.
15178
15179 =cut */
15180
15181 bool
15182 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15183                    SV *ssv, int *offset, char *tstr, int tlen)
15184 {
15185     bool ret = FALSE;
15186
15187     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15188
15189     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
15190         SV *offsv;
15191         dSP;
15192         ENTER;
15193         SAVETMPS;
15194         PUSHMARK(sp);
15195         EXTEND(SP, 6);
15196         PUSHs(encoding);
15197         PUSHs(dsv);
15198         PUSHs(ssv);
15199         offsv = newSViv(*offset);
15200         mPUSHs(offsv);
15201         mPUSHp(tstr, tlen);
15202         PUTBACK;
15203         call_method("cat_decode", G_SCALAR);
15204         SPAGAIN;
15205         ret = SvTRUE(TOPs);
15206         *offset = SvIV(offsv);
15207         PUTBACK;
15208         FREETMPS;
15209         LEAVE;
15210     }
15211     else
15212         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15213     return ret;
15214
15215 }
15216
15217 /* ---------------------------------------------------------------------
15218  *
15219  * support functions for report_uninit()
15220  */
15221
15222 /* the maxiumum size of array or hash where we will scan looking
15223  * for the undefined element that triggered the warning */
15224
15225 #define FUV_MAX_SEARCH_SIZE 1000
15226
15227 /* Look for an entry in the hash whose value has the same SV as val;
15228  * If so, return a mortal copy of the key. */
15229
15230 STATIC SV*
15231 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15232 {
15233     dVAR;
15234     HE **array;
15235     I32 i;
15236
15237     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15238
15239     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15240                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15241         return NULL;
15242
15243     array = HvARRAY(hv);
15244
15245     for (i=HvMAX(hv); i>=0; i--) {
15246         HE *entry;
15247         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15248             if (HeVAL(entry) != val)
15249                 continue;
15250             if (    HeVAL(entry) == &PL_sv_undef ||
15251                     HeVAL(entry) == &PL_sv_placeholder)
15252                 continue;
15253             if (!HeKEY(entry))
15254                 return NULL;
15255             if (HeKLEN(entry) == HEf_SVKEY)
15256                 return sv_mortalcopy(HeKEY_sv(entry));
15257             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15258         }
15259     }
15260     return NULL;
15261 }
15262
15263 /* Look for an entry in the array whose value has the same SV as val;
15264  * If so, return the index, otherwise return -1. */
15265
15266 STATIC I32
15267 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15268 {
15269     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15270
15271     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15272                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15273         return -1;
15274
15275     if (val != &PL_sv_undef) {
15276         SV ** const svp = AvARRAY(av);
15277         I32 i;
15278
15279         for (i=AvFILLp(av); i>=0; i--)
15280             if (svp[i] == val)
15281                 return i;
15282     }
15283     return -1;
15284 }
15285
15286 /* varname(): return the name of a variable, optionally with a subscript.
15287  * If gv is non-zero, use the name of that global, along with gvtype (one
15288  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15289  * targ.  Depending on the value of the subscript_type flag, return:
15290  */
15291
15292 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15293 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15294 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15295 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15296
15297 SV*
15298 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15299         const SV *const keyname, I32 aindex, int subscript_type)
15300 {
15301
15302     SV * const name = sv_newmortal();
15303     if (gv && isGV(gv)) {
15304         char buffer[2];
15305         buffer[0] = gvtype;
15306         buffer[1] = 0;
15307
15308         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15309
15310         gv_fullname4(name, gv, buffer, 0);
15311
15312         if ((unsigned int)SvPVX(name)[1] <= 26) {
15313             buffer[0] = '^';
15314             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15315
15316             /* Swap the 1 unprintable control character for the 2 byte pretty
15317                version - ie substr($name, 1, 1) = $buffer; */
15318             sv_insert(name, 1, 1, buffer, 2);
15319         }
15320     }
15321     else {
15322         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15323         SV *sv;
15324         AV *av;
15325
15326         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15327
15328         if (!cv || !CvPADLIST(cv))
15329             return NULL;
15330         av = *PadlistARRAY(CvPADLIST(cv));
15331         sv = *av_fetch(av, targ, FALSE);
15332         sv_setsv_flags(name, sv, 0);
15333     }
15334
15335     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15336         SV * const sv = newSV(0);
15337         *SvPVX(name) = '$';
15338         Perl_sv_catpvf(aTHX_ name, "{%s}",
15339             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15340                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15341         SvREFCNT_dec_NN(sv);
15342     }
15343     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15344         *SvPVX(name) = '$';
15345         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15346     }
15347     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15348         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15349         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15350     }
15351
15352     return name;
15353 }
15354
15355
15356 /*
15357 =for apidoc find_uninit_var
15358
15359 Find the name of the undefined variable (if any) that caused the operator
15360 to issue a "Use of uninitialized value" warning.
15361 If match is true, only return a name if its value matches uninit_sv.
15362 So roughly speaking, if a unary operator (such as OP_COS) generates a
15363 warning, then following the direct child of the op may yield an
15364 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15365 other hand, with OP_ADD there are two branches to follow, so we only print
15366 the variable name if we get an exact match.
15367
15368 The name is returned as a mortal SV.
15369
15370 Assumes that PL_op is the op that originally triggered the error, and that
15371 PL_comppad/PL_curpad points to the currently executing pad.
15372
15373 =cut
15374 */
15375
15376 STATIC SV *
15377 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15378                   bool match)
15379 {
15380     dVAR;
15381     SV *sv;
15382     const GV *gv;
15383     const OP *o, *o2, *kid;
15384
15385     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15386                             uninit_sv == &PL_sv_placeholder)))
15387         return NULL;
15388
15389     switch (obase->op_type) {
15390
15391     case OP_RV2AV:
15392     case OP_RV2HV:
15393     case OP_PADAV:
15394     case OP_PADHV:
15395       {
15396         const bool pad  = (    obase->op_type == OP_PADAV
15397                             || obase->op_type == OP_PADHV
15398                             || obase->op_type == OP_PADRANGE
15399                           );
15400
15401         const bool hash = (    obase->op_type == OP_PADHV
15402                             || obase->op_type == OP_RV2HV
15403                             || (obase->op_type == OP_PADRANGE
15404                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15405                           );
15406         I32 index = 0;
15407         SV *keysv = NULL;
15408         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15409
15410         if (pad) { /* @lex, %lex */
15411             sv = PAD_SVl(obase->op_targ);
15412             gv = NULL;
15413         }
15414         else {
15415             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15416             /* @global, %global */
15417                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15418                 if (!gv)
15419                     break;
15420                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15421             }
15422             else if (obase == PL_op) /* @{expr}, %{expr} */
15423                 return find_uninit_var(cUNOPx(obase)->op_first,
15424                                                     uninit_sv, match);
15425             else /* @{expr}, %{expr} as a sub-expression */
15426                 return NULL;
15427         }
15428
15429         /* attempt to find a match within the aggregate */
15430         if (hash) {
15431             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15432             if (keysv)
15433                 subscript_type = FUV_SUBSCRIPT_HASH;
15434         }
15435         else {
15436             index = find_array_subscript((const AV *)sv, uninit_sv);
15437             if (index >= 0)
15438                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15439         }
15440
15441         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15442             break;
15443
15444         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15445                                     keysv, index, subscript_type);
15446       }
15447
15448     case OP_RV2SV:
15449         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15450             /* $global */
15451             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15452             if (!gv || !GvSTASH(gv))
15453                 break;
15454             if (match && (GvSV(gv) != uninit_sv))
15455                 break;
15456             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15457         }
15458         /* ${expr} */
15459         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1);
15460
15461     case OP_PADSV:
15462         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15463             break;
15464         return varname(NULL, '$', obase->op_targ,
15465                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15466
15467     case OP_GVSV:
15468         gv = cGVOPx_gv(obase);
15469         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15470             break;
15471         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15472
15473     case OP_AELEMFAST_LEX:
15474         if (match) {
15475             SV **svp;
15476             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15477             if (!av || SvRMAGICAL(av))
15478                 break;
15479             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15480             if (!svp || *svp != uninit_sv)
15481                 break;
15482         }
15483         return varname(NULL, '$', obase->op_targ,
15484                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15485     case OP_AELEMFAST:
15486         {
15487             gv = cGVOPx_gv(obase);
15488             if (!gv)
15489                 break;
15490             if (match) {
15491                 SV **svp;
15492                 AV *const av = GvAV(gv);
15493                 if (!av || SvRMAGICAL(av))
15494                     break;
15495                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15496                 if (!svp || *svp != uninit_sv)
15497                     break;
15498             }
15499             return varname(gv, '$', 0,
15500                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15501         }
15502         NOT_REACHED; /* NOTREACHED */
15503
15504     case OP_EXISTS:
15505         o = cUNOPx(obase)->op_first;
15506         if (!o || o->op_type != OP_NULL ||
15507                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15508             break;
15509         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
15510
15511     case OP_AELEM:
15512     case OP_HELEM:
15513     {
15514         bool negate = FALSE;
15515
15516         if (PL_op == obase)
15517             /* $a[uninit_expr] or $h{uninit_expr} */
15518             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
15519
15520         gv = NULL;
15521         o = cBINOPx(obase)->op_first;
15522         kid = cBINOPx(obase)->op_last;
15523
15524         /* get the av or hv, and optionally the gv */
15525         sv = NULL;
15526         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15527             sv = PAD_SV(o->op_targ);
15528         }
15529         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15530                 && cUNOPo->op_first->op_type == OP_GV)
15531         {
15532             gv = cGVOPx_gv(cUNOPo->op_first);
15533             if (!gv)
15534                 break;
15535             sv = o->op_type
15536                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15537         }
15538         if (!sv)
15539             break;
15540
15541         if (kid && kid->op_type == OP_NEGATE) {
15542             negate = TRUE;
15543             kid = cUNOPx(kid)->op_first;
15544         }
15545
15546         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15547             /* index is constant */
15548             SV* kidsv;
15549             if (negate) {
15550                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15551                 sv_catsv(kidsv, cSVOPx_sv(kid));
15552             }
15553             else
15554                 kidsv = cSVOPx_sv(kid);
15555             if (match) {
15556                 if (SvMAGICAL(sv))
15557                     break;
15558                 if (obase->op_type == OP_HELEM) {
15559                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15560                     if (!he || HeVAL(he) != uninit_sv)
15561                         break;
15562                 }
15563                 else {
15564                     SV * const  opsv = cSVOPx_sv(kid);
15565                     const IV  opsviv = SvIV(opsv);
15566                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15567                         negate ? - opsviv : opsviv,
15568                         FALSE);
15569                     if (!svp || *svp != uninit_sv)
15570                         break;
15571                 }
15572             }
15573             if (obase->op_type == OP_HELEM)
15574                 return varname(gv, '%', o->op_targ,
15575                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15576             else
15577                 return varname(gv, '@', o->op_targ, NULL,
15578                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15579                     FUV_SUBSCRIPT_ARRAY);
15580         }
15581         else  {
15582             /* index is an expression;
15583              * attempt to find a match within the aggregate */
15584             if (obase->op_type == OP_HELEM) {
15585                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15586                 if (keysv)
15587                     return varname(gv, '%', o->op_targ,
15588                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15589             }
15590             else {
15591                 const I32 index
15592                     = find_array_subscript((const AV *)sv, uninit_sv);
15593                 if (index >= 0)
15594                     return varname(gv, '@', o->op_targ,
15595                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15596             }
15597             if (match)
15598                 break;
15599             return varname(gv,
15600                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15601                 ? '@' : '%'),
15602                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15603         }
15604         NOT_REACHED; /* NOTREACHED */
15605     }
15606
15607     case OP_AASSIGN:
15608         /* only examine RHS */
15609         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
15610
15611     case OP_OPEN:
15612         o = cUNOPx(obase)->op_first;
15613         if (   o->op_type == OP_PUSHMARK
15614            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15615         )
15616             o = OP_SIBLING(o);
15617
15618         if (!OP_HAS_SIBLING(o)) {
15619             /* one-arg version of open is highly magical */
15620
15621             if (o->op_type == OP_GV) { /* open FOO; */
15622                 gv = cGVOPx_gv(o);
15623                 if (match && GvSV(gv) != uninit_sv)
15624                     break;
15625                 return varname(gv, '$', 0,
15626                             NULL, 0, FUV_SUBSCRIPT_NONE);
15627             }
15628             /* other possibilities not handled are:
15629              * open $x; or open my $x;  should return '${*$x}'
15630              * open expr;               should return '$'.expr ideally
15631              */
15632              break;
15633         }
15634         goto do_op;
15635
15636     /* ops where $_ may be an implicit arg */
15637     case OP_TRANS:
15638     case OP_TRANSR:
15639     case OP_SUBST:
15640     case OP_MATCH:
15641         if ( !(obase->op_flags & OPf_STACKED)) {
15642             if (uninit_sv == DEFSV)
15643                 return newSVpvs_flags("$_", SVs_TEMP);
15644             else if (obase->op_targ
15645                   && uninit_sv == PAD_SVl(obase->op_targ))
15646                 return varname(NULL, '$', obase->op_targ, NULL, 0,
15647                                FUV_SUBSCRIPT_NONE);
15648         }
15649         goto do_op;
15650
15651     case OP_PRTF:
15652     case OP_PRINT:
15653     case OP_SAY:
15654         match = 1; /* print etc can return undef on defined args */
15655         /* skip filehandle as it can't produce 'undef' warning  */
15656         o = cUNOPx(obase)->op_first;
15657         if ((obase->op_flags & OPf_STACKED)
15658             &&
15659                (   o->op_type == OP_PUSHMARK
15660                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15661             o = OP_SIBLING(OP_SIBLING(o));
15662         goto do_op2;
15663
15664
15665     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15666     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15667
15668         /* the following ops are capable of returning PL_sv_undef even for
15669          * defined arg(s) */
15670
15671     case OP_BACKTICK:
15672     case OP_PIPE_OP:
15673     case OP_FILENO:
15674     case OP_BINMODE:
15675     case OP_TIED:
15676     case OP_GETC:
15677     case OP_SYSREAD:
15678     case OP_SEND:
15679     case OP_IOCTL:
15680     case OP_SOCKET:
15681     case OP_SOCKPAIR:
15682     case OP_BIND:
15683     case OP_CONNECT:
15684     case OP_LISTEN:
15685     case OP_ACCEPT:
15686     case OP_SHUTDOWN:
15687     case OP_SSOCKOPT:
15688     case OP_GETPEERNAME:
15689     case OP_FTRREAD:
15690     case OP_FTRWRITE:
15691     case OP_FTREXEC:
15692     case OP_FTROWNED:
15693     case OP_FTEREAD:
15694     case OP_FTEWRITE:
15695     case OP_FTEEXEC:
15696     case OP_FTEOWNED:
15697     case OP_FTIS:
15698     case OP_FTZERO:
15699     case OP_FTSIZE:
15700     case OP_FTFILE:
15701     case OP_FTDIR:
15702     case OP_FTLINK:
15703     case OP_FTPIPE:
15704     case OP_FTSOCK:
15705     case OP_FTBLK:
15706     case OP_FTCHR:
15707     case OP_FTTTY:
15708     case OP_FTSUID:
15709     case OP_FTSGID:
15710     case OP_FTSVTX:
15711     case OP_FTTEXT:
15712     case OP_FTBINARY:
15713     case OP_FTMTIME:
15714     case OP_FTATIME:
15715     case OP_FTCTIME:
15716     case OP_READLINK:
15717     case OP_OPEN_DIR:
15718     case OP_READDIR:
15719     case OP_TELLDIR:
15720     case OP_SEEKDIR:
15721     case OP_REWINDDIR:
15722     case OP_CLOSEDIR:
15723     case OP_GMTIME:
15724     case OP_ALARM:
15725     case OP_SEMGET:
15726     case OP_GETLOGIN:
15727     case OP_UNDEF:
15728     case OP_SUBSTR:
15729     case OP_AEACH:
15730     case OP_EACH:
15731     case OP_SORT:
15732     case OP_CALLER:
15733     case OP_DOFILE:
15734     case OP_PROTOTYPE:
15735     case OP_NCMP:
15736     case OP_SMARTMATCH:
15737     case OP_UNPACK:
15738     case OP_SYSOPEN:
15739     case OP_SYSSEEK:
15740         match = 1;
15741         goto do_op;
15742
15743     case OP_ENTERSUB:
15744     case OP_GOTO:
15745         /* XXX tmp hack: these two may call an XS sub, and currently
15746           XS subs don't have a SUB entry on the context stack, so CV and
15747           pad determination goes wrong, and BAD things happen. So, just
15748           don't try to determine the value under those circumstances.
15749           Need a better fix at dome point. DAPM 11/2007 */
15750         break;
15751
15752     case OP_FLIP:
15753     case OP_FLOP:
15754     {
15755         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
15756         if (gv && GvSV(gv) == uninit_sv)
15757             return newSVpvs_flags("$.", SVs_TEMP);
15758         goto do_op;
15759     }
15760
15761     case OP_POS:
15762         /* def-ness of rval pos() is independent of the def-ness of its arg */
15763         if ( !(obase->op_flags & OPf_MOD))
15764             break;
15765
15766     case OP_SCHOMP:
15767     case OP_CHOMP:
15768         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
15769             return newSVpvs_flags("${$/}", SVs_TEMP);
15770         /* FALLTHROUGH */
15771
15772     default:
15773     do_op:
15774         if (!(obase->op_flags & OPf_KIDS))
15775             break;
15776         o = cUNOPx(obase)->op_first;
15777         
15778     do_op2:
15779         if (!o)
15780             break;
15781
15782         /* This loop checks all the kid ops, skipping any that cannot pos-
15783          * sibly be responsible for the uninitialized value; i.e., defined
15784          * constants and ops that return nothing.  If there is only one op
15785          * left that is not skipped, then we *know* it is responsible for
15786          * the uninitialized value.  If there is more than one op left, we
15787          * have to look for an exact match in the while() loop below.
15788          * Note that we skip padrange, because the individual pad ops that
15789          * it replaced are still in the tree, so we work on them instead.
15790          */
15791         o2 = NULL;
15792         for (kid=o; kid; kid = OP_SIBLING(kid)) {
15793             const OPCODE type = kid->op_type;
15794             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
15795               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
15796               || (type == OP_PUSHMARK)
15797               || (type == OP_PADRANGE)
15798             )
15799             continue;
15800
15801             if (o2) { /* more than one found */
15802                 o2 = NULL;
15803                 break;
15804             }
15805             o2 = kid;
15806         }
15807         if (o2)
15808             return find_uninit_var(o2, uninit_sv, match);
15809
15810         /* scan all args */
15811         while (o) {
15812             sv = find_uninit_var(o, uninit_sv, 1);
15813             if (sv)
15814                 return sv;
15815             o = OP_SIBLING(o);
15816         }
15817         break;
15818     }
15819     return NULL;
15820 }
15821
15822
15823 /*
15824 =for apidoc report_uninit
15825
15826 Print appropriate "Use of uninitialized variable" warning.
15827
15828 =cut
15829 */
15830
15831 void
15832 Perl_report_uninit(pTHX_ const SV *uninit_sv)
15833 {
15834     if (PL_op) {
15835         SV* varname = NULL;
15836         const char *desc;
15837         if (uninit_sv && PL_curpad) {
15838             varname = find_uninit_var(PL_op, uninit_sv,0);
15839             if (varname)
15840                 sv_insert(varname, 0, 0, " ", 1);
15841         }
15842         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
15843                 ? "join or string"
15844                 : OP_DESC(PL_op);
15845         /* PL_warn_uninit_sv is constant */
15846         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15847         /* diag_listed_as: Use of uninitialized value%s */
15848         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
15849                 SVfARG(varname ? varname : &PL_sv_no),
15850                 " in ", desc);
15851         GCC_DIAG_RESTORE;
15852     }
15853     else {
15854         /* PL_warn_uninit is constant */
15855         GCC_DIAG_IGNORE(-Wformat-nonliteral);
15856         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
15857                     "", "", "");
15858         GCC_DIAG_RESTORE;
15859     }
15860 }
15861
15862 /*
15863  * Local variables:
15864  * c-indentation-style: bsd
15865  * c-basic-offset: 4
15866  * indent-tabs-mode: nil
15867  * End:
15868  *
15869  * ex: set ts=8 sts=4 sw=4 et:
15870  */